X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fedl.C;h=f5a1a9cc765342b2c16ffb7977717d89c9452037;hb=1c6e05239a27d92813c27c697ccac25378b9efa0;hp=102c975bc3139520e45b884fa69c864bafe4482f;hpb=6fa206c4d00a5bb7418289064dd8466ff477f787;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/edl.C b/cinelerra-5.1/cinelerra/edl.C index 102c975b..f5a1a9cc 100644 --- a/cinelerra-5.1/cinelerra/edl.C +++ b/cinelerra-5.1/cinelerra/edl.C @@ -795,20 +795,24 @@ int EDL::clear(double start, double end, return 0; } -class Zone { public: Track *track; int64_t start, end; }; +static int dead_edit_cmp(Edit**ap, Edit**bp) +{ + Edit *a = *ap, *b = *bp; + if( a->track != b->track ) return 0; + return a->startproject > b->startproject ? -1 : 1; +} void EDL::delete_edits(ArrayList *edits, int collapse) { + edits->sort(dead_edit_cmp); if( session->labels_follow_edits ) delete_edit_labels(edits, collapse); - ArrayList zones; for( int i=0; isize(); ++i ) { Edit *edit = edits->get(i); Track *track = edit->track; int64_t start = edit->startproject; - int64_t end = start + edit->length; - Zone &zone = zones.append(); - zone.track = track; zone.start = start; zone.end = end; + int64_t length = edit->length; + int64_t end = start + length; if( session->autos_follow_edits ) { track->automation->clear(start, end, 0, collapse); } @@ -820,16 +824,12 @@ void EDL::delete_edits(ArrayList *edits, int collapse) plugin_set->paste_silence(start, end); } } - track->optimize(); - } - for( int i=0; iedits->clear(start, end); - if( !collapse ) - track->edits->paste_silence(start, end); - track->optimize(); + Edit *dead_edit = edit; + if( collapse ) { + while( (edit=edit->next) ) + edit->startproject -= length; + } + delete dead_edit; } optimize(); }