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);
if( !session_only ) {
strcpy(this->path, edl->path);
- awindow_folder = edl->awindow_folder;
folders.copy_from(&edl->folders);
}
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;
}
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(); i<n; ++i ) {
- const char *orig_path = orig_assets->get(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;
- if( proxy_asset && proxy_idxbl ) {
- proxy_asset->width = proxy_idxbl->get_w();
- proxy_asset->height = proxy_idxbl->get_h();
- }
- 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(); j<n; ++j ) {
+ EDL *clip = clips[j];
+ int has_proxy = 0;
+ for( Track *track=clip->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;
- 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(); j<m; ++j ) {
- EDL *clip = clips[j];
- int has_proxy = 0;
- for( Track *track=clip->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;
- 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);
}
}
// change original assets to proxy assets
for( int i=0,n=proxy_assets->size(); i<n; ++i ) {
Asset *proxy_asset = assets->update((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;
Asset *EDL::get_proxy_asset()
{
- return awindow_folder == AW_PROXY_FOLDER ?
+ return folder_no == AW_PROXY_FOLDER ?
tracks->first->edits->first->asset : 0;
}