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, direction, previous, next);
103 if(!EQUIV(z, 1)) return 0;
107 float x = ((FloatAutos*)autos[AUTOMATION_PROJECTOR_X])->get_value(start,
111 if(!EQUIV(x, 0)) return 0;
114 float y = ((FloatAutos*)autos[AUTOMATION_PROJECTOR_Y])->get_value(start,
118 if(!EQUIV(y, 0)) return 0;
123 // Camera must be centered
126 z = ((FloatAutos*)autos[AUTOMATION_CAMERA_Z])->get_value(
131 if(!EQUIV(z, 1)) return 0;
137 x = ((FloatAutos*)autos[AUTOMATION_CAMERA_X])->get_value(start,
141 if(!EQUIV(x, 0)) return 0;
145 y = ((FloatAutos*)autos[AUTOMATION_CAMERA_Y])->get_value(start,
150 if(!EQUIV(y, 0)) return 0;
152 // No mask must exist
153 if(((MaskAutos*)autos[AUTOMATION_MASK])->mask_exists(start, direction))
159 void VAutomation::get_projector(float *x,
165 FloatAuto *before, *after;
168 *x = ((FloatAutos*)autos[AUTOMATION_PROJECTOR_X])->get_value(position,
174 *y = ((FloatAutos*)autos[AUTOMATION_PROJECTOR_Y])->get_value(position,
180 *z = ((FloatAutos*)autos[AUTOMATION_PROJECTOR_Z])->get_value(position,
187 void VAutomation::get_camera(float *x,
193 FloatAuto *before, *after;
196 *x = ((FloatAutos*)autos[AUTOMATION_CAMERA_X])->get_value(position,
202 *y = ((FloatAutos*)autos[AUTOMATION_CAMERA_Y])->get_value(position,
208 *z = ((FloatAutos*)autos[AUTOMATION_CAMERA_Z])->get_value(position,