]> granicus.if.org Git - handbrake/commitdiff
LinGui: rework how hb titles are referenced from lingui
authorjstebbins <jstebbins.hb@gmail.com>
Sun, 23 Feb 2014 17:22:05 +0000 (17:22 +0000)
committerjstebbins <jstebbins.hb@gmail.com>
Sun, 23 Feb 2014 17:22:05 +0000 (17:22 +0000)
Provides a less cryptic interface to identifying and looking up hb
titles.

git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@6064 b64f7644-9d1e-0410-96f1-a4d463321fa5

13 files changed:
gtk/src/Makefile.am
gtk/src/audiohandler.c
gtk/src/audiohandler.h
gtk/src/callbacks.c
gtk/src/create_resources.py
gtk/src/hb-backend.c
gtk/src/hb-backend.h
gtk/src/makedeps.py
gtk/src/presets.c
gtk/src/preview.c
gtk/src/queuehandler.c
gtk/src/subtitlehandler.c
gtk/src/subtitlehandler.h

index 10ce7377a4f9f19f02164e76fcd2c6a5bb40393b..c9bf53f9ed033d77a098922f20546a92723855b0 100644 (file)
@@ -55,7 +55,7 @@ AM_CPPFLAGS = \
 
 AM_CFLAGS = -Wall -g
 
-bin_PROGRAMS = ghb 
+bin_PROGRAMS = ghb
 
 # Dummy file, not built.  Forces g++ linking
 nodist_EXTRA_ghb_SOURCES = dummy.cpp
@@ -129,13 +129,13 @@ resources.plist: create_resources resources.list $(icons_dep) internal_defaults.
 CREATE_RES.c = \
        create_resources.c \
        plist.c \
-       values.c 
+       values.c
 
 CREATE_RES.c.o = $(patsubst %.c,%-native.o,$(CREATE_RES.c))
 
 create_resources: $(CREATE_RES.c.o)
        $(CC_FOR_BUILD) -o $@ $^ $(GHB_TOOLS_LIBS)
+
 $(CREATE_RES.c.o): %-native.o: %.c
        $(CC_FOR_BUILD) $(GHB_TOOLS_CFLAGS) -c -o $@ $<
 
