X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fedl.C;h=cd20a7b0d56e570d3a36de7b47bd6315fcff947e;hb=38cb4182e11e57fc426bede3825e825e9d61433b;hp=3dc2153e7c7d09cb6d83c5bec671842e0f7ed058;hpb=ed1cab1d6cbde6129bbd09b9609f7bba03ab610f;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/edl.C b/cinelerra-5.1/cinelerra/edl.C index 3dc2153e..cd20a7b0 100644 --- a/cinelerra-5.1/cinelerra/edl.C +++ b/cinelerra-5.1/cinelerra/edl.C @@ -609,14 +609,9 @@ int EDL::copy(double start, // Media // Don't replicate all assets for every clip. -// The assets for the clips are probably in the mane EDL. - if(!is_clip) - copy_assets(start, - end, - file, - all, - output_path); - +// The assets for the clips are probably in the main EDL. + if( !is_clip ) + copy_assets(start, end, file, all, output_path); // Clips // Don't want this if using clipboard if(all) @@ -649,10 +644,9 @@ int EDL::copy(double start, //printf("EDL::copy 2\n"); // terminate file - if(is_clip) + if( is_clip ) file->tag.set_title("/CLIP_EDL"); - else - if(is_vwindow) + else if( is_vwindow ) file->tag.set_title("/VWINDOW_EDL"); else file->tag.set_title("/EDL"); @@ -814,12 +808,23 @@ void EDL::set_outpoint(double position) } } +void EDL::deglitch(double position) +{ + if( !session->cursor_on_frames ) return; + Track *current_track = tracks->first; + for( ; current_track; current_track=current_track->next ) { + if( !current_track->record ) continue; + if( current_track->data_type != TRACK_AUDIO ) continue; + ATrack *atrack = (ATrack*)current_track; + atrack->deglitch(position, + session->labels_follow_edits, + session->plugins_follow_edits, + session->autos_follow_edits); + } +} -int EDL::clear(double start, - double end, - int clear_labels, - int clear_plugins, - int edit_autos) +int EDL::clear(double start, double end, + int clear_labels, int clear_plugins, int edit_autos) { if(start == end) { @@ -1555,3 +1560,51 @@ void EDL::append_vwindow_edl(EDL *edl, int increase_counter) } +double EDL::next_edit(double position) +{ + Units::fix_double(&position); + double new_position = tracks->total_length(); + + double max_rate = get_frame_rate(); + int sample_rate = get_sample_rate(); + if( sample_rate > max_rate ) max_rate = sample_rate; + double min_movement = max_rate > 0 ? 1. / max_rate : 1e-6; + +// Test for edit handles after position + for( Track *track=tracks->first; track; track=track->next ) { + if( !track->record ) continue; + for( Edit *edit=track->edits->first; edit; edit=edit->next ) { + double edit_end = track->from_units(edit->startproject + edit->length); + Units::fix_double(&edit_end); + if( fabs(edit_end-position) < min_movement ) continue; + if( edit_end > position && edit_end < new_position ) + new_position = edit_end; + } + } + return new_position; +} + +double EDL::prev_edit(double position) +{ + Units::fix_double(&position); + double new_position = -1; + + double max_rate = get_frame_rate(); + int sample_rate = get_sample_rate(); + if( sample_rate > max_rate ) max_rate = sample_rate; + double min_movement = max_rate > 0 ? 1. / max_rate : 1e-6; + +// Test for edit handles before cursor position + for( Track *track=tracks->first; track; track=track->next ) { + if( !track->record ) continue; + for( Edit *edit=track->edits->first; edit; edit=edit->next ) { + double edit_end = track->from_units(edit->startproject); + Units::fix_double(&edit_end); + if( fabs(edit_end-position) < min_movement ) continue; + if( edit_end < position && edit_end > new_position ) + new_position = edit_end; + } + } + return new_position; +} +