diff options
-rw-r--r-- | gtk/src/callbacks.c | 2 | ||||
-rw-r--r-- | gtk/src/hb-backend.c | 29 | ||||
-rw-r--r-- | gtk/src/presets.c | 4 | ||||
-rw-r--r-- | gtk/src/settings.h | 1 |
4 files changed, 22 insertions, 14 deletions
diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c index 200e77f3d..0f2343f55 100644 --- a/gtk/src/callbacks.c +++ b/gtk/src/callbacks.c @@ -1408,6 +1408,7 @@ show_title_info(signal_user_data_t *ud, ghb_title_info_t *tinfo) } } ud->dont_clear_presets = TRUE; + ud->scale_busy = TRUE; update_title_duration(ud); widget = GHB_WIDGET (ud->builder, "source_dimensions"); text = g_strdup_printf ("%d x %d", tinfo->width, tinfo->height); @@ -1458,6 +1459,7 @@ show_title_info(signal_user_data_t *ud, ghb_title_info_t *tinfo) ghb_ui_update(ud, "PictureLeftCrop", ghb_int64_value(tinfo->crop[2])); ghb_ui_update(ud, "PictureRightCrop", ghb_int64_value(tinfo->crop[3])); } + ud->scale_busy = FALSE; ghb_set_scale (ud, GHB_PIC_KEEP_PAR); gint width, height, crop[4]; crop[0] = ghb_settings_get_int(ud->settings, "PictureTopCrop"); diff --git a/gtk/src/hb-backend.c b/gtk/src/hb-backend.c index 71b6850e7..81742f2ee 100644 --- a/gtk/src/hb-backend.c +++ b/gtk/src/hb-backend.c @@ -3579,7 +3579,6 @@ ghb_set_scale(signal_user_data_t *ud, gint mode) gint mod; gint max_width = 0; gint max_height = 0; - static gboolean busy = FALSE; g_debug("ghb_set_scale ()\n"); picture_settings_deps(ud); @@ -3593,13 +3592,13 @@ ghb_set_scale(signal_user_data_t *ud, gint mode) gint titleindex; titleindex = ghb_settings_combo_int(ud->settings, "title"); - title = hb_list_item( list, titleindex ); + title = hb_list_item( list, titleindex ); if (title == NULL) return; job = title->job; if (job == NULL) return; - if (busy) return; - busy = TRUE; + if (ud->scale_busy) return; + ud->scale_busy = TRUE; if (!ud->dont_clear_presets && (keep_width || keep_height)) { @@ -3724,15 +3723,9 @@ ghb_set_scale(signal_user_data_t *ud, gint mode) width = MOD_ROUND(width, mod); height = MOD_ROUND(height, mod); - // Adjust dims according to max values - if (max_height) - height = MIN(height, max_height); - if (max_width) - width = MIN(width, max_width); - + job->anamorphic.mode = pic_par; if (pic_par) { - job->anamorphic.mode = pic_par; // The scaler crashes if the dimensions are not divisible by 2 // Align mod 2. And so does something in x264_encoder_headers() job->modulus = mod; @@ -3742,7 +3735,7 @@ ghb_set_scale(signal_user_data_t *ud, gint mode) job->anamorphic.dar_height = 0; if (keep_height && pic_par == 2) - width = ((double)height * crop_width / crop_height) + mod / 2; + width = ((double)height * crop_width / crop_height); job->width = width; job->height = height; job->maxWidth = max_width; @@ -3771,6 +3764,9 @@ ghb_set_scale(signal_user_data_t *ud, gint mode) { job->anamorphic.keep_display_aspect = 1; } + // hb_set_anamorphic_size will adjust par, dar, and width/height + // to conform to job parameters that have been set, including + // maxWidth and maxHeight hb_set_anamorphic_size( job, &width, &height, &par_width, &par_height ); if (job->anamorphic.mode == 3 && !keep_aspect && @@ -3787,7 +3783,12 @@ ghb_set_scale(signal_user_data_t *ud, gint mode) } else { - job->anamorphic.mode = pic_par; + // Adjust dims according to max values + if (max_height) + height = MIN(height, max_height); + if (max_width) + width = MIN(width, max_width); + if (keep_aspect) { gdouble par; @@ -3866,7 +3867,7 @@ ghb_set_scale(signal_user_data_t *ud, gint mode) ghb_ui_update(ud, "PicturePARHeight", ghb_int64_value(par_height)); ghb_ui_update(ud, "PictureDisplayWidth", ghb_int64_value(disp_width)); ghb_ui_update(ud, "PictureDisplayHeight", ghb_int64_value(height)); - busy = FALSE; + ud->scale_busy = FALSE; } static void diff --git a/gtk/src/presets.c b/gtk/src/presets.c index 3ac4606f3..1cb2b416b 100644 --- a/gtk/src/presets.c +++ b/gtk/src/presets.c @@ -4114,6 +4114,7 @@ ghb_refresh_preset(signal_user_data_t *ud) if (!folder) { ud->dont_clear_presets = TRUE; + ud->scale_busy = TRUE; // Temporarily set the video_quality range to (0,100) // This is needed so the video_quality value does not get // truncated when set. The range will be readjusted below @@ -4134,6 +4135,7 @@ ghb_refresh_preset(signal_user_data_t *ud) { preset_update_title_deps(ud, &tinfo); } + ud->scale_busy = FALSE; ghb_set_scale (ud, GHB_PIC_KEEP_PAR); ud->dont_clear_presets = FALSE; @@ -4192,6 +4194,7 @@ presets_list_selection_changed_cb(GtkTreeSelection *selection, signal_user_data_ if (!folder) { ud->dont_clear_presets = TRUE; + ud->scale_busy = TRUE; // Temporarily set the video_quality range to (0,100) // This is needed so the video_quality value does not get // truncated when set. The range will be readjusted below @@ -4212,6 +4215,7 @@ presets_list_selection_changed_cb(GtkTreeSelection *selection, signal_user_data_ { preset_update_title_deps(ud, &tinfo); } + ud->scale_busy = FALSE; ghb_set_scale (ud, GHB_PIC_KEEP_PAR); ud->dont_clear_presets = FALSE; diff --git a/gtk/src/settings.h b/gtk/src/settings.h index 5ec717f0c..2f9640375 100644 --- a/gtk/src/settings.h +++ b/gtk/src/settings.h @@ -52,6 +52,7 @@ typedef struct gchar *current_dvd_device; gboolean debug; gboolean dont_clear_presets; + gboolean scale_busy; gint cancel_encode; GtkBuilder *builder; GValue *settings; |