From 888fa38b6f36f092afe189624604b1b347195cee Mon Sep 17 00:00:00 2001 From: jstebbins Date: Mon, 24 Feb 2014 03:42:58 +0000 Subject: LinGui: simplify subtitle track refrencing git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@6079 b64f7644-9d1e-0410-96f1-a4d463321fa5 --- gtk/src/hb-backend.c | 126 +++++++++++++++------------------------------- gtk/src/hb-backend.h | 4 +- gtk/src/queuehandler.c | 11 ++-- gtk/src/subtitlehandler.c | 44 ++++++++++------ 4 files changed, 78 insertions(+), 107 deletions(-) (limited to 'gtk/src') diff --git a/gtk/src/hb-backend.c b/gtk/src/hb-backend.c index 69847365e..aca268e89 100644 --- a/gtk/src/hb-backend.c +++ b/gtk/src/hb-backend.c @@ -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("%s", _("No Audio")); - str = g_strdup_printf("%s", _("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("%d - %s", + opt = g_strdup_printf("%d - %s", 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; diff --git a/gtk/src/hb-backend.h b/gtk/src/hb-backend.h index a17e5c818..823edb5d8 100644 --- a/gtk/src/hb-backend.h +++ b/gtk/src/hb-backend.h @@ -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_ diff --git a/gtk/src/queuehandler.c b/gtk/src/queuehandler.c index 2c5000891..385160e06 100644 --- a/gtk/src/queuehandler.c +++ b/gtk/src/queuehandler.c @@ -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("Audio: "); + XPRINT("Audio: "); } else if (count > 1) { - XPRINT("Audio Tracks: %d\n", count); + XPRINT("Audio Tracks: %d\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("%s --> Encoder: %s\n", - track, audio_encoder->name); + XPRINT("%s --> Encoder: %s\n", track, audio_encoder->name); } else { - XPRINT( - "%s, Encoder: %s, Mixdown: %s, SampleRate: %s, %s\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(""); // Next line in the display (Subtitle) // Subtitle Tracks: count diff --git a/gtk/src/subtitlehandler.c b/gtk/src/subtitlehandler.c index cc792d7dd..4d7861acb 100644 --- a/gtk/src/subtitlehandler.c +++ b/gtk/src/subtitlehandler.c @@ -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); } -- cgit v1.2.3