From b487feefaff3787df17d9624961643e3be3c216b Mon Sep 17 00:00:00 2001 From: jstebbins Date: Sat, 26 Jun 2010 22:54:36 +0000 Subject: [PATCH] LinGui: fix some issues with loading custom anamorphic settings from preset. as the settings were incrementally loaded, each changing widget triggered updates that could conflict with the preset values being loaded. fix an issue with hight getting stuck at certain values. Incorrect rounding caused a recalculation that put height back to it's previous value. git-svn-id: svn://localhost/HandBrake/trunk@3412 b64f7644-9d1e-0410-96f1-a4d463321fa5 --- gtk/src/callbacks.c | 2 ++ gtk/src/hb-backend.c | 29 +++++++++++++++-------------- gtk/src/presets.c | 4 ++++ 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 200e77f3..0f2343f5 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 71b6850e..81742f2e 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 3ac4606f..1cb2b416 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 5ec717f0..2f964037 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; -- 2.11.0