]> granicus.if.org Git - handbrake/commitdiff
LinGui: add Burn-In options to subtitle defaults
authorjstebbins <jstebbins.hb@gmail.com>
Sun, 15 Feb 2015 00:04:23 +0000 (00:04 +0000)
committerjstebbins <jstebbins.hb@gmail.com>
Sun, 15 Feb 2015 00:04:23 +0000 (00:04 +0000)
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@6903 b64f7644-9d1e-0410-96f1-a4d463321fa5

gtk/src/ghb-3.12.ui
gtk/src/ghb-3.14.ui
gtk/src/ghb.ui
gtk/src/hb-backend.c
gtk/src/internal_defaults.xml
gtk/src/subtitlehandler.c

index bd2b1e5ae770b995271639ba4fd8b8ca9d3b6b05..13bf790f3b58b8888e41033f6f23d38b0cd03454 100644 (file)
@@ -4668,6 +4668,10 @@ This permits DTS-HD passthru to be selected when automatic passthru selection is
                                           <object class="GtkListBox" id="subtitle_selected_lang">
                                             <property name="visible">True</property>
                                             <property name="can_focus">False</property>
+                                            <property name="tooltip_text" translatable="yes">Create a list of languages you would like to select subtitles for.
+
+The first language in this list is your "preferred" language and will be used
+for determining subtitle selection settings when there is foreign audio.</property>
                                           </object>
                                         </child>
                                       </object>
@@ -4812,12 +4816,127 @@ This search pass finds short sequences of foreign audio and provides subtitles f
                             <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="tooltip_text" translatable="yes">Closed captions are text subtitles that can be added to any container as a soft subtitle track (not burned)</property>
+                            <property name="tooltip_text" translatable="yes">Closed captions are text subtitles that can be added to any container as a soft subtitle track</property>
                             <property name="halign">start</property>
                             <property name="draw_indicator">True</property>
                             <signal name="toggled" handler="subtitle_def_widget_changed_cb" swapped="no"/>
                           </object>
                         </child>
+                        <child>
+                          <object class="GtkBox" id="subtitle_burn_box">
+                            <property name="orientation">horizontal</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="spacing">4</property>
+                            <child>
+                              <object class="GtkLabel" id="sub_burn_behavior_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="halign">end</property>
+                                <property name="label" translatable="yes">Burn-In Behavior:</property>
+                                <property name="justify">right</property>
+                              </object>
+                              <packing>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkComboBox" id="SubtitleBurnBehavior">
+                                <property name="visible">True</property>
+                                <property name="valign">GTK_ALIGN_CENTER</property>
+                                <property name="can_focus">False</property>
+                                <property name="tooltip_text" translatable="yes">Set the behavior of subtitle "Burn-In".
+
+Burned-In subtitles are part of the video and can not be disabled during playback.
+Only one subtitle track can be burned! Since conflicts can occur, the first chosen wins.</property>
+                                <signal name="changed" handler="subtitle_def_widget_changed_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="position">4</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkBox" id="subtitle_additional_burn_box">
+                            <property name="orientation">horizontal</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="spacing">4</property>
+                            <child>
+                              <object class="GtkLabel" id="sub_additional_burn_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="halign">end</property>
+                                <property name="label" translatable="yes">Burn-In for deficient players:</property>
+                                <property name="justify">right</property>
+                              </object>
+                              <packing>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkCheckButton" id="SubtitleBurnDVDSub">
+                                <property name="label" translatable="yes">DVD Subtitles</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="tooltip_text" translatable="yes">Burn the first selected DVD subtitle track. All other DVD subtitle tracks will be discarded.
+Use this option if your player software or device does not support DVD subtitles.
+
+Only one subtitle track can be burned! Since conflicts can occur, the first chosen wins.</property>
+                                <property name="halign">start</property>
+                                <property name="draw_indicator">True</property>
+                                <signal name="toggled" handler="subtitle_def_widget_changed_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkCheckButton" id="SubtitleBurnBDSub">
+                                <property name="label" translatable="yes">Blu-ray Subtitles</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="tooltip_text" translatable="yes">Burn the first selected Blu-ray subtitle track. All other Blu-ray subtitle tracks will be discarded.
+Use this option if your player software or device does not support Blu-ray subtitles.
+
+Only one subtitle track can be burned! Since conflicts can occur, the first chosen wins.</property>
+                                <property name="halign">start</property>
+                                <property name="draw_indicator">True</property>
+                                <signal name="toggled" handler="subtitle_def_widget_changed_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="position">5</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="sub_burn_warning_label">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="halign">start</property>
+                            <property name="label" translatable="yes">&lt;small&gt;* Only one of the above subtitle burn options will be applied, starting with the top.&lt;/small&gt;</property>
+                            <property name="tooltip_text" translatable="yes">Only one subtitle track can be burned! Since conflicts can occur, the first chosen wins.</property>
+                            <property name="use_markup">True</property>
+                            <property name="justify">left</property>
+                          </object>
+                          <packing>
+                            <property name="position">6</property>
+                          </packing>
+                        </child>
                       </object>
                       <packing>
                         <property name="position">5</property>
