summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gtk/src/callbacks.c34
-rw-r--r--gtk/src/ghb.ui115
-rw-r--r--gtk/src/hb-backend.c31
-rw-r--r--gtk/src/presets.c19
4 files changed, 104 insertions, 95 deletions
diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c
index 13599df20..aa5635fc2 100644
--- a/gtk/src/callbacks.c
+++ b/gtk/src/callbacks.c
@@ -1548,18 +1548,6 @@ display_width_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
if (GTK_WIDGET_SENSITIVE(widget))
ghb_set_scale (ud, GHB_PIC_KEEP_DISPLAY_WIDTH);
- gint pic_par;
-
- pic_par = ghb_settings_combo_int(ud->settings, "PicturePAR");
- if (pic_par == 3)
- {
- gint par_width, par_height;
-
- par_width = ghb_settings_get_int(ud->settings, "par_width");
- par_height = ghb_settings_get_int(ud->settings, "par_height");
- ghb_settings_set_int(ud->settings, "PicturePARWidth", par_width);
- ghb_settings_set_int(ud->settings, "PicturePARHeight", par_height);
- }
update_preview = TRUE;
}
@@ -1574,18 +1562,20 @@ display_height_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
if (GTK_WIDGET_SENSITIVE(widget))
ghb_set_scale (ud, GHB_PIC_KEEP_DISPLAY_HEIGHT);
- gint pic_par;
+ update_preview = TRUE;
+}
- pic_par = ghb_settings_combo_int(ud->settings, "PicturePAR");
- if (pic_par == 3)
- {
- gint par_width, par_height;
+G_MODULE_EXPORT void
+par_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
+{
+ g_debug("par_changed_cb ()");
+ ghb_widget_to_setting(ud->settings, widget);
+ ghb_check_dependency(ud, widget);
+ ghb_clear_presets_selection(ud);
+ ghb_live_reset(ud);
+ if (GTK_WIDGET_SENSITIVE(widget))
+ ghb_set_scale (ud, GHB_PIC_KEEP_PAR);
- par_width = ghb_settings_get_int(ud->settings, "par_width");
- par_height = ghb_settings_get_int(ud->settings, "par_height");
- ghb_settings_set_int(ud->settings, "PicturePARWidth", par_width);
- ghb_settings_set_int(ud->settings, "PicturePARHeight", par_height);
- }
update_preview = TRUE;
}
diff --git a/gtk/src/ghb.ui b/gtk/src/ghb.ui
index b29717ef1..233d583fd 100644
--- a/gtk/src/ghb.ui
+++ b/gtk/src/ghb.ui
@@ -225,6 +225,22 @@
<property name="page_size">0</property>
<property name="value">0.0</property>
</object>
+ <object class="GtkAdjustment" id="adjustment29">
+ <property name="upper">2000</property>
+ <property name="lower">0</property>
+ <property name="page_increment">16</property>
+ <property name="step_increment">1</property>
+ <property name="page_size">0</property>
+ <property name="value">0</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment30">
+ <property name="upper">1200</property>
+ <property name="lower">0</property>
+ <property name="page_increment">16</property>
+ <property name="step_increment">1</property>
+ <property name="page_size">0</property>
+ <property name="value">0</property>
+ </object>
<object class="GtkAdjustment" id="preview_progress_adj">
<property name="upper">100</property>
<property name="lower">0</property>
@@ -4793,33 +4809,15 @@ the required multiple.</property>
</packing>
</child>
<child>
- <object class="GtkCheckButton" id="PictureKeepRatio">
- <property name="label" translatable="yes">Keep Aspect</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="scale_changed_cb"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox53">
+ <object class="GtkHBox" id="hbox79">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="spacing">4</property>
<child>
- <object class="GtkLabel" id="label93">
- <property name="width_request">100</property>
- <property name="xalign">0</property>
+ <object class="GtkLabel" id="label98">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="label" translatable="yes">Display Aspect:</property>
+ <property name="label" translatable="yes">Pixel Aspect:</property>
</object>
<packing>
<property name="expand">False</property>
@@ -4827,71 +4825,92 @@ the required multiple.</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="display_aspect">
+ <object class="GtkSpinButton" id="PicturePARWidth">
<property name="visible">True</property>
+ <property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="label" translatable="yes">--:--</property>
+ <property name="adjustment">adjustment29</property>
+ <property name="snap_to_ticks">True</property>
+ <signal name="value_changed" handler="par_changed_cb"/>
</object>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox76">
- <property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="spacing">4</property>
<child>
- <object class="GtkLabel" id="label94">
- <property name="width_request">100</property>
- <property name="xalign">0</property>
+ <object class="GtkLabel" id="label99">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="label" translatable="yes">Pixel Aspect:</property>
+ <property name="label" translatable="yes">:</property>
</object>
<packing>
<property name="expand">False</property>
- <property name="position">0</property>
+ <property name="position">2</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="par_width">
+ <object class="GtkSpinButton" id="PicturePARHeight">
<property name="visible">True</property>
+ <property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="label" translatable="yes">--</property>
+ <property name="adjustment">adjustment30</property>
+ <signal name="value_changed" handler="par_changed_cb"/>
</object>
<packing>
<property name="expand">False</property>
- <property name="position">1</property>
+ <property name="position">3</property>
</packing>
</child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="PictureKeepRatio">
+ <property name="label" translatable="yes">Keep Aspect</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="scale_changed_cb"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox53">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="spacing">4</property>
<child>
- <object class="GtkLabel" id="pixel_aspect">
+ <object class="GtkLabel" id="label93">
+ <property name="width_request">100</property>
+ <property name="xalign">0</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="label" translatable="yes">:</property>
+ <property name="label" translatable="yes">Display Aspect:</property>
</object>
<packing>
<property name="expand">False</property>
- <property name="position">2</property>
+ <property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="par_height">
+ <object class="GtkLabel" id="display_aspect">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="label" translatable="yes">--</property>
+ <property name="label" translatable="yes">--:--</property>
</object>
<packing>
<property name="expand">False</property>
- <property name="position">3</property>
+ <property name="position">1</property>
</packing>
</child>
</object>
diff --git a/gtk/src/hb-backend.c b/gtk/src/hb-backend.c
index 13b0ad6e8..7e05e639f 100644
--- a/gtk/src/hb-backend.c
+++ b/gtk/src/hb-backend.c
@@ -2765,7 +2765,7 @@ picture_settings_deps(signal_user_data_t *ud)
{
gboolean autoscale, keep_aspect, enable_keep_aspect;
gboolean enable_scale_width, enable_scale_height;
- gboolean enable_disp_width, enable_disp_height;
+ gboolean enable_disp_width, enable_disp_height, enable_par;
gint pic_par;
GtkWidget *widget;
@@ -2787,6 +2787,7 @@ picture_settings_deps(signal_user_data_t *ud)
enable_scale_width = !autoscale && (pic_par != 1);
enable_scale_height = !autoscale && (pic_par != 1);
enable_disp_width = (pic_par == 3) && !keep_aspect;
+ enable_par = (pic_par == 3) && !keep_aspect;
enable_disp_height = FALSE;
widget = GHB_WIDGET(ud->builder, "PictureModulus");
@@ -2801,6 +2802,10 @@ picture_settings_deps(signal_user_data_t *ud)
gtk_widget_set_sensitive(widget, enable_disp_width);
widget = GHB_WIDGET(ud->builder, "PictureDisplayHeight");
gtk_widget_set_sensitive(widget, enable_disp_height);
+ widget = GHB_WIDGET(ud->builder, "PicturePARWidth");
+ gtk_widget_set_sensitive(widget, enable_par);
+ widget = GHB_WIDGET(ud->builder, "PicturePARHeight");
+ gtk_widget_set_sensitive(widget, enable_par);
widget = GHB_WIDGET(ud->builder, "PictureKeepRatio");
gtk_widget_set_sensitive(widget, enable_keep_aspect);
widget = GHB_WIDGET(ud->builder, "autoscale");
@@ -2993,12 +2998,11 @@ ghb_set_scale(signal_user_data_t *ud, gint mode)
gint dar_width, dar_height;
if (mode & GHB_PIC_KEEP_PAR)
{
- par_width = ghb_settings_get_int(ud->settings,
+ dar_width = dar_height = 0;
+ job->anamorphic.par_width = ghb_settings_get_int(ud->settings,
"PicturePARWidth");
- par_height = ghb_settings_get_int(ud->settings,
+ job->anamorphic.par_height = ghb_settings_get_int(ud->settings,
"PicturePARHeight");
- dar_width = ((gdouble)width * par_width / par_height) + 0.5;
- dar_height = height;
}
else
{
@@ -3013,12 +3017,25 @@ ghb_set_scale(signal_user_data_t *ud, gint mode)
}
else
{
+ job->anamorphic.par_width = title->pixel_aspect_width;
+ job->anamorphic.par_height = title->pixel_aspect_height;
job->anamorphic.dar_width = 0;
job->anamorphic.dar_height = 0;
job->anamorphic.keep_display_aspect = 1;
}
hb_set_anamorphic_size( job, &width, &height,
&par_width, &par_height );
+ if (job->anamorphic.mode == 3 && !keep_aspect &&
+ mode & GHB_PIC_KEEP_PAR)
+ {
+ // hb_set_anamorphic_size reduces the par, which we
+ // don't want in this case because the user is
+ // explicitely specifying it.
+ par_width = ghb_settings_get_int(ud->settings,
+ "PicturePARWidth");
+ par_height = ghb_settings_get_int(ud->settings,
+ "PicturePARHeight");
+ }
}
else
{
@@ -3097,8 +3114,8 @@ ghb_set_scale(signal_user_data_t *ud, gint mode)
}
ghb_ui_update(ud, "display_aspect", ghb_string_value(str));
g_free(str);
- ghb_ui_update(ud, "par_width", ghb_int64_value(par_width));
- ghb_ui_update(ud, "par_height", ghb_int64_value(par_height));
+ ghb_ui_update(ud, "PicturePARWidth", ghb_int64_value(par_width));
+ 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;
diff --git a/gtk/src/presets.c b/gtk/src/presets.c
index 6c490de0a..b419414e6 100644
--- a/gtk/src/presets.c
+++ b/gtk/src/presets.c
@@ -2346,7 +2346,7 @@ import_xlat_preset(GValue *dict)
{
gboolean uses_max;
gint uses_pic;
- gint par, par_width, par_height;
+ gint par;
gint vqtype;
g_debug("import_xlat_preset ()");
@@ -2356,12 +2356,6 @@ import_xlat_preset(GValue *dict)
preset_dict_get_value(dict, "UsesPictureSettings"));
par = ghb_value_int(preset_dict_get_value(dict, "PicturePAR"));
vqtype = ghb_value_int(preset_dict_get_value(dict, "VideoQualityType"));
- par_width = ghb_value_int(preset_dict_get_value(dict, "PicturePARWidth"));
- par_height = ghb_value_int(preset_dict_get_value(dict, "PicturePARHeight"));
- ghb_dict_insert(dict, g_strdup("par_width"),
- ghb_int_value_new(par_width));
- ghb_dict_insert(dict, g_strdup("par_height"),
- ghb_int_value_new(par_height));
if (uses_max || uses_pic == 2)
{
@@ -2505,7 +2499,6 @@ static void
export_xlat_preset(GValue *dict)
{
gboolean autoscale, target, br, constant;
- gint par_width, par_height;
g_debug("export_xlat_prest ()");
autoscale = ghb_value_boolean(preset_dict_get_value(dict, "autoscale"));
@@ -2515,10 +2508,6 @@ export_xlat_preset(GValue *dict)
preset_dict_get_value(dict, "vquality_type_bitrate"));
constant = ghb_value_boolean(
preset_dict_get_value(dict, "vquality_type_constant"));
- par_width = ghb_value_int(
- preset_dict_get_value(dict, "par_width"));
- par_height = ghb_value_int(
- preset_dict_get_value(dict, "par_height"));
if (autoscale)
ghb_dict_insert(dict, g_strdup("UsesPictureSettings"),
@@ -2563,17 +2552,11 @@ export_xlat_preset(GValue *dict)
}
}
- ghb_dict_insert(dict, g_strdup("PicturePARWidth"),
- ghb_int_value_new(par_width));
- ghb_dict_insert(dict, g_strdup("PicturePARHeight"),
- ghb_int_value_new(par_height));
ghb_dict_remove(dict, "UsesMaxPictureSettings");
ghb_dict_remove(dict, "autoscale");
ghb_dict_remove(dict, "vquality_type_target");
ghb_dict_remove(dict, "vquality_type_bitrate");
ghb_dict_remove(dict, "vquality_type_constant");
- ghb_dict_remove(dict, "par_width");
- ghb_dict_remove(dict, "par_height");
export_value_xlat(dict);
}