4 #include "edlsession.h"
6 #include "floatautos.h"
10 #include "overlayframe.inc"
11 #include "transportque.inc"
12 #include "vautomation.h"
15 VAutomation::VAutomation(EDL *edl, Track *track)
16 : Automation(edl, track)
22 VAutomation::~VAutomation()
27 int VAutomation::create_objects()
29 Automation::create_objects();
31 autos[AUTOMATION_FADE] = new FloatAutos(edl, track, 100);
32 autos[AUTOMATION_FADE]->create_objects();
34 autos[AUTOMATION_MODE] = new IntAutos(edl, track, TRANSFER_NORMAL);
35 autos[AUTOMATION_MODE]->create_objects();
37 autos[AUTOMATION_MASK] = new MaskAutos(edl, track);
38 autos[AUTOMATION_MASK]->create_objects();
40 autos[AUTOMATION_CAMERA_X] = new FloatAutos(edl, track, 0.0);
41 autos[AUTOMATION_CAMERA_X]->create_objects();
43 autos[AUTOMATION_CAMERA_Y] = new FloatAutos(edl, track, 0.0);
44 autos[AUTOMATION_CAMERA_Y]->create_objects();
46 autos[AUTOMATION_PROJECTOR_X] = new FloatAutos(edl, track, 0.0);
47 autos[AUTOMATION_PROJECTOR_X]->create_objects();
49 autos[AUTOMATION_PROJECTOR_Y] = new FloatAutos(edl, track, 0.0);
50 autos[AUTOMATION_PROJECTOR_Y]->create_objects();
52 autos[AUTOMATION_CAMERA_Z] = new FloatAutos(edl, track, 1.0);
53 autos[AUTOMATION_CAMERA_Z]->create_objects();
55 autos[AUTOMATION_PROJECTOR_Z] = new FloatAutos(edl, track, 1.0);
56 autos[AUTOMATION_PROJECTOR_Z]->create_objects();
58 // autos[AUTOMATION_NUDGE] = new FloatAutos(edl, track, 0.0);
59 // autos[AUTOMATION_NUDGE]->create_objects();
64 int VAutomation::direct_copy_possible(int64_t start, int direction)
66 int64_t end = (direction == PLAY_FORWARD) ? (start + 1) : (start - 1);
68 if(!Automation::direct_copy_possible(start, direction))
71 // Automation is constant
73 if(((FloatAutos*)autos[AUTOMATION_FADE])->automation_is_constant(
74 start, 1, direction, constant))
76 if(!EQUIV(constant, 100))
83 // Track must not be muted
84 if(autos[AUTOMATION_MUTE]->automation_is_constant(start, end))
86 if(autos[AUTOMATION_MUTE]->get_automation_constant(start, end) > 0)
92 // Projector must be centered.
93 FloatAuto *previous = 0, *next = 0;
94 float z = ((FloatAutos*)autos[AUTOMATION_PROJECTOR_Z])->get_value(
95 start, direction, previous, next);
96 if(!EQUIV(z, 1)) return 0;
100 float x = ((FloatAutos*)autos[AUTOMATION_PROJECTOR_X])->get_value(start,
104 if(!EQUIV(x, 0)) return 0;
107 float y = ((FloatAutos*)autos[AUTOMATION_PROJECTOR_Y])->get_value(start,
111 if(!EQUIV(y, 0)) return 0;
116 // Camera must be centered
119 z = ((FloatAutos*)autos[AUTOMATION_CAMERA_Z])->get_value(
124 if(!EQUIV(z, 1)) return 0;
130 x = ((FloatAutos*)autos[AUTOMATION_CAMERA_X])->get_value(start,
134 if(!EQUIV(x, 0)) return 0;
138 y = ((FloatAutos*)autos[AUTOMATION_CAMERA_Y])->get_value(start,
143 if(!EQUIV(y, 0)) return 0;
145 // No mask must exist
146 if(((MaskAutos*)autos[AUTOMATION_MASK])->mask_exists(start, direction))
152 void VAutomation::get_projector(float *x,
158 FloatAuto *before, *after;
161 *x = ((FloatAutos*)autos[AUTOMATION_PROJECTOR_X])->get_value(position,
167 *y = ((FloatAutos*)autos[AUTOMATION_PROJECTOR_Y])->get_value(position,
173 *z = ((FloatAutos*)autos[AUTOMATION_PROJECTOR_Z])->get_value(position,
180 void VAutomation::get_camera(float *x,
186 FloatAuto *before, *after;
189 *x = ((FloatAutos*)autos[AUTOMATION_CAMERA_X])->get_value(position,
195 *y = ((FloatAutos*)autos[AUTOMATION_CAMERA_Y])->get_value(position,
201 *z = ((FloatAutos*)autos[AUTOMATION_CAMERA_Z])->get_value(position,