index 408230d54460e0e4e9eba5c698199471e76be854..084c22124e662b5297ba759df8fb2c2bd39d01e7 100644 (file)
@@ -4669,6 +4669,10 @@ This permits DTS-HD passthru to be selected when automatic passthru selection is
                                           <object class="GtkListBox" id="subtitle_selected_lang">
                                             <property name="visible">True</property>
                                             <property name="can_focus">False</property>
+                                            <property name="tooltip_text" translatable="yes">Create a list of languages you would like to select subtitles for.
+
+The first language in this list is your "preferred" language and will be used
+for determining subtitle selection settings when there is foreign audio.</property>
                                           </object>
                                         </child>
                                       </object>
@@ -4813,11 +4817,129 @@ This search pass finds short sequences of foreign audio and provides subtitles f
                             <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="tooltip_text" translatable="yes">Closed captions are text subtitles that can be added to any container as a soft subtitle track (not burned)</property>
+                            <property name="tooltip_text" translatable="yes">Closed captions are text subtitles that can be added to any container as a soft subtitle track</property>
                             <property name="halign">start</property>
                             <property name="draw_indicator">True</property>
                             <signal name="toggled" handler="subtitle_def_widget_changed_cb" swapped="no"/>
                           </object>
+                          <packing>
+                            <property name="position">3</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkBox" id="subtitle_burn_box">
+                            <property name="orientation">horizontal</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="spacing">4</property>
+                            <child>
+                              <object class="GtkLabel" id="sub_burn_behavior_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="halign">end</property>
+                                <property name="label" translatable="yes">Burn-In Behavior*:</property>
+                                <property name="justify">right</property>
+                              </object>
+                              <packing>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkComboBox" id="SubtitleBurnBehavior">
+                                <property name="visible">True</property>
+                                <property name="valign">GTK_ALIGN_CENTER</property>
+                                <property name="can_focus">False</property>
+                                <property name="tooltip_text" translatable="yes">Set the behavior of subtitle "Burn-In".
+
+Burned-In subtitles are part of the video and can not be disabled during playback.
+Only one subtitle track can be burned! Since conflicts can occur, the first chosen wins.</property>
+                                <signal name="changed" handler="subtitle_def_widget_changed_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="position">4</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkBox" id="subtitle_additional_burn_box">
+                            <property name="orientation">horizontal</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="spacing">4</property>
+                            <child>
+                              <object class="GtkLabel" id="sub_additional_burn_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="halign">end</property>
+                                <property name="label" translatable="yes">Burn-In for deficient players*:</property>
+                                <property name="justify">right</property>
+                              </object>
+                              <packing>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkCheckButton" id="SubtitleBurnDVDSub">
+                                <property name="label" translatable="yes">DVD Subtitles</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="tooltip_text" translatable="yes">Burn the first selected DVD subtitle track. All other DVD subtitle tracks will be discarded.
+Use this option if your player software or device does not support DVD subtitles.
+
+Only one subtitle track can be burned! Since conflicts can occur, the first chosen wins.</property>
+                                <property name="halign">start</property>
+                                <property name="draw_indicator">True</property>
+                                <signal name="toggled" handler="subtitle_def_widget_changed_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkCheckButton" id="SubtitleBurnBDSub">
+                                <property name="label" translatable="yes">Blu-ray Subtitles</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="tooltip_text" translatable="yes">Burn the first selected Blu-ray subtitle track. All other Blu-ray subtitle tracks will be discarded.
+Use this option if your player software or device does not support Blu-ray subtitles.
+
+Only one subtitle track can be burned! Since conflicts can occur, the first chosen wins.</property>
+                                <property name="halign">start</property>
+                                <property name="draw_indicator">True</property>
+                                <signal name="toggled" handler="subtitle_def_widget_changed_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="position">5</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="sub_burn_warning_label">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="halign">start</property>
+                            <property name="label" translatable="yes">&lt;small&gt;* Only one of the above subtitle burn options will be applied, starting with the top.&lt;/small&gt;</property>
+                            <property name="tooltip_text" translatable="yes">Only one subtitle track can be burned! Since conflicts can occur, the first chosen wins.</property>
+                            <property name="use_markup">True</property>
+                            <property name="justify">left</property>
+                          </object>
+                          <packing>
+                            <property name="position">6</property>
+                          </packing>
                         </child>
                       </object>
                       <packing>
