OSDN Git Service

LinGui: fix audio preset initialization
authorjstebbins <jstebbins@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Thu, 24 Jun 2010 21:04:40 +0000 (21:04 +0000)
committerjstebbins <jstebbins@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Thu, 24 Jun 2010 21:04:40 +0000 (21:04 +0000)
sometimes audio settings were to being initialized correctly
to the values in the preset.  some code that sets reasonable
values when the encoder changes from passthru to non-passthru
was getting invoked and overwriting the preset values.

git-svn-id: svn://localhost/HandBrake/trunk@3403 b64f7644-9d1e-0410-96f1-a4d463321fa5

gtk/src/audiohandler.c
gtk/src/hb-backend.c
gtk/src/hb-backend.h

index e11d4e0..5206a31 100644 (file)
@@ -348,13 +348,15 @@ G_MODULE_EXPORT void
 audio_codec_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
 {
        static gint prev_acodec = 0;
-       gint acodec_code, mix_code;
+       gint acodec_code;
        GValue *asettings, *gval;
        
        g_debug("audio_codec_changed_cb ()");
        gval = ghb_widget_value(widget);
        acodec_code = ghb_lookup_combo_int("AudioEncoder", gval);
        ghb_value_free(gval);
+
+       asettings = get_selected_asettings(ud);
        if (ghb_audio_is_passthru (prev_acodec) && 
                !ghb_audio_is_passthru (acodec_code))
        {
@@ -362,13 +364,29 @@ audio_codec_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
                // pref settings
                gint titleindex;
                gint track;
+               gint br, sr, mix_code;
+
+               if (asettings != NULL)
+               {
+                       br = ghb_settings_get_int(asettings, "AudioBitrate");
+                       sr = ghb_settings_get_int(asettings, "AudioSamplerate");
+                       mix_code = ghb_settings_combo_int(asettings, "AudioMixdown");
+               }
+               else
+               {
+                       br = 160;
+                       sr = 0;
+                       mix_code = 0;
+               }
 
                titleindex = ghb_settings_combo_int(ud->settings, "title");
                track = ghb_settings_combo_int(ud->settings, "AudioTrack");
 
-               ghb_ui_update(ud, "AudioBitrate", ghb_string_value("160"));
-               ghb_ui_update(ud, "AudioSamplerate", ghb_string_value("source"));
-               mix_code = ghb_lookup_combo_int("AudioMixdown", ghb_string_value("dpl2"));
+               br = ghb_find_closest_audio_bitrate(acodec_code, br);
+               ghb_ui_update(ud, "AudioBitrate", ghb_int64_value(br));
+
+               sr = ghb_find_closest_audio_rate(sr);
+               ghb_ui_update(ud, "AudioSamplerate", ghb_int64_value(sr));
                mix_code = ghb_get_best_mix( titleindex, track, acodec_code, mix_code);
                ghb_ui_update(ud, "AudioMixdown", ghb_int64_value(mix_code));
        }
@@ -376,7 +394,6 @@ audio_codec_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
        ghb_grey_combo_options (ud->builder);
        ghb_check_dependency(ud, widget, NULL);
        prev_acodec = acodec_code;
-       asettings = get_selected_asettings(ud);
        if (asettings != NULL)
        {
                ghb_widget_to_setting(asettings, widget);
index 63ce0c0..71b6850 100644 (file)
@@ -1121,6 +1121,24 @@ ghb_find_closest_audio_bitrate(gint codec, gint rate)
        return result;
 }
 
+gint
+ghb_find_closest_audio_rate(gint rate)
+{
+       gint ii;
+       gint result;
+
+       result = 0;
+       for (ii = 0; ii < hb_audio_rates_count; ii++)
+       {
+               if (rate <= hb_audio_rates[ii].rate)
+               {
+                       result = hb_audio_rates[ii].rate;
+                       break;
+               }
+       }
+       return result;
+}
+
 static gint
 lookup_audio_bitrate_int(const GValue *rate)
 {
index 9756169..8395b79 100644 (file)
@@ -183,6 +183,7 @@ 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);
 gint ghb_find_closest_audio_bitrate(gint codec, gint rate);
+gint ghb_find_closest_audio_rate(gint rate);
 GValue* ghb_lookup_acodec_value(gint val);
 
 #endif // _HBBACKEND_H_