X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fedl.C;h=77705fcf53f2e2b2b741373b696eecc48e3f905c;hp=2f0d6e20a78bed8b53f780f8d4788f6f2c53cbb0;hb=HEAD;hpb=17b4e5a06157865391c2d07b552b81d84665bcae diff --git a/cinelerra-5.1/cinelerra/edl.C b/cinelerra-5.1/cinelerra/edl.C index 2f0d6e20..77705fcf 100644 --- a/cinelerra-5.1/cinelerra/edl.C +++ b/cinelerra-5.1/cinelerra/edl.C @@ -342,6 +342,7 @@ int EDL::save_xml(FileXML *file, const char *output_path) int EDL::copy_all(EDL *edl) { if( this == edl ) return 0; + folder_no = edl->folder_no; update_index(edl); copy_session(edl); copy_assets(edl); @@ -402,7 +403,6 @@ void EDL::copy_session(EDL *edl, int session_only) if( !session_only ) { strcpy(this->path, edl->path); - awindow_folder = edl->awindow_folder; folders.copy_from(&edl->folders); } @@ -410,7 +410,7 @@ void EDL::copy_session(EDL *edl, int session_only) session->copy(edl->session); } - if( !session_only ) { + if( session_only <= 0 ) { local_session->copy_from(edl->local_session); } } @@ -1029,6 +1029,7 @@ EDL* EDL::add_clip(EDL *edl) EDL *new_edl = new EDL(this); new_edl->create_objects(); new_edl->copy_all(edl); + new_edl->folder_no = AW_CLIP_FOLDER; clips.append(new_edl); return new_edl; } @@ -1540,43 +1541,59 @@ void EDL::set_proxy(int new_scale, int use_scaler, rescale_proxy(orig_scale, new_scale); // change original assets to proxy assets - int awindow_folder = use_scaler || new_scale != 1 ? AW_PROXY_FOLDER : AW_MEDIA_FOLDER; + int folder_no = use_scaler || new_scale != 1 ? AW_PROXY_FOLDER : AW_MEDIA_FOLDER; for( int i=0,n=proxy_assets->size(); iget(i)->path; Indexable *proxy_idxbl = proxy_assets->get(i); - proxy_idxbl->awindow_folder = awindow_folder; - Asset *proxy_asset = proxy_idxbl->is_asset ? assets->update((Asset *)proxy_idxbl) : 0; - EDL *proxy_edl = !proxy_idxbl->is_asset ? (EDL *)proxy_idxbl : 0; + proxy_idxbl->folder_no = folder_no; + if( !proxy_idxbl->is_asset ) continue; + Asset *proxy_asset = assets->update((Asset *)proxy_idxbl); + if( proxy_asset == (Asset *)proxy_idxbl ) continue; + proxy_asset->width = proxy_idxbl->get_w(); + proxy_asset->height = proxy_idxbl->get_h(); + } // replace track contents - for( Track *track=tracks->first; track; track=track->next ) { + for( Track *track=tracks->first; track; track=track->next ) { + if( track->data_type != TRACK_VIDEO ) continue; + for( Edit *edit=track->edits->first; edit; edit=edit->next ) { + Indexable *idxbl = (Indexable *)edit->asset; + if( !idxbl ) idxbl = (Indexable *)edit->nested_edl; + if( !idxbl ) continue; + int i = orig_assets->size(); + while( --i>=0 && strcmp(orig_assets->get(i)->path, idxbl->path) ); + if( i < 0 ) continue; + Indexable *proxy_idxbl = proxy_assets->get(i); + Asset *proxy_asset = proxy_idxbl->is_asset ? + assets->update((Asset *)proxy_idxbl) : 0; + EDL *proxy_edl = !proxy_idxbl->is_asset ? + (EDL *)proxy_idxbl : 0; + edit->asset = proxy_asset; + edit->nested_edl = proxy_edl; + } + } + for( int j=0,n=clips.size(); jtracks->first; track; track=track->next ) { if( track->data_type != TRACK_VIDEO ) continue; for( Edit *edit=track->edits->first; edit; edit=edit->next ) { Indexable *idxbl = (Indexable *)edit->asset; if( !idxbl ) idxbl = (Indexable *)edit->nested_edl; if( !idxbl ) continue; - if( strcmp(idxbl->path, orig_path) ) continue; + int i = orig_assets->size(); + while( --i>=0 && strcmp(orig_assets->get(i)->path, idxbl->path) ); + if( i < 0 ) continue; + Indexable *proxy_idxbl = proxy_assets->get(i); + Asset *proxy_asset = proxy_idxbl->is_asset ? + assets->update((Asset *)proxy_idxbl) : 0; + EDL *proxy_edl = !proxy_idxbl->is_asset ? + (EDL *)proxy_idxbl : 0; edit->asset = proxy_asset; edit->nested_edl = proxy_edl; + has_proxy = 1; } } - for( int j=0,m=clips.size(); jtracks->first; track; track=track->next ) { - if( track->data_type != TRACK_VIDEO ) continue; - for( Edit *edit=track->edits->first; edit; edit=edit->next ) { - Indexable *idxbl = (Indexable *)edit->asset; - if( !idxbl ) idxbl = (Indexable *)edit->nested_edl; - if( !idxbl ) continue; - if( strcmp(idxbl->path, orig_path) ) continue; - edit->asset = proxy_asset; - edit->nested_edl = proxy_edl; - has_proxy = 1; - } - } - if( has_proxy && !orig_use_scaler ) - clip->rescale_proxy(orig_scale, new_scale); - } + if( has_proxy && !orig_use_scaler ) + clip->rescale_proxy(orig_scale, new_scale); } } @@ -1594,7 +1611,7 @@ void EDL::add_proxy(int use_scaler, // change original assets to proxy assets for( int i=0,n=proxy_assets->size(); iupdate((Asset *)proxy_assets->get(i)); - proxy_asset->awindow_folder = AW_PROXY_FOLDER; + proxy_asset->folder_no = AW_PROXY_FOLDER; // replace track contents for( Track *track=tracks->first; track; track=track->next ) { if( track->data_type != TRACK_VIDEO ) continue; @@ -1610,7 +1627,7 @@ void EDL::add_proxy(int use_scaler, Asset *EDL::get_proxy_asset() { - return awindow_folder == AW_PROXY_FOLDER ? + return folder_no == AW_PROXY_FOLDER ? tracks->first->edits->first->asset : 0; }