index c91ccfc31b2914c00583bd42f79da1fcf97e3bb4..1a2abcc185b59e02bc8a09980d12e8764de4227c 100644 (file)
@@ -4668,6 +4668,10 @@ This permits DTS-HD passthru to be selected when automatic passthru selection is
                                           <object class="GtkListBox" id="subtitle_selected_lang">
                                             <property name="visible">True</property>
                                             <property name="can_focus">False</property>
+                                            <property name="tooltip_text" translatable="yes">Create a list of languages you would like to select subtitles for.
+
+The first language in this list is your "preferred" language and will be used
+for determining subtitle selection settings when there is foreign audio.</property>
                                           </object>
                                         </child>
                                       </object>
@@ -4812,12 +4816,127 @@ This search pass finds short sequences of foreign audio and provides subtitles f
                             <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="tooltip_text" translatable="yes">Closed captions are text subtitles that can be added to any container as a soft subtitle track (not burned)</property>
+                            <property name="tooltip_text" translatable="yes">Closed captions are text subtitles that can be added to any container as a soft subtitle track</property>
                             <property name="halign">start</property>
                             <property name="draw_indicator">True</property>
                             <signal name="toggled" handler="subtitle_def_widget_changed_cb" swapped="no"/>
                           </object>
                         </child>
