X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;ds=sidebyside;f=cinelerra-5.1%2Fcinelerra%2Fedl.C;h=cb080aca25103b8349062e069f7200cff3891614;hb=b2d226c1f41e84bbb3af93ebc0aa89f98ec0fd52;hp=ca0d149c0e5042c4a4642bed651517f5fb0abca0;hpb=e719f1246ff9bb42b055306396c9160640a88884;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/edl.C b/cinelerra-5.1/cinelerra/edl.C index ca0d149c..cb080aca 100644 --- a/cinelerra-5.1/cinelerra/edl.C +++ b/cinelerra-5.1/cinelerra/edl.C @@ -437,7 +437,7 @@ int EDL::copy_assets(int copy_flags, double start, double end, if( (copy_flags & COPY_USED_ASSETS) ) { // Copy just the ones being used. for( current = tracks->first; current; current = NEXT ) { - if( !current->record ) continue; + if( !current->is_armed() ) continue; current->copy_assets(start, end, &asset_list); } } @@ -601,7 +601,7 @@ void EDL::copy_indexables(EDL *edl) } } -EDL *EDL::new_nested_edl(EDL *edl, const char *path) +EDL *EDL::new_nested_clip(EDL *edl, const char *path) { EDL *nested = new EDL; // no parent for nested edl nested->create_objects(); @@ -614,19 +614,14 @@ EDL *EDL::new_nested_edl(EDL *edl, const char *path) return nested; } -EDL *EDL::get_nested_edl() +EDL *EDL::get_nested_edl(const char *path) { - Track *track = tracks->first; - Edit *edit = track ? track->edits->first : 0; - EDL *nested = edit && !edit->next && !edit->asset ? edit->nested_edl : 0; - while( nested && (track=track->next)!=0 ) { - Edit *edit = track->edits->first; - if( !edit || edit->next || - ( edit->nested_edl != nested && - strcmp(edit->nested_edl->path, nested->path) ) ) - nested = 0; + for( int i=0; ipath) ) + return nested_edl; } - return nested; + return 0; } @@ -642,8 +637,8 @@ void EDL::create_nested(EDL *nested) { int video_tracks = 0, audio_tracks = 0; for( Track *track=nested->tracks->first; track!=0; track=track->next ) { - if( track->data_type == TRACK_VIDEO && track->record ) ++video_tracks; - if( track->data_type == TRACK_AUDIO && track->record ) ++audio_tracks; + if( track->data_type == TRACK_VIDEO && track->play ) ++video_tracks; + if( track->data_type == TRACK_AUDIO && track->play ) ++audio_tracks; } // renderengine properties if( video_tracks > 0 ) @@ -1049,6 +1044,7 @@ int EDL::get_tracks_height(Theme *theme) { int total_pixels = 0; for( Track *current=tracks->first; current; current=NEXT ) { + if( current->is_hidden() ) continue; total_pixels += current->vertical_span(theme); } return total_pixels; @@ -1058,6 +1054,7 @@ int64_t EDL::get_tracks_width() { int64_t total_pixels = 0; for( Track *current=tracks->first; current; current=NEXT ) { + if( current->is_hidden() ) continue; int64_t pixels = current->horizontal_span(); if( pixels > total_pixels ) total_pixels = pixels; } @@ -1233,7 +1230,7 @@ void EDL::insert_asset(Asset *asset, } for( ; current && vtrackrecord || current->data_type != TRACK_VIDEO ) continue; + if( !current->is_armed() || current->data_type != TRACK_VIDEO ) continue; current->insert_asset(new_asset, new_nested_edl, length, position, vtrack++); } @@ -1255,7 +1252,7 @@ void EDL::insert_asset(Asset *asset, current = tracks->first; for( ; current && atrack < channels; current=NEXT ) { - if( !current->record || current->data_type != TRACK_AUDIO ) continue; + if( !current->is_armed() || current->data_type != TRACK_AUDIO ) continue; current->insert_asset(new_asset, new_nested_edl, length, position, atrack++); } @@ -1309,7 +1306,7 @@ void EDL::get_shared_plugins(Track *source, int data_type) { for( Track *track=tracks->first; track; track=track->next ) { - if( track->record && omit_recordable ) continue; + if( track->is_armed() && omit_recordable ) continue; if( track == source || track->data_type != data_type ) continue; for( int i=0; iplugin_set.size(); ++i ) { Plugin *plugin = track->get_current_plugin( @@ -1326,7 +1323,7 @@ void EDL::get_shared_tracks(Track *track, int omit_recordable, int data_type) { for( Track *current=tracks->first; current; current=NEXT ) { - if( omit_recordable && current->record ) continue; + if( omit_recordable && current->is_armed() ) continue; if( current == track || current->data_type != data_type ) continue; module_locations->append(new SharedLocation(tracks->number_of(current), 0)); } @@ -1599,7 +1596,7 @@ double EDL::next_edit(double position) // Test for edit handles after position for( Track *track=tracks->first; track; track=track->next ) { - if( !track->record ) continue; + if( !track->is_armed() ) 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); @@ -1623,7 +1620,7 @@ double EDL::prev_edit(double position) // Test for edit handles before cursor position for( Track *track=tracks->first; track; track=track->next ) { - if( !track->record ) continue; + if( !track->is_armed() ) continue; for( Edit *edit=track->edits->first; edit; edit=edit->next ) { double edit_end = track->from_units(edit->startproject); Units::fix_double(&edit_end); @@ -1869,7 +1866,7 @@ EDL *EDL::selected_edits_to_clip(int packed, double start = DBL_MAX, end = DBL_MIN; Track *first_track=0, *last_track = 0; for( Track *track=tracks->first; track; track=track->next ) { - if( !track->record ) continue; + if( !track->is_armed() ) continue; int empty = 1; for( Edit *edit=track->edits->first; edit; edit=edit->next ) { if( !edit->is_selected || edit->silence() ) continue; @@ -1895,7 +1892,7 @@ EDL *EDL::selected_edits_to_clip(int packed, new_edl->session->video_tracks = 0; new_edl->session->audio_tracks = 0; for( Track *track=tracks->first; track; track=track->next ) { - if( !track->record ) continue; + if( !track->is_armed() ) continue; if( first_track ) { if( first_track != track ) continue; first_track = 0; @@ -2045,7 +2042,7 @@ void EDL::paste_edits(EDL *clip, Track *first_track, double position, int overwr first_track = tracks->first; Track *src = clip->tracks->first; for( Track *track=first_track; track && src; track=track->next ) { - if( !track->record ) continue; + if( !track->is_armed() ) continue; int64_t pos = track->to_units(position, 0); if( edit_edits ) { for( Edit *edit=src->edits->first; edit; edit=edit->next ) { @@ -2199,8 +2196,7 @@ void EDL::replace_assets(ArrayList &orig_idxbls, ArrayList & int EDL::collect_effects(EDL *&group) { // to remap shared plugins in copied plugin stack - class shared : public ArrayList { public: int trk; }; - class shared_list : public ArrayList {} shared_map; + edl_shared_list shared_map; int ret = 0; EDL *new_edl = new EDL(parent_edl ? parent_edl : this); new_edl->create_objects(); @@ -2212,9 +2208,9 @@ int EDL::collect_effects(EDL *&group) Edit *edit = track->edits->first; while( edit && !edit->is_selected ) edit = edit->next; if( !edit ) continue; - if( !track->record ) { ret = COLLECT_EFFECTS_RECORD; break; } + if( !track->is_armed() ) { ret = COLLECT_EFFECTS_RECORD; break; } Track *new_track = 0; - shared *location = 0; + edl_shared *location = 0; int64_t start_pos = edit->startproject; int64_t end_pos = start_pos + edit->length; int pluginsets = track->plugin_set.size(); @@ -2267,7 +2263,7 @@ int EDL::collect_effects(EDL *&group) int m = shared_map.size(), n = -1; while( --m>=0 && shared_map[m].trk!=trk ); if( m >= 0 ) { - shared &location = shared_map[m]; + edl_shared &location = shared_map[m]; n = location.size(); while( --n>=0 && location[n]!=set ); } @@ -2279,19 +2275,21 @@ int EDL::collect_effects(EDL *&group) } if( !ret ) group = new_edl; + else + new_edl->remove_user(); return ret; } +void edl_SharedLocations::add(int trk, int plg) +{ + SharedLocation &s = append(); + s.module = trk; s.plugin = plg; +} + // inserts pluginsets in group to first selected edit in tracks int EDL::insert_effects(EDL *group, Track *first_track) { - class SharedLocations : public ArrayList { - public: - void add(int trk, int plg) { - SharedLocation &s = append(); - s.module = trk; s.plugin = plg; - } - } edl_locs, new_locs; + edl_SharedLocations edl_locs, new_locs; Track *new_track = group->tracks->first; if( !first_track ) first_track = tracks->first; Track *track = first_track; @@ -2299,7 +2297,7 @@ int EDL::insert_effects(EDL *group, Track *first_track) Edit *edit = track->edits->first; while( edit && !edit->is_selected ) edit = edit->next; if( !edit ) continue; - if( !track->record ) return INSERT_EFFECTS_RECORD; + if( !track->is_armed() ) return INSERT_EFFECTS_RECORD; if( track->data_type != new_track->data_type ) return INSERT_EFFECTS_TYPE; int gtrk = group->tracks->number_of(new_track); int trk = tracks->number_of(track); @@ -2322,7 +2320,7 @@ int EDL::insert_effects(EDL *group, Track *first_track) new_track = group->tracks->first; track = first_track; for( ; track && new_track; track=track->next ) { - if( !track->record ) continue; + if( !track->is_armed() ) continue; Edit *edit = track->edits->first; while( edit && !edit->is_selected ) edit = edit->next; if( !edit ) continue;