X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fedl.C;h=8597dab317169b194ba7a232353fd246525247bd;hp=5df16099ea7de304e2ca7f7f582e03b288c7db4f;hb=54b918a8b84f666bf32548ebd12b93908061d2a6;hpb=48a6854a1ca58aa291ffc6fe3a48807492dfbef7 diff --git a/cinelerra-5.1/cinelerra/edl.C b/cinelerra-5.1/cinelerra/edl.C index 5df16099..8597dab3 100644 --- a/cinelerra-5.1/cinelerra/edl.C +++ b/cinelerra-5.1/cinelerra/edl.C @@ -270,8 +270,7 @@ int EDL::read_xml(FileXML *file, uint32_t load_flags) } else if( file->tag.title_is("SESSION") ) { - if( (load_flags & LOAD_SESSION) && - !parent_edl ) + if( (load_flags & LOAD_SESSION) && !parent_edl ) session->load_xml(file, 0, load_flags); else result = file->skip_tag(); @@ -281,14 +280,13 @@ int EDL::read_xml(FileXML *file, uint32_t load_flags) tracks->load(file, track_offset, load_flags); } else -// Sub EDL. -// Causes clip creation to fail because that involves an opening EDL tag. - if( file->tag.title_is("CLIP_EDL") && !parent_edl ) { + if( file->tag.title_is("CLIP_EDL") ) { EDL *new_edl = new EDL(this); new_edl->create_objects(); new_edl->read_xml(file, LOAD_ALL); - if( (load_flags & LOAD_ALL) == LOAD_ALL ) + if( (load_flags & LOAD_ALL) == LOAD_ALL ) { clips.add_clip(new_edl); + } new_edl->remove_user(); } else @@ -301,27 +299,22 @@ int EDL::read_xml(FileXML *file, uint32_t load_flags) nested_edl->remove_user(); } else - if( file->tag.title_is("VWINDOW_EDL") && !parent_edl ) { - EDL *new_edl = new EDL(this); - new_edl->create_objects(); - new_edl->read_xml(file, LOAD_ALL); - + if( file->tag.title_is("VWINDOW_EDL") ) { + if( !parent_edl ) { + EDL *new_edl = new EDL(this); + new_edl->create_objects(); + new_edl->read_xml(file, LOAD_ALL); - if( (load_flags & LOAD_ALL) == LOAD_ALL ) { -// if( vwindow_edl && !vwindow_edl_shared ) -// vwindow_edl->remove_user(); -// vwindow_edl_shared = 0; -// vwindow_edl = new_edl; - - append_vwindow_edl(new_edl, 0); + if( (load_flags & LOAD_ALL) == LOAD_ALL ) { + append_vwindow_edl(new_edl, 0); + } + else { // Discard if not replacing EDL + new_edl->remove_user(); + } } else -// Discard if not replacing EDL - { - new_edl->remove_user(); - new_edl = 0; - } + result = file->skip_tag(); } } } while(!result); @@ -601,7 +594,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 +607,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 +630,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->is_armed() ) ++video_tracks; - if( track->data_type == TRACK_AUDIO && track->is_armed() ) ++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 ) @@ -1687,26 +1675,29 @@ void EDL::set_proxy(int new_scale, int new_use_scaler, ArrayList *orig_assets, ArrayList *proxy_assets) { int orig_scale = session->proxy_scale; - session->proxy_scale = new_scale; + int proxy_scale = new_scale; + if( !proxy_scale ) proxy_scale = 1; + session->proxy_scale = proxy_scale; int orig_use_scaler = session->proxy_use_scaler; session->proxy_use_scaler = new_use_scaler; if( orig_use_scaler ) orig_scale = 1; - int scale = new_use_scaler ? new_scale : 1; - int asset_scale = new_scale == 1 && !new_use_scaler ? 0 : scale; + int scale = new_use_scaler ? proxy_scale : 1; + int asset_scale = !new_scale ? 0 : !new_use_scaler ? 1 : scale; // change original assets to proxy assets - int folder_no = new_use_scaler || new_scale != 1 ? AW_PROXY_FOLDER : AW_MEDIA_FOLDER; + int folder_no = !new_use_scaler && !new_scale ? AW_MEDIA_FOLDER : AW_PROXY_FOLDER; for( int i=0,n=proxy_assets->size(); iget(i); proxy_idxbl->folder_no = folder_no; if( !proxy_idxbl->is_asset ) continue; Asset *proxy_asset = assets->update((Asset *)proxy_idxbl); + proxy_asset->proxy_scale = asset_scale; + if( !new_scale ) continue; // in case geom resized proxy_asset->width = proxy_asset->actual_width * scale; proxy_asset->height = proxy_asset->actual_height * scale; - proxy_asset->proxy_scale = asset_scale; } // rescale to full size asset in read_frame - if( new_use_scaler ) new_scale = 1; - rescale_proxy(orig_scale, new_scale); + if( new_use_scaler ) proxy_scale = 1; + rescale_proxy(orig_scale, proxy_scale); // replace track contents for( Track *track=tracks->first; track; track=track->next ) { @@ -1750,7 +1741,7 @@ void EDL::set_proxy(int new_scale, int new_use_scaler, } } if( has_proxy && !orig_use_scaler ) - clip->rescale_proxy(orig_scale, new_scale); + clip->rescale_proxy(orig_scale, proxy_scale); } }