+                        <child>
+                          <object class="GtkBox" id="subtitle_burn_box">
+                            <property name="orientation">horizontal</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="spacing">4</property>
+                            <child>
+                              <object class="GtkLabel" id="sub_burn_behavior_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="halign">end</property>
+                                <property name="label" translatable="yes">Burn-In Behavior:</property>
+                                <property name="justify">right</property>
+                              </object>
+                              <packing>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkComboBox" id="SubtitleBurnBehavior">
+                                <property name="visible">True</property>
+                                <property name="valign">GTK_ALIGN_CENTER</property>
+                                <property name="can_focus">False</property>
+                                <property name="tooltip_text" translatable="yes">Set the behavior of subtitle "Burn-In".
+
+Burned-In subtitles are part of the video and can not be disabled during playback.
+Only one subtitle track can be burned! Since conflicts can occur, the first chosen wins.</property>
+                                <signal name="changed" handler="subtitle_def_widget_changed_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="position">4</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkBox" id="subtitle_additional_burn_box">
+                            <property name="orientation">horizontal</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="spacing">4</property>
+                            <child>
+                              <object class="GtkLabel" id="sub_additional_burn_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="halign">end</property>
+                                <property name="label" translatable="yes">Burn-In for deficient players:</property>
+                                <property name="justify">right</property>
+                              </object>
+                              <packing>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkCheckButton" id="SubtitleBurnDVDSub">
+                                <property name="label" translatable="yes">DVD Subtitles</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="tooltip_text" translatable="yes">Burn the first selected DVD subtitle track. All other DVD subtitle tracks will be discarded.
+Use this option if your player software or device does not support DVD subtitles.
+
+Only one subtitle track can be burned! Since conflicts can occur, the first chosen wins.</property>
+                                <property name="halign">start</property>
+                                <property name="draw_indicator">True</property>
+                                <signal name="toggled" handler="subtitle_def_widget_changed_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkCheckButton" id="SubtitleBurnBDSub">
+                                <property name="label" translatable="yes">Blu-ray Subtitles</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="tooltip_text" translatable="yes">Burn the first selected Blu-ray subtitle track. All other Blu-ray subtitle tracks will be discarded.
+Use this option if your player software or device does not support Blu-ray subtitles.
+
+Only one subtitle track can be burned! Since conflicts can occur, the first chosen wins.</property>
+                                <property name="halign">start</property>
+                                <property name="draw_indicator">True</property>
+                                <signal name="toggled" handler="subtitle_def_widget_changed_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="position">5</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="sub_burn_warning_label">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="halign">start</property>
+                            <property name="label" translatable="yes">&lt;small&gt;* Only one of the above subtitle burn options will be applied, starting with the top.&lt;/small&gt;</property>
+                            <property name="tooltip_text" translatable="yes">Only one subtitle track can be burned! Since conflicts can occur, the first chosen wins.</property>
+                            <property name="use_markup">True</property>
+                            <property name="justify">left</property>
+                          </object>
+                          <packing>
+                            <property name="position">6</property>
+                          </packing>
+                        </child>
                       </object>
                       <packing>
                         <property name="position">5</property>
index 5489ad0f748084cfe78c427c55b0db0615f2c049..2216df59810b71c150fbf64c4b2b7149a5fd49ad 100644 (file)
@@ -65,6 +65,19 @@ combo_opts_t subtitle_track_sel_opts =
     d_subtitle_track_sel_opts
 };
 
