X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=gtk%2Fsrc%2Faudiohandler.c;h=da1044ef1d9e45d57643cafd4cd64877cd707533;hb=9155051f96ff6f923fe2137e0730a300e8ce1404;hp=fbe5e90c7af0bf5b84f4df9e9d27c04b19e06436;hpb=63be2faf81f7cfed6e49bb9ae329681d05491a28;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/gtk/src/audiohandler.c b/gtk/src/audiohandler.c index fbe5e90c..da1044ef 100644 --- a/gtk/src/audiohandler.c +++ b/gtk/src/audiohandler.c @@ -23,7 +23,7 @@ void ghb_adjust_audio_rate_combos(signal_user_data_t *ud) { - gint titleindex, audioindex, acodec, mix; + gint titleindex, track, acodec, mix; ghb_audio_info_t ainfo; GtkWidget *widget; GValue *gval; @@ -33,7 +33,7 @@ ghb_adjust_audio_rate_combos(signal_user_data_t *ud) widget = GHB_WIDGET(ud->builder, "AudioTrack"); gval = ghb_widget_value(widget); - audioindex = ghb_lookup_combo_int("AudioTrack", gval); + track = ghb_lookup_combo_int("AudioTrack", gval); ghb_value_free(gval); widget = GHB_WIDGET(ud->builder, "AudioEncoder"); @@ -48,17 +48,35 @@ ghb_adjust_audio_rate_combos(signal_user_data_t *ud) if (ghb_audio_is_passthru (acodec)) { ghb_set_default_bitrate_opts (ud->builder, 0, -1); - if (ghb_get_audio_info (&ainfo, titleindex, audioindex)) + if (ghb_get_audio_info (&ainfo, titleindex, track)) { gint br = ainfo.bitrate / 1000; // Set the values for bitrate and samplerate to the input rates - if (br >= 8) + if (br < 8) + br = 160; + if (ghb_audio_is_passthru (ainfo.codec)) + { ghb_set_passthru_bitrate_opts (ud->builder, br); + ghb_ui_update(ud, "AudioMixdown", ghb_int64_value(0)); + acodec &= ainfo.codec; + } else - br = 160; + { + if (acodec != HB_ACODEC_MASK) + { + acodec = ghb_select_audio_codec(ud, track); + ghb_ui_update(ud, "AudioEncoder", ghb_int64_value(acodec)); + } + else + { + acodec = ghb_select_audio_codec(ud, track); + } + br = ghb_find_closest_audio_bitrate(acodec, br); + mix = ghb_get_best_mix( titleindex, track, acodec, 0); + ghb_ui_update(ud, "AudioMixdown", ghb_int64_value(mix)); + } ghb_ui_update(ud, "AudioBitrate", ghb_int64_value(br)); ghb_ui_update(ud, "AudioSamplerate", ghb_int64_value(0)); - ghb_ui_update(ud, "AudioMixdown", ghb_int64_value(0)); } else { @@ -70,12 +88,12 @@ ghb_adjust_audio_rate_combos(signal_user_data_t *ud) } else if (acodec == HB_ACODEC_FAAC) { - gint br, last = 160, first = 0; + gint br, last = 320, first = 0; if (mix == HB_AMIXDOWN_6CH) { first = 192; - last = 448; + last = 768; } widget = GHB_WIDGET(ud->builder, "AudioBitrate"); @@ -92,10 +110,13 @@ ghb_adjust_audio_rate_combos(signal_user_data_t *ud) { ghb_set_default_bitrate_opts (ud->builder, 0, -1); } + ghb_settings_take_value(ud->settings, "AudioEncoderActual", + ghb_lookup_acodec_value(acodec)); + ghb_check_dependency(ud, NULL, "AudioEncoderActual"); } -void -free_audio_index_list(gpointer data) +static void +free_audio_hash_key_value(gpointer data) { g_free(data); } @@ -118,19 +139,27 @@ ghb_get_user_audio_lang(signal_user_data_t *ud, gint titleindex, gint track) void ghb_set_pref_audio(gint titleindex, signal_user_data_t *ud) { - gint acodec_code, mix_code, track; + gint fallback_acodec, track; gchar *source_lang = NULL; GtkWidget *button; ghb_audio_info_t ainfo; GHashTable *track_indices; + gint mux; const GValue *pref_audio; - const GValue *audio, *acodec, *bitrate, *rate, *mix, *drc; + const GValue *audio, *drc; + gint acodec, bitrate, mix; + gdouble rate; gint count, ii, list_count; g_debug("set_pref_audio"); + mux = ghb_settings_combo_int(ud->settings, "FileFormat"); + if (mux == HB_MUX_MP4) + fallback_acodec = HB_ACODEC_FAAC; + else + fallback_acodec = HB_ACODEC_LAME; track_indices = g_hash_table_new_full(g_int_hash, g_int_equal, - NULL, free_audio_index_list); + free_audio_hash_key_value, free_audio_hash_key_value); // Clear the audio list ghb_clear_audio_list(ud); // Find "best" audio based on audio preferences @@ -149,59 +178,61 @@ ghb_set_pref_audio(gint titleindex, signal_user_data_t *ud) for (ii = 0; ii < count; ii++) { audio = ghb_array_get_nth(pref_audio, ii); - acodec = ghb_settings_get_value(audio, "AudioEncoder"); - bitrate = ghb_settings_get_value(audio, "AudioBitrate"); - rate = ghb_settings_get_value(audio, "AudioSamplerate"); - mix = ghb_settings_get_value(audio, "AudioMixdown"); + acodec = ghb_settings_combo_int(audio, "AudioEncoder"); + bitrate = ghb_settings_combo_int(audio, "AudioBitrate"); + rate = ghb_settings_combo_double(audio, "AudioSamplerate"); + mix = ghb_settings_combo_int(audio, "AudioMixdown"); drc = ghb_settings_get_value(audio, "AudioTrackDRCSlider"); - acodec_code = ghb_lookup_combo_int("AudioEncoder", acodec); // If there are multiple audios using the same codec, then // select sequential tracks for each. The hash keeps track // of the tracks used for each codec. track = ghb_find_audio_track(titleindex, source_lang, - acodec_code, track_indices); + acodec, fallback_acodec, track_indices); // Check to see if: - // 1. pref codec is ac3 - // 2. source codec is not ac3 + // 1. pref codec is passthru + // 2. source codec is not passthru // 3. next pref is enabled if (ghb_get_audio_info (&ainfo, titleindex, track) && - ghb_audio_is_passthru (acodec_code)) + ghb_audio_is_passthru (acodec)) { - // HB_ACODEC_* are bit fields. Treat acodec_code as mask - if (!(ainfo.codec & acodec_code)) + // HB_ACODEC_* are bit fields. Treat acodec as mask + if (!(ainfo.codec & acodec & (HB_ACODEC_AC3 | HB_ACODEC_DCA))) { - acodec_code = ghb_get_default_acodec(); + if (acodec != HB_ACODEC_MASK) + acodec = fallback_acodec; // If there's more audio to process, or we've already // placed one in the list, then we can skip this one if ((ii + 1 < count) || (list_count != 0)) { // Skip this audio - acodec_code = 0; + acodec = 0; + } + else + { + bitrate = ainfo.bitrate / 1000; + if (bitrate < 8) + bitrate = 160; + rate = 0; + mix = HB_AMIXDOWN_DOLBYPLII; } - } - else - { - acodec_code &= ainfo.codec; } } if (titleindex >= 0 && track < 0) - acodec_code = 0; - if (acodec_code != 0) + acodec = 0; + if (acodec != 0) { // Add to audio list g_signal_emit_by_name(button, "clicked", ud); list_count++; ghb_ui_update(ud, "AudioTrack", ghb_int64_value(track)); - ghb_ui_update(ud, "AudioEncoder", acodec); - if (!ghb_audio_is_passthru (acodec_code)) + ghb_ui_update(ud, "AudioEncoder", ghb_int64_value(acodec)); + if (!ghb_audio_is_passthru (acodec)) { // This gets set autimatically if the codec is passthru - ghb_ui_update(ud, "AudioBitrate", bitrate); - ghb_ui_update(ud, "AudioSamplerate", rate); - mix_code = ghb_lookup_combo_int("AudioMixdown", mix); - mix_code = ghb_get_best_mix( - titleindex, track, acodec_code, mix_code); - ghb_ui_update(ud, "AudioMixdown", ghb_int64_value(mix_code)); + ghb_ui_update(ud, "AudioBitrate", ghb_int64_value(bitrate)); + ghb_ui_update(ud, "AudioSamplerate", ghb_double_value(rate)); + mix = ghb_get_best_mix( titleindex, track, acodec, mix); + ghb_ui_update(ud, "AudioMixdown", ghb_int64_value(mix)); } ghb_adjust_audio_rate_combos(ud); ghb_ui_update(ud, "AudioTrackDRCSlider", drc); @@ -263,7 +294,7 @@ ghb_audio_list_refresh_selected(signal_user_data_t *ud) 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; + gchar *actual_codec, *s_drc, *s_track, *s_codec, *s_br, *s_sr, *s_mix; gint itrack, icodec; gdouble drc; // Get the row number @@ -288,6 +319,7 @@ ghb_audio_list_refresh_selected(signal_user_data_t *ud) s_track = ghb_settings_get_string(asettings, "AudioTrack"); s_codec = ghb_settings_get_string(asettings, "AudioEncoder"); + actual_codec = ghb_settings_get_string(asettings, "AudioEncoderActual"); s_br = ghb_settings_get_string(asettings, "AudioBitrate"); s_sr = ghb_settings_get_string(asettings, "AudioSamplerate"); s_mix = ghb_settings_get_string(asettings, "AudioMixdown"); @@ -315,10 +347,12 @@ ghb_audio_list_refresh_selected(signal_user_data_t *ud) 9, s_sr, 10, s_mix, 11, drc, + 12, actual_codec, -1); g_free(s_drc); g_free(s_track); g_free(s_codec); + g_free(actual_codec); g_free(s_br); g_free(s_sr); g_free(s_mix); @@ -455,7 +489,7 @@ drc_widget_changed_cb(GtkWidget *widget, gdouble val, signal_user_data_t *ud) G_MODULE_EXPORT void subtitle_changed_cb(GtkWidget *widget, signal_user_data_t *ud) { - const gchar *name = gtk_widget_get_name(widget); + const gchar *name = ghb_get_setting_key(widget); g_debug("subtitle_changed_cb () %s", name); ghb_widget_to_setting(ud->settings, widget); ghb_check_dependency(ud, widget, NULL); @@ -491,7 +525,7 @@ add_to_audio_list(signal_user_data_t *ud, GValue *settings) GtkListStore *store; GtkTreeSelection *selection; const gchar *track, *codec, *br, *sr, *mix; - gchar *s_drc, *s_track, *s_codec, *s_br, *s_sr, *s_mix; + gchar *s_drc, *s_track, *s_codec, *s_br, *s_sr, *s_mix, *actual_codec; gint icodec, itrack; gdouble drc; @@ -510,6 +544,7 @@ add_to_audio_list(signal_user_data_t *ud, GValue *settings) s_track = ghb_settings_get_string(settings, "AudioTrack"); s_codec = ghb_settings_get_string(settings, "AudioEncoder"); + actual_codec = ghb_settings_get_string(settings, "AudioEncoderActual"); s_br = ghb_settings_get_string(settings, "AudioBitrate"); s_sr = ghb_settings_get_string(settings, "AudioSamplerate"); s_mix = ghb_settings_get_string(settings, "AudioMixdown"); @@ -540,11 +575,13 @@ add_to_audio_list(signal_user_data_t *ud, GValue *settings) 9, s_sr, 10, s_mix, 11, drc, + 12, actual_codec, -1); gtk_tree_selection_select_iter(selection, &iter); g_free(s_drc); g_free(s_track); g_free(s_codec); + g_free(actual_codec); g_free(s_br); g_free(s_sr); g_free(s_mix); @@ -560,7 +597,7 @@ audio_list_selection_changed_cb(GtkTreeSelection *selection, signal_user_data_t g_debug("audio_list_selection_changed_cb ()"); if (gtk_tree_selection_get_selected(selection, &store, &iter)) { - const gchar *track, *codec, *bitrate, *sample_rate, *mix; + const gchar *actual_codec, *track, *codec, *bitrate, *sample_rate, *mix; gdouble drc; gtk_tree_model_get(store, &iter, @@ -570,9 +607,12 @@ audio_list_selection_changed_cb(GtkTreeSelection *selection, signal_user_data_t 9, &sample_rate, 10, &mix, 11, &drc, + 12, &actual_codec, -1); ghb_ui_update(ud, "AudioTrack", ghb_string_value(track)); ghb_ui_update(ud, "AudioEncoder", ghb_string_value(codec)); + ghb_settings_set_string(ud->settings, "AudioEncoderActual", actual_codec); + ghb_check_dependency(ud, NULL, "AudioEncoderActual"); ghb_ui_update(ud, "AudioBitrate", ghb_string_value(bitrate)); ghb_ui_update(ud, "AudioSamplerate", ghb_string_value(sample_rate)); ghb_ui_update(ud, "AudioMixdown", ghb_string_value(mix)); @@ -723,6 +763,7 @@ ghb_set_audio(signal_user_data_t *ud, GValue *settings) ghb_ui_update(ud, "AudioMixdown", mix); } ghb_ui_update(ud, "AudioTrackDRCSlider", drc); + ghb_adjust_audio_rate_combos(ud); } } }