Credit Andrew - fix vorbis audio which was scratchy and ensure aging plugin does...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / edl.C
index 98200322a4866d2a86797ba7eaff645b8a9fe9eb..30e9e894dc2fafc267c7610756035d39ca4c0a87 100644 (file)
@@ -2,6 +2,7 @@
 /*
  * CINELERRA
  * Copyright (C) 1997-2012 Adam Williams <broadcast at earthling dot net>
+ * 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<Edit*> *edits, ArrayList<Range> &regions)
 // move edit inclusive labels by regions
        for( int i=0; i<edits->size(); ++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<Indexable*> *orig_assets, ArrayList<Indexable*> *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(); i<n; ++i ) {
                Indexable *proxy_idxbl = proxy_assets->get(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);
        }
 }