2 #include "automation.h"
5 #include "bezierautos.h"
8 #include "edlsession.h"
10 #include "floatautos.h"
13 #include "maskautos.h"
18 #include "transportque.inc"
21 Automation::Automation(EDL *edl, Track *track)
36 Automation::~Automation()
38 if(mute_autos) delete mute_autos;
40 if(mode_autos) delete mode_autos;
41 if(fade_autos) delete fade_autos;
42 if(pan_autos) delete pan_autos;
43 if(camera_autos) delete camera_autos;
44 if(projector_autos) delete projector_autos;
45 if(mask_autos) delete mask_autos;
46 if(czoom_autos) delete czoom_autos;
47 if(pzoom_autos) delete pzoom_autos;
50 int Automation::create_objects()
52 mute_autos = new IntAutos(edl, track);
53 mute_autos->create_objects();
54 ((IntAuto*)mute_autos->default_auto)->value = 0;
58 Automation& Automation::operator=(Automation& automation)
60 printf("Automation::operator= 1\n");
61 copy_from(&automation);
65 void Automation::equivalent_output(Automation *automation, int64_t *result)
67 mute_autos->equivalent_output(automation->mute_autos, 0, result);
68 if(camera_autos) camera_autos->equivalent_output(automation->camera_autos, 0, result);
69 if(projector_autos) projector_autos->equivalent_output(automation->projector_autos, 0, result);
70 if(fade_autos) fade_autos->equivalent_output(automation->fade_autos, 0, result);
71 if(pan_autos) pan_autos->equivalent_output(automation->pan_autos, 0, result);
72 if(mode_autos) mode_autos->equivalent_output(automation->mode_autos, 0, result);
73 if(mask_autos) mask_autos->equivalent_output(automation->mask_autos, 0, result);
74 if(czoom_autos) czoom_autos->equivalent_output(automation->czoom_autos, 0, result);
75 if(pzoom_autos) pzoom_autos->equivalent_output(automation->pzoom_autos, 0, result);
78 void Automation::copy_from(Automation *automation)
80 mute_autos->copy_from(automation->mute_autos);
81 if(camera_autos) camera_autos->copy_from(automation->camera_autos);
82 if(projector_autos) projector_autos->copy_from(automation->projector_autos);
83 if(fade_autos) fade_autos->copy_from(automation->fade_autos);
84 if(pan_autos) pan_autos->copy_from(automation->pan_autos);
85 if(mode_autos) mode_autos->copy_from(automation->mode_autos);
86 if(mask_autos) mask_autos->copy_from(automation->mask_autos);
87 if(czoom_autos) czoom_autos->copy_from(automation->czoom_autos);
88 if(pzoom_autos) pzoom_autos->copy_from(automation->pzoom_autos);
91 int Automation::load(FileXML *file)
93 if(file->tag.title_is("MUTEAUTOS") && mute_autos)
95 mute_autos->load(file);
98 if(file->tag.title_is("FADEAUTOS") && fade_autos)
100 fade_autos->load(file);
103 if(file->tag.title_is("PANAUTOS") && pan_autos)
105 pan_autos->load(file);
108 if(file->tag.title_is("CAMERAAUTOS") && camera_autos)
110 camera_autos->load(file);
113 if(file->tag.title_is("PROJECTORAUTOS") && projector_autos)
115 projector_autos->load(file);
118 if(file->tag.title_is("MODEAUTOS") && mode_autos)
120 mode_autos->load(file);
123 if(file->tag.title_is("MASKAUTOS") && mask_autos)
125 mask_autos->load(file);
128 if(file->tag.title_is("CZOOMAUTOS") && czoom_autos)
130 czoom_autos->load(file);
133 if(file->tag.title_is("PZOOMAUTOS") && pzoom_autos)
135 pzoom_autos->load(file);
140 void Automation::paste(int64_t start,
147 //printf("Automation::paste 1\n");
148 if(!autoconf) autoconf = edl->session->auto_conf;
149 if(file->tag.title_is("MUTEAUTOS") && mute_autos && autoconf->mute)
151 mute_autos->paste(start, length, scale, file, default_only);
154 if(file->tag.title_is("FADEAUTOS") && fade_autos && autoconf->fade)
156 fade_autos->paste(start, length, scale, file, default_only);
159 if(file->tag.title_is("PANAUTOS") && pan_autos && autoconf->pan)
161 pan_autos->paste(start, length, scale, file, default_only);
164 if(file->tag.title_is("CAMERAAUTOS") && camera_autos && autoconf->camera)
166 camera_autos->paste(start, length, scale, file, default_only);
169 if(file->tag.title_is("PROJECTORAUTOS") && projector_autos && autoconf->projector)
171 projector_autos->paste(start, length, scale, file, default_only);
174 if(file->tag.title_is("MODEAUTOS") && mode_autos && autoconf->mode)
176 mode_autos->paste(start, length, scale, file, default_only);
179 if(file->tag.title_is("MASKAUTOS") && mask_autos && autoconf->mask)
181 mask_autos->paste(start, length, scale, file, default_only);
184 if(file->tag.title_is("CZOOMAUTOS") && czoom_autos && autoconf->czoom)
186 czoom_autos->paste(start, length, scale, file, default_only);
189 if(file->tag.title_is("PZOOMAUTOS") && pzoom_autos && autoconf->pzoom)
191 pzoom_autos->paste(start, length, scale, file, default_only);
195 int Automation::copy(int64_t start,
203 AutoConf *temp_autoconf = 0;
207 temp_autoconf = new AutoConf;
208 temp_autoconf->set_all();
209 autoconf = temp_autoconf;
212 //printf("Automation::copy 1\n");
213 // Always save these to save default
214 if(mute_autos && autoconf->mute /* && mute_autos->total() */)
216 file->tag.set_title("MUTEAUTOS");
218 file->append_newline();
219 mute_autos->copy(start,
224 file->tag.set_title("/MUTEAUTOS");
226 file->append_newline();
229 //printf("Automation::copy 1\n");
230 if(fade_autos && autoconf->fade /* && fade_autos->total() */)
232 file->tag.set_title("FADEAUTOS");
234 file->append_newline();
235 fade_autos->copy(start,
240 file->tag.set_title("/FADEAUTOS");
242 file->append_newline();
245 //printf("Automation::copy 1\n");
246 if(camera_autos && autoconf->camera )
248 file->tag.set_title("CAMERAAUTOS");
250 file->append_newline();
251 camera_autos->copy(start,
256 file->tag.set_title("/CAMERAAUTOS");
258 file->append_newline();
261 //printf("Automation::copy 1\n");
262 if(projector_autos && autoconf->projector )
264 file->tag.set_title("PROJECTORAUTOS");
266 file->append_newline();
267 projector_autos->copy(start,
272 file->tag.set_title("/PROJECTORAUTOS");
274 file->append_newline();
277 //printf("Automation::copy 1\n");
278 if(pan_autos && autoconf->pan )
280 file->tag.set_title("PANAUTOS");
282 file->append_newline();
283 pan_autos->copy(start,
288 file->append_newline();
289 file->tag.set_title("/PANAUTOS");
291 file->append_newline();
294 //printf("Automation::copy 1\n");
295 if(mode_autos && autoconf->mode)
297 file->tag.set_title("MODEAUTOS");
299 file->append_newline();
300 mode_autos->copy(start,
305 file->tag.set_title("/MODEAUTOS");
307 file->append_newline();
310 //printf("Automation::copy 1\n");
311 if(mask_autos && autoconf->mask)
313 file->tag.set_title("MASKAUTOS");
315 file->append_newline();
316 mask_autos->copy(start,
321 file->tag.set_title("/MASKAUTOS");
323 file->append_newline();
326 //printf("Automation::copy 1\n");
327 if(czoom_autos && autoconf->czoom)
329 file->tag.set_title("CZOOMAUTOS");
331 file->append_newline();
332 czoom_autos->copy(start,
337 file->tag.set_title("/CZOOMAUTOS");
339 file->append_newline();
342 //printf("Automation::copy 1\n");
343 if(pzoom_autos && autoconf->pzoom)
345 file->tag.set_title("PZOOMAUTOS");
347 file->append_newline();
348 pzoom_autos->copy(start,
353 file->tag.set_title("/PZOOMAUTOS");
355 file->append_newline();
359 delete temp_autoconf;
361 //printf("Automation::copy 100\n");
366 void Automation::clear(int64_t start,
371 AutoConf *temp_autoconf = 0;
375 temp_autoconf = new AutoConf;
376 temp_autoconf->set_all();
377 autoconf = temp_autoconf;
381 mute_autos->clear(start, end, shift_autos);
384 fade_autos->clear(start, end, shift_autos);
386 if(camera_autos && autoconf->camera)
387 camera_autos->clear(start, end, shift_autos);
389 if(projector_autos && autoconf->projector)
390 projector_autos->clear(start, end, shift_autos);
392 if(pan_autos && autoconf->pan)
393 pan_autos->clear(start, end, shift_autos);
395 if(mode_autos && autoconf->mode)
396 mode_autos->clear(start, end, shift_autos);
398 if(mask_autos && autoconf->mask)
399 mask_autos->clear(start, end, shift_autos);
401 if(czoom_autos && autoconf->czoom)
402 czoom_autos->clear(start, end, shift_autos);
404 if(pzoom_autos && autoconf->pzoom)
405 pzoom_autos->clear(start, end, shift_autos);
407 if(temp_autoconf) delete temp_autoconf;
410 void Automation::paste_silence(int64_t start, int64_t end)
412 // Unit conversion done in calling routine
413 mute_autos->paste_silence(start, end);
414 fade_autos->paste_silence(start, end);
417 camera_autos->paste_silence(start, end);
419 projector_autos->paste_silence(start, end);
421 pan_autos->paste_silence(start, end);
423 mode_autos->paste_silence(start, end);
425 mask_autos->paste_silence(start, end);
427 czoom_autos->paste_silence(start, end);
429 pzoom_autos->paste_silence(start, end);
432 // We don't replace it in pasting but
433 // when inserting the first EDL of a load operation we need to replace
434 // the default keyframe.
435 void Automation::insert_track(Automation *automation,
437 int64_t length_units,
440 mute_autos->insert_track(automation->mute_autos,
445 camera_autos->insert_track(automation->camera_autos,
449 if(projector_autos) projector_autos->insert_track(automation->projector_autos,
453 if(fade_autos) fade_autos->insert_track(automation->fade_autos,
457 if(pan_autos) pan_autos->insert_track(automation->pan_autos,
461 if(mode_autos) mode_autos->insert_track(automation->mode_autos,
465 if(mask_autos) mask_autos->insert_track(automation->mask_autos,
469 if(czoom_autos) czoom_autos->insert_track(automation->czoom_autos,
473 if(pzoom_autos) pzoom_autos->insert_track(automation->pzoom_autos,
479 void Automation::resample(double old_rate, double new_rate)
481 // Run resample for all the autos structures and all the keyframes
482 mute_autos->resample(old_rate, new_rate);
483 if(camera_autos) camera_autos->resample(old_rate, new_rate);
484 if(projector_autos) projector_autos->resample(old_rate, new_rate);
485 if(fade_autos) fade_autos->resample(old_rate, new_rate);
486 if(pan_autos) pan_autos->resample(old_rate, new_rate);
487 if(mode_autos) mode_autos->resample(old_rate, new_rate);
488 if(mask_autos) mask_autos->resample(old_rate, new_rate);
489 if(czoom_autos) czoom_autos->resample(old_rate, new_rate);
490 if(pzoom_autos) pzoom_autos->resample(old_rate, new_rate);
495 int Automation::direct_copy_possible(int64_t start, int direction)
502 int64_t Automation::get_length()
505 int64_t total_length = 0;
507 if(length > total_length) total_length = length;
509 if(mute_autos) length = mute_autos->get_length();
510 if(length > total_length) total_length = length;
512 if(camera_autos) length = camera_autos->get_length();
513 if(length > total_length) total_length = length;
515 if(projector_autos) length = projector_autos->get_length();
516 if(length > total_length) total_length = length;
518 if(fade_autos) length = fade_autos->get_length();
519 if(length > total_length) total_length = length;
521 if(pan_autos) length = pan_autos->get_length();
522 if(length > total_length) total_length = length;
524 if(mode_autos) length = mode_autos->get_length();
525 if(length > total_length) total_length = length;
527 if(mask_autos) length = mask_autos->get_length();
528 if(length > total_length) total_length = length;
530 if(czoom_autos) length = czoom_autos->get_length();
531 if(length > total_length) total_length = length;
533 if(pzoom_autos) length = pzoom_autos->get_length();
534 if(length > total_length) total_length = length;
541 void Automation::dump()
543 printf(" Automation: %p\n", this);
544 printf(" mute_autos %p\n", mute_autos);
549 printf(" fade_autos %p\n", fade_autos);
555 printf(" pan_autos %p\n", pan_autos);
561 printf(" camera_autos %p\n", camera_autos);
562 camera_autos->dump();
567 printf(" projector_autos %p\n", projector_autos);
568 projector_autos->dump();
573 printf(" mode_autos %p\n", mode_autos);
579 printf(" mask_autos %p\n", mask_autos);
585 printf(" czoom_autos %p\n", czoom_autos);
591 printf(" pzoom_autos %p\n", pzoom_autos);