index ec889a013966c9dd39bdab7fd203eedf4002fbff..49fb770d3ac3e4864379086116d3830f7c1959f2 100644 (file)
@@ -56,13 +56,18 @@ static void audio_deps(signal_user_data_t *ud, GValue *asettings, GtkWidget *wid
 
     gint track = -1, encoder = 0;
     hb_audio_config_t *aconfig = NULL;
-    gint titleindex = ghb_settings_combo_int(ud->settings, "title");
+    int title_id;
+    gint titleindex;
+    const hb_title_t *title;
+
+    title_id = ghb_settings_get_int(ud->settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
 
     if (asettings != NULL)
     {
         track = ghb_settings_get_int(asettings, "AudioTrack");
         encoder = ghb_settings_combo_int(asettings, "AudioEncoder");
-        aconfig = ghb_get_scan_audio_info(titleindex, track);
+        aconfig = ghb_get_audio_info(title, track);
     }
 
     gboolean is_passthru = (encoder & HB_ACODEC_PASS_FLAG);
@@ -196,7 +201,9 @@ int ghb_select_fallback(GValue *settings, int acodec)
 void
 audio_sanitize_settings(GValue *settings, GValue *asettings)
 {
+    int title_id;
     gint titleindex, track, acodec, select_acodec, mix;
+    const hb_title_t *title;
     hb_audio_config_t *aconfig;
     gint mux;
     gint bitrate;
@@ -204,14 +211,15 @@ audio_sanitize_settings(GValue *settings, GValue *asettings)
 
     g_debug("ghb_santiize_audio ()");
     mux = ghb_settings_combo_int(settings, "FileFormat");
-    titleindex = ghb_settings_get_int(settings, "title_no");
+    title_id = ghb_settings_get_int(settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
     track = ghb_settings_get_int(asettings, "AudioTrack");
     acodec = ghb_settings_combo_int(asettings, "AudioEncoder");
     mix = ghb_settings_combo_int(asettings, "AudioMixdown");
     bitrate = ghb_settings_combo_int(asettings, "AudioBitrate");
     sr = ghb_settings_combo_int(asettings, "AudioSamplerate");
 
-    aconfig = ghb_get_scan_audio_info(titleindex, track);
+    aconfig = ghb_get_audio_info(title, track);
     if (sr == 0)
     {
         sr = aconfig ? aconfig->in.samplerate : 48000;
@@ -263,7 +271,9 @@ audio_sanitize_settings(GValue *settings, GValue *asettings)
 void
 ghb_adjust_audio_rate_combos(signal_user_data_t *ud)
 {
-    gint titleindex, track, acodec, select_acodec, mix;
+    int title_id, titleindex;
+    const hb_title_t *title;
+    gint track, acodec, select_acodec, mix;
     hb_audio_config_t *aconfig;
     GtkWidget *widget;
     GValue *gval;
@@ -273,7 +283,8 @@ ghb_adjust_audio_rate_combos(signal_user_data_t *ud)
 
     g_debug("ghb_adjust_audio_rate_combos ()");
     mux = ghb_settings_combo_int(ud->settings, "FileFormat");
-    titleindex = ghb_settings_combo_int(ud->settings, "title");
+    title_id = ghb_settings_get_int(ud->settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
 
     widget = GHB_WIDGET(ud->builder, "AudioTrack");
     gval = ghb_widget_value(widget);
@@ -300,7 +311,7 @@ ghb_adjust_audio_rate_combos(signal_user_data_t *ud)
     sr = ghb_lookup_combo_int("AudioSamplerate", gval);
     ghb_value_free(gval);
 
-    aconfig = ghb_get_scan_audio_info(titleindex, track);
+    aconfig = ghb_get_audio_info(title, track);
     if (sr == 0)
     {
         sr = aconfig ? aconfig->in.samplerate : 48000;
@@ -397,7 +408,7 @@ free_audio_hash_key_value(gpointer data)
 }
 
 const gchar*
-ghb_get_user_audio_lang(GValue *settings, hb_title_t *title, gint track)
+ghb_get_user_audio_lang(GValue *settings, const hb_title_t *title, gint track)
 {
     GValue *audio_list, *asettings;
     const gchar *lang;
@@ -432,7 +443,7 @@ get_track_used(gint settings, GHashTable *track_indices, gint count)
 static GValue*
 audio_add_track(
     GValue *settings,
-    hb_title_t *title,
+    const hb_title_t *title,
     int track,
     int encoder,
     gboolean enable_quality,
@@ -446,11 +457,7 @@ audio_add_track(
     GValue *asettings;
     hb_audio_config_t *aconfig = NULL;
 
-    if (title != NULL)
-    {
-        aconfig = hb_list_audio_config_item(title->list_audio, track);
-    }
-
+    aconfig = ghb_get_audio_info(title, track);
     asettings = ghb_dict_value_new();
 
     ghb_settings_set_int(asettings, "AudioTrack", track);
@@ -487,7 +494,7 @@ audio_add_track(
 
 static GValue*
 audio_select_and_add_track(
-    hb_title_t *title,
+    const hb_title_t *title,
     GValue *settings,
     GValue *pref_audio,
     const char *lang,
@@ -538,7 +545,7 @@ audio_select_and_add_track(
 }
 
 static void set_pref_audio_with_lang(
-    hb_title_t *title,
+    const hb_title_t *title,
     GValue *settings,
     const char *lang,
     int behavior,
@@ -626,10 +633,11 @@ void ghb_audio_title_change(signal_user_data_t *ud, gboolean title_valid)
 }
 
 void
-ghb_set_pref_audio_settings(gint titleindex, GValue *settings)
+ghb_set_pref_audio_settings(GValue *settings)
 {
     GHashTable *track_used;
-    hb_title_t *title;
+    int title_id, titleindex;
+    const hb_title_t *title;
 
     const GValue *lang_list;
     gint behavior;
@@ -641,7 +649,8 @@ ghb_set_pref_audio_settings(gint titleindex, GValue *settings)
     // Clear the audio list
     ghb_clear_audio_list_settings(settings);
 
-    title = ghb_get_title_info(titleindex);
+    title_id = ghb_settings_get_int(settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
     if (behavior == 0 || title == NULL)
     {
         // None or no source title
@@ -736,10 +745,13 @@ audio_refresh_list_row_ui(
     gdouble drc, gain;
     hb_audio_config_t *aconfig;
     int titleindex, track, sr, codec;
+    int title_id;
+    const hb_title_t *title;
 
-    titleindex = ghb_settings_combo_int(ud->settings, "title");
+    title_id = ghb_settings_get_int(ud->settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
     track = ghb_settings_get_int(settings, "AudioTrack");
-    aconfig = ghb_get_scan_audio_info(titleindex, track);
+    aconfig = ghb_get_audio_info(title, track);
     if (aconfig == NULL)
     {
         return;
@@ -954,10 +966,15 @@ audio_codec_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
     {
         // Transition from passthru to not, put some audio settings back to
         // pref settings
+        int title_id;
+        const hb_title_t *title;
         gint titleindex;
         gint track;
         gint br, sr, mix_code;
 
+        title_id = ghb_settings_get_int(ud->settings, "title");
+        title = ghb_lookup_title(title_id, &titleindex);
+
         if (asettings != NULL)
         {
             br = ghb_settings_get_int(asettings, "AudioBitrate");
@@ -971,7 +988,6 @@ audio_codec_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
             mix_code = 0;
         }
 
-        titleindex = ghb_settings_combo_int(ud->settings, "title");
         track = ghb_settings_get_int(ud->settings, "AudioTrack");
         if (sr)
         {
@@ -980,7 +996,7 @@ audio_codec_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
         ghb_ui_update(ud, "AudioSamplerate", ghb_int64_value(sr));
 
         hb_audio_config_t *aconfig;
-        aconfig = ghb_get_scan_audio_info(titleindex, track);
+        aconfig = ghb_get_audio_info(title, track);
         if (sr == 0)
         {
             sr = aconfig ? aconfig->in.samplerate : 48000;
@@ -1332,8 +1348,13 @@ static void
 audio_add_to_settings(GValue *settings, GValue *asettings)
 {
     GValue *audio_list;
-    const gchar * track;
+    int title_id;
+    const hb_title_t *title;
+    gint titleindex;
+    hb_audio_config_t *aconfig;
 
+    title_id = ghb_settings_get_int(settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
     audio_list = ghb_settings_get_value(settings, "audio_list");
     if (audio_list == NULL)
     {
@@ -1341,10 +1362,13 @@ audio_add_to_settings(GValue *settings, GValue *asettings)
         ghb_settings_set_value(settings, "audio_list", audio_list);
     }
 
-    int title_no = ghb_settings_get_int(settings, "title_no");
-    int track_no = ghb_settings_get_int(asettings, "AudioTrack");
-    track = ghb_audio_track_description(track_no, title_no);
-    ghb_settings_set_string(asettings, "AudioTrackDescription", track);
+    int track = ghb_settings_get_int(asettings, "AudioTrack");
+    aconfig = ghb_get_audio_info(title, track);
+    if (aconfig != NULL)
+    {
+        ghb_settings_set_string(asettings, "AudioTrackDescription",
+                                aconfig->lang.description);
+    }
 
     GValue *aname;
     aname = ghb_dict_lookup(asettings, "AudioTrackName");
@@ -1360,15 +1384,16 @@ audio_add_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
 {
     // Add the current audio settings to the list.
     GValue *asettings, *backup;
+    int title_id, titleindex;
+    const hb_title_t *title;
+
+    title_id = ghb_settings_get_int(ud->settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
 
     // Back up settings in case we need to revert.
     backup = ghb_value_dup(
                 ghb_settings_get_value(ud->settings, "audio_list"));
-
-    int titleindex = ghb_settings_combo_int(ud->settings, "title");
-    hb_title_t *title = ghb_get_title_info(titleindex);
     GValue *pref_audio = ghb_settings_get_value(ud->settings, "AudioList");
-
     asettings = audio_select_and_add_track(title, ud->settings, pref_audio,
                                            "und", 0, 0);
     ghb_add_audio_to_ui(ud, asettings);
@@ -1400,13 +1425,15 @@ audio_add_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
 G_MODULE_EXPORT void
 audio_add_all_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
 {
-    // Add the current audio settings to the list.
+    int title_id, titleindex;
+    const hb_title_t *title;
 
+    // Add the current audio settings to the list.
     ghb_clear_audio_list_settings(ud->settings);
     ghb_clear_audio_list_ui(ud->builder);
 
-    int titleindex = ghb_settings_combo_int(ud->settings, "title");
-    hb_title_t *title = ghb_get_title_info(titleindex);
+    title_id = ghb_settings_get_int(ud->settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
     GValue *pref_audio = ghb_settings_get_value(ud->settings, "AudioList");
 
     int pref_count = ghb_array_len(pref_audio);
@@ -1541,8 +1568,7 @@ audio_remove_clicked_cb(GtkWidget *widget, gchar *path, signal_user_data_t *ud)
 G_MODULE_EXPORT void
 audio_reset_clicked_cb(GtkWidget *widget, signal_user_data_t *ud)
 {
-    int titleindex = ghb_settings_combo_int(ud->settings, "title");
-    ghb_set_pref_audio_settings(titleindex, ud->settings);
+    ghb_set_pref_audio_settings(ud->settings);
     audio_refresh_list_ui(ud);
 }
 
index 8af2e2497c40656a544adcf7e5eee954c21e134a..51f1840a629b4a130b67192ef6503cc4ed7ae572 100644 (file)
@@ -28,8 +28,8 @@
 #include "settings.h"
 
 void ghb_adjust_audio_rate_combos(signal_user_data_t *ud);
-void ghb_set_pref_audio_settings(gint titleindex, GValue *settings);
-const gchar* ghb_get_user_audio_lang(GValue *settings, hb_title_t *title, gint track);
+void ghb_set_pref_audio_settings(GValue *settings);
+const gchar* ghb_get_user_audio_lang(GValue *settings, const hb_title_t *title, gint track);
 void ghb_audio_list_refresh_selected(signal_user_data_t *ud);
 gint ghb_select_audio_codec(gint mux, hb_audio_config_t *aconfig, gint acodec, gint fallback_acodec, gint copy_mask);
 int ghb_select_fallback( GValue *settings, int acodec );
index e288db2d810688e7e782ac027f3f57c9d93f23af..061e10bbce3b0f89411216600f4a9efffe246419 100644 (file)
@@ -870,19 +870,21 @@ static void break_duration(gint64 duration, gint *hh, gint *mm, gint *ss)
 static void
 update_title_duration(signal_user_data_t *ud)
 {
-    gint ti;
     gint hh, mm, ss, start, end;
     gchar *text;
     GtkWidget *widget;
+    int title_id, titleindex;
+    const hb_title_t *title;
 
-    ti = ghb_settings_combo_int(ud->settings, "title");
+    title_id = ghb_settings_get_int(ud->settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
     widget = GHB_WIDGET (ud->builder, "title_duration");
 
     if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0)
     {
         start = ghb_settings_get_int(ud->settings, "start_point");
         end = ghb_settings_get_int(ud->settings, "end_point");
-        ghb_part_duration(ti, start, end, &hh, &mm, &ss);
+        ghb_part_duration(title, start, end, &hh, &mm, &ss);
     }
     else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 1)
     {
@@ -895,7 +897,6 @@ update_title_duration(signal_user_data_t *ud)
     }
     else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 2)
     {
-        hb_title_t * title = ghb_get_title_info (ti);
         if (title != NULL)
         {
             gint64 frames;
@@ -985,13 +986,16 @@ scale_configure(
 void
 ghb_set_widget_ranges(signal_user_data_t *ud, GValue *settings)
 {
-    int titleindex = ghb_settings_combo_int(settings, "title");
-    hb_title_t * title = ghb_get_title_info(titleindex);
+    int title_id, titleindex;
+    const hb_title_t * title;
     double val;
 
+    title_id = ghb_settings_get_int(settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
+
     // Reconfigure the UI combo boxes
-    ghb_update_ui_combo_box(ud, "AudioTrack", titleindex, FALSE);
-    ghb_update_ui_combo_box(ud, "SubtitleTrack", titleindex, FALSE);
+    ghb_update_ui_combo_box(ud, "AudioTrack", title, FALSE);
+    ghb_update_ui_combo_box(ud, "SubtitleTrack", title, FALSE);
 
     if (title != NULL)
     {
@@ -1155,7 +1159,7 @@ static void
 start_scan(
     signal_user_data_t *ud,
     const gchar *path,
-    gint titlenum,
+    gint title_id,
     gint preview_count)
 {
     GtkWidget *widget;
@@ -1174,7 +1178,7 @@ start_scan(
     gtk_widget_set_sensitive(widget, FALSE);
     widget = GHB_WIDGET(ud->builder, "source_title_open");
     gtk_widget_set_sensitive(widget, FALSE);
-    ghb_backend_scan(path, titlenum, preview_count,
+    ghb_backend_scan(path, title_id, preview_count,
             90000L * ghb_settings_get_int64(ud->prefs, "MinTitleDuration"));
 }
 
@@ -1195,24 +1199,31 @@ void
 ghb_do_scan(
     signal_user_data_t *ud,
     const gchar *filename,
-    gint titlenum,
+    gint title_id,
     gboolean force)
 {
+    int titleindex;
+    const hb_title_t *title;
+
+    (void)title; // Silence "unused variable" warning
+
     g_debug("ghb_do_scan()");
     if (!force && last_scan_file != NULL &&
         strcmp(last_scan_file, filename) == 0)
     {
         if (ghb_queue_edit_settings != NULL)
         {
-            int titleindex = ghb_settings_get_int(ghb_queue_edit_settings, "title_no");
-            ghb_array_replace(ud->settings_array, titleindex, ghb_queue_edit_settings);
+            title_id = ghb_settings_get_int(ghb_queue_edit_settings, "title");
+            title = ghb_lookup_title(title_id, &titleindex);
+            ghb_array_replace(ud->settings_array, titleindex,
+                              ghb_queue_edit_settings);
             ud->settings = ghb_queue_edit_settings;
             ghb_load_settings(ud);
             ghb_queue_edit_settings = NULL;
         }
         else
         {
-            int titleindex = ghb_settings_get_int(ud->settings, "title_no");
+            title = ghb_lookup_title(title_id, &titleindex);
             load_all_titles(ud, titleindex);
         }
         return;
@@ -1234,7 +1245,7 @@ ghb_do_scan(
             prune_logs(ud);
 
             preview_count = ghb_settings_get_int(ud->prefs, "preview_count");
-            start_scan(ud, path, titlenum, preview_count);
+            start_scan(ud, path, title_id, preview_count);
             g_free(path);
         }
         else
@@ -1286,13 +1297,13 @@ do_source_dialog(GtkButton *button, gboolean single, signal_user_data_t *ud)
         filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
         if (filename != NULL)
         {
-            gint titlenum;
+            gint title_id;
 
             if (single)
-                titlenum = ghb_settings_get_int(ud->settings, "single_title");
+                title_id = ghb_settings_get_int(ud->settings, "single_title");
             else
-                titlenum = 0;
-            ghb_do_scan(ud, filename, titlenum, TRUE);
+                title_id = 0;
+            ghb_do_scan(ud, filename, title_id, TRUE);
             if (strcmp(sourcename, filename) != 0)
             {
                 ghb_settings_set_string(ud->prefs, "default_source", filename);
@@ -1632,11 +1643,11 @@ update_crop_info(signal_user_data_t *ud)
     GtkWidget *widget;
     gchar *text;
     gint width, height, crop[4] = {0,};
-    gint titleindex;
-    hb_title_t *title;
+    gint title_id, titleindex;
+    const hb_title_t *title;
 
-    titleindex = ghb_settings_combo_int(ud->settings, "title");
-    title = ghb_get_title_info(titleindex);
+    title_id = ghb_settings_get_int(ud->settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
     if (title != NULL)
     {
         crop[0] = ghb_settings_get_int(ud->settings, "PictureTopCrop");
@@ -1678,8 +1689,11 @@ ghb_update_title_info(signal_user_data_t *ud)
     GtkWidget *widget;
     gchar *text;
 
-    int titleindex = ghb_settings_get_int(ud->settings, "title_no");
-    hb_title_t * title = ghb_get_title_info(titleindex);
+    int title_id, titleindex;
+    const hb_title_t * title;
+
+    title_id = ghb_settings_get_int(ud->settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
     if (title == NULL)
         return;
 
@@ -1721,12 +1735,14 @@ ghb_update_title_info(signal_user_data_t *ud)
 }
 
 void
-set_title_settings(signal_user_data_t *ud, GValue *settings, gint titleindex)
+set_title_settings(signal_user_data_t *ud, GValue *settings)
 {
-    ghb_settings_set_int(settings, "title", titleindex);
-    ghb_settings_set_int(settings, "title_no", titleindex);
+    int title_id, titleindex;
+    const hb_title_t * title;
+
+    title_id = ghb_settings_get_int(settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
 
-    hb_title_t * title = ghb_get_title_info(titleindex);
     if (title != NULL)
     {
         gint num_chapters = hb_list_count(title->list_chapter);
@@ -1804,7 +1820,7 @@ set_title_settings(signal_user_data_t *ud, GValue *settings, gint titleindex)
         ghb_set_pref_subtitle_settings(ud, title, settings);
     }
     update_chapter_list_settings(settings);
-    ghb_set_pref_audio_settings(titleindex, settings);
+    ghb_set_pref_audio_settings(settings);
 
     set_destination_settings(ud, settings);
     ghb_settings_set_value(settings, "dest_dir",
@@ -1825,8 +1841,7 @@ set_title_settings(signal_user_data_t *ud, GValue *settings, gint titleindex)
 void
 ghb_set_current_title_settings(signal_user_data_t *ud)
 {
-    int titleindex = ghb_settings_get_int(ud->settings, "title_no");
-    set_title_settings(ud, ud->settings, titleindex);
+    set_title_settings(ud, ud->settings);
 }
 
 static void
@@ -1835,6 +1850,7 @@ load_all_titles(signal_user_data_t *ud, int titleindex)
     gint ii, count;
     GValue *preset, *preset_path;
     GValue *settings_array;
+    const hb_title_t *title;
 
     hb_list_t *list = ghb_get_title_list();
     count = hb_list_count(list);
@@ -1848,12 +1864,17 @@ load_all_titles(signal_user_data_t *ud, int titleindex)
     preset_path = ghb_get_current_preset_path(ud);
     for (ii = 0; ii < count; ii++)
     {
+        int index;
         GValue *settings = ghb_settings_new();
 
+        title = hb_list_item(list, ii);
+        index = (title != NULL) ? title->index : -1;
+
         ghb_settings_init(settings, "Initialization");
         ghb_preset_to_settings(settings, preset);
         ghb_settings_set_value(settings, "preset", preset_path);
-        set_title_settings(ud, settings, ii);
+        ghb_settings_set_int(settings, "title", index);
+        set_title_settings(ud, settings);
         ghb_array_append(settings_array, settings);
     }
     ghb_value_free(preset_path);
@@ -1871,21 +1892,18 @@ static gboolean update_preview = FALSE;
 G_MODULE_EXPORT void
 title_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
 {
-    gint titleindex, count;
-    GValue *wval;
+    gint title_id, titleindex, count;
+    const hb_title_t * title;
 
     g_debug("title_changed_cb ()");
-
-    wval = ghb_widget_value(widget);
-    titleindex = ghb_lookup_combo_int("title", wval);
-    ghb_value_free(wval);
+    title_id = ghb_widget_int(widget);
+    title = ghb_lookup_title(title_id, &titleindex);
 
     count = ghb_array_len(ud->settings_array);
     int idx = (titleindex >= 0 && titleindex < count) ? titleindex : 0;
     ud->settings = ghb_array_get_nth(ud->settings_array, idx);
     ghb_load_settings(ud);
 
-    hb_title_t * title = ghb_get_title_info(titleindex);
     ghb_audio_title_change(ud, title != NULL);
     ghb_subtitle_title_change(ud, title != NULL);
     ghb_grey_combo_options(ud);
@@ -1900,15 +1918,15 @@ title_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
 G_MODULE_EXPORT void
 ptop_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
 {
-    gint ti;
-    hb_title_t * title;
+    gint title_id, titleindex;
+    const hb_title_t * title;
 
     ghb_widget_to_setting(ud->settings, widget);
     ghb_check_dependency(ud, widget, NULL);
     ghb_live_reset(ud);
 
-    ti = ghb_settings_combo_int(ud->settings, "title");
-    title = ghb_get_title_info(ti);
+    title_id = ghb_settings_get_int(ud->settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
     if (title == NULL)
         return;
 
@@ -2571,7 +2589,7 @@ static void
 queue_scan(signal_user_data_t *ud, GValue *js)
 {
     gchar *path;
-    gint titlenum;
+    gint title_id;
     time_t  _now;
     struct tm *now;
     gchar *log_path, *pos, *destname, *basename, *dest_dir;
@@ -2617,8 +2635,8 @@ queue_scan(signal_user_data_t *ud, GValue *js)
     g_free(log_path);
 
     path = ghb_settings_get_string( js, "source");
-    titlenum = ghb_settings_get_int(js, "titlenum");
-    ghb_backend_queue_scan(path, titlenum);
+    title_id = ghb_settings_get_int(js, "title");
+    ghb_backend_queue_scan(path, title_id);
     g_free(path);
 }
 
@@ -2886,7 +2904,6 @@ ghb_backend_events(signal_user_data_t *ud)
     gchar *status_str;
     GtkProgressBar *progress;
     GtkLabel       *work_status;
-    gint titleindex;
     GValue *js;
     gint index;
     GtkTreeView *treeview;
@@ -2976,21 +2993,23 @@ ghb_backend_events(signal_user_data_t *ud)
         gtk_progress_bar_set_fraction (scan_prog, 1.0);
         gtk_widget_hide(GTK_WIDGET(scan_prog));
 
-        ghb_update_ui_combo_box(ud, "title", 0, FALSE);
-
-        titleindex = ghb_longest_title();
+        int title_id, titleindex;
+        const hb_title_t *title;
+        title_id = ghb_longest_title();
+        title = ghb_lookup_title(title_id, &titleindex);
+        ghb_update_ui_combo_box(ud, "title", NULL, FALSE);
         load_all_titles(ud, titleindex);
 
         label = GTK_LABEL(GHB_WIDGET (ud->builder, "volume_label"));
+
         // Are there really any titles.
-        hb_title_t * title = ghb_get_title_info(titleindex);
         if (title == NULL)
         {
             gtk_label_set_text(label, _("No Title Found"));
         }
         ghb_clear_scan_state(GHB_STATE_SCANDONE);
 
-        ghb_ui_update(ud, "title", ghb_int64_value(titleindex));
+        ghb_ui_update(ud, "title", ghb_int64_value(title->index));
 
         if (ghb_queue_edit_settings != NULL)
         {
@@ -2999,7 +3018,8 @@ ghb_backend_events(signal_user_data_t *ud)
                 ghb_settings_get_value(ghb_queue_edit_settings, "title"));
 
             // The above should cause the current title index to update
-            int titleindex = ghb_settings_get_int(ud->settings, "title_no");
+            title_id = ghb_settings_get_int(ud->settings, "title");
+            title = ghb_lookup_title(title_id, &titleindex);
             ghb_array_replace(ud->settings_array, titleindex,
                               ghb_queue_edit_settings);
             ud->settings = ghb_queue_edit_settings;
@@ -3613,7 +3633,7 @@ chapter_refresh_list_row_ui(
     GtkTreeModel *tm,
     GtkTreeIter *ti,
     GValue *chapter_list,
-    int titleindex,
+    const hb_title_t *title,
     int index)
 {
     gchar *chapter, *s_duration, *s_start;
@@ -3623,10 +3643,10 @@ chapter_refresh_list_row_ui(
     // Update row with settings data
     g_debug("Updating chapter row ui");
     chapter = ghb_value_string(ghb_array_get_nth(chapter_list, index));
-    duration = ghb_get_chapter_duration(titleindex, index) / 90000;
+    duration = ghb_get_chapter_duration(title, index) / 90000;
     break_duration(duration, &hh, &mm, &ss);
     s_duration = g_strdup_printf("%02d:%02d:%02d", hh, mm, ss);
-    start = ghb_get_chapter_start(titleindex, index) / 90000;
+    start = ghb_get_chapter_start(title, index) / 90000;
     break_duration(start, &hh, &mm, &ss);
     s_start = g_strdup_printf("%02d:%02d:%02d", hh, mm, ss);
     gtk_list_store_set(GTK_LIST_STORE(tm), ti,
@@ -3660,14 +3680,16 @@ chapter_refresh_list_ui(signal_user_data_t *ud)
     GtkTreeView  *tv;
     GtkTreeModel *tm;
     GtkTreeIter   ti;
-    int titleindex;
+    int title_id, titleindex;
+    const hb_title_t *title;
 
     tv = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "chapters_list"));
     tm = gtk_tree_view_get_model(tv);
 
     tm_count = gtk_tree_model_iter_n_children(tm, NULL);
 
-    titleindex = ghb_settings_combo_int(ud->settings, "title");
+    title_id = ghb_settings_get_int(ud->settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
     chapter_list = ghb_settings_get_value(ud->settings, "chapter_list");
     count = ghb_array_len(chapter_list);
     if (count != tm_count)
@@ -3681,7 +3703,7 @@ chapter_refresh_list_ui(signal_user_data_t *ud)
     for (ii = 0; ii < count; ii++)
     {
         gtk_tree_model_iter_nth_child(tm, &ti, NULL, ii);
-        chapter_refresh_list_row_ui(tm, &ti, chapter_list, titleindex, ii);
+        chapter_refresh_list_row_ui(tm, &ti, chapter_list, title, ii);
     }
 }
 
@@ -3695,11 +3717,13 @@ static void
 update_chapter_list_settings(GValue *settings)
 {
     GValue *chapters;
-    gint titleindex;
+    gint title_id, titleindex;
+    const hb_title_t *title;
 
     g_debug("update_chapter_list_settings ()");
-    titleindex = ghb_settings_get_int(settings, "title_no");
-    chapters = ghb_get_chapters(titleindex);
+    title_id = ghb_settings_get_int(settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
+    chapters = ghb_get_chapters(title);
     if (chapters)
         ghb_settings_take_value(settings, "chapter_list", chapters);
 }
index ba5526361533c3b107b329b8d28a3ce795758ad4..0767513aaed1533c9b97c4ff64d4d6ce8fa821cf 100644 (file)
@@ -74,7 +74,7 @@ def start_element_handler(tag, attr):
         elif fname == None:
             print >> sys.stderr, ( "Error: No such string file %s" % fbase )
             sys.exit(1)
-        
+
     if val != None:
         if type(current) == types.DictType:
             current[key] = val
index afcc5ae9f094b83f2dc0d1719cd28d93fd4e340f..be3dede7c2087617cad96126fd61e73366151d94 100644 (file)
@@ -369,12 +369,6 @@ combo_opts_t subtitle_opts =
     NULL
 };
 
-combo_opts_t title_opts =
-{
-    0,
-    NULL
-};
-
 combo_opts_t audio_track_opts =
 {
     0,
@@ -412,7 +406,6 @@ combo_name_map_t combo_name_map[] =
     {"x264_analyse", &analyse_opts},
     {"x264_trellis", &trellis_opts},
     {"SubtitleTrack", &subtitle_opts},
-    {"title", &title_opts},
     {"AudioTrack", &audio_track_opts},
     {NULL, NULL}
 };
@@ -1422,22 +1415,19 @@ ghb_hb_cleanup(gboolean partial)
 gint
 ghb_subtitle_track_source(GValue *settings, gint track)
 {
-    gint titleindex;
+    gint title_id, titleindex;
+    const hb_title_t *title;
 
     if (track == -2)
         return SRTSUB;
     if (track < 0)
         return VOBSUB;
-    titleindex = ghb_settings_combo_int(settings, "title");
-    if (titleindex < 0)
+    title_id = ghb_settings_get_int(settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
+    if (title == NULL)
         return VOBSUB;
 
-    hb_title_t * title;
     hb_subtitle_t * sub;
-
-    if (h_scan == NULL) return VOBSUB;
-    title = ghb_get_title_info( titleindex );
-    if (title == NULL) return VOBSUB;   // Bad titleindex
     sub = hb_list_item( title->list_subtitle, track);
     if (sub != NULL)
         return sub->source;
@@ -1448,13 +1438,11 @@ ghb_subtitle_track_source(GValue *settings, gint track)
 const gchar*
 ghb_subtitle_track_lang(GValue *settings, gint track)
 {
-    gint titleindex;
-    hb_title_t * title;
+    gint title_id, titleindex;
+    const hb_title_t * title;
 
-    titleindex = ghb_settings_combo_int(settings, "title");
-    if (titleindex < 0)
-        goto fail;
-    title = ghb_get_title_info(titleindex);
+    title_id = ghb_settings_get_int(settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
     if (title == NULL)  // Bad titleindex
         goto fail;
     if (track == -1)
@@ -1471,40 +1459,6 @@ fail:
     return "und";
 }
 
-gint
-ghb_get_title_number(gint titleindex)
-{
-    hb_title_t * title;
-
-    title = ghb_get_title_info( titleindex );
-    if (title == NULL) return 1;    // Bad titleindex
-    return title->index;
-}
-
-static hb_audio_config_t*
-get_hb_audio(hb_handle_t *h, gint titleindex, gint track)
-{
-    hb_list_t  * list;
-    hb_title_t * title;
-    hb_audio_config_t *audio = NULL;
-
-    if (h == NULL) return NULL;
-    list = hb_get_titles( h );
-    if( !hb_list_count( list ) )
-    {
-        /* No valid title, stop right there */
-        return NULL;
-    }
-    title = hb_list_item( list, titleindex );
-    if (title == NULL) return NULL; // Bad titleindex
-    if (!hb_list_count(title->list_audio))
-    {
-        return NULL;
-    }
-    audio = (hb_audio_config_t *)hb_list_audio_config_item(title->list_audio, track);
-    return audio;
-}
-
 static gint
 search_audio_bitrates(gint rate)
 {
@@ -1574,19 +1528,21 @@ void
 ghb_grey_combo_options(signal_user_data_t *ud)
 {
     GtkWidget *widget;
-    gint mux, track, titleindex, acodec, fallback;
+    gint mux, track, title_id, titleindex, acodec, fallback;
+    const hb_title_t *title;
     hb_audio_config_t *aconfig = NULL;
     GValue *gval;
 
+    title_id = ghb_settings_get_int(ud->settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
     widget = GHB_WIDGET (ud->builder, "title");
     gval = ghb_widget_value(widget);
-    titleindex = ghb_lookup_combo_int("title", gval);
     ghb_value_free(gval);
     widget = GHB_WIDGET (ud->builder, "AudioTrack");
     gval = ghb_widget_value(widget);
     track = ghb_lookup_combo_int("AudioTrack", gval);
     ghb_value_free(gval);
-    aconfig = get_hb_audio(h_scan, titleindex, track);
+    aconfig = ghb_get_audio_info(title, track);
     widget = GHB_WIDGET (ud->builder, "FileFormat");
     gval = ghb_widget_value(widget);
     mux = ghb_lookup_combo_int("FileFormat", gval);
@@ -1759,6 +1715,19 @@ ghb_audio_samplerate_opts_set(GtkComboBox *combo)
     }
 }
 
+const hb_rate_t*
+ghb_lookup_samplerate(const char *name)
+{
+    const hb_rate_t *rate;
+    for (rate = hb_audio_samplerate_get_next(NULL); rate != NULL;
+         rate = hb_audio_samplerate_get_next(rate))
+    {
+        if (!strncmp(name, rate->name, 80))
+            return rate;
+    }
+    return NULL;
+}
+
 static void
 audio_samplerate_opts_set(GtkBuilder *builder, const gchar *name)
 {
@@ -1818,6 +1787,19 @@ video_framerate_opts_set(GtkBuilder *builder, const gchar *name)
     }
 }
 
+const hb_rate_t*
+ghb_lookup_framerte(const char *name)
+{
+    const hb_rate_t *rate;
+    for (rate = hb_video_framerate_get_next(NULL); rate != NULL;
+         rate = hb_video_framerate_get_next(rate))
+    {
+        if (!strncmp(name, rate->name, 80))
+            return rate;
+    }
+    return NULL;
+}
+
 static void
 video_encoder_opts_set(
     GtkBuilder *builder,
@@ -1849,6 +1831,22 @@ video_encoder_opts_set(
     }
 }
 
+const hb_encoder_t*
+ghb_lookup_video_encoder(const char *name)
+{
+    const hb_encoder_t *enc;
+    for (enc = hb_video_encoder_get_next(NULL); enc != NULL;
+         enc = hb_video_encoder_get_next(enc))
+    {
+        if (!strncmp(name, enc->short_name, 80) ||
+            !strncmp(name, enc->name, 80))
+        {
+            return enc;
+        }
+    }
+    return NULL;
+}
+
 void
 ghb_audio_encoder_opts_set_with_mask(
     GtkComboBox *combo,
@@ -1883,6 +1881,22 @@ ghb_audio_encoder_opts_set_with_mask(
     }
 }
 
+const hb_encoder_t*
+ghb_lookup_audio_encoder(const char *name)
+{
+    const hb_encoder_t *enc;
+    for (enc = hb_audio_encoder_get_next(NULL); enc != NULL;
+         enc = hb_audio_encoder_get_next(enc))
+    {
+        if (!strncmp(name, enc->short_name, 80) ||
+            !strncmp(name, enc->name, 80))
+        {
+            return enc;
+        }
+    }
+    return NULL;
+}
+
 static void
 audio_encoder_opts_set_with_mask(
     GtkBuilder *builder,
@@ -1968,6 +1982,22 @@ ghb_mix_opts_set(GtkComboBox *combo)
     }
 }
 
+const hb_mixdown_t*
+ghb_lookup_mix(const char *name)
+{
+    const hb_mixdown_t *mix;
+    for (mix = hb_mixdown_get_next(NULL); mix != NULL;
+         mix = hb_mixdown_get_next(mix))
+    {
+        if (!strncmp(name, mix->short_name, 80) ||
+            !strncmp(name, mix->name, 80))
+        {
+            return mix;
+        }
+    }
+    return NULL;
+}
+
 static void
 mix_opts_set(GtkBuilder *builder, const gchar *name)
 {
@@ -2007,6 +2037,22 @@ container_opts_set(
     }
 }
 
+const hb_container_t *
+ghb_lookup_container(const gchar *name)
+{
+    const hb_container_t *mux;
+    for (mux = hb_container_get_next(NULL); mux != NULL;
+         mux = hb_container_get_next(mux))
+    {
+        if (!strncmp(mux->short_name, name, 80) ||
+            !strncmp(mux->name, name, 80))
+        {
+            return mux;
+        }
+    }
+    return NULL;
+}
+
 static void
 srt_codeset_opts_set(GtkBuilder *builder, const gchar *name)
 {
@@ -2062,10 +2108,26 @@ language_opts_set(GtkBuilder *builder, const gchar *name)
     }
 }
 
-static gchar **titles = NULL;
+const iso639_lang_t*
+ghb_lookup_lang(const char *name)
+{
+    int ii;
+    for (ii = 0; ii < LANG_TABLE_SIZE; ii++)
+    {
+        if (!strncmp(name, ghb_language_table[ii].iso639_2, 4) ||
+            !strncmp(name, ghb_language_table[ii].iso639_1, 4) ||
+            !strncmp(name, ghb_language_table[ii].iso639_2b, 4) ||
+            !strncmp(name, ghb_language_table[ii].native_name, 4) ||
+            !strncmp(name, ghb_language_table[ii].eng_name, 4))
+        {
+            return &ghb_language_table[ii];
+        }
+    }
+    return NULL;
+}
 
 gchar*
-ghb_create_title_label(hb_title_t *title)
+ghb_create_title_label(const hb_title_t *title)
 {
     gchar *label;
 
@@ -2125,10 +2187,11 @@ title_opts_set(GtkBuilder *builder, const gchar *name)
     GtkTreeIter iter;
     GtkListStore *store;
     hb_list_t  * list = NULL;
-    hb_title_t * title = NULL;
+    const hb_title_t * title = NULL;
     gint ii;
     gint count = 0;
 
+
     g_debug("title_opts_set ()\n");
     GtkComboBox *combo = GTK_COMBO_BOX(GHB_WIDGET(builder, name));
     store = GTK_LIST_STORE(gtk_combo_box_get_model (combo));
@@ -2138,20 +2201,6 @@ title_opts_set(GtkBuilder *builder, const gchar *name)
         list = hb_get_titles( h_scan );
         count = hb_list_count( list );
     }
-    if (titles) g_strfreev(titles);
-    if (title_opts.map) g_free(title_opts.map);
-    if (count > 0)
-    {
-        title_opts.count = count;
-        title_opts.map = g_malloc(count*sizeof(options_map_t));
-        titles = g_malloc((count+1) * sizeof(gchar*));
-    }
-    else
-    {
-        title_opts.count = 1;
-        title_opts.map = g_malloc(sizeof(options_map_t));
-        titles = NULL;
-    }
     if( count <= 0 )
     {
         // No titles.  Fill in a default.
@@ -2163,31 +2212,89 @@ title_opts_set(GtkBuilder *builder, const gchar *name)
                            3, -1.0,
                            4, "none",
                            -1);
-        title_opts.map[0].option = "No Titles";
-        title_opts.map[0].shortOpt = "none";
-        title_opts.map[0].ivalue = -1;
-        title_opts.map[0].svalue = "none";
         return;
     }
     for (ii = 0; ii < count; ii++)
     {
-        title = (hb_title_t*)hb_list_item(list, ii);
-        titles[ii] = ghb_create_title_label(title);
+        char *title_opt, *title_index;
+
+        title = hb_list_item(list, ii);
+        title_opt = ghb_create_title_label(title);
+        title_index = g_strdup_printf("%d", title->index);
 
         gtk_list_store_append(store, &iter);
         gtk_list_store_set(store, &iter,
-                           0, titles[ii],
+                           0, title_opt,
                            1, TRUE,
-                           2, titles[ii],
-                           3, (gdouble)ii,
-                           4, titles[ii],
+                           2, title_index,
+                           3, (gdouble)title->index,
+                           4, title_index,
                            -1);
-        title_opts.map[ii].option = titles[ii];
-        title_opts.map[ii].shortOpt = titles[ii];
-        title_opts.map[ii].ivalue = ii;
-        title_opts.map[ii].svalue = titles[ii];
+        g_free(title_opt);
+        g_free(title_index);
+    }
+}
+
+static int
+lookup_title_index(hb_handle_t *h, int title_id)
+{
+    if (h == NULL)
+        return -1;
+
+    hb_list_t *list;
+    const hb_title_t *title;
+    int count, ii;
+
+    list = hb_get_titles(h);
+    count = hb_list_count(list);
+    for (ii = 0; ii < count; ii++)
+    {
+        title = hb_list_item(list, ii);
+        if (title_id == title->index)
+        {
+            return ii;
+        }
     }
-    titles[ii] = NULL;
+    return -1;
+}
+
+const hb_title_t*
+lookup_title(hb_handle_t *h, int title_id, int *index)
+{
+    int ii = lookup_title_index(h, title_id);
+
+    if (index != NULL)
+        *index = ii;
+    if (ii < 0)
+        return NULL;
+
+    hb_list_t *list;
+    list = hb_get_titles(h);
+    return hb_list_item(list, ii);
+}
+
+int
+ghb_lookup_title_index(int title_id)
+{
+    return lookup_title_index(h_scan, title_id);
+}
+
+const hb_title_t*
+ghb_lookup_title(int title_id, int *index)
+{
+    return lookup_title(h_scan, title_id, index);
+}
+
+int
+ghb_lookup_queue_title_index(int title_id)
+{
+    return lookup_title_index(h_queue, title_id);
+}
+
+const hb_title_t*
+ghb_lookup_queue_title(int title_id, int *index)
+{
+    return lookup_title(h_queue, title_id, index);
 }
 
 static void
@@ -2289,12 +2396,6 @@ h264_level_opts_set(GtkBuilder *builder, const gchar *name)
     }
 }
 
-int
-ghb_get_title_count()
-{
-    return title_opts.count;
-}
-
 static gboolean
 find_combo_item_by_int(GtkTreeModel *store, gint value, GtkTreeIter *iter)
 {
@@ -2317,11 +2418,10 @@ find_combo_item_by_int(GtkTreeModel *store, gint value, GtkTreeIter *iter)
 }
 
 void
-audio_track_opts_set(GtkBuilder *builder, const gchar *name, gint titleindex)
+audio_track_opts_set(GtkBuilder *builder, const gchar *name, const hb_title_t *title)
 {
     GtkTreeIter iter;
     GtkListStore *store;
-    hb_title_t * title = NULL;
     hb_audio_config_t * audio;
     gint ii;
     gint count = 0;
@@ -2331,7 +2431,6 @@ audio_track_opts_set(GtkBuilder *builder, const gchar *name, gint titleindex)
     GtkComboBox *combo = GTK_COMBO_BOX(GHB_WIDGET(builder, name));
     store = GTK_LIST_STORE(gtk_combo_box_get_model (combo));
     gtk_list_store_clear(store);
-    title = ghb_get_title_info(titleindex);
     if (title != NULL)
     {
         count = hb_list_count( title->list_audio );
@@ -2399,30 +2498,11 @@ audio_track_opts_set(GtkBuilder *builder, const gchar *name, gint titleindex)
     gtk_combo_box_set_active (combo, 0);
 }
 
-const gchar*
-ghb_audio_track_description(gint track, int titleindex)
-{
-    hb_title_t * title = NULL;
-    hb_audio_config_t * audio;
-    gchar * desc = "Unknown";
-
-    g_debug("ghb_audio_track_description ()\n");
-
-    title = ghb_get_title_info( titleindex );
-    if (title == NULL) return desc;
-    if (track >= hb_list_count( title->list_audio )) return desc;
-
-    audio = hb_list_audio_config_item(title->list_audio, track);
-    if (audio == NULL) return desc;
-    return audio->lang.description;
-}
-
 void
-subtitle_track_opts_set(GtkBuilder *builder, const gchar *name, gint titleindex)
+subtitle_track_opts_set(GtkBuilder *builder, const gchar *name, const hb_title_t *title)
 {
     GtkTreeIter iter;
     GtkListStore *store;
-    hb_title_t * title = NULL;
     hb_subtitle_t * subtitle;
     gint ii, count = 0;
     static char ** options = NULL;
@@ -2431,7 +2511,6 @@ subtitle_track_opts_set(GtkBuilder *builder, const gchar *name, gint titleindex)
     GtkComboBox *combo = GTK_COMBO_BOX(GHB_WIDGET(builder, name));
     store = GTK_LIST_STORE(gtk_combo_box_get_model (combo));
     gtk_list_store_clear(store);
-    title = ghb_get_title_info(titleindex);
     if (title != NULL)
     {
         count = hb_list_count( title->list_subtitle );
@@ -2499,35 +2578,26 @@ subtitle_track_opts_set(GtkBuilder *builder, const gchar *name, gint titleindex)
     gtk_combo_box_set_active (combo, 0);
 }
 
+// Get title id of feature or longest title
 gint
 ghb_longest_title()
 {
     hb_title_set_t * title_set;
-    hb_title_t * title;
-    gint ii;
+    const hb_title_t * title;
     gint count = 0;
-    gint feature;
 
     g_debug("ghb_longest_title ()\n");
     if (h_scan == NULL) return 0;
     title_set = hb_get_title_set( h_scan );
     count = hb_list_count( title_set->list_title );
     if (count < 1) return 0;
-    title = (hb_title_t*)hb_list_item(title_set->list_title, 0);
-    feature = title_set->feature;
-    for (ii = 0; ii < count; ii++)
-    {
-        title = (hb_title_t*)hb_list_item(title_set->list_title, ii);
-        if (title->index == feature)
-        {
-            return ii;
-        }
-    }
-    return 0;
+    title = hb_list_item(title_set->list_title, 0);
+    (void)title; // Silence "unused variable" warning
+    return title_set->feature;
 }
 
 const gchar*
-ghb_get_source_audio_lang(hb_title_t *title, gint track)
+ghb_get_source_audio_lang(const hb_title_t *title, gint track)
 {
     hb_audio_config_t * audio;
     const gchar *lang = "und";
@@ -2547,7 +2617,7 @@ ghb_get_source_audio_lang(hb_title_t *title, gint track)
 }
 
 gint
-ghb_find_audio_track(hb_title_t *title, const gchar *lang, int start)
+ghb_find_audio_track(const hb_title_t *title, const gchar *lang, int start)
 {
     hb_audio_config_t * audio;
     gint ii, count = 0;
@@ -2584,7 +2654,7 @@ ghb_find_pref_subtitle_track(const gchar *lang)
 }
 
 gint
-ghb_find_subtitle_track(hb_title_t * title, const gchar * lang, int start)
+ghb_find_subtitle_track(const hb_title_t * title, const gchar * lang, int start)
 {
     hb_subtitle_t * subtitle;
     gint count, ii;
@@ -2872,7 +2942,7 @@ void
 ghb_update_ui_combo_box(
     signal_user_data_t *ud,
     const gchar *name,
-    gint user_data,
+    const void *user_data,
     gboolean all)
 {
     GtkComboBox *combo = NULL;
@@ -3105,15 +3175,13 @@ void ghb_set_video_encoder_opts(hb_job_t *job, GValue *js)
 }
 
 void
-ghb_part_duration(gint tt, gint sc, gint ec, gint *hh, gint *mm, gint *ss)
+ghb_part_duration(const hb_title_t *title, gint sc, gint ec, gint *hh, gint *mm, gint *ss)
 {
-    hb_title_t * title;
     hb_chapter_t * chapter;
     gint count, c;
     gint64 duration;
 
     *hh = *mm = *ss = 0;
-    title = ghb_get_title_info( tt );
     if (title == NULL) return;
 
     *hh = title->hours;
@@ -3140,14 +3208,11 @@ ghb_part_duration(gint tt, gint sc, gint ec, gint *hh, gint *mm, gint *ss)
 }
 
 gint64
-ghb_get_chapter_duration(gint ti, gint chap)
+ghb_get_chapter_duration(const hb_title_t *title, gint chap)
 {
-    hb_title_t * title;
     hb_chapter_t * chapter;
     gint count;
 
-    g_debug("ghb_get_chapter_duration (title = %d)\n", ti);
-    title = ghb_get_title_info( ti );
     if (title == NULL) return 0;
     count = hb_list_count( title->list_chapter );
     if (chap >= count) return 0;
@@ -3157,15 +3222,12 @@ ghb_get_chapter_duration(gint ti, gint chap)
 }
 
 gint64
-ghb_get_chapter_start(gint ti, gint chap)
+ghb_get_chapter_start(const hb_title_t *title, gint chap)
 {
-    hb_title_t * title;
     hb_chapter_t * chapter;
     gint count, ii;
     gint64 start = 0;
 
-    g_debug("ghb_get_chapter_start (title = %d)\n", ti);
-    title = ghb_get_title_info( ti );
     if (title == NULL) return 0;
     count = hb_list_count( title->list_chapter );
     if (chap > count) return chap = count;
@@ -3178,17 +3240,14 @@ ghb_get_chapter_start(gint ti, gint chap)
 }
 
 GValue*
-ghb_get_chapters(gint titleindex)
+ghb_get_chapters(const hb_title_t *title)
 {
-    hb_title_t * title;
     hb_chapter_t * chapter;
     gint count, ii;
     GValue *chapters = NULL;
 
-    g_debug("ghb_get_chapters (title = %d)\n", titleindex);
     chapters = ghb_array_value_new(0);
 
-    title = ghb_get_title_info( titleindex );
     if (title == NULL) return chapters;
     count = hb_list_count( title->list_chapter );
     for (ii = 0; ii < count; ii++)
@@ -3413,7 +3472,7 @@ ghb_combo_init(signal_user_data_t *ud)
     // Set up the list model for the combos
     init_ui_combo_boxes(ud->builder);
     // Populate all the combos
-    ghb_update_ui_combo_box(ud, NULL, 0, TRUE);
+    ghb_update_ui_combo_box(ud, NULL, NULL, TRUE);
 }
 
 void
@@ -3681,15 +3740,15 @@ ghb_track_status()
     }
 }
 
-hb_title_t *
-ghb_get_title_info(gint titleindex)
+hb_audio_config_t*
+ghb_get_audio_info(const hb_title_t *title, gint track)
 {
-    hb_list_t  * list;
-
-    if (h_scan == NULL) return NULL;
-    list = hb_get_titles( h_scan );
-    if (list == NULL) return NULL;
-    return hb_list_item( list, titleindex );
+    if (title == NULL) return NULL;
+    if (!hb_list_count(title->list_audio))
+    {
+        return NULL;
+    }
+    return hb_list_audio_config_item(title->list_audio, track);
 }
 
 hb_list_t *
@@ -3699,15 +3758,6 @@ ghb_get_title_list()
     return hb_get_titles( h_scan );
 }
 
-hb_audio_config_t*
-ghb_get_scan_audio_info(gint titleindex, gint audioindex)
-{
-    hb_audio_config_t *aconfig;
-
-    aconfig = get_hb_audio(h_scan, titleindex, audioindex);
-    return aconfig;
-}
-
 gboolean
 ghb_audio_is_passthru(gint acodec)
 {
@@ -3793,7 +3843,6 @@ ghb_limit_rational( gint *num, gint *den, gint limit )
 void
 ghb_set_scale_settings(GValue *settings, gint mode)
 {
-    hb_title_t * title;
     hb_job_t   * job;
     gboolean keep_aspect;
     gint pic_par;
@@ -3822,13 +3871,14 @@ ghb_set_scale_settings(GValue *settings, gint mode)
         ghb_settings_set_boolean(settings, "PictureKeepRatio", TRUE);
     }
 
-    gint titleindex;
+    int title_id, titleindex;
+    const hb_title_t * title;
 
-    titleindex = ghb_settings_combo_int(settings, "title");
-    title = ghb_get_title_info (titleindex);
+    title_id = ghb_settings_get_int(settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
     if (title == NULL) return;
 
-    job = hb_job_init( title );
+    job = hb_job_init( (hb_title_t*)title );
     if (job == NULL) return;
 
     // First configure widgets
@@ -4342,13 +4392,12 @@ ghb_validate_video(GValue *settings)
 gboolean
 ghb_validate_subtitles(GValue *settings)
 {
-    hb_title_t * title;
+    gint title_id, titleindex;
+    const hb_title_t * title;
     gchar *message;
 
-    gint titleindex;
-
-    titleindex = ghb_settings_combo_int(settings, "title");
-    title = ghb_get_title_info(titleindex);
+    title_id = ghb_settings_get_int(settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
     if (title == NULL)
     {
         /* No valid title, stop right there */
@@ -4415,14 +4464,13 @@ ghb_validate_subtitles(GValue *settings)
 gboolean
 ghb_validate_audio(GValue *settings)
 {
-    hb_title_t * title;
+    gint title_id, titleindex;
+    const hb_title_t * title;
     gchar *message;
     GValue *value;
 
-    gint titleindex;
-
-    titleindex = ghb_settings_combo_int(settings, "title");
-    title = ghb_get_title_info( titleindex );
+    title_id = ghb_settings_get_int(settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
     if (title == NULL)
     {
         /* No valid title, stop right there */
@@ -4613,10 +4661,10 @@ ghb_validate_vquality(GValue *settings)
 }
 
 static void
-add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex)
+add_job(hb_handle_t *h, GValue *js, gint unique_id, int titleindex)
 {
     hb_list_t  * list;
-    hb_title_t * title;
+    const hb_title_t * title;
     hb_job_t   * job;
     gint sub_id = 0;
     hb_filter_object_t * filter;
@@ -4637,7 +4685,7 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex)
     if (title == NULL) return;
 
     /* Set job settings */
-    job = hb_job_init( title );
+    job = hb_job_init( (hb_title_t*)title );
     if (job == NULL) return;
 
     prefs = ghb_settings_get_value(js, "Preferences");
@@ -5228,7 +5276,12 @@ ghb_add_job(GValue *js, gint unique_id)
 void
 ghb_add_live_job(GValue *js, gint unique_id)
 {
-    gint titleindex = ghb_settings_combo_int(js, "title");
+    int title_id, titleindex;
+    const hb_title_t *title;
+
+    title_id = ghb_settings_get_int(js, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
+    (void)title; // Silence "unused variable" warning
     add_job(h_scan, js, unique_id, titleindex);
 }
 
@@ -5391,19 +5444,17 @@ hash_pixbuf(
 
 GdkPixbuf*
 ghb_get_preview_image(
-    gint titleindex,
+    const hb_title_t *title,
     gint index,
     signal_user_data_t *ud,
     gint *out_width,
     gint *out_height)
 {
-    hb_title_t *title;
     hb_job_t *job;
 
-    title = ghb_get_title_info( titleindex );
     if( title == NULL ) return NULL;
 
-    job = hb_job_init( title );
+    job = hb_job_init( (hb_title_t*)title );
     if (job == NULL) return NULL;
 
     set_preview_job_settings(ud, job, ud->settings);
index 0f15d4070f74e0daebde81e3e3a0a69718bdbd55..3ee1e5a1d527b11fbb808c4d59a7fc5b4cccd941 100644 (file)
@@ -104,42 +104,40 @@ void ghb_track_status(void);
 void ghb_backend_scan(const gchar *path, gint titleindex, gint preview_count, guint64 min_duration);
 void ghb_backend_scan_stop();
 void ghb_backend_queue_scan(const gchar *path, gint titleindex);
-hb_title_t* ghb_get_title_info(gint titleindex);
 hb_list_t * ghb_get_title_list();
 void ghb_par_init(signal_user_data_t *ud);
 void ghb_set_scale(signal_user_data_t *ud, gint mode);
 void ghb_set_scale_settings(GValue *settings, gint mode);
 void ghb_picture_settings_deps(signal_user_data_t *ud);
-GValue* ghb_get_chapters(gint titleindex);
-gint64 ghb_get_chapter_duration(gint ti, gint chap);
-gint64 ghb_get_chapter_start(gint ti, gint chap);
-void ghb_part_duration(gint tt, gint sc, gint ec, gint *hh, gint *mm, gint *ss);
+GValue* ghb_get_chapters(const hb_title_t *title);
+gint64 ghb_get_chapter_duration(const hb_title_t *title, gint chap);
+gint64 ghb_get_chapter_start(const hb_title_t *title, gint chap);
+void ghb_part_duration(
+    const hb_title_t *title, gint sc, gint ec, gint *hh, gint *mm, gint *ss);
+hb_audio_config_t* ghb_get_audio_info(const hb_title_t *title, gint track);
 gint ghb_get_best_mix(hb_audio_config_t *aconfig, gint acodec, gint mix);
 gboolean ghb_ac3_in_audio_list(const GValue *audio_list);
 gboolean ghb_audio_is_passthru(gint acodec);
 gboolean ghb_audio_can_passthru(gint acodec);
 gint ghb_get_default_acodec(void);
-hb_audio_config_t* ghb_get_scan_audio_info(gint titleindex, gint audioindex);
 void ghb_set_bitrate_opts(
     GtkBuilder *builder, gint first_rate, gint last_rate, gint extra_rate);
 void ghb_grey_combo_options(signal_user_data_t *ud);
 void ghb_update_ui_combo_box(
-    signal_user_data_t *ud, const gchar *name, gint user_data, gboolean all);
-const gchar* ghb_get_source_audio_lang(hb_title_t *title, gint track);
-gint ghb_find_audio_track(hb_title_t *title, const gchar *lang, int start);
-const gchar* ghb_audio_track_description(gint track, int titleindex);
+    signal_user_data_t *ud, const gchar *name,
+    const void *user_data, gboolean all);
+const gchar* ghb_get_source_audio_lang(const hb_title_t *title, gint track);
+gint ghb_find_audio_track(const hb_title_t *title, const gchar *lang, int start);
 void ghb_add_all_subtitles(signal_user_data_t *ud, gint titleindex);
 gint ghb_find_pref_subtitle_track(const gchar *lang);
-gint ghb_find_subtitle_track(hb_title_t * title, const gchar * lang, int start);
+gint ghb_find_subtitle_track(const hb_title_t * title, const gchar * lang, int start);
 gint ghb_pick_subtitle_track(signal_user_data_t *ud);
 gint ghb_longest_title(void);
 gchar* ghb_build_advanced_opts_string(GValue *settings);
 GdkPixbuf* ghb_get_preview_image(
-    gint titleindex, gint index, signal_user_data_t *ud,
-    gint *width, gint *height);
+    const hb_title_t *title, gint index, signal_user_data_t *ud,
+    gint *out_width, gint *out_height);
 gchar* ghb_dvd_volname(const gchar *device);
-gint ghb_get_title_number(gint titleindex);
-int ghb_get_title_count();
 gint ghb_subtitle_track_source(GValue *settings, gint track);
 const gchar* ghb_subtitle_track_lang(GValue *settings, gint track);
 
@@ -171,6 +169,7 @@ void ghb_audio_samplerate_opts_set(GtkComboBox *combo);
 int ghb_lookup_audio_lang(const GValue *glang);
 const iso639_lang_t* ghb_iso639_lookup_by_int(int idx);
 void ghb_update_display_aspect_label(signal_user_data_t *ud);
-gchar* ghb_create_title_label(hb_title_t *title);
+gchar* ghb_create_title_label(const hb_title_t *title);
+const hb_title_t* ghb_lookup_title(int title_id, int *index);
 
 #endif // _HBBACKEND_H_
index aa2111cea65eeef1cfb6a56bbe738f6b05a976b3..331e0cf7778763d907bea5f03c1d53d2268cf85d 100644 (file)
@@ -111,6 +111,6 @@ def main():
                 deps.append(rec)
         top[ii.dep] = deps
     plistlib.writePlist(top, revfile)
-    
+
 main()
 
index 560eec832b026c7f7480f967c407a917ede3c304..940cadaaa8a14a72ad9d244bdd856085ef805647 100644 (file)
@@ -956,7 +956,7 @@ ghb_preset_to_settings(GValue *settings, GValue *preset)
     init_settings_from_dict(settings, preset, NULL, TRUE);
 
     // Fix up all the internal settings that are derived from preset values.
-    ghb_settings_set_boolean(settings, "PictureDeinterlaceDecomb", 
+    ghb_settings_set_boolean(settings, "PictureDeinterlaceDecomb",
         !ghb_settings_get_boolean(settings, "PictureDecombDeinterlace"));
 
     ghb_settings_set_value(settings, "scale_height",
index cf046f24a934a31747a2b7bdc89d075f1cc5e367..a77c7e018ade951cdca288d8fb125fc3a6b79474 100644 (file)
@@ -919,12 +919,14 @@ ghb_set_preview_image(signal_user_data_t *ud)
     gint preview_width, preview_height, target_height, width, height;
 
     g_debug("set_preview_button_image ()");
-    gint titleindex;
+    gint title_id, titleindex;
+    const hb_title_t *title;
 
     live_preview_stop(ud);
 
-    titleindex = ghb_settings_combo_int(ud->settings, "title");
-    if (titleindex < 0) return;
+    title_id = ghb_settings_get_int(ud->settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
+    if (title == NULL) return;
     widget = GHB_WIDGET (ud->builder, "preview_frame");
     ud->preview->frame = ghb_widget_int(widget) - 1;
     if (ud->preview->encoded[ud->preview->frame])
@@ -948,8 +950,7 @@ ghb_set_preview_image(signal_user_data_t *ud)
         g_object_unref(ud->preview->pix);
 
     ud->preview->pix =
-        ghb_get_preview_image(titleindex, ud->preview->frame,
-                                ud, &width, &height);
+        ghb_get_preview_image(title, ud->preview->frame, ud, &width, &height);
     if (ud->preview->pix == NULL) return;
     preview_width = gdk_pixbuf_get_width(ud->preview->pix);
     preview_height = gdk_pixbuf_get_height(ud->preview->pix);
@@ -1149,14 +1150,16 @@ preview_button_size_allocate_cb(GtkWidget *widget, GtkAllocation *allocation, si
 void
 ghb_preview_set_visible(signal_user_data_t *ud)
 {
-    gint titleindex;
+    gint title_id, titleindex;
+    const hb_title_t *title;
     GtkWidget *widget;
     gboolean settings_active;
 
+    title_id = ghb_settings_get_int(ud->settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
     settings_active = ghb_settings_get_boolean(ud->globals, "show_picture");
     widget = GHB_WIDGET(ud->builder, "preview_window");
-    titleindex = ghb_settings_combo_int(ud->settings, "title");
-    if (settings_active && titleindex >= 0)
+    if (settings_active && title != NULL)
     {
         gint x, y;
         x = ghb_settings_get_int(ud->prefs, "preview_x");
index cdc78324562616bf548311474036093e759a1ca6..11980dc2cd64167dd6e3cd0388246e64e51ea519 100644 (file)
@@ -84,7 +84,7 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
 
     // Collect information for first line in the display
     // Volume (Title X, Chapters Y through Z, N Video Passes) --> Destination
-    title = ghb_settings_get_int(settings, "titlenum");
+    title = ghb_settings_get_int(settings, "title");
     start_point = ghb_settings_get_int(settings, "start_point");
     end_point = ghb_settings_get_int(settings, "end_point");
     vol_name = ghb_settings_get_const_string(settings, "volume_label");
@@ -656,10 +656,12 @@ validate_settings(signal_user_data_t *ud, GValue *settings, gint batch)
     // already in the queue
     gchar *message, *dest;
     gint count, ii;
-    gint titleindex;
+    gint title_id, titleindex;
+    const hb_title_t *title;
 
-    titleindex = ghb_settings_combo_int(settings, "title");
-    if (titleindex < 0) return FALSE;
+    title_id = ghb_settings_get_int(settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
+    if (title == NULL) return FALSE;
     dest = ghb_settings_get_string(settings, "destination");
     count = ghb_array_len(ud->queue);
     for (ii = 0; ii < count; ii++)
@@ -804,9 +806,6 @@ static gboolean
 queue_add(signal_user_data_t *ud, GValue *settings, gint batch)
 {
     // Add settings to the queue
-    gint titleindex;
-    gint titlenum;
-
     g_debug("queue_add ()");
     if (!validate_settings(ud, settings, batch))
     {
@@ -824,9 +823,7 @@ queue_add(signal_user_data_t *ud, GValue *settings, gint batch)
     // Make a copy of current settings to be used for the new job
     ghb_settings_set_int(settings, "job_status", GHB_QUEUE_PENDING);
     ghb_settings_set_int(settings, "job_unique_id", 0);
-    titleindex = ghb_settings_combo_int(settings, "title");
-    titlenum = ghb_get_title_number(titleindex);
-    ghb_settings_set_int(settings, "titlenum", titlenum);
+
     ghb_array_append(ud->queue, settings);
     add_to_queue_list(ud, settings, NULL);
     ghb_save_queue(ud->queue);
@@ -1314,8 +1311,8 @@ queue_add_multiple_clicked_cb(GtkWidget *widget, signal_user_data_t *ud)
         GtkEntry *entry;
         GtkFileChooser *chooser;
         gchar *title_label, *dest_dir, *dest_file;
-        int titleindex;
-        hb_title_t *title;
+        int title_id, titleindex;
+        const hb_title_t *title;
 
         row = title_create_row(ud);
         label = GTK_LABEL(find_widget(row, "title_label"));
@@ -1323,8 +1320,8 @@ queue_add_multiple_clicked_cb(GtkWidget *widget, signal_user_data_t *ud)
         chooser = GTK_FILE_CHOOSER(find_widget(row, "title_dir"));
 
         settings = ghb_array_get_nth(ud->settings_array, ii);
-        titleindex = ghb_settings_get_int(settings, "title_no");
-        title = ghb_get_title_info(titleindex);
+        title_id = ghb_settings_get_int(settings, "title");
+        title = ghb_lookup_title(title_id, &titleindex);
         if (title != NULL)
         {
             int len;
@@ -1666,12 +1663,14 @@ ghb_queue_buttons_grey(signal_user_data_t *ud)
 {
     GtkWidget *widget;
     gint queue_count;
-    gint titleindex;
+    gint title_id, titleindex;
+    const hb_title_t *title;
     gint queue_state, scan_state;
     gboolean show_start, show_stop, paused;
 
     queue_count = ghb_array_len(ud->queue);
-    titleindex = ghb_settings_combo_int(ud->settings, "title");
+    title_id = ghb_settings_get_int(ud->settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
 
     queue_state = ghb_get_queue_state();
     scan_state = ghb_get_scan_state();
@@ -1680,7 +1679,7 @@ ghb_queue_buttons_grey(signal_user_data_t *ud)
                 (GHB_STATE_WORKING | GHB_STATE_SEARCHING |
                  GHB_STATE_SCANNING | GHB_STATE_MUXING);
     show_start = !(scan_state & GHB_STATE_SCANNING) &&
-                    (titleindex >= 0 || queue_count > 0);
+                    (title !=NULL || queue_count > 0);
 
 
     paused = queue_state & GHB_STATE_PAUSED;
index 6065f5a4a91eafcc687ddb8dcdb578a75409cc83..cba0cbf54b60b2453471af1914cc4ed151194a41 100644 (file)
@@ -309,7 +309,7 @@ subtitle_set_track_description(GValue *subsettings)
 static GValue*  subtitle_add_track(
     signal_user_data_t *ud,
     GValue *settings,
-    hb_title_t *title,
+    const hb_title_t *title,
     int track,
     int mux,
     gboolean default_track,
@@ -400,7 +400,7 @@ ghb_subtitle_title_change(signal_user_data_t *ud, gboolean show)
 }
 
 void
-ghb_set_pref_subtitle_settings(signal_user_data_t *ud, hb_title_t *title, GValue *settings)
+ghb_set_pref_subtitle_settings(signal_user_data_t *ud, const hb_title_t *title, GValue *settings)
 {
     gint track;
     gboolean *used;
@@ -532,14 +532,12 @@ ghb_set_pref_subtitle_settings(signal_user_data_t *ud, hb_title_t *title, GValue
 }
 
 void
-ghb_set_pref_subtitle(gint titleindex, signal_user_data_t *ud)
+ghb_set_pref_subtitle(const hb_title_t *title, signal_user_data_t *ud)
 {
-    hb_title_t *title;
     int sub_count;
     GtkWidget *widget;
 
     ghb_clear_subtitle_list_ui(ud->builder);
-    title = ghb_get_title_info(titleindex);
     if (title == NULL)
     {
         return;
@@ -1050,9 +1048,11 @@ subtitle_add_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
     gboolean one_burned;
     gint track, mux;
 
-    hb_title_t *title;
-    int titleindex = ghb_settings_combo_int(ud->settings, "title");
-    title = ghb_get_title_info(titleindex);
+    int title_id, titleindex;
+    const hb_title_t *title;
+
+    title_id = ghb_settings_get_int(ud->settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
     if (title == NULL)
     {
         return;
@@ -1110,9 +1110,10 @@ subtitle_add_all_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
     gboolean one_burned = FALSE;
     gint track, mux;
 
-    hb_title_t *title;
-    int titleindex = ghb_settings_combo_int(ud->settings, "title");
-    title = ghb_get_title_info(titleindex);
+    const hb_title_t *title;
+    int title_id, titleindex;
+    title_id = ghb_settings_get_int(ud->settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
     if (title == NULL)
     {
         return;
@@ -1136,8 +1137,12 @@ subtitle_add_all_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
 G_MODULE_EXPORT void
 subtitle_reset_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
 {
-    int titleindex = ghb_settings_combo_int(ud->settings, "title");
-    ghb_set_pref_subtitle(titleindex, ud);
+    int title_id, titleindex;
+    const hb_title_t *title;
+
+    title_id = ghb_settings_get_int(ud->settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
+    ghb_set_pref_subtitle(title, ud);
 }
 
 void
@@ -1187,13 +1192,15 @@ ghb_reset_subtitles(signal_user_data_t *ud, GValue *settings)
     GValue *slist;
     GValue *subtitle;
     gint count, ii;
-    gint titleindex;
+    gint title_id, titleindex;
+    const hb_title_t *title;
 
     g_debug("ghb_reset_subtitles");
     ghb_clear_subtitle_list_settings(ud->settings);
     ghb_clear_subtitle_list_ui(ud->builder);
-    titleindex = ghb_settings_combo_int(ud->settings, "title");
-    if (titleindex < 0)
+    title_id = ghb_settings_get_int(ud->settings, "title");
+    title = ghb_lookup_title(title_id, &titleindex);
+    if (title == NULL)
         return;
 
     slist = ghb_settings_get_value(settings, "subtitle_list");
index 5e09d4f6c760d36c190b7590c4425b5d5b594d2f..0569be89e464f8a88739bf63e0a72fa9a682ec86 100644 (file)
@@ -27,8 +27,7 @@
 
 #include "settings.h"
 
-void ghb_set_pref_subtitle(gint titleindex, signal_user_data_t *ud);
-void ghb_set_pref_subtitle_settings(signal_user_data_t *ud, hb_title_t *title, GValue *settings);
+void ghb_set_pref_subtitle_settings(signal_user_data_t *ud, const hb_title_t *title, GValue *settings);
 void ghb_set_subtitle(signal_user_data_t *ud, gint track, GValue *settings);
 void ghb_reset_subtitles(signal_user_data_t *ud, GValue *settings);
 void ghb_subtitle_prune(signal_user_data_t *ud);