X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmixersalign.C;h=188782c1a09e3c69c8d85bb821c7c9ff4ff58240;hp=2cdf5275ae97c09fda43b386c4d09ffff0527fb1;hb=050b37188b98a61408badd0582e0605a77275201;hpb=b28efe4210cffedf9e5936c0bcb17328c6478454 diff --git a/cinelerra-5.1/cinelerra/mixersalign.C b/cinelerra-5.1/cinelerra/mixersalign.C index 2cdf5275..188782c1 100644 --- a/cinelerra-5.1/cinelerra/mixersalign.C +++ b/cinelerra-5.1/cinelerra/mixersalign.C @@ -26,6 +26,7 @@ #include "edit.h" #include "edits.h" #include "edl.h" +#include "edlsession.h" #include "localsession.h" #include "mainerror.h" #include "mainprogress.h" @@ -580,6 +581,7 @@ void MixersAlign::apply() { int idx = ma_gui->mtrack_list->get_selection_number(0, 0); int midx = -1, mid = mixer_of(mtracks[idx]->track, midx); + EDL *edl = mwindow->edl; for( int m, i=0; (m=ma_gui->mixer_list->get_selection_number(0,i))>=0; ++i ) { if( m == mid ) continue; // master does not move @@ -587,15 +589,27 @@ void MixersAlign::apply() Mixer *mixer = mix->mixer; for( int i=0; imixer_ids.size(); ++i ) { int id = mixer->mixer_ids[i]; - Track *track = mwindow->edl->tracks->first; + Track *track = edl->tracks->first; while( track && track->mixer_id != id ) track = track->next; if( !track ) continue; - int64_t dt = track->to_units(mix->nudge, 0); - for( Edit *edit=track->edits->first; edit; edit=edit->next ) - edit->startproject += dt; - track->optimize(); + double nudge = mix->nudge; + int record = track->record; track->record = 1; + if( nudge < 0 ) { + edl->clear(0, -nudge, + edl->session->labels_follow_edits, + edl->session->plugins_follow_edits, + edl->session->autos_follow_edits); + } + else if( nudge > 0 ) { + edl->paste_silence(0, nudge, + edl->session->labels_follow_edits, + edl->session->plugins_follow_edits, + edl->session->autos_follow_edits); + } + track->record = record; } } + edl->optimize(); mwindow->gui->lock_window("MixersAlign::handle_done_event"); mwindow->update_gui(1); @@ -628,6 +642,11 @@ void MixersAlignThread::run() void MixersAlign::handle_done_event(int result) { + if( thread->running() ) { + failed = -1; + thread->join(); + return; + } if( !result ) { EDL *edl = mwindow->edl; mwindow->edl = undo_edl; @@ -635,10 +654,6 @@ void MixersAlign::handle_done_event(int result) mwindow->edl = edl; mwindow->undo_after(_("align mixers"), LOAD_ALL); } - else if( thread->running() ) { - failed = -1; - thread->join(); - } } void MixersAlign::handle_close_event(int result)