diff options
author | jstebbins <[email protected]> | 2009-09-09 22:30:15 +0000 |
---|---|---|
committer | jstebbins <[email protected]> | 2009-09-09 22:30:15 +0000 |
commit | 8d0214b7b44da8cb4c8a1c48ccef0bb3ecb441aa (patch) | |
tree | 71d9cf1517b79305942594a248399525583cdd82 /gtk/src | |
parent | 5e6d61bbaac7ffc9135c2132d6174bf7e078e912 (diff) |
LinGui:
show the correct audio codec in the audio list when it has been
changed because of incompatibility with source codec or output format
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@2812 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'gtk/src')
-rw-r--r-- | gtk/src/audiohandler.c | 32 | ||||
-rw-r--r-- | gtk/src/audiohandler.h | 1 | ||||
-rw-r--r-- | gtk/src/callbacks.c | 1 | ||||
-rw-r--r-- | gtk/src/hb-backend.c | 60 | ||||
-rw-r--r-- | gtk/src/hb-backend.h | 2 |
5 files changed, 87 insertions, 9 deletions
diff --git a/gtk/src/audiohandler.c b/gtk/src/audiohandler.c index d35979951..017a8b8d3 100644 --- a/gtk/src/audiohandler.c +++ b/gtk/src/audiohandler.c @@ -236,8 +236,8 @@ get_selected_asettings(signal_user_data_t *ud) return asettings; } -static void -audio_list_refresh_selected(signal_user_data_t *ud) +void +ghb_audio_list_refresh_selected(signal_user_data_t *ud) { GtkTreeView *treeview; GtkTreePath *treepath; @@ -249,13 +249,14 @@ audio_list_refresh_selected(signal_user_data_t *ud) GValue *asettings = NULL; const GValue *audio_list; - g_debug("audio_list_refresh_selected ()"); + g_debug("ghb_audio_list_refresh_selected ()"); treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "audio_list")); selection = gtk_tree_view_get_selection (treeview); if (gtk_tree_selection_get_selected(selection, &store, &iter)) { const gchar *track, *codec, *br, *sr, *mix; gchar *s_drc, *s_track, *s_codec, *s_br, *s_sr, *s_mix; + gint itrack, icodec; gdouble drc; // Get the row number treepath = gtk_tree_model_get_path (store, &iter); @@ -270,7 +271,9 @@ audio_list_refresh_selected(signal_user_data_t *ud) asettings = ghb_array_get_nth(audio_list, row); track = ghb_settings_combo_option(asettings, "AudioTrack"); + itrack = ghb_settings_combo_int(asettings, "AudioTrack"); codec = ghb_settings_combo_option(asettings, "AudioEncoder"); + icodec = ghb_settings_combo_int(asettings, "AudioEncoder"); br = ghb_settings_combo_option(asettings, "AudioBitrate"); sr = ghb_settings_combo_option(asettings, "AudioSamplerate"); mix = ghb_settings_combo_option(asettings, "AudioMixdown"); @@ -286,6 +289,11 @@ audio_list_refresh_selected(signal_user_data_t *ud) else s_drc = g_strdup_printf("%.1f", drc); + if (icodec == HB_ACODEC_MASK) + { + codec = ghb_select_audio_codec_str(ud, itrack); + } + gtk_list_store_set(GTK_LIST_STORE(store), &iter, // These are displayed in list 0, track, @@ -347,7 +355,7 @@ audio_codec_changed_cb(GtkWidget *widget, signal_user_data_t *ud) if (asettings != NULL) { ghb_widget_to_setting(asettings, widget); - audio_list_refresh_selected(ud); + ghb_audio_list_refresh_selected(ud); } ghb_update_destination_extension(ud); ghb_live_reset(ud); @@ -368,7 +376,7 @@ audio_track_changed_cb(GtkWidget *widget, signal_user_data_t *ud) const gchar *track; ghb_widget_to_setting(asettings, widget); - audio_list_refresh_selected(ud); + ghb_audio_list_refresh_selected(ud); track = ghb_settings_combo_option(asettings, "AudioTrack"); ghb_settings_set_string(asettings, "AudioTrackDescription", track); } @@ -387,7 +395,7 @@ audio_mix_changed_cb(GtkWidget *widget, signal_user_data_t *ud) if (asettings != NULL) { ghb_widget_to_setting(asettings, widget); - audio_list_refresh_selected(ud); + ghb_audio_list_refresh_selected(ud); } ghb_live_reset(ud); } @@ -403,7 +411,7 @@ audio_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud) if (asettings != NULL) { ghb_widget_to_setting(asettings, widget); - audio_list_refresh_selected(ud); + ghb_audio_list_refresh_selected(ud); } ghb_live_reset(ud); } @@ -429,7 +437,7 @@ drc_widget_changed_cb(GtkWidget *widget, gdouble val, signal_user_data_t *ud) if (asettings != NULL) { ghb_widget_to_setting(asettings, widget); - audio_list_refresh_selected(ud); + ghb_audio_list_refresh_selected(ud); } ghb_live_reset(ud); } @@ -478,6 +486,7 @@ add_to_audio_list(signal_user_data_t *ud, GValue *settings) GtkTreeSelection *selection; const gchar *track, *codec, *br, *sr, *mix; gchar *s_drc, *s_track, *s_codec, *s_br, *s_sr, *s_mix; + gint icodec, itrack; gdouble drc; g_debug("add_to_audio_list ()"); @@ -486,7 +495,9 @@ add_to_audio_list(signal_user_data_t *ud, GValue *settings) store = GTK_LIST_STORE(gtk_tree_view_get_model(treeview)); track = ghb_settings_combo_option(settings, "AudioTrack"); + itrack = ghb_settings_combo_int(settings, "AudioTrack"); codec = ghb_settings_combo_option(settings, "AudioEncoder"); + icodec = ghb_settings_combo_int(settings, "AudioEncoder"); br = ghb_settings_combo_option(settings, "AudioBitrate"); sr = ghb_settings_combo_option(settings, "AudioSamplerate"); mix = ghb_settings_combo_option(settings, "AudioMixdown"); @@ -502,6 +513,11 @@ add_to_audio_list(signal_user_data_t *ud, GValue *settings) else s_drc = g_strdup_printf("%.1f", drc); + if (icodec == HB_ACODEC_MASK) + { + codec = ghb_select_audio_codec_str(ud, itrack); + } + gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, // These are displayed in list diff --git a/gtk/src/audiohandler.h b/gtk/src/audiohandler.h index b064ab2a3..a3b32344b 100644 --- a/gtk/src/audiohandler.h +++ b/gtk/src/audiohandler.h @@ -33,5 +33,6 @@ void ghb_clear_audio_list(signal_user_data_t *ud); void ghb_set_audio(signal_user_data_t *ud, GValue *settings); gchar* ghb_get_user_audio_lang( signal_user_data_t *ud, gint titleindex, gint track); +void ghb_audio_list_refresh_selected(signal_user_data_t *ud); #endif // _AUDIOHANDLER_H_ diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c index 521fa3d69..3168109fd 100644 --- a/gtk/src/callbacks.c +++ b/gtk/src/callbacks.c @@ -1276,6 +1276,7 @@ container_changed_cb(GtkWidget *widget, signal_user_data_t *ud) ghb_clear_presets_selection(ud); ghb_live_reset(ud); ghb_subtitle_prune(ud); + ghb_audio_list_refresh_selected(ud); } static gchar* diff --git a/gtk/src/hb-backend.c b/gtk/src/hb-backend.c index dca551aa7..09023f69f 100644 --- a/gtk/src/hb-backend.c +++ b/gtk/src/hb-backend.c @@ -3667,6 +3667,63 @@ ghb_validate_subtitles(signal_user_data_t *ud) return TRUE; } +gint +ghb_select_audio_codec(signal_user_data_t *ud, gint track) +{ + hb_list_t * list; + hb_title_t * title; + hb_audio_config_t *audio; + + if (h_scan == NULL) return -1; + list = hb_get_titles( h_scan ); + if( !hb_list_count( list ) ) + { + return -1; + } + + gint titleindex; + + titleindex = ghb_settings_combo_int(ud->settings, "title"); + title = hb_list_item( list, titleindex ); + if (title == NULL) return -1; + + gint mux = ghb_settings_combo_int(ud->settings, "FileFormat"); + + if (track < 0 || track >= hb_list_count(title->list_audio)) + return -1; + + audio = (hb_audio_config_t *) hb_list_audio_config_item( + title->list_audio, track ); + if (mux == HB_MUX_MP4) + { + if (audio->in.codec == HB_ACODEC_AC3) + return audio->in.codec; + else + return HB_ACODEC_FAAC; + } + else + { + if (audio->in.codec == HB_ACODEC_AC3 || audio->in.codec == HB_ACODEC_DCA) + return audio->in.codec; + else + return HB_ACODEC_LAME; + } +} + +const gchar* +ghb_select_audio_codec_str(signal_user_data_t *ud, gint track) +{ + gint acodec, ii; + + acodec = ghb_select_audio_codec(ud, track); + for (ii = 0; ii < acodec_opts.count; ii++) + { + if (acodec_opts.map[ii].ivalue == acodec) + return acodec_opts.map[ii].option; + } + return "Unknown"; +} + gboolean ghb_validate_audio(signal_user_data_t *ud) { @@ -4168,9 +4225,10 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex) } if ((job->mux == HB_MUX_MP4) && ((audio.out.codec & HB_ACODEC_LAME) || + (audio.out.codec & HB_ACODEC_DCA) || (audio.out.codec & HB_ACODEC_VORBIS))) { - // mp4/mp3|vorbis combination is not supported. + // mp4/mp3|dts|vorbis combination is not supported. audio.out.codec = HB_ACODEC_FAAC; } audio.out.dynamic_range_compression = diff --git a/gtk/src/hb-backend.h b/gtk/src/hb-backend.h index f110528f0..86fd2e0aa 100644 --- a/gtk/src/hb-backend.h +++ b/gtk/src/hb-backend.h @@ -170,5 +170,7 @@ gdouble ghb_lookup_combo_double(const gchar *name, const GValue *gval); const gchar* ghb_lookup_combo_option(const gchar *name, const GValue *gval); const gchar* ghb_lookup_combo_string(const gchar *name, const GValue *gval); gchar* ghb_get_tmp_dir(); +gint ghb_select_audio_codec(signal_user_data_t *ud, gint track); +const gchar* ghb_select_audio_codec_str(signal_user_data_t *ud, gint track); #endif // _HBBACKEND_H_ |