rework proxy scaler, fix crop-gui coord, video_data tweak for proxy_format
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / mwindow.C
index 09747382f32777e885377167b721780ed43d1ae3..a99d30982ba1e837ba052ca7c6dafedea4533574 100644 (file)
@@ -361,7 +361,6 @@ MWindow::~MWindow()
        colormodels.remove_all_objects();
        interlace_project_modes.remove_all_objects();
        interlace_asset_modes.remove_all_objects();
-       interlace_asset_fixmethods.remove_all_objects();
        sighandler->terminate();
        delete sighandler;
        delete run_lock;
@@ -1531,9 +1530,6 @@ void MWindow::init_menus()
 #define ILACEASSETMODELISTADD(x) ilacemode_to_text(string, x); \
                            interlace_asset_modes.append(new InterlacemodeItem(string, x));
 
-#define ILACEFIXMETHODLISTADD(x) ilacefixmethod_to_text(string, x); \
-                           interlace_asset_fixmethods.append(new InterlacefixmethodItem(string, x));
-
        // Interlacing Modes
        ILACEASSETMODELISTADD(ILACE_MODE_UNDETECTED); // Not included in the list for the project options.
 
@@ -1546,11 +1542,6 @@ void MWindow::init_menus()
        ILACEASSETMODELISTADD(ILACE_MODE_NOTINTERLACED);
        ILACEPROJECTMODELISTADD(ILACE_MODE_NOTINTERLACED);
 
-       // Interlacing Fixing Methods
-       ILACEFIXMETHODLISTADD(ILACE_FIXMETHOD_NONE);
-       ILACEFIXMETHODLISTADD(ILACE_FIXMETHOD_UPONE);
-       ILACEFIXMETHODLISTADD(ILACE_FIXMETHOD_DOWNONE);
-
        mixers_align = new MixersAlign(this);
 }
 
@@ -2284,9 +2275,8 @@ int MWindow::render_proxy(ArrayList<Indexable *> &new_idxbls)
        Asset *format_asset = new Asset;
        format_asset->format = FILE_FFMPEG;
        format_asset->load_defaults(defaults, "PROXY_", 1, 1, 0, 0, 0);
-       ProxyRender proxy_render(this, format_asset);
        int new_scale = edl->session->proxy_scale;
-       int use_scaler = edl->session->proxy_use_scaler;
+       ProxyRender proxy_render(this, format_asset, new_scale);
 
        for( int i=0; i<new_idxbls.size(); ++i ) {
                Indexable *orig = new_idxbls.get(i);
@@ -2303,8 +2293,7 @@ int MWindow::render_proxy(ArrayList<Indexable *> &new_idxbls)
 // render needed proxies
        int result = proxy_render.create_needed_proxies(new_scale);
        if( !result ) {
-               add_proxy(use_scaler,
-                       &proxy_render.orig_idxbls, &proxy_render.orig_proxies);
+               add_proxy(&proxy_render.orig_idxbls, &proxy_render.orig_proxies);
        }
        format_asset->remove_user();
        return !result ? proxy_render.needed_proxies.size() : -1;
@@ -2353,7 +2342,9 @@ int MWindow::to_proxy(Asset *asset, int new_scale, int new_use_scaler)
        edl->Garbage::add_user();
        save_backup();
        undo_before(_("proxy"), this);
-       ProxyRender proxy_render(this, asset);
+       int asset_scale = new_scale == 1 ? 0 :
+                       !new_use_scaler ? 1 : new_scale;
+       ProxyRender proxy_render(this, asset, asset_scale);
 
 // revert project to original size from current size
 // remove all session proxy assets at the at the current proxy_scale
@@ -2718,7 +2709,9 @@ void MWindow::create_objects(int want_gui,
        gui->show_window();
        gui->raise_window();
        gui->unlock_window();
-
+       cwindow->gui->lock_window("MWindow::create_objects 1");
+       cwindow->gui->tool_panel->raise_tool();
+       cwindow->gui->unlock_window();
        if(debug) PRINT_TRACE
 
        if(preferences->use_tipwindow)
@@ -2996,6 +2989,17 @@ void MWindow::set_auto_keyframes(int value)
        cwindow->gui->unlock_window();
 }
 
+void MWindow::set_span_keyframes(int value)
+{
+       edl->session->span_keyframes = value;
+       gui->mbuttons->edit_panel->span_keyframe->update(value);
+       gui->flush();
+       cwindow->gui->lock_window("MWindow::set_span_keyframes");
+       cwindow->gui->edit_panel->span_keyframe->update(value);
+       cwindow->gui->flush();
+       cwindow->gui->unlock_window();
+}
+
 void MWindow::set_auto_visibility(Autos *autos, int value)
 {
        if( autos->type == Autos::AUTOMATION_TYPE_PLUGIN )
@@ -3673,6 +3677,9 @@ void MWindow::update_project(int load_mode)
        if(debug) PRINT_TRACE
        cwindow->gui->lock_window("MWindow::update_project 2");
        cwindow->gui->timebar->update(0);
+       Track *track = cwindow->calculate_affected_track();
+       cwindow->mask_track_id = track ? track->get_id() : -1;
+       cwindow->gui->tool_panel->raise_tool();
        cwindow->gui->unlock_window();
 
        if(debug) PRINT_TRACE
@@ -4482,7 +4489,7 @@ void MWindow::resync_guis()
        lwindow->gui->panel->set_meters(channels, 1);
        lwindow->gui->flush();
        lwindow->gui->unlock_window();
-
+#ifdef GLx4
 // Warn user
        if(((edl->session->output_w % 4) ||
                (edl->session->output_h % 4)) &&
@@ -4492,7 +4499,7 @@ void MWindow::resync_guis()
                        _("This project's dimensions are not multiples of 4 so\n"
                        "it can't be rendered by OpenGL."));
        }
-
+#endif
 
 // Flash frame
        sync_parameters(CHANGE_ALL);
@@ -4517,8 +4524,10 @@ int MWindow::select_asset(Asset *asset, int vstream, int astream, int delete_tra
                double framerate = asset->get_frame_rate();
                int width = asset->get_w();
                int height = asset->get_h();
+#ifdef GLx4
                // must be multiple of 4 for opengl
                width = (width+3) & ~3;  height = (height+3) & ~3;
+#endif
                int driver = session->playback_config->vconfig->driver;
                int color_model = file->get_best_colormodel(asset, driver);
 //             color_model = BC_CModels::is_yuv(color_model) ?