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 copy_from(&automation);
64 void Automation::equivalent_output(Automation *automation, int64_t *result)
66 mute_autos->equivalent_output(automation->mute_autos, 0, result);
67 if(camera_autos) camera_autos->equivalent_output(automation->camera_autos, 0, result);
68 if(projector_autos) projector_autos->equivalent_output(automation->projector_autos, 0, result);
69 if(fade_autos) fade_autos->equivalent_output(automation->fade_autos, 0, result);
70 if(pan_autos) pan_autos->equivalent_output(automation->pan_autos, 0, result);
71 if(mode_autos) mode_autos->equivalent_output(automation->mode_autos, 0, result);
72 if(mask_autos) mask_autos->equivalent_output(automation->mask_autos, 0, result);
73 if(czoom_autos) czoom_autos->equivalent_output(automation->czoom_autos, 0, result);
74 if(pzoom_autos) pzoom_autos->equivalent_output(automation->pzoom_autos, 0, result);
77 void Automation::copy_from(Automation *automation)
79 mute_autos->copy_from(automation->mute_autos);
80 if(camera_autos) camera_autos->copy_from(automation->camera_autos);
81 if(projector_autos) projector_autos->copy_from(automation->projector_autos);
82 if(fade_autos) fade_autos->copy_from(automation->fade_autos);
83 if(pan_autos) pan_autos->copy_from(automation->pan_autos);
84 if(mode_autos) mode_autos->copy_from(automation->mode_autos);
85 if(mask_autos) mask_autos->copy_from(automation->mask_autos);
86 if(czoom_autos) czoom_autos->copy_from(automation->czoom_autos);
87 if(pzoom_autos) pzoom_autos->copy_from(automation->pzoom_autos);
90 int Automation::load(FileXML *file)
92 if(file->tag.title_is("MUTEAUTOS") && mute_autos)
94 mute_autos->load(file);
97 if(file->tag.title_is("FADEAUTOS") && fade_autos)
99 fade_autos->load(file);
102 if(file->tag.title_is("PANAUTOS") && pan_autos)
104 pan_autos->load(file);
107 if(file->tag.title_is("CAMERAAUTOS") && camera_autos)
109 camera_autos->load(file);
112 if(file->tag.title_is("PROJECTORAUTOS") && projector_autos)
114 projector_autos->load(file);
117 if(file->tag.title_is("MODEAUTOS") && mode_autos)
119 mode_autos->load(file);
122 if(file->tag.title_is("MASKAUTOS") && mask_autos)
124 mask_autos->load(file);
127 if(file->tag.title_is("CZOOMAUTOS") && czoom_autos)
129 czoom_autos->load(file);
132 if(file->tag.title_is("PZOOMAUTOS") && pzoom_autos)
134 pzoom_autos->load(file);
139 void Automation::paste(int64_t start,
146 //printf("Automation::paste 1\n");
147 if(!autoconf) autoconf = edl->session->auto_conf;
148 if(file->tag.title_is("MUTEAUTOS") && mute_autos && autoconf->mute)
150 mute_autos->paste(start, length, scale, file, default_only);
153 if(file->tag.title_is("FADEAUTOS") && fade_autos && autoconf->fade)
155 fade_autos->paste(start, length, scale, file, default_only);
158 if(file->tag.title_is("PANAUTOS") && pan_autos && autoconf->pan)
160 pan_autos->paste(start, length, scale, file, default_only);
163 if(file->tag.title_is("CAMERAAUTOS") && camera_autos && autoconf->camera)
165 camera_autos->paste(start, length, scale, file, default_only);
168 if(file->tag.title_is("PROJECTORAUTOS") && projector_autos && autoconf->projector)
170 projector_autos->paste(start, length, scale, file, default_only);
173 if(file->tag.title_is("MODEAUTOS") && mode_autos && autoconf->mode)
175 mode_autos->paste(start, length, scale, file, default_only);
178 if(file->tag.title_is("MASKAUTOS") && mask_autos && autoconf->mask)
180 mask_autos->paste(start, length, scale, file, default_only);
183 if(file->tag.title_is("CZOOMAUTOS") && czoom_autos && autoconf->czoom)
185 czoom_autos->paste(start, length, scale, file, default_only);
188 if(file->tag.title_is("PZOOMAUTOS") && pzoom_autos && autoconf->pzoom)
190 pzoom_autos->paste(start, length, scale, file, default_only);
194 int Automation::copy(int64_t start,
200 //printf("Automation::copy 1\n");
201 // Always save these to save default
202 if(mute_autos /* && mute_autos->total() */)
204 file->tag.set_title("MUTEAUTOS");
206 file->append_newline();
207 mute_autos->copy(start,
212 file->tag.set_title("/MUTEAUTOS");
214 file->append_newline();
217 //printf("Automation::copy 1\n");
218 if(fade_autos /* && fade_autos->total() */)
220 file->tag.set_title("FADEAUTOS");
222 file->append_newline();
223 fade_autos->copy(start,
228 file->tag.set_title("/FADEAUTOS");
230 file->append_newline();
233 //printf("Automation::copy 1\n");
236 file->tag.set_title("CAMERAAUTOS");
238 file->append_newline();
239 camera_autos->copy(start,
244 file->tag.set_title("/CAMERAAUTOS");
246 file->append_newline();
249 //printf("Automation::copy 1\n");
252 file->tag.set_title("PROJECTORAUTOS");
254 file->append_newline();
255 projector_autos->copy(start,
260 file->tag.set_title("/PROJECTORAUTOS");
262 file->append_newline();
265 //printf("Automation::copy 1\n");
268 file->tag.set_title("PANAUTOS");
270 file->append_newline();
271 pan_autos->copy(start,
276 file->append_newline();
277 file->tag.set_title("/PANAUTOS");
279 file->append_newline();
282 //printf("Automation::copy 1\n");
285 file->tag.set_title("MODEAUTOS");
287 file->append_newline();
288 mode_autos->copy(start,
293 file->tag.set_title("/MODEAUTOS");
295 file->append_newline();
298 //printf("Automation::copy 1\n");
301 file->tag.set_title("MASKAUTOS");
303 file->append_newline();
304 mask_autos->copy(start,
309 file->tag.set_title("/MASKAUTOS");
311 file->append_newline();
314 //printf("Automation::copy 1\n");
317 file->tag.set_title("CZOOMAUTOS");
319 file->append_newline();
320 czoom_autos->copy(start,
325 file->tag.set_title("/CZOOMAUTOS");
327 file->append_newline();
330 //printf("Automation::copy 1\n");
333 file->tag.set_title("PZOOMAUTOS");
335 file->append_newline();
336 pzoom_autos->copy(start,
341 file->tag.set_title("/PZOOMAUTOS");
343 file->append_newline();
346 //printf("Automation::copy 100\n");
351 void Automation::clear(int64_t start,
356 AutoConf *temp_autoconf = 0;
360 temp_autoconf = new AutoConf;
361 temp_autoconf->set_all();
362 autoconf = temp_autoconf;
366 mute_autos->clear(start, end, shift_autos);
369 fade_autos->clear(start, end, shift_autos);
371 if(camera_autos && autoconf->camera)
372 camera_autos->clear(start, end, shift_autos);
374 if(projector_autos && autoconf->projector)
375 projector_autos->clear(start, end, shift_autos);
377 if(pan_autos && autoconf->pan)
378 pan_autos->clear(start, end, shift_autos);
380 if(mode_autos && autoconf->mode)
381 mode_autos->clear(start, end, shift_autos);
383 if(mask_autos && autoconf->mask)
384 mask_autos->clear(start, end, shift_autos);
386 if(czoom_autos && autoconf->czoom)
387 czoom_autos->clear(start, end, shift_autos);
389 if(pzoom_autos && autoconf->pzoom)
390 pzoom_autos->clear(start, end, shift_autos);
392 if(temp_autoconf) delete temp_autoconf;
395 void Automation::paste_silence(int64_t start, int64_t end)
397 // Unit conversion done in calling routine
398 mute_autos->paste_silence(start, end);
399 fade_autos->paste_silence(start, end);
402 camera_autos->paste_silence(start, end);
404 projector_autos->paste_silence(start, end);
406 pan_autos->paste_silence(start, end);
408 mode_autos->paste_silence(start, end);
410 mask_autos->paste_silence(start, end);
412 czoom_autos->paste_silence(start, end);
414 pzoom_autos->paste_silence(start, end);
417 // We don't replace it in pasting but
418 // when inserting the first EDL of a load operation we need to replace
419 // the default keyframe.
420 void Automation::insert_track(Automation *automation,
422 int64_t length_units,
425 mute_autos->insert_track(automation->mute_autos,
429 if(camera_autos) camera_autos->insert_track(automation->camera_autos,
433 if(projector_autos) projector_autos->insert_track(automation->projector_autos,
437 if(fade_autos) fade_autos->insert_track(automation->fade_autos,
441 if(pan_autos) pan_autos->insert_track(automation->pan_autos,
445 if(mode_autos) mode_autos->insert_track(automation->mode_autos,
449 if(mask_autos) mask_autos->insert_track(automation->mask_autos,
453 if(czoom_autos) czoom_autos->insert_track(automation->czoom_autos,
457 if(pzoom_autos) pzoom_autos->insert_track(automation->pzoom_autos,
463 void Automation::resample(double old_rate, double new_rate)
465 // Run resample for all the autos structures and all the keyframes
466 mute_autos->resample(old_rate, new_rate);
467 if(camera_autos) camera_autos->resample(old_rate, new_rate);
468 if(projector_autos) projector_autos->resample(old_rate, new_rate);
469 if(fade_autos) fade_autos->resample(old_rate, new_rate);
470 if(pan_autos) pan_autos->resample(old_rate, new_rate);
471 if(mode_autos) mode_autos->resample(old_rate, new_rate);
472 if(mask_autos) mask_autos->resample(old_rate, new_rate);
473 if(czoom_autos) czoom_autos->resample(old_rate, new_rate);
474 if(pzoom_autos) pzoom_autos->resample(old_rate, new_rate);
479 int Automation::direct_copy_possible(int64_t start, int direction)
486 int64_t Automation::get_length()
489 int64_t total_length = 0;
491 if(length > total_length) total_length = length;
493 if(mute_autos) length = mute_autos->get_length();
494 if(length > total_length) total_length = length;
496 if(camera_autos) length = camera_autos->get_length();
497 if(length > total_length) total_length = length;
499 if(projector_autos) length = projector_autos->get_length();
500 if(length > total_length) total_length = length;
502 if(fade_autos) length = fade_autos->get_length();
503 if(length > total_length) total_length = length;
505 if(pan_autos) length = pan_autos->get_length();
506 if(length > total_length) total_length = length;
508 if(mode_autos) length = mode_autos->get_length();
509 if(length > total_length) total_length = length;
511 if(mask_autos) length = mask_autos->get_length();
512 if(length > total_length) total_length = length;
514 if(czoom_autos) length = czoom_autos->get_length();
515 if(length > total_length) total_length = length;
517 if(pzoom_autos) length = pzoom_autos->get_length();
518 if(length > total_length) total_length = length;
525 void Automation::dump()
527 printf(" Automation: %p\n", this);
528 printf(" mute_autos %p\n", mute_autos);
533 printf(" fade_autos %p\n", fade_autos);
539 printf(" pan_autos %p\n", pan_autos);
545 printf(" camera_autos %p\n", camera_autos);
546 camera_autos->dump();
551 printf(" projector_autos %p\n", projector_autos);
552 projector_autos->dump();
557 printf(" mode_autos %p\n", mode_autos);
563 printf(" mask_autos %p\n", mask_autos);
569 printf(" czoom_autos %p\n", czoom_autos);
575 printf(" pzoom_autos %p\n", pzoom_autos);