ladspa fixes and L_ladspa plugin title, sams icons, mainerror fix
[goodguy/history.git] / cinelerra-5.1 / cinelerra / mwindowedit.C
index a0e9b955f510417dadc2bcd999bb0681b15b6938..85b5f7439b1e94918e04d4955f3fb3e23b4c64cd 100644 (file)
@@ -2274,40 +2274,54 @@ void MWindow::remap_audio(int pattern)
        }
 }
 
-void MWindow::set_proxy(int new_scale,
+void MWindow::set_proxy(int use_scaler, int new_scale,
         ArrayList<Indexable*> *orig_assets, ArrayList<Indexable*> *proxy_assets)
 {
+       int orig_use_scaler = edl->session->proxy_use_scaler;
        int orig_scale = edl->session->proxy_scale;
+// rescale to full size asset in read_frame
+       edl->session->proxy_use_scaler = use_scaler;
        edl->session->proxy_scale = new_scale;
 
+       if( use_scaler ) {
+               for( int i=0; i<proxy_assets->size(); ++i ) {
+                       Asset *proxy_asset = (Asset *)proxy_assets->get(i);
+                       proxy_asset->width = orig_assets->get(i)->get_w();
+                       proxy_asset->height = orig_assets->get(i)->get_h();
+               }
+               new_scale = 1;
+       }
+
+       if( !orig_use_scaler && new_scale != orig_scale ) {
 // project size
-       float orig_w = (float)edl->session->output_w * orig_scale;
-       float orig_h = (float)edl->session->output_h * orig_scale;
-       edl->session->output_w = Units::round(orig_w / new_scale);
-       edl->session->output_h = Units::round(orig_h / new_scale);
+               float orig_w = (float)edl->session->output_w * orig_scale;
+               float orig_h = (float)edl->session->output_h * orig_scale;
+               edl->session->output_w = Units::round(orig_w / new_scale);
+               edl->session->output_h = Units::round(orig_h / new_scale);
 
 // track sizes
-       for( Track *track=edl->tracks->first; track; track=track->next ) {
-               if( track->data_type != TRACK_VIDEO ) continue;
-               orig_w = (float)track->track_w * orig_scale;
-               orig_h = (float)track->track_h * orig_scale;
-               track->track_w = Units::round(orig_w / new_scale);
-               track->track_h = Units::round(orig_h / new_scale);
-               ((MaskAutos*)track->automation->autos[AUTOMATION_MASK])->
-                       set_proxy(orig_scale, new_scale);
-               ((FloatAutos*)track->automation->autos[AUTOMATION_CAMERA_X])->
-                       set_proxy(orig_scale, new_scale);
-               ((FloatAutos*)track->automation->autos[AUTOMATION_CAMERA_Y])->
-                       set_proxy(orig_scale, new_scale);
-               ((FloatAutos*)track->automation->autos[AUTOMATION_PROJECTOR_X])->
-                       set_proxy(orig_scale, new_scale);
-               ((FloatAutos*)track->automation->autos[AUTOMATION_PROJECTOR_Y])->
-                       set_proxy(orig_scale, new_scale);
+               for( Track *track=edl->tracks->first; track; track=track->next ) {
+                       if( track->data_type != TRACK_VIDEO ) continue;
+                       orig_w = (float)track->track_w * orig_scale;
+                       orig_h = (float)track->track_h * orig_scale;
+                       track->track_w = Units::round(orig_w / new_scale);
+                       track->track_h = Units::round(orig_h / new_scale);
+                       ((MaskAutos*)track->automation->autos[AUTOMATION_MASK])->
+                               set_proxy(orig_scale, new_scale);
+                       ((FloatAutos*)track->automation->autos[AUTOMATION_CAMERA_X])->
+                               set_proxy(orig_scale, new_scale);
+                       ((FloatAutos*)track->automation->autos[AUTOMATION_CAMERA_Y])->
+                               set_proxy(orig_scale, new_scale);
+                       ((FloatAutos*)track->automation->autos[AUTOMATION_PROJECTOR_X])->
+                               set_proxy(orig_scale, new_scale);
+                       ((FloatAutos*)track->automation->autos[AUTOMATION_PROJECTOR_Y])->
+                               set_proxy(orig_scale, new_scale);
+               }
        }
 
-// assets
+// change original assets to proxy assets
        for( int i=0; i<proxy_assets->size(); i++ ) {
-               Asset *proxy_asset = edl->assets->update((Asset*)proxy_assets->get(i));
+               Asset *proxy_asset = edl->assets->update((Asset *)proxy_assets->get(i));
 // replace track contents
                for( Track *track = edl->tracks->first; track; track = track->next ) {
                        if( track->data_type != TRACK_VIDEO ) continue;