X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fedl.C;h=6f2b7e5865f784b8b30fd580b3b63553ca83ced6;hp=102c975bc3139520e45b884fa69c864bafe4482f;hb=af4a324887dc0828d96beb4858bf6fb1db1c2ae2;hpb=7028b139b11904216808777100c0bac9079f1c8c diff --git a/cinelerra-5.1/cinelerra/edl.C b/cinelerra-5.1/cinelerra/edl.C index 102c975b..6f2b7e58 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,15 +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); + Edit *dead_edit = edit; + if( collapse ) { + while( (edit=edit->next) ) + edit->startproject -= length; + } + delete dead_edit; track->optimize(); } optimize();