]> granicus.if.org Git - handbrake/commitdiff
LinGui: Fix sanitizing audio list after container change
authorjstebbins <jstebbins.hb@gmail.com>
Tue, 17 Feb 2015 18:24:48 +0000 (18:24 +0000)
committerjstebbins <jstebbins.hb@gmail.com>
Tue, 17 Feb 2015 18:24:48 +0000 (18:24 +0000)
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@6917 b64f7644-9d1e-0410-96f1-a4d463321fa5

gtk/src/audiohandler.c
gtk/src/audiohandler.h
gtk/src/callbacks.c

index 9f739bceb2c7d19e17caaf258d27908147e99d59..3d164ae826c45f1e16f7beba5cb6bdc681007c3c 100644 (file)
@@ -27,6 +27,7 @@ static void ghb_add_audio_to_ui(signal_user_data_t *ud, const GValue *settings);
 static GValue* audio_get_selected_settings(signal_user_data_t *ud, int *index);
 static void ghb_clear_audio_list_settings(GValue *settings);
 static void ghb_clear_audio_list_ui(GtkBuilder *builder);
+static void ghb_adjust_audio_rate_combos(signal_user_data_t *ud);
 
 static gboolean block_updates = FALSE;
 
@@ -196,12 +197,12 @@ int ghb_select_fallback(GValue *settings, int acodec)
     return hb_autopassthru_get_encoder(acodec, 0, fallback, mux->format);
 }
 
-void
-audio_sanitize_settings(GValue *settings, GValue *asettings)
+static void
+ghb_sanitize_audio_settings(GValue *settings, GValue *asettings)
 {
-    int title_id;
-    gint titleindex, track, acodec, select_acodec, mix;
+    int title_id, titleindex;
     const hb_title_t *title;
+    gint track, acodec, select_acodec, mix;
     hb_audio_config_t *aconfig;
     gint bitrate;
     gint sr;
@@ -214,6 +215,7 @@ audio_sanitize_settings(GValue *settings, GValue *asettings)
 
     title_id = ghb_settings_get_int(settings, "title");
     title = ghb_lookup_title(title_id, &titleindex);
+
     track = ghb_settings_get_int(asettings, "AudioTrack");
     acodec = ghb_settings_audio_encoder_codec(asettings, "AudioEncoder");
     mix = ghb_settings_mixdown_mix(asettings, "AudioMixdown");
@@ -229,29 +231,24 @@ audio_sanitize_settings(GValue *settings, GValue *asettings)
     gint copy_mask = ghb_get_copy_mask(settings);
     select_acodec = ghb_select_audio_codec(mux->format, aconfig, acodec,
                                            fallback, copy_mask);
-    if (ghb_audio_is_passthru (select_acodec))
+    if (ghb_audio_is_passthru(select_acodec))
     {
         if (aconfig)
         {
             bitrate = aconfig->in.bitrate / 1000;
 
             // Set the values for bitrate and samplerate to the input rates
-            mix = HB_AMIXDOWN_NONE;
-            ghb_settings_set_string(asettings, "AudioMixdown",
-                                    hb_mixdown_get_short_name(mix));
             select_acodec &= aconfig->in.codec | HB_ACODEC_PASS_FLAG;
-            ghb_settings_set_string(asettings, "AudioSamplerate",
-                    ghb_audio_samplerate_get_short_name(0));
         }
         else
         {
-            mix = HB_AMIXDOWN_NONE;
-            ghb_settings_set_string(asettings, "AudioMixdown",
-                                    hb_mixdown_get_short_name(mix));
-            ghb_settings_set_string(asettings, "AudioSamplerate",
-                    ghb_audio_samplerate_get_short_name(0));
             bitrate = 448;
         }
+        mix = HB_AMIXDOWN_NONE;
+        ghb_settings_set_string(asettings, "AudioMixdown",
+                                hb_mixdown_get_short_name(mix));
+        ghb_settings_set_string(asettings, "AudioSamplerate",
+                                ghb_audio_samplerate_get_short_name(0));
         ghb_settings_set_double(asettings, "AudioTrackDRCSlider", 0.0);
     }
     else
@@ -263,103 +260,94 @@ audio_sanitize_settings(GValue *settings, GValue *asettings)
                                 hb_mixdown_get_short_name(mix));
     }
     ghb_settings_set_string(asettings, "AudioBitrate",
-        ghb_audio_bitrate_get_short_name(bitrate));
-
+                            ghb_audio_bitrate_get_short_name(bitrate));
     ghb_settings_set_string(asettings, "AudioEncoder",
                             hb_audio_encoder_get_short_name(select_acodec));
 }
 
