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();
61 for(int i = 0; i < AUTOMATION_TOTAL; i++)
64 autos[i]->autoidx = i;
65 autos[i]->autogrouptype = autogrouptype(i, autos[i]->track);
71 int VAutomation::direct_copy_possible(int64_t start, int direction)
73 int64_t end = (direction == PLAY_FORWARD) ? (start + 1) : (start - 1);
75 if(!Automation::direct_copy_possible(start, direction))
78 // Automation is constant
80 if(((FloatAutos*)autos[AUTOMATION_FADE])->automation_is_constant(
81 start, 1, direction, constant))
83 if(!EQUIV(constant, 100))
90 // Track must not be muted
91 if(autos[AUTOMATION_MUTE]->automation_is_constant(start, end))
93 if(autos[AUTOMATION_MUTE]->get_automation_constant(start, end) > 0)
99 // Projector must be centered.
100 FloatAuto *previous = 0, *next = 0;
101 float z = ((FloatAutos*)autos[AUTOMATION_PROJECTOR_Z])->get_value(
102 start, previous, next);
103 if(!EQUIV(z, 1)) return 0;
107 float x = ((FloatAutos*)autos[AUTOMATION_PROJECTOR_X])->get_value(start,
110 if(!EQUIV(x, 0)) return 0;
113 float y = ((FloatAutos*)autos[AUTOMATION_PROJECTOR_Y])->get_value(start,
116 if(!EQUIV(y, 0)) return 0;
121 // Camera must be centered
124 z = ((FloatAutos*)autos[AUTOMATION_CAMERA_Z])->get_value(
128 if(!EQUIV(z, 1)) return 0;
134 x = ((FloatAutos*)autos[AUTOMATION_CAMERA_X])->get_value(start,
137 if(!EQUIV(x, 0)) return 0;
141 y = ((FloatAutos*)autos[AUTOMATION_CAMERA_Y])->get_value(start,
145 if(!EQUIV(y, 0)) return 0;
147 // No mask must exist
148 if(((MaskAutos*)autos[AUTOMATION_MASK])->mask_exists(start, direction))
154 void VAutomation::get_projector(float *x,
160 FloatAuto *before, *after;
163 *x = ((FloatAutos*)autos[AUTOMATION_PROJECTOR_X])->get_value(position,
168 *y = ((FloatAutos*)autos[AUTOMATION_PROJECTOR_Y])->get_value(position,
173 *z = ((FloatAutos*)autos[AUTOMATION_PROJECTOR_Z])->get_value(position,
179 void VAutomation::get_camera(float *x,
185 FloatAuto *before, *after;
188 *x = ((FloatAutos*)autos[AUTOMATION_CAMERA_X])->get_value(position,
193 *y = ((FloatAutos*)autos[AUTOMATION_CAMERA_Y])->get_value(position,
198 *z = ((FloatAutos*)autos[AUTOMATION_CAMERA_Z])->get_value(position,