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=b5382c3383406354a7b6a55d81c8c8928cdc6dac;hb=5ec378f09aeeb646705fdb8035b39a186374fba0;hpb=4a6b59824b2db18e6cc49b43a971923d5e5903ae diff --git a/cinelerra-5.1/cinelerra/track.C b/cinelerra-5.1/cinelerra/track.C index b5382c33..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; } @@ -334,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); @@ -852,8 +856,8 @@ void Track::synchronize_params(Track *track) int Track::dump(FILE *fp) { - fprintf(fp," Data type %d, draw %d, gang %d, play %d, record %d, nudge %jd\n", - data_type, draw, gang, play, record, nudge); + 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) @@ -1056,6 +1060,7 @@ int Track::copy(int copy_flags, double start, double end, 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(); @@ -1137,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; @@ -1858,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); +} +