-void
+static void
 ghb_adjust_audio_rate_combos(signal_user_data_t *ud)
 {
-    int title_id, titleindex;
-    const hb_title_t *title;
-    gint track, acodec, select_acodec, mix;
-    hb_audio_config_t *aconfig;
-    gint bitrate;
-    gint sr = 48000;
-
-    const char *mux_id;
-    const hb_container_t *mux;
-
-    mux_id = ghb_settings_get_const_string(ud->settings, "FileFormat");
-    mux = ghb_lookup_container_by_name(mux_id);
+    GValue *asettings = audio_get_selected_settings(ud, NULL);
+    if (asettings != NULL)
+    {
+        ghb_sanitize_audio_settings(ud->settings, asettings);
 
-    title_id = ghb_settings_get_int(ud->settings, "title");
-    title = ghb_lookup_title(title_id, &titleindex);
+        int track, title_id, mix, acodec;
+        const hb_title_t *title;
+        hb_audio_config_t *aconfig;
+        gboolean codec_defined_bitrate = FALSE;
 
-    track = ghb_settings_get_int(ud->settings, "AudioTrack");
-    acodec = ghb_settings_audio_encoder_codec(ud->settings, "AudioEncoder");
-    mix = ghb_settings_mixdown_mix(ud->settings, "AudioMixdown");
-    bitrate = ghb_settings_audio_bitrate_rate(ud->settings, "AudioBitrate");
-    sr = ghb_settings_audio_samplerate_rate(ud->settings, "AudioSamplerate");
+        title_id = ghb_settings_get_int(ud->settings, "title");
+        title = ghb_lookup_title(title_id, NULL);
+        track = ghb_settings_get_int(asettings, "AudioTrack");
+        aconfig = ghb_get_audio_info(title, track);
 
-    aconfig = ghb_get_audio_info(title, track);
-    if (sr == 0)
-    {
-        sr = aconfig ? aconfig->in.samplerate : 48000;
-    }
-    gint fallback = ghb_select_fallback(ud->settings, acodec);
-    gint copy_mask = ghb_get_copy_mask(ud->settings);
-    select_acodec = ghb_select_audio_codec(mux->format, aconfig, acodec,
-                                           fallback, copy_mask);
-    gboolean codec_defined_bitrate = FALSE;
-    if (ghb_audio_is_passthru (select_acodec))
-    {
-        if (aconfig)
+        acodec = ghb_settings_audio_encoder_codec(asettings, "AudioEncoder");
+        mix = ghb_settings_mixdown_mix(asettings, "AudioMixdown");
+        if (ghb_audio_is_passthru(acodec))
         {
-            bitrate = aconfig->in.bitrate / 1000;
-
-            // Set the values for bitrate and samplerate to the input rates
-            ghb_set_bitrate_opts (ud->builder, bitrate, bitrate, bitrate);
-            mix = HB_AMIXDOWN_NONE;
-            ghb_ui_update(ud, "AudioMixdown",
-                          ghb_string_value(hb_mixdown_get_short_name(mix)));
-            select_acodec &= aconfig->in.codec | HB_ACODEC_PASS_FLAG;
-            codec_defined_bitrate = TRUE;
-            ghb_ui_update(ud, "AudioSamplerate",
-                ghb_string_value(
-                    ghb_audio_samplerate_get_short_name(0)));
+            if (aconfig)
+            {
+                int bitrate = aconfig->in.bitrate / 1000;
+                ghb_set_bitrate_opts(ud->builder, bitrate, bitrate, bitrate);
+                codec_defined_bitrate = TRUE;
+            }
         }
-        else
+        if (!codec_defined_bitrate)
         {
-            ghb_ui_update(ud, "AudioSamplerate",
-                ghb_string_value(
-                    ghb_audio_samplerate_get_short_name(0)));
-            mix = HB_AMIXDOWN_NONE;
-            ghb_ui_update(ud, "AudioMixdown",
-                          ghb_string_value(hb_mixdown_get_short_name(mix)));
-            bitrate = 448;
+            int low, high, sr;
+            sr = ghb_settings_audio_samplerate_rate(asettings,
+                                                    "AudioSamplerate");
+            if (sr == 0)
+            {
+                sr = aconfig ? aconfig->in.samplerate : 48000;
+            }
+            mix = ghb_get_best_mix(aconfig, acodec, mix);
+            hb_audio_bitrate_get_limits(acodec, sr, mix, &low, &high);
+            ghb_set_bitrate_opts(ud->builder, low, high, -1);
         }
-        ghb_ui_update(ud, "AudioTrackDRCSlider", ghb_double_value(0));
-    }
-    else
-    {
-        if (mix == HB_AMIXDOWN_NONE)
-            mix = ghb_get_best_mix( aconfig, select_acodec, mix);
-        bitrate = hb_audio_bitrate_get_best(select_acodec, bitrate, sr, mix);
+        ghb_ui_update(ud, "AudioEncoder",
+                      ghb_settings_get_value(asettings, "AudioEncoder"));
+        ghb_ui_update(ud, "AudioBitrate",
+                      ghb_settings_get_value(asettings, "AudioBitrate"));
+        ghb_ui_update(ud, "AudioSamplerate",
+                      ghb_settings_get_value(asettings, "AudioSamplerate"));
         ghb_ui_update(ud, "AudioMixdown",
-                      ghb_string_value(hb_mixdown_get_short_name(mix)));
+                      ghb_settings_get_value(asettings, "AudioMixdown"));
+        ghb_ui_update(ud, "AudioTrackDRCSlider",
+                      ghb_settings_get_value(asettings, "AudioTrackDRCSlider"));
+        ghb_audio_list_refresh_selected(ud);
     }
-    if (!codec_defined_bitrate)
+}
+
+void ghb_santiize_audio_tracks(signal_user_data_t *ud)
+{
+    int ii;
+    GValue *alist = ghb_settings_get_value(ud->settings, "audio_list");
+    int count = ghb_array_len(alist);
+
+    for (ii = 0; ii < count; ii++)
     {
-        int low, high;
-        mix = ghb_get_best_mix( aconfig, select_acodec, mix);
-        hb_audio_bitrate_get_limits(select_acodec, sr, mix, &low, &high);
-        ghb_set_bitrate_opts(ud->builder, low, high, -1);
+        GValue *asettings = ghb_array_get_nth(alist, ii);
+        ghb_sanitize_audio_settings(ud->settings, asettings);
     }
-    ghb_ui_update(ud, "AudioBitrate",
-        ghb_string_value(ghb_audio_bitrate_get_short_name(bitrate)));
+    ghb_audio_list_refresh_all(ud);
 
-    ghb_settings_set_string(ud->settings, "AudioEncoder",
-                            hb_audio_encoder_get_short_name(select_acodec));
     GValue *asettings = audio_get_selected_settings(ud, NULL);
-    if (asettings)
+    if (asettings != NULL)
     {
-        ghb_settings_set_string(asettings, "AudioEncoder",
-                            hb_audio_encoder_get_short_name(select_acodec));
+        ghb_ui_update(ud, "AudioEncoder",
+                      ghb_settings_get_value(asettings, "AudioEncoder"));
+        ghb_ui_update(ud, "AudioBitrate",
+                      ghb_settings_get_value(asettings, "AudioBitrate"));
+        ghb_ui_update(ud, "AudioSamplerate",
+                      ghb_settings_get_value(asettings, "AudioSamplerate"));
+        ghb_ui_update(ud, "AudioMixdown",
+                      ghb_settings_get_value(asettings, "AudioMixdown"));
+        ghb_ui_update(ud, "AudioTrackDRCSlider",
+                      ghb_settings_get_value(asettings, "AudioTrackDRCSlider"));
     }
-    ghb_audio_list_refresh_selected(ud);
 }
 
 static char * get_drc_string(gdouble drc)
