Credit Andrew - fix vorbis audio which was scratchy and ensure aging plugin does...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / tracksedit.C
index 29584b239f4db4368773154e4facc556979d40ec..e84fe07b4b483ec94d09358e612a47cfb7362190 100644 (file)
@@ -386,7 +386,7 @@ void Tracks::set_transition_length(Transition *transition, double length)
                }
        }
        if( !found ) return;
-       if( edl->session->gang_tracks == GANG_NONE ) return;
+       if( edl->local_session->gang_tracks == GANG_NONE ) return;
        Track *track = transition->edit->track;
        double pos = track->from_units(transition->edit->startproject);
        Track *current = edl->tracks->first;
@@ -558,7 +558,7 @@ int Tracks::delete_tracks()
 {
        int total_deleted = 0;
        int done = 0;
-       int gang = edl->session->gang_tracks != GANG_NONE ? 1 : 0;
+       int gang = edl->local_session->gang_tracks != GANG_NONE ? 1 : 0;
 
        while( !done ) {
                done = 1;
@@ -697,6 +697,7 @@ void Tracks::move_effect(Plugin *plugin, Track *track, int64_t position)
                                start, length, plugin->plugin_type);
        result->copy_from(plugin);
        result->shift(position - plugin->startproject);
+       result->gui_id = plugin->gui_id;
 
 // Clear new plugin from old set
        plugin->plugin_set->clear(plugin->startproject,
@@ -756,7 +757,7 @@ int Tracks::concatenate_tracks(int edit_plugins, int edit_autos)
                        input_track = input_track->next)
                {
                        if(input_track->data_type == data_type &&
-                               input_track->play &&
+                               input_track->plays() &&
                                !input_track->is_armed()) break;
                }
 
@@ -782,7 +783,7 @@ int Tracks::concatenate_tracks(int edit_plugins, int edit_autos)
 
                                        if(input_track->data_type == data_type &&
                                                !input_track->is_armed() &&
-                                               input_track->play) break;
+                                               input_track->plays()) break;
                                }
 
                                for(output_track = output_track->next;
@@ -850,12 +851,12 @@ int Tracks::copy(int copy_flags, double start, double end,
 
 
 
-int Tracks::move_track_up(Track *track)
+int Tracks::roll_track_up(Track *track)
 {
        if( first == last ) return 1;
        int n = 1;
        Track *src = track, *dst = src->previous;
-       if( edl->session->gang_tracks != GANG_NONE ) {
+       if( edl->local_session->gang_tracks != GANG_NONE ) {
                while( src && !src->master ) src = src->previous;
                if( !src ) src = first;
                Track *nxt = src->next;
@@ -864,16 +865,16 @@ int Tracks::move_track_up(Track *track)
                while( dst && !dst->master ) { dst = dst->previous; }
        }
        if( src == dst ) return 1;
-       move_tracks(src, dst, n);
+       roll_tracks(src, dst, n);
        return 0;
 }
 
-int Tracks::move_track_down(Track *track)
+int Tracks::roll_track_down(Track *track)
 {
        if( first == last ) return 1;
        int n = 1;
        Track *src = track, *dst = src->next;
-       if( edl->session->gang_tracks != GANG_NONE ) {
+       if( edl->local_session->gang_tracks != GANG_NONE ) {
                while( src && !src->master ) src = src->previous;
                if( !src ) src = first;
                Track *nxt = src->next;
@@ -889,40 +890,40 @@ int Tracks::move_track_down(Track *track)
        else
                dst = !dst ? first : dst->next;
        if( src == dst ) return 1;
-       move_tracks(src, dst, n);
+       roll_tracks(src, dst, n);
        return 0;
 }
 
 
-int Tracks::move_tracks_up()
+int Tracks::roll_tracks_up()
 {
        if( first == last ) return 1;
        int n = 1;
        Track *src = first, *dst = 0;
-       if( edl->session->gang_tracks != GANG_NONE ) {
+       if( edl->local_session->gang_tracks != GANG_NONE ) {
                Track *nxt = src->next;
                while( nxt && !nxt->master ) { ++n;  nxt = nxt->next; }
        }
        if( src == dst ) return 1;
-       move_tracks(src, dst, n);
+       roll_tracks(src, dst, n);
        return 0;
 }
 
-int Tracks::move_tracks_down()
+int Tracks::roll_tracks_down()
 {
        if( first == last ) return 1;
        int n = 1;
        Track *src = last, *dst = first;
-       if( edl->session->gang_tracks != GANG_NONE ) {
+       if( edl->local_session->gang_tracks != GANG_NONE ) {
                while( src && !src->master ) { ++n;  src = src->previous; }
        }
        if( src == dst ) return 1;
-       move_tracks(src, dst, n);
+       roll_tracks(src, dst, n);
        return 0;
 }
 
 
-int Tracks::swap_track_up(Track *track)
+int Tracks::move_track_up(Track *track)
 {
        Track *next_track = track->previous;
        if(!next_track) next_track = last;
@@ -932,7 +933,7 @@ int Tracks::swap_track_up(Track *track)
        return 0;
 }
 
-int Tracks::swap_track_down(Track *track)
+int Tracks::move_track_down(Track *track)
 {
        Track *next_track = track->next;
        if(!next_track) next_track = first;
@@ -943,7 +944,7 @@ int Tracks::swap_track_down(Track *track)
 }
 
 
-int Tracks::swap_tracks_up()
+int Tracks::move_tracks_up()
 {
        int result = 0;
        Track *next = first;
@@ -960,7 +961,7 @@ int Tracks::swap_tracks_up()
        return result;
 }
 
-int Tracks::swap_tracks_down()
+int Tracks::move_tracks_down()
 {
        int result = 0;
        Track *prev = last;
@@ -1012,7 +1013,6 @@ void Tracks::paste_automation(double selectionstart,
        Track* current_atrack = 0;
        Track* current_vtrack = 0;
        Track* dst_track = 0;
-       int src_type;
        int result = 0;
        double length;
        double frame_rate = edl->session->frame_rate;
@@ -1021,10 +1021,9 @@ void Tracks::paste_automation(double selectionstart,
        string[0] = 0;
 
 // Search for start
-       do{
-         result = file->read_tag();
-       }while(!result &&
-               !file->tag.title_is("AUTO_CLIPBOARD"));
+       do {
+               result = file->read_tag();
+       } while(!result && !file->tag.title_is("AUTO_CLIPBOARD"));
 
        if(!result)
        {
@@ -1032,7 +1031,6 @@ void Tracks::paste_automation(double selectionstart,
                frame_rate = file->tag.get_property("FRAMERATE", frame_rate);
                sample_rate = file->tag.get_property("SAMPLERATE", sample_rate);
 
-
                do
                {
                        result = file->read_tag();
@@ -1047,15 +1045,9 @@ void Tracks::paste_automation(double selectionstart,
                                if(file->tag.title_is("TRACK"))
                                {
                                        file->tag.get_property("TYPE", string);
-                                       if(!strcmp(string, "AUDIO"))
-                                       {
-                                               src_type = TRACK_AUDIO;
-                                       }
-                                       else
-                                       {
-                                               src_type = TRACK_VIDEO;
-                                       }
-
+                                       double src_rate = !strcmp(string, "AUDIO") ?
+                                               sample_rate : frame_rate;
+                                       double src_length = length / src_rate;
 // paste to any media type
                                        if(typeless)
                                        {
@@ -1097,22 +1089,9 @@ void Tracks::paste_automation(double selectionstart,
 
                                        if(dst_track)
                                        {
-                                               double frame_rate2 = frame_rate;
-                                               double sample_rate2 = sample_rate;
-
-                                               if(src_type != dst_track->data_type)
-                                               {
-                                                       frame_rate2 = sample_rate;
-                                                       sample_rate2 = frame_rate;
-                                               }
-
-                                               dst_track->paste_automation(selectionstart,
-                                                       length,
-                                                       frame_rate2,
-                                                       sample_rate2,
-                                                       file,
-                                                       default_only,
-                                                       active_only);
+                                               dst_track->paste_automation(file,
+                                                       selectionstart, src_length, src_rate,
+                                                       default_only, active_only);
                                        }
                                }
                        }
@@ -1129,7 +1108,7 @@ void Tracks::paste_automation(double selectionstart,
 void Tracks::paste_transition(PluginServer *server, Edit *dest_edit)
 {
        dest_edit->insert_transition(server->title);
-       if( edl->session->gang_tracks == GANG_NONE ) return;
+       if( edl->local_session->gang_tracks == GANG_NONE ) return;
        Track *track = dest_edit->track;
        double pos = track->from_units(dest_edit->startproject);
        for( Track *current=first; current; current=current->next ) {