+static options_map_t d_subtitle_burn_opts[] =
+{
+    {N_("None"),                                     "none",          0, "0"},
+    {N_("Foreign Audio Subtitle Track"),             "foreign",       1, "1"},
+    {N_("First Selected Track"),                     "first",         2, "2"},
+    {N_("Foreign Audio, then First Selected Track"), "foreign_first", 3, "3"},
+};
+combo_opts_t subtitle_burn_opts =
+{
+    sizeof(d_subtitle_burn_opts)/sizeof(options_map_t),
+    d_subtitle_burn_opts
+};
+
 static options_map_t d_audio_track_sel_opts[] =
 {
     {N_("None"),                                    "none",       0, "0"},
@@ -380,6 +393,7 @@ typedef struct
 combo_name_map_t combo_name_map[] =
 {
     {"SubtitleTrackSelectionBehavior", &subtitle_track_sel_opts},
+    {"SubtitleBurnBehavior", &subtitle_burn_opts},
     {"AudioTrackSelectionBehavior", &audio_track_sel_opts},
     {"PtoPType", &point_to_point_opts},
     {"WhenComplete", &when_complete_opts},
@@ -2569,6 +2583,7 @@ ghb_update_ui_combo_box(
         subtitle_track_opts_set(ud->builder, "SubtitleTrack", user_data);
         small_opts_set(ud->builder, "VideoQualityGranularity", &vqual_granularity_opts);
         small_opts_set(ud->builder, "SubtitleTrackSelectionBehavior", &subtitle_track_sel_opts);
+        small_opts_set(ud->builder, "SubtitleBurnBehavior", &subtitle_burn_opts);
         small_opts_set(ud->builder, "AudioTrackSelectionBehavior", &audio_track_sel_opts);
         small_opts_set(ud->builder, "PtoPType", &point_to_point_opts);
         small_opts_set(ud->builder, "WhenComplete", &when_complete_opts);
index 3a71a1c016f91c2416d2a6380385f475b30e31b9..a43f45841fe33325a1a031e927478de8d392d649 100644 (file)
         <false />
         <key>SubtitleAddForeignAudioSubtitle</key>
         <false />
+        <key>SubtitleBurnBehavior</key>
+        <string>none</string>
+        <key>SubtitleBurnDVDSub</key>
+        <false />
+        <key>SubtitleBurnBDSub</key>
+        <false />
         <key>VideoTurboTwoPass</key>
         <false />
         <key>UsesPictureFilters</key>
index 960fdb0ff1cfbbaf8d1b06d0cd66d2e995fede91..d584474f8972a5fcb895430036360aef9a609f47 100644 (file)
@@ -164,13 +164,34 @@ ghb_subtitle_exclusive_burn_settings(GValue *settings, gint index)
     gint ii, count;
 
     subtitle_list = ghb_settings_get_value(settings, "subtitle_list");
+    subsettings = ghb_array_get_nth(subtitle_list, index);
+    if (subsettings != NULL)
+    {
+        int track = ghb_settings_get_int(subsettings, "SubtitleTrack");
+        if (track == -1)
+        {
+            // Allow 2 tracks to be marked burned when one is
+            // foreign audio search.  Extra burned track will be
+            // sanitized away if foreign audio search actually finds
+            // something.
+            return;
+        }
+    }
     count = ghb_array_len(subtitle_list);
     for (ii = 0; ii < count; ii++)
     {
         if (ii != index)
         {
             subsettings = ghb_array_get_nth(subtitle_list, ii);
-            ghb_settings_set_boolean(subsettings, "SubtitleBurned", FALSE);
+            int track = ghb_settings_get_int(subsettings, "SubtitleTrack");
+            if (track != -1)
+            {
+                // Allow 2 tracks to be marked burned when one is
+                // foreign audio search.  Extra burned track will be
+                // sanitized away if foreign audio search actually finds
+                // something.
+                ghb_settings_set_boolean(subsettings, "SubtitleBurned", FALSE);
+            }
         }
     }
 }
@@ -349,6 +370,7 @@ static GValue*  subtitle_add_track(
     int mux,
     gboolean default_track,
     gboolean srt,
+    gboolean burn,
     gboolean *burned)
 {
     int source = 0;
@@ -363,7 +385,9 @@ static GValue*  subtitle_add_track(
         source = SRTSUB;
     }
 
-    if (*burned && !hb_subtitle_can_pass(source, mux))
+    burn |= !hb_subtitle_can_pass(source, mux);
+
+    if (*burned && burn)
     {
         // Can only burn one.  Skip others that must be burned.
         return NULL;
@@ -392,10 +416,17 @@ static GValue*  subtitle_add_track(
 
     subtitle_set_track_description(settings, subsettings);
 
-    if (!hb_subtitle_can_pass(source, mux))
+    if (burn)
     {
         ghb_settings_set_boolean(subsettings, "SubtitleBurned", TRUE);
-        *burned = TRUE;
+        if (track != -1)
+        {
+            // Allow 2 tracks to be marked burned when one is
+            // foreign audio search.  Extra burned track will be
+            // sanitized away if foreign audio search actually finds
+            // something.
+            *burned = TRUE;
+        }
     }
     else
     {
@@ -450,6 +481,7 @@ ghb_set_pref_subtitle_settings(signal_user_data_t *ud, const hb_title_t *title,
     gboolean *used;
     const gchar *audio_lang, *pref_lang = NULL;
     gboolean foreign_audio_search, foreign_audio_subs;
+    gboolean burn_foreign, burn_first, burn_dvd, burn_bd;
     gboolean one_burned = FALSE;
 
     const GValue *lang_list;
@@ -506,6 +538,13 @@ ghb_set_pref_subtitle_settings(signal_user_data_t *ud, const hb_title_t *title,
 
     used = g_malloc0(sub_count * sizeof(gboolean));
 
+    int burn_behavior;
+    burn_behavior = ghb_settings_combo_int(settings, "SubtitleBurnBehavior");
+    burn_foreign = burn_behavior == 1 || burn_behavior == 3;
+    burn_first   = burn_behavior == 2 || burn_behavior == 3;
+    burn_dvd = ghb_settings_get_boolean(settings, "SubtitleBurnDVDSub");
+    burn_bd = ghb_settings_get_boolean(settings, "SubtitleBurnBDSub");
+
     if (foreign_audio_subs &&
         (audio_lang == NULL || strncmp(audio_lang, pref_lang, 4)))
     {
@@ -515,9 +554,16 @@ ghb_set_pref_subtitle_settings(signal_user_data_t *ud, const hb_title_t *title,
         track = ghb_find_subtitle_track(title, pref_lang, 0);
         if (track > 0)
         {
+            gboolean burn;
+            hb_subtitle_t *subtitle;
+            subtitle = hb_list_item(title->list_subtitle, track);
+            burn = (subtitle->source == VOBSUB && burn_dvd) ||
+                   (subtitle->source == PGSSUB && burn_bd)  ||
+                    burn_foreign || burn_first;
             used[track] = TRUE;
             subtitle_add_track(ud, settings, title, track, mux->format,
-                               TRUE, FALSE, &one_burned);
+                               !burn, FALSE, burn, &one_burned);
+            burn_first &= !burn;
         }
     }
 
@@ -525,8 +571,10 @@ ghb_set_pref_subtitle_settings(signal_user_data_t *ud, const hb_title_t *title,
         (audio_lang != NULL && !strncmp(audio_lang, pref_lang, 4)))
     {
         // Add search for foreign audio segments
+        gboolean burn = burn_foreign || burn_first;
         subtitle_add_track(ud, settings, title, -1, mux->format,
-                           TRUE, FALSE, &one_burned);
+                           !burn, FALSE, burn, &one_burned);
+        burn_first &= !burn;
     }
 
     if (behavior != 0)
@@ -543,9 +591,16 @@ ghb_set_pref_subtitle_settings(signal_user_data_t *ud, const hb_title_t *title,
             {
                 if (!used[track])
                 {
+                    gboolean burn;
+                    hb_subtitle_t *subtitle;
+                    subtitle = hb_list_item(title->list_subtitle, track);
+                    burn = (subtitle->source == VOBSUB && burn_dvd) ||
+                           (subtitle->source == PGSSUB && burn_bd)  ||
+                            burn_first;
                     used[track] = TRUE;
                     subtitle_add_track(ud, settings, title, track, mux->format,
-                                       FALSE, FALSE, &one_burned);
+                                       FALSE, FALSE, burn, &one_burned);
+                    burn_first &= !burn;
                 }
                 next_track = track + 1;
                 if (behavior == 2)
@@ -573,7 +628,7 @@ ghb_set_pref_subtitle_settings(signal_user_data_t *ud, const hb_title_t *title,
         {
             used[track] = TRUE;
             subtitle_add_track(ud, settings, title, track, mux->format,
-                               FALSE, FALSE, &one_burned);
+                               FALSE, FALSE, burn_first, &one_burned);
         }
     }
     g_free(used);
@@ -1136,12 +1191,12 @@ subtitle_add_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
          subsettings == NULL && track < count; track++)
     {
         subsettings = subtitle_add_track(ud, ud->settings, title, track,
-                                mux->format, FALSE, FALSE, &one_burned);
+                                mux->format, FALSE, FALSE, FALSE, &one_burned);
     }
     if (subsettings == NULL)
     {
         subsettings = subtitle_add_track(ud, ud->settings, title, 0,
-                                mux->format, FALSE, TRUE, &one_burned);
+                                mux->format, FALSE, TRUE, FALSE, &one_burned);
     }
     ghb_add_subtitle_to_ui(ud, subsettings);
 
@@ -1198,7 +1253,7 @@ subtitle_add_all_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
     for (track = 0; track < count; track++)
     {
         subtitle_add_track(ud, ud->settings, title, track, mux->format,
-                           FALSE, FALSE, &one_burned);
+                           FALSE, FALSE, FALSE, &one_burned);
     }
     subtitle_refresh_list_ui(ud);
     ghb_live_reset(ud);