summaryrefslogtreecommitdiffstats
path: root/gtk/src
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/src')
-rw-r--r--gtk/src/callbacks.c12
-rw-r--r--gtk/src/ghb-3.12.ui143
-rw-r--r--gtk/src/ghb-3.14.ui143
-rw-r--r--gtk/src/ghb.ui143
-rw-r--r--gtk/src/hb-backend.c155
-rw-r--r--gtk/src/makedeps.py12
-rw-r--r--gtk/src/presets.c4
-rw-r--r--gtk/src/queuehandler.c73
8 files changed, 246 insertions, 439 deletions
diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c
index 6acee07ab..215900275 100644
--- a/gtk/src/callbacks.c
+++ b/gtk/src/callbacks.c
@@ -2117,6 +2117,18 @@ setting_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
}
G_MODULE_EXPORT void
+deint_filter_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
+{
+ ghb_widget_to_setting(ud->settings, widget);
+ ghb_check_dependency(ud, widget, NULL);
+ ghb_clear_presets_selection(ud);
+ ghb_live_reset(ud);
+ ghb_update_ui_combo_box(ud, "PictureDeinterlacePreset", NULL, FALSE);
+ ghb_ui_update(ud, "PictureDeinterlacePreset",
+ ghb_dict_get(ud->settings, "PictureDeinterlacePreset"));
+}
+
+G_MODULE_EXPORT void
title_angle_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
ghb_widget_to_setting(ud->settings, widget);
diff --git a/gtk/src/ghb-3.12.ui b/gtk/src/ghb-3.12.ui
index cf65d0346..db3acea2f 100644
--- a/gtk/src/ghb-3.12.ui
+++ b/gtk/src/ghb-3.12.ui
@@ -3065,92 +3065,31 @@ SpatialLuma:SpatialChroma:TemporalLuma:TemporalChroma</property>
</packing>
</child>
<child>
- <object class="GtkGrid" id="table10">
+ <object class="GtkGrid" id="table14">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="column_spacing">5</property>
<child>
- <object class="GtkLabel" id="label86">
+ <object class="GtkLabel" id="PictureDeinterlaceFilterLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
- <property name="label" translatable="yes">Detelecine:</property>
+ <property name="label" translatable="yes">Deinterlace Filter:</property>
</object>
<packing>
- <property name="top_attach">0</property>
+ <property name="top_attach">1</property>
<property name="left_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkComboBox" id="PictureDetelecine">
+ <object class="GtkComboBox" id="PictureDeinterlaceFilter">
<property name="valign">GTK_ALIGN_CENTER</property>
<property name="width_request">100</property>
<property name="visible">True</property>
<property name="can_focus">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="tooltip_text" translatable="yes">This filter removes 'combing' artifacts that are the result of telecining.
-
-Telecining is a process that adjusts film framerates that are 24fps to NTSC video frame rates which are 30fps.</property>
- <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
- </object>
- <packing>
- <property name="top_attach">0</property>
- <property name="left_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="PictureDetelecineCustom">
- <property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">Custom detelecine filter string format
-
-JunkLeft:JunkRight:JunkTop:JunkBottom:StrictBreaks:MetricPlane:Parity</property>
- <property name="width_chars">8</property>
- <property name="primary_icon_activatable">False</property>
- <property name="secondary_icon_activatable">False</property>
- <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
- </object>
- <packing>
- <property name="top_attach">1</property>
- <property name="left_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkRadioButton" id="PictureDecombDeinterlace">
- <property name="label" translatable="yes">Decomb</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="tooltip_text" translatable="yes">Choose decomb or deinterlace filter options.
-
-The decomb filter selectively deinterlaces frames that appear to be interlaced.
-This will preserve quality in frames that are not interlaced.
-
-The classic deinterlace filter is applied to all frames.
-Frames that are not interlaced will suffer some quality degradation.</property>
- <property name="halign">start</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="setting_widget_changed_cb" swapped="no"/>
- </object>
- <packing>
- <property name="top_attach">2</property>
- <property name="left_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkRadioButton" id="PictureDeinterlaceDecomb">
- <property name="label" translatable="yes">Deinterlace</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Choose decomb or deinterlace filter options.
The decomb filter selectively deinterlaces frames that appear to be interlaced.
@@ -3158,115 +3097,127 @@ This will preserve quality in frames that are not interlaced.
The classic deinterlace filter is applied to all frames.
Frames that are not interlaced will suffer some quality degradation.</property>
- <property name="halign">start</property>
- <property name="draw_indicator">True</property>
- <property name="group">PictureDecombDeinterlace</property>
- <signal name="toggled" handler="setting_widget_changed_cb" swapped="no"/>
+ <signal name="changed" handler="deint_filter_changed_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">2</property>
+ <property name="top_attach">1</property>
<property name="left_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="PictureDecombLabel">
+ <object class="GtkLabel" id="PictureDeinterlacePresetLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
- <property name="label" translatable="yes">Decomb:</property>
+ <property name="label" translatable="yes">Deinterlace Preset:</property>
</object>
<packing>
- <property name="top_attach">3</property>
+ <property name="top_attach">2</property>
<property name="left_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkComboBox" id="PictureDecomb">
+ <object class="GtkComboBox" id="PictureDeinterlacePreset">
<property name="valign">GTK_ALIGN_CENTER</property>
<property name="width_request">100</property>
<property name="visible">True</property>
<property name="can_focus">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="tooltip_text" translatable="yes">The decomb filter selectively deinterlaces frames that appear to be interlaced.
-This will preserve quality in frames that are not interlaced.</property>
+ <property name="tooltip_text" translatable="yes"> The decomb filter selectively deinterlaces frames that appear to be interlaced.
+This will preserve quality in frames that are not interlaced.
+
+The classic deinterlace filter is applied to all frames.
+Frames that are not interlaced will suffer some quality degradation.</property>
<signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">3</property>
+ <property name="top_attach">2</property>
<property name="left_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkEntry" id="PictureDecombCustom">
+ <object class="GtkEntry" id="PictureDeinterlaceCustom">
<property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">Custom decomb filter string format
+ <property name="tooltip_text" translatable="yes">Custom denoise filter string format
-Mode:SpatialMetric:MotionThresh:SpatialThresh:BlockThresh:BlockWidth:
-BlockHeight:MagnitudeThres:VarianceThres:LaplacianThresh:DilationThresh:
-ErosionThresh:NoiseThresh:MaxSearchDistance:PostProcessing:Parity</property>
+SpatialLuma:SpatialChroma:TemporalLuma:TemporalChroma</property>
<property name="width_chars">8</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">4</property>
+ <property name="top_attach">3</property>
<property name="left_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="padding">2</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="table10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column_spacing">5</property>
<child>
- <object class="GtkLabel" id="PictureDeinterlaceLabel">
+ <object class="GtkLabel" id="label86">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
- <property name="label" translatable="yes">Deinterlace:</property>
+ <property name="label" translatable="yes">Detelecine:</property>
</object>
<packing>
- <property name="top_attach">5</property>
+ <property name="top_attach">0</property>
<property name="left_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkComboBox" id="PictureDeinterlace">
+ <object class="GtkComboBox" id="PictureDetelecine">
<property name="valign">GTK_ALIGN_CENTER</property>
<property name="width_request">100</property>
<property name="visible">True</property>
<property name="can_focus">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="tooltip_text" translatable="yes">The classic deinterlace filter is applied to all frames.
-Frames that are not interlaced will suffer some quality degradation.</property>
+ <property name="tooltip_text" translatable="yes">This filter removes 'combing' artifacts that are the result of telecining.
+
+Telecining is a process that adjusts film framerates that are 24fps to NTSC video frame rates which are 30fps.</property>
<signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">5</property>
+ <property name="top_attach">0</property>
<property name="left_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkEntry" id="PictureDeinterlaceCustom">
+ <object class="GtkEntry" id="PictureDetelecineCustom">
<property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">Custom deinterlace filter string format
+ <property name="tooltip_text" translatable="yes">Custom detelecine filter string format
-YadifMode:YadifParity:McdintMode:McdeintQp</property>
+JunkLeft:JunkRight:JunkTop:JunkBottom:StrictBreaks:MetricPlane:Parity</property>
<property name="width_chars">8</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">6</property>
+ <property name="top_attach">1</property>
<property name="left_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
@@ -3277,7 +3228,7 @@ YadifMode:YadifParity:McdintMode:McdeintQp</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">2</property>
- <property name="position">2</property>
+ <property name="position">3</property>
</packing>
</child>
</object>
diff --git a/gtk/src/ghb-3.14.ui b/gtk/src/ghb-3.14.ui
index 7164d39b7..3dd55d58d 100644
--- a/gtk/src/ghb-3.14.ui
+++ b/gtk/src/ghb-3.14.ui
@@ -3066,92 +3066,31 @@ SpatialLuma:SpatialChroma:TemporalLuma:TemporalChroma</property>
</packing>
</child>
<child>
- <object class="GtkGrid" id="table10">
+ <object class="GtkGrid" id="table14">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="column_spacing">5</property>
<child>
- <object class="GtkLabel" id="label86">
+ <object class="GtkLabel" id="PictureDeinterlaceFilterLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
- <property name="label" translatable="yes">Detelecine:</property>
+ <property name="label" translatable="yes">Deinterlace Filter:</property>
</object>
<packing>
- <property name="top_attach">0</property>
+ <property name="top_attach">1</property>
<property name="left_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkComboBox" id="PictureDetelecine">
+ <object class="GtkComboBox" id="PictureDeinterlaceFilter">
<property name="valign">GTK_ALIGN_CENTER</property>
<property name="width_request">100</property>
<property name="visible">True</property>
<property name="can_focus">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="tooltip_text" translatable="yes">This filter removes 'combing' artifacts that are the result of telecining.
-
-Telecining is a process that adjusts film framerates that are 24fps to NTSC video frame rates which are 30fps.</property>
- <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
- </object>
- <packing>
- <property name="top_attach">0</property>
- <property name="left_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="PictureDetelecineCustom">
- <property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">Custom detelecine filter string format
-
-JunkLeft:JunkRight:JunkTop:JunkBottom:StrictBreaks:MetricPlane:Parity</property>
- <property name="width_chars">8</property>
- <property name="primary_icon_activatable">False</property>
- <property name="secondary_icon_activatable">False</property>
- <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
- </object>
- <packing>
- <property name="top_attach">1</property>
- <property name="left_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkRadioButton" id="PictureDecombDeinterlace">
- <property name="label" translatable="yes">Decomb</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="tooltip_text" translatable="yes">Choose decomb or deinterlace filter options.
-
-The decomb filter selectively deinterlaces frames that appear to be interlaced.
-This will preserve quality in frames that are not interlaced.
-
-The classic deinterlace filter is applied to all frames.
-Frames that are not interlaced will suffer some quality degradation.</property>
- <property name="halign">start</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="setting_widget_changed_cb" swapped="no"/>
- </object>
- <packing>
- <property name="top_attach">2</property>
- <property name="left_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkRadioButton" id="PictureDeinterlaceDecomb">
- <property name="label" translatable="yes">Deinterlace</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Choose decomb or deinterlace filter options.
The decomb filter selectively deinterlaces frames that appear to be interlaced.
@@ -3159,115 +3098,127 @@ This will preserve quality in frames that are not interlaced.
The classic deinterlace filter is applied to all frames.
Frames that are not interlaced will suffer some quality degradation.</property>
- <property name="halign">start</property>
- <property name="draw_indicator">True</property>
- <property name="group">PictureDecombDeinterlace</property>
- <signal name="toggled" handler="setting_widget_changed_cb" swapped="no"/>
+ <signal name="changed" handler="deint_filter_changed_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">2</property>
+ <property name="top_attach">1</property>
<property name="left_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="PictureDecombLabel">
+ <object class="GtkLabel" id="PictureDeinterlacePresetLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
- <property name="label" translatable="yes">Decomb:</property>
+ <property name="label" translatable="yes">Deinterlace Preset:</property>
</object>
<packing>
- <property name="top_attach">3</property>
+ <property name="top_attach">2</property>
<property name="left_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkComboBox" id="PictureDecomb">
+ <object class="GtkComboBox" id="PictureDeinterlacePreset">
<property name="valign">GTK_ALIGN_CENTER</property>
<property name="width_request">100</property>
<property name="visible">True</property>
<property name="can_focus">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="tooltip_text" translatable="yes">The decomb filter selectively deinterlaces frames that appear to be interlaced.
-This will preserve quality in frames that are not interlaced.</property>
+ <property name="tooltip_text" translatable="yes"> The decomb filter selectively deinterlaces frames that appear to be interlaced.
+This will preserve quality in frames that are not interlaced.
+
+The classic deinterlace filter is applied to all frames.
+Frames that are not interlaced will suffer some quality degradation.</property>
<signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">3</property>
+ <property name="top_attach">2</property>
<property name="left_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkEntry" id="PictureDecombCustom">
+ <object class="GtkEntry" id="PictureDeinterlaceCustom">
<property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">Custom decomb filter string format
+ <property name="tooltip_text" translatable="yes">Custom denoise filter string format
-Mode:SpatialMetric:MotionThresh:SpatialThresh:BlockThresh:BlockWidth:
-BlockHeight:MagnitudeThres:VarianceThres:LaplacianThresh:DilationThresh:
-ErosionThresh:NoiseThresh:MaxSearchDistance:PostProcessing:Parity</property>
+SpatialLuma:SpatialChroma:TemporalLuma:TemporalChroma</property>
<property name="width_chars">8</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">4</property>
+ <property name="top_attach">3</property>
<property name="left_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="padding">2</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="table10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column_spacing">5</property>
<child>
- <object class="GtkLabel" id="PictureDeinterlaceLabel">
+ <object class="GtkLabel" id="label86">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
- <property name="label" translatable="yes">Deinterlace:</property>
+ <property name="label" translatable="yes">Detelecine:</property>
</object>
<packing>
- <property name="top_attach">5</property>
+ <property name="top_attach">0</property>
<property name="left_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkComboBox" id="PictureDeinterlace">
+ <object class="GtkComboBox" id="PictureDetelecine">
<property name="valign">GTK_ALIGN_CENTER</property>
<property name="width_request">100</property>
<property name="visible">True</property>
<property name="can_focus">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="tooltip_text" translatable="yes">The classic deinterlace filter is applied to all frames.
-Frames that are not interlaced will suffer some quality degradation.</property>
+ <property name="tooltip_text" translatable="yes">This filter removes 'combing' artifacts that are the result of telecining.
+
+Telecining is a process that adjusts film framerates that are 24fps to NTSC video frame rates which are 30fps.</property>
<signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">5</property>
+ <property name="top_attach">0</property>
<property name="left_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkEntry" id="PictureDeinterlaceCustom">
+ <object class="GtkEntry" id="PictureDetelecineCustom">
<property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">Custom deinterlace filter string format
+ <property name="tooltip_text" translatable="yes">Custom detelecine filter string format
-YadifMode:YadifParity:McdintMode:McdeintQp</property>
+JunkLeft:JunkRight:JunkTop:JunkBottom:StrictBreaks:MetricPlane:Parity</property>
<property name="width_chars">8</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">6</property>
+ <property name="top_attach">1</property>
<property name="left_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
@@ -3278,7 +3229,7 @@ YadifMode:YadifParity:McdintMode:McdeintQp</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">2</property>
- <property name="position">2</property>
+ <property name="position">3</property>
</packing>
</child>
</object>
diff --git a/gtk/src/ghb.ui b/gtk/src/ghb.ui
index 6c3303eb2..cf29e4493 100644
--- a/gtk/src/ghb.ui
+++ b/gtk/src/ghb.ui
@@ -3065,92 +3065,31 @@ SpatialLuma:SpatialChroma:TemporalLuma:TemporalChroma</property>
</packing>
</child>
<child>
- <object class="GtkGrid" id="table10">
+ <object class="GtkGrid" id="table14">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="column_spacing">5</property>
<child>
- <object class="GtkLabel" id="label86">
+ <object class="GtkLabel" id="PictureDeinterlaceFilterLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
- <property name="label" translatable="yes">Detelecine:</property>
+ <property name="label" translatable="yes">Deinterlace Filter:</property>
</object>
<packing>
- <property name="top_attach">0</property>
+ <property name="top_attach">1</property>
<property name="left_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkComboBox" id="PictureDetelecine">
+ <object class="GtkComboBox" id="PictureDeinterlaceFilter">
<property name="valign">GTK_ALIGN_CENTER</property>
<property name="width_request">100</property>
<property name="visible">True</property>
<property name="can_focus">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="tooltip_text" translatable="yes">This filter removes 'combing' artifacts that are the result of telecining.
-
-Telecining is a process that adjusts film framerates that are 24fps to NTSC video frame rates which are 30fps.</property>
- <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
- </object>
- <packing>
- <property name="top_attach">0</property>
- <property name="left_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="PictureDetelecineCustom">
- <property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">Custom detelecine filter string format
-
-JunkLeft:JunkRight:JunkTop:JunkBottom:StrictBreaks:MetricPlane:Parity</property>
- <property name="width_chars">8</property>
- <property name="primary_icon_activatable">False</property>
- <property name="secondary_icon_activatable">False</property>
- <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
- </object>
- <packing>
- <property name="top_attach">1</property>
- <property name="left_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkRadioButton" id="PictureDecombDeinterlace">
- <property name="label" translatable="yes">Decomb</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="tooltip_text" translatable="yes">Choose decomb or deinterlace filter options.
-
-The decomb filter selectively deinterlaces frames that appear to be interlaced.
-This will preserve quality in frames that are not interlaced.
-
-The classic deinterlace filter is applied to all frames.
-Frames that are not interlaced will suffer some quality degradation.</property>
- <property name="halign">start</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="setting_widget_changed_cb" swapped="no"/>
- </object>
- <packing>
- <property name="top_attach">2</property>
- <property name="left_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkRadioButton" id="PictureDeinterlaceDecomb">
- <property name="label" translatable="yes">Deinterlace</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Choose decomb or deinterlace filter options.
The decomb filter selectively deinterlaces frames that appear to be interlaced.
@@ -3158,115 +3097,127 @@ This will preserve quality in frames that are not interlaced.
The classic deinterlace filter is applied to all frames.
Frames that are not interlaced will suffer some quality degradation.</property>
- <property name="halign">start</property>
- <property name="draw_indicator">True</property>
- <property name="group">PictureDecombDeinterlace</property>
- <signal name="toggled" handler="setting_widget_changed_cb" swapped="no"/>
+ <signal name="changed" handler="deint_filter_changed_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">2</property>
+ <property name="top_attach">1</property>
<property name="left_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="PictureDecombLabel">
+ <object class="GtkLabel" id="PictureDeinterlacePresetLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
- <property name="label" translatable="yes">Decomb:</property>
+ <property name="label" translatable="yes">Deinterlace Preset:</property>
</object>
<packing>
- <property name="top_attach">3</property>
+ <property name="top_attach">2</property>
<property name="left_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkComboBox" id="PictureDecomb">
+ <object class="GtkComboBox" id="PictureDeinterlacePreset">
<property name="valign">GTK_ALIGN_CENTER</property>
<property name="width_request">100</property>
<property name="visible">True</property>
<property name="can_focus">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="tooltip_text" translatable="yes">The decomb filter selectively deinterlaces frames that appear to be interlaced.
-This will preserve quality in frames that are not interlaced.</property>
+ <property name="tooltip_text" translatable="yes"> The decomb filter selectively deinterlaces frames that appear to be interlaced.
+This will preserve quality in frames that are not interlaced.
+
+The classic deinterlace filter is applied to all frames.
+Frames that are not interlaced will suffer some quality degradation.</property>
<signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">3</property>
+ <property name="top_attach">2</property>
<property name="left_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkEntry" id="PictureDecombCustom">
+ <object class="GtkEntry" id="PictureDeinterlaceCustom">
<property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">Custom decomb filter string format
+ <property name="tooltip_text" translatable="yes">Custom denoise filter string format
-Mode:SpatialMetric:MotionThresh:SpatialThresh:BlockThresh:BlockWidth:
-BlockHeight:MagnitudeThres:VarianceThres:LaplacianThresh:DilationThresh:
-ErosionThresh:NoiseThresh:MaxSearchDistance:PostProcessing:Parity</property>
+SpatialLuma:SpatialChroma:TemporalLuma:TemporalChroma</property>
<property name="width_chars">8</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">4</property>
+ <property name="top_attach">3</property>
<property name="left_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="padding">2</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="table10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column_spacing">5</property>
<child>
- <object class="GtkLabel" id="PictureDeinterlaceLabel">
+ <object class="GtkLabel" id="label86">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
- <property name="label" translatable="yes">Deinterlace:</property>
+ <property name="label" translatable="yes">Detelecine:</property>
</object>
<packing>
- <property name="top_attach">5</property>
+ <property name="top_attach">0</property>
<property name="left_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkComboBox" id="PictureDeinterlace">
+ <object class="GtkComboBox" id="PictureDetelecine">
<property name="valign">GTK_ALIGN_CENTER</property>
<property name="width_request">100</property>
<property name="visible">True</property>
<property name="can_focus">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="tooltip_text" translatable="yes">The classic deinterlace filter is applied to all frames.
-Frames that are not interlaced will suffer some quality degradation.</property>
+ <property name="tooltip_text" translatable="yes">This filter removes 'combing' artifacts that are the result of telecining.
+
+Telecining is a process that adjusts film framerates that are 24fps to NTSC video frame rates which are 30fps.</property>
<signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">5</property>
+ <property name="top_attach">0</property>
<property name="left_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkEntry" id="PictureDeinterlaceCustom">
+ <object class="GtkEntry" id="PictureDetelecineCustom">
<property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">Custom deinterlace filter string format
+ <property name="tooltip_text" translatable="yes">Custom detelecine filter string format
-YadifMode:YadifParity:McdintMode:McdeintQp</property>
+JunkLeft:JunkRight:JunkTop:JunkBottom:StrictBreaks:MetricPlane:Parity</property>
<property name="width_chars">8</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">6</property>
+ <property name="top_attach">1</property>
<property name="left_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
@@ -3277,7 +3228,7 @@ YadifMode:YadifParity:McdintMode:McdeintQp</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">2</property>
- <property name="position">2</property>
+ <property name="position">3</property>
</packing>
</child>
</object>
diff --git a/gtk/src/hb-backend.c b/gtk/src/hb-backend.c
index 57135578b..beb9797e5 100644
--- a/gtk/src/hb-backend.c
+++ b/gtk/src/hb-backend.c
@@ -196,6 +196,18 @@ combo_opts_t vqual_granularity_opts =
d_vqual_granularity_opts
};
+static options_map_t d_deint_opts[] =
+{
+ {N_("Off"), "off", HB_FILTER_INVALID, ""},
+ {N_("Decomb"), "decomb", HB_FILTER_DECOMB, ""},
+ {N_("Deinterlace"), "deinterlace", HB_FILTER_DEINTERLACE, ""},
+};
+combo_opts_t deint_opts =
+{
+ sizeof(d_deint_opts)/sizeof(options_map_t),
+ d_deint_opts
+};
+
static options_map_t d_denoise_opts[] =
{
{N_("Off"), "off", HB_FILTER_INVALID, ""},
@@ -324,6 +336,12 @@ typedef struct
gboolean preset;
} filter_opts_t;
+static filter_opts_t deint_preset_opts =
+{
+ .filter_id = HB_FILTER_DECOMB,
+ .preset = TRUE
+};
+
static filter_opts_t nlmeans_preset_opts =
{
.filter_id = HB_FILTER_NLMEANS,
@@ -350,18 +368,6 @@ static filter_opts_t detel_opts =
.preset = TRUE
};
-static filter_opts_t decomb_opts =
-{
- .filter_id = HB_FILTER_DECOMB,
- .preset = TRUE
-};
-
-static filter_opts_t deint_opts =
-{
- .filter_id = HB_FILTER_DEINTERLACE,
- .preset = TRUE
-};
-
typedef void (*opts_set_f)(signal_user_data_t *ud, const gchar *name,
void *opts, const void* data);
typedef GhbValue* (*opt_get_f)(const gchar *name, const void *opts,
@@ -410,11 +416,14 @@ static void container_opts_set(signal_user_data_t *ud, const gchar *name,
void *opts, const void* data);
static void filter_opts_set(signal_user_data_t *ud, const gchar *name,
void *opts, const void* data);
+static void deint_opts_set(signal_user_data_t *ud, const gchar *name,
+ void *vopts, const void* data);
static GhbValue * generic_opt_get(const char *name, const void *opts,
const GhbValue *gval, GhbType type);
static GhbValue * filter_opt_get(const char *name, const void *opts,
const GhbValue *gval, GhbType type);
+
combo_name_map_t combo_name_map[] =
{
{
@@ -484,15 +493,15 @@ combo_name_map_t combo_name_map[] =
generic_opt_get
},
{
- "PictureDeinterlace",
+ "PictureDeinterlaceFilter",
&deint_opts,
- filter_opts_set,
- filter_opt_get
+ small_opts_set,
+ generic_opt_get
},
{
- "PictureDecomb",
- &decomb_opts,
- filter_opts_set,
+ "PictureDeinterlacePreset",
+ &deint_preset_opts,
+ deint_opts_set,
filter_opt_get
},
{
@@ -2740,6 +2749,18 @@ filter_opts_set(signal_user_data_t *ud, const gchar *name,
filter_opts_set2(ud, name, opts->filter_id, opts->preset);
}
+static void
+deint_opts_set(signal_user_data_t *ud, const gchar *name,
+ void *vopts, const void* data)
+{
+ (void)data; // Silence "unused variable" warning
+
+ filter_opts_t *opts = (filter_opts_t*)vopts;
+ opts->filter_id = ghb_settings_combo_int(ud->settings,
+ "PictureDeinterlaceFilter");
+ filter_opts_set2(ud, name, opts->filter_id, opts->preset);
+}
+
combo_name_map_t*
find_combo_map(const gchar *name)
{
@@ -2936,7 +2957,6 @@ ghb_update_ui_combo_box(
if (name != NULL)
{
- g_debug("ghb_update_ui_combo_box() %s\n", name);
// Clearing a combo box causes a rash of "changed" events, even when
// the active item is -1 (inactive). To control things, I'm disabling
// the event till things are settled down.
@@ -3931,16 +3951,16 @@ ghb_validate_filters(GhbValue *settings, GtkWindow *parent)
gchar *message;
// Deinterlace
- gboolean decomb_deint;
- const char *deint_preset;
- decomb_deint = ghb_dict_get_bool(settings, "PictureDecombDeinterlace");
- deint_preset = ghb_dict_get_string(settings, "PictureDeinterlace");
- if (!decomb_deint && strcasecmp(deint_preset, "off"))
+ int filter_id;
+ filter_id = ghb_settings_combo_int(settings, "PictureDeinterlaceFilter");
+ if (filter_id != HB_FILTER_INVALID)
{
- const char *deint_custom = NULL;
- int filter_id;
+ const char *deint_filter, *deint_preset, *deint_custom = NULL;
- filter_id = HB_FILTER_DEINTERLACE;
+ deint_filter = ghb_dict_get_string(settings,
+ "PictureDeinterlaceFilter");
+ deint_preset = ghb_dict_get_string(settings,
+ "PictureDeinterlacePreset");
if (!strcasecmp(deint_preset, "custom"))
{
deint_custom = ghb_dict_get_string(settings,
@@ -3952,48 +3972,17 @@ ghb_validate_filters(GhbValue *settings, GtkWindow *parent)
{
message = g_strdup_printf(
_("Invalid Deinterlace Settings:\n\n"
+ "Filter: %s\n"
"Preset: %s\n"
- "Custom: %s\n"), deint_preset, deint_custom);
+ "Custom: %s\n"), deint_filter, deint_preset,
+ deint_custom);
}
else
{
message = g_strdup_printf(
_("Invalid Deinterlace Settings:\n\n"
- "Preset: %s\n"), deint_preset);
- }
- ghb_message_dialog(parent, GTK_MESSAGE_ERROR,
- message, _("Cancel"), NULL);
- g_free(message);
- return FALSE;
- }
- }
-
- // Decomb
- deint_preset = ghb_dict_get_string(settings, "PictureDecomb");
- if (decomb_deint && strcasecmp(deint_preset, "off"))
- {
- const char *deint_custom = NULL;
- int filter_id;
-
- filter_id = HB_FILTER_DECOMB;
- if (!strcasecmp(deint_preset, "custom"))
- {
- deint_custom = ghb_dict_get_string(settings, "PictureDecombCustom");
- }
- if (hb_validate_filter_preset(filter_id, deint_preset, deint_custom))
- {
- if (deint_custom != NULL)
- {
- message = g_strdup_printf(
- _("Invalid Decomb Settings:\n\n"
- "Preset: %s\n"
- "Custom: %s\n"), deint_preset, deint_custom);
- }
- else
- {
- message = g_strdup_printf(
- _("Invalid Decomb Settings:\n\n"
- "Preset: %s\n"), deint_preset);
+ "Filter: %s\n"
+ "Preset: %s\n"), deint_filter, deint_preset);
}
ghb_message_dialog(parent, GTK_MESSAGE_ERROR,
message, _("Cancel"), NULL);
@@ -4039,31 +4028,13 @@ ghb_validate_filters(GhbValue *settings, GtkWindow *parent)
}
// Denoise
- const char *denoise_filter;
- denoise_filter = ghb_dict_get_string(settings, "PictureDenoiseFilter");
- if (strcasecmp(denoise_filter, "off"))
+ filter_id = ghb_settings_combo_int(settings, "PictureDenoiseFilter");
+ if (filter_id != HB_FILTER_INVALID)
{
- const char *denoise_preset;
+ const char *denoise_filter, *denoise_preset;
const char *denoise_tune = NULL, *denoise_custom = NULL;
- int filter_id;
- if (!strcasecmp(denoise_filter, "nlmeans"))
- {
- filter_id = HB_FILTER_NLMEANS;
- }
- else if (!strcasecmp(denoise_filter, "hqdn3d"))
- {
- filter_id = HB_FILTER_HQDN3D;
- }
- else
- {
- message = g_strdup_printf(
- _("Invalid Denoise Filter: %s\n"), denoise_filter);
- ghb_message_dialog(parent, GTK_MESSAGE_ERROR,
- message, _("Cancel"), NULL);
- g_free(message);
- return FALSE;
- }
+ denoise_filter = ghb_dict_get_string(settings, "PictureDenoiseFilter");
denoise_preset = ghb_dict_get_string(settings, "PictureDenoisePreset");
if (filter_id == HB_FILTER_NLMEANS)
{
@@ -4101,6 +4072,7 @@ ghb_validate_filters(GhbValue *settings, GtkWindow *parent)
return FALSE;
}
}
+
return TRUE;
}
@@ -4526,16 +4498,9 @@ ghb_get_preview_image(
if( title == NULL ) return NULL;
gboolean deinterlace;
- if (ghb_dict_get_bool(ud->settings, "PictureDecombDeinterlace"))
- {
- deinterlace = ghb_settings_combo_int(ud->settings, "PictureDecomb")
- == 0 ? 0 : 1;
- }
- else
- {
- deinterlace = ghb_settings_combo_int(ud->settings, "PictureDeinterlace")
- == 0 ? 0 : 1;
- }
+ deinterlace = ghb_settings_combo_int(ud->settings,
+ "PictureDeinterlaceFilter") != HB_FILTER_INVALID;
+
// Get the geometry settings for the preview. This will disable
// cropping if the setting to show the cropped region is enabled.
get_preview_geometry(ud, title, &srcGeo, &uiGeo);
diff --git a/gtk/src/makedeps.py b/gtk/src/makedeps.py
index 1a04a9f06..7159a87c0 100644
--- a/gtk/src/makedeps.py
+++ b/gtk/src/makedeps.py
@@ -28,13 +28,10 @@ dep_map = (
DepEntry("VideoFramerate", "VideoFrameratePFR", "auto", True, True),
DepEntry("VideoFramerate", "VideoFramerateVFR", "auto", False, True),
DepEntry("VideoTwoPass", "VideoTurboTwoPass", "1", False, False),
- DepEntry("PictureDecombDeinterlace", "PictureDeinterlace", "1", True, True),
- DepEntry("PictureDecombDeinterlace", "PictureDeinterlaceCustom", "1", True, True),
- DepEntry("PictureDecombDeinterlace", "PictureDeinterlaceLabel", "1", True, True),
- DepEntry("PictureDecombDeinterlace", "PictureDecomb", "0", True, True),
- DepEntry("PictureDecombDeinterlace", "PictureDecombCustom", "0", True, True),
- DepEntry("PictureDecombDeinterlace", "PictureDecombLabel", "0", True, True),
- DepEntry("PictureDeinterlace", "PictureDeinterlaceCustom", "custom", False, True),
+ DepEntry("PictureDeinterlaceFilter", "PictureDeinterlacePreset", "off", True, True),
+ DepEntry("PictureDeinterlaceFilter", "PictureDeinterlacePresetLabel", "off", True, True),
+ DepEntry("PictureDeinterlaceFilter", "PictureDeinterlaceCustom", "off", True, True),
+ DepEntry("PictureDeinterlacePreset", "PictureDeinterlaceCustom", "custom", False, True),
DepEntry("PictureDenoiseFilter", "PictureDenoisePreset", "off", True, True),
DepEntry("PictureDenoiseFilter", "PictureDenoisePresetLabel", "off", True, True),
DepEntry("PictureDenoiseFilter", "PictureDenoiseTune", "nlmeans", False, True),
@@ -43,7 +40,6 @@ dep_map = (
DepEntry("PictureDenoisePreset", "PictureDenoiseCustom", "custom", False, True),
DepEntry("PictureDenoisePreset", "PictureDenoiseTune", "custom", True, True),
DepEntry("PictureDenoisePreset", "PictureDenoiseTuneLabel", "custom", True, True),
- DepEntry("PictureDecomb", "PictureDecombCustom", "custom", False, True),
DepEntry("PictureDetelecine", "PictureDetelecineCustom", "custom", False, True),
DepEntry("PictureWidthEnable", "PictureWidth", "1", False, False),
DepEntry("PictureHeightEnable", "PictureHeight", "1", False, False),
diff --git a/gtk/src/presets.c b/gtk/src/presets.c
index b105c7221..33757b992 100644
--- a/gtk/src/presets.c
+++ b/gtk/src/presets.c
@@ -273,8 +273,6 @@ ghb_preset_to_settings(GhbValue *settings, GhbValue *preset)
ghb_dict_copy(settings, preset);
// Fix up all the internal settings that are derived from preset values.
- ghb_dict_set_bool(settings, "PictureDeinterlaceDecomb",
- !ghb_dict_get_bool(settings, "PictureDecombDeinterlace"));
int width, height;
width = ghb_dict_get_int(settings, "PictureWidth");
@@ -495,6 +493,8 @@ static const char *widget_priority_list[] =
"VideoEncoder",
"VideoQualityGranularity",
"AudioEncoder",
+ "PictureDeinterlaceFilter",
+ "PictureDeinterlacePreset",
NULL
};
diff --git a/gtk/src/queuehandler.c b/gtk/src/queuehandler.c
index 61ed78a16..d99784070 100644
--- a/gtk/src/queuehandler.c
+++ b/gtk/src/queuehandler.c
@@ -293,31 +293,21 @@ add_to_queue_list(signal_user_data_t *ud, GhbValue *settings, GtkTreeIter *piter
// Next line in the display (Filter settings)
// Filters: - Deinterlace
- gint deblock, denoise;
- gboolean decomb, deint, detel;
- const gchar *decomb_opt, *deint_opt;
- const gchar *decomb_preset, *deint_preset, *detel_preset;
- const gchar *denoise_preset, *denoise_tune;
- const gchar *detel_cust, *deint_cust, *decomb_cust, *denoise_cust;
- gchar *denoise_opt;
- gboolean decomb_deint;
- gboolean grayscale;
- gboolean filters;
-
- decomb_deint = ghb_dict_get_bool(settings, "PictureDecombDeinterlace");
- decomb_preset = ghb_dict_get_string(settings, "PictureDecomb");
- decomb = decomb_preset != NULL && !!strcasecmp(decomb_preset, "off") &&
- decomb_deint;
- decomb_opt = ghb_lookup_filter_name(HB_FILTER_DECOMB,
- ghb_dict_get_string(settings, "PictureDecomb"), 1);
- decomb_cust = ghb_dict_get_string(settings, "PictureDecombCustom");
-
- deint_preset = ghb_dict_get_string(settings, "PictureDeinterlace");
- deint = deint_preset != NULL && !!strcasecmp(deint_preset, "off") &&
- !decomb_deint;
- deint_opt = ghb_lookup_filter_name(HB_FILTER_DEINTERLACE,
- ghb_dict_get_string(settings, "PictureDeinterlace"), 1);
- deint_cust = ghb_dict_get_string(settings, "PictureDeinterlaceCustom");
+ gint deblock, denoise, deint;
+ const gchar *deint_preset, *detel_preset, *denoise_preset;
+ const gchar *denoise_tune;
+ const gchar *deint_cust, *detel_cust, *denoise_cust;
+ gchar *deint_opt, *denoise_opt;
+ gboolean grayscale, detel, filters;
+
+ deint = ghb_settings_combo_int(settings, "PictureDeinterlaceFilter");
+ deint_opt = ghb_settings_combo_option(settings, "PictureDeinterlaceFilter");
+ if (deint != HB_FILTER_INVALID)
+ {
+ deint_preset = ghb_lookup_filter_name(deint,
+ ghb_dict_get_string(settings, "PictureDeinterlacePreset"), 1);
+ deint_cust = ghb_dict_get_string(settings, "PictureDeinterlaceCustom");
+ }
detel_preset = ghb_dict_get_string(settings, "PictureDetelecine");
detel = detel_preset != NULL && !!strcasecmp(detel_preset, "off");
@@ -333,14 +323,15 @@ add_to_queue_list(signal_user_data_t *ud, GhbValue *settings, GtkTreeIter *piter
ghb_dict_get_string(settings, "PictureDenoisePreset"), 1);
denoise_tune = ghb_lookup_filter_name(denoise,
ghb_dict_get_string(settings, "PictureDenoiseTune"), 0);
-
denoise_cust = ghb_dict_get_string(settings, "PictureDenoiseCustom");
}
grayscale = ghb_dict_get_bool(settings, "VideoGrayScale");
- filters = detel || decomb || deint || grayscale ||
- denoise != HB_FILTER_INVALID || (deblock >= 5);
+ filters = detel || grayscale ||
+ deint != HB_FILTER_INVALID ||
+ denoise != HB_FILTER_INVALID ||
+ (deblock >= 5);
if (filters)
{
const char *prefix = " ";
@@ -354,35 +345,24 @@ add_to_queue_list(signal_user_data_t *ud, GhbValue *settings, GtkTreeIter *piter
}
prefix = " - ";
}
- if (decomb)
+ if (deint != HB_FILTER_INVALID)
{
- XPRINT(_("%sDecomb"), prefix);
- if (!strcasecmp(decomb_preset, "custom"))
- {
- XPRINT(": %s", decomb_cust);
- }
- else
- {
- XPRINT(": %s", decomb_opt);
- }
- prefix = " - ";
- }
- if (deint)
- {
- XPRINT(_("%sDeinterlace"), prefix);
- if (!strcasecmp(deint_preset, "custom"))
+ XPRINT(_("%s%s:"), prefix, deint_opt);
+ const char *preset;
+ preset = ghb_dict_get_string(settings, "PictureDeinterlacePreset");
+ if (!strcasecmp(preset, "custom"))
{
XPRINT(": %s", deint_cust);
}
else
{
- XPRINT(": %s", deint_opt);
+ XPRINT(" %s", deint_preset);
}
prefix = " - ";
}
if (denoise != HB_FILTER_INVALID)
{
- XPRINT(_("%sDenoise Filter %s:"), prefix, denoise_opt);
+ XPRINT(_("%sDenoise %s:"), prefix, denoise_opt);
const char *preset;
preset = ghb_dict_get_string(settings, "PictureDenoisePreset");
if (preset && !strcasecmp(preset, "custom"))
@@ -414,6 +394,7 @@ add_to_queue_list(signal_user_data_t *ud, GhbValue *settings, GtkTreeIter *piter
}
XPRINT("</small>\n");
}
+ free(deint_opt);
free(denoise_opt);
// Next line in the display (Video Encoder)