@@ -526,7 +514,7 @@ audio_add_track(
 
     ghb_settings_set_double(asettings, "AudioTrackGainSlider", gain);
 
-    audio_sanitize_settings(settings, asettings);
+    ghb_sanitize_audio_settings(settings, asettings);
     audio_add_to_settings(settings, asettings);
 
     return asettings;
index b0afdac0c5bbf972d2bef76607cc02426d887845..93f91708f16e3e9fd886b70fe972bd9939fcc4d5 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "settings.h"
 
-void ghb_adjust_audio_rate_combos(signal_user_data_t *ud);
+void ghb_santiize_audio_tracks(signal_user_data_t *ud);
 void ghb_set_pref_audio_settings(GValue *settings);
 const gchar* ghb_get_user_audio_lang(GValue *settings, const hb_title_t *title, gint track);
 void ghb_audio_list_refresh_selected(signal_user_data_t *ud);
index 471a625745f5866ece9fd655d9603b383c0d9df9..65da635b5ef73ba2833dce259fed3bcad96574ba 100644 (file)
@@ -1621,7 +1621,7 @@ window_delete_event_cb(GtkWidget *widget, GdkEvent *event, signal_user_data_t *u
 static void
 update_acodec(signal_user_data_t *ud)
 {
-    ghb_adjust_audio_rate_combos(ud);
+    ghb_santiize_audio_tracks(ud);
     ghb_grey_combo_options (ud);
 }