]> granicus.if.org Git - handbrake/commitdiff
LinGui: simplify subtitle track refrencing
authorjstebbins <jstebbins.hb@gmail.com>
Mon, 24 Feb 2014 03:42:58 +0000 (03:42 +0000)
committerjstebbins <jstebbins.hb@gmail.com>
Mon, 24 Feb 2014 03:42:58 +0000 (03:42 +0000)
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@6079 b64f7644-9d1e-0410-96f1-a4d463321fa5

gtk/src/hb-backend.c
gtk/src/hb-backend.h
gtk/src/queuehandler.c
gtk/src/subtitlehandler.c

index 69847365e2a5cde047cb432cdd6799b59b9bdeff..aca268e893a8862c54d21542e5b49c207094554a 100644 (file)
@@ -52,25 +52,6 @@ typedef struct
     options_map_t *map;
 } combo_opts_t;
 
-static gchar **index_str = NULL;
-static gint index_str_size = 0;
-
-static void
-index_str_init(gint max_index)
-{
-    gint ii;
-
-    if (max_index+1 > index_str_size)
-    {
-        index_str = realloc(index_str, (max_index+1) * sizeof(char*));
-        for (ii = index_str_size; ii <= max_index; ii++)
-        {
-            index_str[ii] = g_strdup_printf("%d", ii);
-        }
-        index_str_size = max_index + 1;
-    }
-}
-
 static options_map_t d_subtitle_track_sel_opts[] =
 {
     {N_("None"),                                    "none",       0, "0"},
@@ -363,12 +344,6 @@ combo_opts_t trellis_opts =
     d_trellis_opts
 };
 
-combo_opts_t subtitle_opts =
-{
-    0,
-    NULL
-};
-
 typedef struct
 {
     const gchar *name;
@@ -399,7 +374,6 @@ combo_name_map_t combo_name_map[] =
     {"x264_subme", &subme_opts},
     {"x264_analyse", &analyse_opts},
     {"x264_trellis", &trellis_opts},
-    {"SubtitleTrack", &subtitle_opts},
     {NULL, NULL}
 };
 
