rework deglitch/optimize/stop_playback, sams ladspa icons, reticle color, tweak frame...
[goodguy/history.git] / cinelerra-5.1 / cinelerra / track.C
index 3dac186c178e6eeda45ff27f0f711f0408c9307e..bfd53ecac49b3cdc63cd162d27f255bd58a13053 100644 (file)
@@ -66,6 +66,7 @@ Track::Track(EDL *edl, Tracks *tracks) : ListItem<Track>()
        track_w = edl->session->output_w;
        track_h = edl->session->output_h;
        id = EDL::next_id();
+       mixer_id = -1;
 }
 
 Track::~Track()
@@ -87,6 +88,7 @@ int Track::copy_settings(Track *track)
        this->gang = track->gang;
        this->record = track->record;
        this->nudge = track->nudge;
+       this->mixer_id = track->mixer_id;
        this->play = track->play;
        this->track_w = track->track_w;
        this->track_h = track->track_h;
@@ -321,6 +323,7 @@ int Track::load(FileXML *file, int track_offset, uint32_t load_flags)
        gang = file->tag.get_property("GANG", gang);
        draw = file->tag.get_property("DRAW", draw);
        nudge = file->tag.get_property("NUDGE", nudge);
+       mixer_id = file->tag.get_property("MIXER_ID", mixer_id);
        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);
@@ -352,6 +355,8 @@ int Track::load(FileXML *file, int track_offset, uint32_t load_flags)
                        {
                                if(load_flags & LOAD_EDITS)
                                        edits->load(file, track_offset);
+                               else
+                                       result = file->skip_tag();
                        }
                        else
                        if(file->tag.title_is("PLUGINSET"))
@@ -372,6 +377,8 @@ int Track::load(FileXML *file, int track_offset, uint32_t load_flags)
                                                current_plugin++;
                                        }
                                }
+                               else
+                                       result = file->skip_tag();
                        }
                        else
                                load_derived(file, load_flags);
@@ -1064,6 +1071,7 @@ int Track::copy(double start,
        file->tag.set_title("TRACK");
        file->tag.set_property("RECORD", record);
        file->tag.set_property("NUDGE", nudge);
+       file->tag.set_property("MIXER_ID", mixer_id);
        file->tag.set_property("PLAY", play);
        file->tag.set_property("GANG", gang);
        file->tag.set_property("DRAW", draw);
@@ -1145,18 +1153,19 @@ int Track::copy_assets(double start,
        return 0;
 }
 
+int Track::blade(double position)
+{
+       int64_t start = to_units(position, 0);
+       Edit *edit = edits->split_edit(start);
+       if( !edit ) return 1;
+       edit->hard_left = 1;
+       if( edit->previous ) edit->previous->hard_right = 1;
+       return 0;
+}
 
-
-
-
-int Track::clear(double start,
-       double end,
-       int edit_edits,
-       int edit_labels,
-       int edit_plugins,
-       int edit_autos,
-       int convert_units,
-       Edits *trim_edits)
+int Track::clear(double start, double end,
+       int edit_edits, int edit_labels, int edit_plugins,
+       int edit_autos, int convert_units, Edits *trim_edits)
 {
 // Edits::move_auto calls this routine after the units are converted to the track
 // format.
@@ -1870,3 +1879,14 @@ int Track::plugin_exists(Plugin *plugin)
        return 0;
 }
 
+int Track::get_mixer_id()
+{
+       if( mixer_id < 0 ) {
+               int v = 0;
+               for( Track *track=tracks->first; track!=0; track=track->next )
+                       if( track->mixer_id > v ) v = track->mixer_id;
+               mixer_id = v + 1;
+       }
+       return mixer_id;
+}
+