X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fedl.C;h=30e9e894dc2fafc267c7610756035d39ca4c0a87;hp=98200322a4866d2a86797ba7eaff645b8a9fe9eb;hb=refs%2Fheads%2Fmaster;hpb=fa27f905f12b15ae84eb1b3ffcd12e09d6d02660 diff --git a/cinelerra-5.1/cinelerra/edl.C b/cinelerra-5.1/cinelerra/edl.C index 98200322..30e9e894 100644 --- a/cinelerra-5.1/cinelerra/edl.C +++ b/cinelerra-5.1/cinelerra/edl.C @@ -2,6 +2,7 @@ /* * CINELERRA * Copyright (C) 1997-2012 Adam Williams + * Copyright (C) 2003-2016 Cinelerra CV contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -902,8 +903,8 @@ static void get_edit_regions(ArrayList *edits, ArrayList ®ions) // move edit inclusive labels by regions for( int i=0; isize(); ++i ) { Edit *edit = edits->get(i); - double pos = edit->track->from_units(edit->startproject); - double end = edit->track->from_units(edit->startproject + edit->length); + volatile double pos = edit->track->from_units(edit->startproject); + volatile double end = edit->track->from_units(edit->startproject + edit->length); int n = regions.size(), k = n; while( --k >= 0 ) { Range &range = regions[k]; @@ -1675,26 +1676,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 ) { @@ -1738,7 +1742,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); } }