@@ -2129,7 +2103,7 @@ audio_track_opts_set(GtkBuilder *builder, const gchar *name, const hb_title_t *t
     hb_audio_config_t * audio;
     gint ii;
     gint count = 0;
-    gchar *str;
+    gchar *opt;
 
     g_debug("audio_track_opts_set ()\n");
     GtkComboBox *combo = GTK_COMBO_BOX(GHB_WIDGET(builder, name));
@@ -2142,62 +2116,59 @@ audio_track_opts_set(GtkBuilder *builder, const gchar *name, const hb_title_t *t
     if( count <= 0 )
     {
         // No audio. set some default
-        gtk_list_store_append(store, &iter);
+        opt = g_strdup_printf("<small>%s</small>", _("No Audio"));
 
-        str = g_strdup_printf("<small>%s</small>", _("No Audio"));
+        gtk_list_store_append(store, &iter);
         gtk_list_store_set(store, &iter,
-                           0, str,
+                           0, opt,
                            1, TRUE,
                            2, "none",
                            3, -1.0,
                            4, "none",
                            -1);
-        g_free(str);
+        g_free(opt);
         return;
     }
     for (ii = 0; ii < count; ii++)
     {
-        gtk_list_store_append(store, &iter);
-
         char idx[4];
         audio = hb_list_audio_config_item(title->list_audio, ii);
-        str = g_strdup_printf("<small>%d - %s</small>",
+        opt = g_strdup_printf("<small>%d - %s</small>",
                               ii + 1, audio->lang.description);
         snprintf(idx, 4, "%d", ii);
+
+        gtk_list_store_append(store, &iter);
         gtk_list_store_set(store, &iter,
-                           0, str,
+                           0, opt,
                            1, TRUE,
                            2, idx,
                            3, (gdouble)ii,
                            4, idx,
                            -1);
-        g_free(str);
+        g_free(opt);
     }
     gtk_combo_box_set_active (combo, 0);
 }
 
 void
-subtitle_track_opts_set(GtkBuilder *builder, const gchar *name, const hb_title_t *title)
+subtitle_track_opts_set(
+    GtkBuilder *builder,
+    const gchar *name,
+    const hb_title_t *title)
 {
     GtkTreeIter iter;
     GtkListStore *store;
     hb_subtitle_t * subtitle;
     gint ii, count = 0;
-    static char ** options = NULL;
 
-    g_debug("subtitle_track_opts_set ()\n");
     GtkComboBox *combo = GTK_COMBO_BOX(GHB_WIDGET(builder, name));
     store = GTK_LIST_STORE(gtk_combo_box_get_model (combo));
     gtk_list_store_clear(store);
+
     if (title != NULL)
     {
         count = hb_list_count( title->list_subtitle );
     }
-    if (subtitle_opts.map) g_free(subtitle_opts.map);
-
-    subtitle_opts.count = count+1;
-    subtitle_opts.map = g_malloc((subtitle_opts.count)*sizeof(options_map_t));
-
     if (count > 0)
     {
         gtk_list_store_append(store, &iter);
@@ -2208,35 +2179,27 @@ subtitle_track_opts_set(GtkBuilder *builder, const gchar *name, const hb_title_t
                            3, -1.0,
                            4, "auto",
                            -1);
-        subtitle_opts.map[0].option = "Foreign Audio Search";
-        subtitle_opts.map[0].shortOpt = "-1";
-        subtitle_opts.map[0].ivalue = -1;
-        subtitle_opts.map[0].svalue = "auto";
-
-        if (options != NULL)
-            g_strfreev(options);
-        options = g_malloc((count+1)*sizeof(gchar*));
-        index_str_init(count-1);
+
         for (ii = 0; ii < count; ii++)
         {
-            subtitle = (hb_subtitle_t *)hb_list_item(title->list_subtitle, ii);
-            options[ii] = g_strdup_printf("%d - %s (%s)", ii+1,
-                subtitle->lang,
-                hb_subsource_name(subtitle->source));
-            subtitle_opts.map[ii+1].option = options[ii];
-            subtitle_opts.map[ii+1].shortOpt = index_str[ii];
-            subtitle_opts.map[ii+1].ivalue = ii;
-            subtitle_opts.map[ii+1].svalue = subtitle->iso639_2;
+            gchar *opt;
+            char idx[4];
+
+            subtitle = hb_list_item(title->list_subtitle, ii);
+            opt = g_strdup_printf("%d - %s (%s)", ii+1, subtitle->lang,
+                                  hb_subsource_name(subtitle->source));
+            snprintf(idx, 4, "%d", ii);
+
             gtk_list_store_append(store, &iter);
             gtk_list_store_set(store, &iter,
-                        0, options[ii],
+                        0, opt,
                         1, TRUE,
-                        2, index_str[ii],
+                        2, idx,
                         3, (gdouble)ii,
-                        4, subtitle->iso639_2,
+                        4, idx,
                         -1);
+            g_free(opt);
         }
-        options[count] = NULL;
     }
     else
     {
@@ -2248,10 +2211,6 @@ subtitle_track_opts_set(GtkBuilder *builder, const gchar *name, const hb_title_t
                            3, 0.0,
                            4, "none",
                            -1);
-        subtitle_opts.map[0].option = "None";
-        subtitle_opts.map[0].shortOpt = "0";
-        subtitle_opts.map[0].ivalue = 0;
-        subtitle_opts.map[0].svalue = "none";
     }
     gtk_combo_box_set_active (combo, 0);
 }
@@ -2326,21 +2285,6 @@ ghb_find_audio_track(const hb_title_t *title, const gchar *lang, int start)
     return -1;
 }
 
-gint
-ghb_find_pref_subtitle_track(const gchar *lang)
-{
-    gint ii, count;
-    count = subtitle_opts.count;
-    for (ii = 0; ii < count; ii++)
-    {
-        if (strcmp(lang, subtitle_opts.map[ii].svalue) == 0)
-        {
-            return subtitle_opts.map[ii].ivalue;
-        }
-    }
-    return -2;
-}
-
 gint
 ghb_find_subtitle_track(const hb_title_t * title, const gchar * lang, int start)
 {
@@ -2642,6 +2586,7 @@ init_ui_combo_boxes(GtkBuilder *builder)
     init_combo_box(builder, "SrtCodeset");
     init_combo_box(builder, "title");
     init_combo_box(builder, "AudioTrack");
+    init_combo_box(builder, "SubtitleTrack");
     init_combo_box(builder, "VideoEncoder");
     init_combo_box(builder, "AudioEncoder");
     init_combo_box(builder, "AudioEncoderFallback");
@@ -3387,6 +3332,17 @@ ghb_get_audio_info(const hb_title_t *title, gint track)
     return hb_list_audio_config_item(title->list_audio, track);
 }
 
+hb_subtitle_t*
+ghb_get_subtitle_info(const hb_title_t *title, gint track)
+{
+    if (title == NULL) return NULL;
+    if (!hb_list_count(title->list_subtitle))
+    {
+        return NULL;
+    }
+    return hb_list_item(title->list_subtitle, track);
+}
+
 hb_list_t *
 ghb_get_title_list()
 {
@@ -4765,7 +4721,7 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, int titleindex)
             hb_subtitle_t * subt;
             hb_subtitle_config_t sub_config;
 
-            subt = (hb_subtitle_t *)hb_list_item(title->list_subtitle, subtitle);
+            subt = hb_list_item(title->list_subtitle, subtitle);
             if (subt != NULL)
             {
                 sub_config = subt->config;
index a17e5c818cbfc67503e0fb3009382cfc49e857c8..823edb5d8577ab6b56b3718cc3d8fc6ca5df18b0 100644 (file)
@@ -114,7 +114,6 @@ 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);
@@ -129,7 +128,6 @@ void ghb_update_ui_combo_box(
 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(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);
@@ -206,5 +204,7 @@ int ghb_settings_audio_bitrate_rate(const GValue *settings, const char *name);
 const hb_rate_t* ghb_settings_audio_bitrate(
     const GValue *settings, const char *name);
 const char* ghb_audio_bitrate_get_short_name(int rate);
+hb_audio_config_t* ghb_get_audio_info(const hb_title_t *title, gint track);
+hb_subtitle_t* ghb_get_subtitle_info(const hb_title_t *title, gint track);
 
 #endif // _HBBACKEND_H_
index 2c50008916d6b309b2e6f0b30fb3ea3258a177e4..385160e06c7a32af0e22a8b617b0e9908f1b2488 100644 (file)
@@ -538,11 +538,11 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
     count = ghb_array_len(audio_list);
     if (count == 1)
     {
-        XPRINT("<b>Audio:</b> ");
+        XPRINT("<b>Audio:</b> <small>");
     }
     else if (count > 1)
     {
-        XPRINT("<b>Audio Tracks: %d</b>\n", count);
+        XPRINT("<b>Audio Tracks: %d</b><small>\n", count);
     }
     for (ii = 0; ii < count; ii++)
     {
@@ -574,18 +574,17 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
 
         if (audio_encoder->codec & HB_ACODEC_PASS_FLAG)
         {
-            XPRINT("<small>%s --> Encoder: %s</small>\n",
-                   track, audio_encoder->name);
+            XPRINT("%s --> Encoder: %s\n", track, audio_encoder->name);
         }
         else
         {
-            XPRINT(
-            "<small>%s, Encoder: %s, Mixdown: %s, SampleRate: %s, %s</small>\n",
+            XPRINT("%s --> Encoder: %s, Mixdown: %s, SampleRate: %s, %s\n",
              track, audio_encoder->name, mix->name, sr->name, quality);
         }
         g_free(track);
         g_free(quality);
     }
+    XPRINT("</small>");
 
     // Next line in the display (Subtitle)
     // Subtitle Tracks: count
index cc792d7ddf340117f93139d57a37a54094f20c28..4d7861acbfb75c9a2926efd9b79c98e8cb3a666a 100644 (file)
@@ -272,9 +272,9 @@ subtitle_add_to_settings(GValue *settings, GValue *subsettings)
 }
 
 static void
-subtitle_set_track_description(GValue *subsettings)
+subtitle_set_track_description(GValue *settings, GValue *subsettings)
 {
-    char *track;
+    char *desc;
 
     if (ghb_settings_get_int(subsettings, "SubtitleSource") == SRTSUB)
     {
@@ -290,25 +290,41 @@ subtitle_set_track_description(GValue *subsettings)
             gchar *basename;
 
             basename = g_path_get_basename(filename);
-            track = g_strdup_printf("%s (%s)(SRT)(%s)", lang, code, basename);
+            desc = g_strdup_printf("%s (%s)(SRT)(%s)", lang, code, basename);
             g_free(basename);
         }
         else
         {
-            track = g_strdup_printf("%s (%s)(SRT)", lang, code);
+            desc = g_strdup_printf("%s (%s)(SRT)", lang, code);
         }
         g_free(code);
     }
     else
     {
-        track = g_strdup(
-                    ghb_settings_combo_option(subsettings, "SubtitleTrack"));
+        int title_id, titleindex;
+        const hb_title_t *title;
+        int track;
+        hb_subtitle_t *subtitle;
+
+        title_id = ghb_settings_get_int(settings, "title");
+        title = ghb_lookup_title(title_id, &titleindex);
+        track = ghb_settings_get_int(subsettings, "SubtitleTrack");
+        if (track < 0)
+        {
+            desc = g_strdup(_("Foreign Audio Search"));
+        }
+        else
+        {
+            subtitle = ghb_get_subtitle_info(title, track);
+            desc = g_strdup_printf("%d - %s (%s)", track + 1, subtitle->lang,
+                                   hb_subsource_name(subtitle->source));
+        }
     }
 
     ghb_settings_set_string(
-        subsettings, "SubtitleTrackDescription", track);
+        subsettings, "SubtitleTrackDescription", desc);
 
-    g_free(track);
+    g_free(desc);
 }
 
 static GValue*  subtitle_add_track(
@@ -360,7 +376,7 @@ static GValue*  subtitle_add_track(
 
     ghb_settings_set_int(subsettings, "SrtOffset", 0);
 
-    subtitle_set_track_description(subsettings);
+    subtitle_set_track_description(settings, subsettings);
 
     if (!hb_subtitle_can_pass(source, mux))
     {
@@ -746,7 +762,7 @@ subtitle_track_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
         track = ghb_settings_get_int(subsettings, "SubtitleTrack");
         source = ghb_subtitle_track_source(ud->settings, track);
         ghb_settings_set_int(subsettings, "SubtitleSource", source);
-        subtitle_set_track_description(subsettings);
+        subtitle_set_track_description(ud->settings, subsettings);
         subtitle_update_dialog_widgets(ud, subsettings);
         ghb_subtitle_list_refresh_selected(ud);
         ghb_live_reset(ud);
@@ -822,7 +838,7 @@ subtitle_srt_radio_toggled_cb(GtkWidget *widget, signal_user_data_t *ud)
             source = ghb_subtitle_track_source(ud->settings, track);
             ghb_settings_set_int(subsettings, "SubtitleSource", source);
         }
-        subtitle_set_track_description(subsettings);
+        subtitle_set_track_description(ud->settings, subsettings);
         subtitle_update_dialog_widgets(ud, subsettings);
         ghb_subtitle_list_refresh_selected(ud);
         ghb_live_reset(ud);
@@ -881,7 +897,7 @@ srt_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
     if (subsettings != NULL)
     {
         ghb_widget_to_setting(subsettings, widget);
-        subtitle_set_track_description(subsettings);
+        subtitle_set_track_description(ud->settings, subsettings);
         ghb_subtitle_list_refresh_selected(ud);
         ghb_live_reset(ud);
     }
@@ -901,7 +917,7 @@ srt_file_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
         gchar *filename, *dirname;
 
         ghb_widget_to_setting(subsettings, widget);
-        subtitle_set_track_description(subsettings);
+        subtitle_set_track_description(ud->settings, subsettings);
         ghb_subtitle_list_refresh_selected(ud);
         ghb_live_reset(ud);
 
@@ -934,7 +950,7 @@ srt_lang_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
     if (subsettings != NULL)
     {
         ghb_widget_to_setting(subsettings, widget);
-        subtitle_set_track_description(subsettings);
+        subtitle_set_track_description(ud->settings, subsettings);
         ghb_subtitle_list_refresh_selected(ud);
         ghb_live_reset(ud);
     }