X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ftrack.C;h=9fdc531a2b43854c299a7d076750a78a43fbc0b7;hp=24de614f43d48fb788fffe1c7a21e0e053ce6649;hb=5ec378f09aeeb646705fdb8035b39a186374fba0;hpb=ab958f323d68316c450ef81ba296536580620163 diff --git a/cinelerra-5.1/cinelerra/track.C b/cinelerra-5.1/cinelerra/track.C index 24de614f..9fdc531a 100644 --- a/cinelerra-5.1/cinelerra/track.C +++ b/cinelerra-5.1/cinelerra/track.C @@ -33,6 +33,7 @@ #include "keyframe.h" #include "labels.h" #include "localsession.h" +#include "maskauto.h" #include "module.h" #include "patch.h" #include "patchbay.h" @@ -67,6 +68,7 @@ Track::Track(EDL *edl, Tracks *tracks) : ListItem() track_h = edl->session->output_h; id = EDL::next_id(); mixer_id = -1; + masks = (1<play = track->play; this->track_w = track->track_w; this->track_h = track->track_h; + this->masks = track->masks; strcpy(this->title, track->title); return 0; } @@ -194,12 +197,9 @@ void Track::copy_from(Track *track) { copy_settings(track); edits->copy_from(track->edits); - for(int i = 0; i < this->plugin_set.total; i++) - delete this->plugin_set.values[i]; this->plugin_set.remove_all_objects(); - for(int i = 0; i < track->plugin_set.total; i++) - { + for( int i=0; iplugin_set.total; ++i ) { PluginSet *new_plugin_set = plugin_set.append(new PluginSet(edl, this)); new_plugin_set->copy_from(track->plugin_set.values[i]); } @@ -337,6 +337,7 @@ int Track::load(FileXML *file, int track_offset, uint32_t load_flags) expand_view = file->tag.get_property("EXPAND", expand_view); track_w = file->tag.get_property("TRACK_W", track_w); track_h = file->tag.get_property("TRACK_H", track_h); + masks = file->tag.get_property("MASKS", masks); load_header(file, load_flags); @@ -853,46 +854,22 @@ void Track::synchronize_params(Track *track) } - - - int Track::dump(FILE *fp) { - fprintf(fp," Data type %d\n", data_type); + fprintf(fp," Data type %d, draw %d, gang %d, play %d, record %d, nudge %jd, masks 0x%04x\n", + data_type, draw, gang, play, record, nudge, masks); fprintf(fp," Title %s\n", title); fprintf(fp," Edits:\n"); for(Edit* current = edits->first; current; current = NEXT) - { current->dump(fp); - } automation->dump(fp); fprintf(fp," Plugin Sets: %d\n", plugin_set.total); - for(int i = 0; i < plugin_set.total; i++) - plugin_set.values[i]->dump(fp); -//printf("Track::dump 2\n"); + for( int i=0; idump(fp); return 0; } - - - - - - - - - - - - - - - - - - - Track::Track() : ListItem() { @@ -1062,10 +1039,8 @@ void Track::set_automation_mode(double selectionstart, -int Track::copy(double start, - double end, - FileXML *file, - const char *output_path) +int Track::copy(int copy_flags, double start, double end, + FileXML *file, const char *output_path) { // Use a copy of the selection in converted units // So copy_automation doesn't reconvert. @@ -1085,6 +1060,7 @@ int Track::copy(double start, file->tag.set_property("EXPAND", expand_view); file->tag.set_property("TRACK_W", track_w); file->tag.set_property("TRACK_H", track_h); + file->tag.set_property("MASKS", masks); save_header(file); file->append_tag(); file->append_newline(); @@ -1105,16 +1081,18 @@ int Track::copy(double start, // file->append_tag(); // file->append_newline(); - edits->copy(start_unit, end_unit, file, output_path); - - AutoConf auto_conf; - auto_conf.set_all(1); - automation->copy(start_unit, end_unit, file, 0, 0); + if( (copy_flags & COPY_EDITS) ) + edits->copy(start_unit, end_unit, file, output_path); + if( (copy_flags & COPY_AUTOS) ) { + AutoConf auto_conf; + auto_conf.set_all(1); + automation->copy(start_unit, end_unit, file, 0, 0); + } - for(int i = 0; i < plugin_set.total; i++) - { - plugin_set.values[i]->copy(start_unit, end_unit, file); + if( (copy_flags & COPY_PLUGINS) ) { + for( int i=0; icopy(start_unit, end_unit, file); } copy_derived(start_unit, end_unit, file); @@ -1164,7 +1142,7 @@ int Track::blade(double position) { int64_t start = to_units(position, 0); Edit *edit = edits->split_edit(start); - if( !edit ) return 1; + if( !edit || edit->silence() ) return 1; edit->hard_left = 1; if( edit->previous ) edit->previous->hard_right = 1; return 0; @@ -1885,3 +1863,42 @@ int Track::get_mixer_id() return mixer_id; } +void Track::get_fauto_xyz(int fauto, float &x, float &y, float &z) +{ + FloatAutos **fautos = (FloatAutos **)&automation->autos; + FloatAuto *xauto = (FloatAuto *)fautos[fauto+0]->get_auto_for_editing(-1, 1); + if( xauto ) x = xauto->get_value(); + FloatAuto *yauto = (FloatAuto *)fautos[fauto+1]->get_auto_for_editing(-1, 1); + if( yauto ) y = yauto->get_value(); + FloatAuto *zauto = (FloatAuto *)fautos[fauto+2]->get_auto_for_editing(-1, 1); + if( zauto ) z = zauto->get_value(); +} +void Track::set_fauto_xyz(int fauto, float x, float y, float z) +{ + FloatAutos **fautos = (FloatAutos **)&automation->autos; + FloatAuto *xauto = (FloatAuto *)fautos[fauto+0]->get_auto_for_editing(-1, 1); + if( xauto ) xauto->set_value(x); + FloatAuto *yauto = (FloatAuto *)fautos[fauto+1]->get_auto_for_editing(-1, 1); + if( yauto ) yauto->set_value(y); + FloatAuto *zauto = (FloatAuto *)fautos[fauto+2]->get_auto_for_editing(-1, 1); + if( zauto ) zauto->set_value(z); +} + +void Track::get_projector(float &x, float &y, float &z) +{ + get_fauto_xyz(AUTOMATION_PROJECTOR_X, x, y, z); +} +void Track::set_projector(float x, float y, float z) +{ + set_fauto_xyz(AUTOMATION_PROJECTOR_X, x, y, z); +} + +void Track::get_camera(float &x, float &y, float &z) +{ + get_fauto_xyz(AUTOMATION_CAMERA_X, x, y, z); +} +void Track::set_camera(float x, float y, float z) +{ + set_fauto_xyz(AUTOMATION_CAMERA_X, x, y, z); +} +