]> granicus.if.org Git - handbrake/commitdiff
LinGui: address scott's complaint that the way i handle audio presets
authorjstebbins <jstebbins.hb@gmail.com>
Fri, 8 Aug 2008 17:53:44 +0000 (17:53 +0000)
committerjstebbins <jstebbins.hb@gmail.com>
Fri, 8 Aug 2008 17:53:44 +0000 (17:53 +0000)
is confusing.  Eliminated the extra audio settings tab.  consolidated
everything in the Audio/Subtitles tab. up to 8 audios can be stored in a
preset now.  limit was 2 before, even though up to 8 audios could be
added manually for an encode.

git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1620 b64f7644-9d1e-0410-96f1-a4d463321fa5

gtk/src/callbacks.c
gtk/src/ghb.ui
gtk/src/hb-backend.c
gtk/src/hb-backend.h
gtk/src/internal_defaults
gtk/src/internal_defaults.h
gtk/src/settings.c
gtk/src/settings.h
gtk/src/standard_presets

index 8c1088f0bf6de189c21436efeb12c30b0ebeb87a..8a95722d824f0e79f2298bfc7372672e5cbc0a2c 100644 (file)
@@ -59,8 +59,6 @@ static dependency_t dep_map[] =
        {"title", "preview_frame", "none", TRUE},
        {"title", "picture_label", "none", TRUE},
        {"title", "picture_tab", "none", TRUE},
-       {"title", "audio_label", "none", TRUE},
-       {"title", "audio_tab", "none", TRUE},
        {"title", "chapters_label", "none", TRUE},
        {"title", "chapters_tab", "none", TRUE},
        {"title", "title", "none", TRUE},
@@ -92,14 +90,8 @@ static dependency_t dep_map[] =
        {"video_codec", "x264_tab", "x264", FALSE},
        {"video_codec", "x264_tab_label", "x264", FALSE},
        {"video_codec", "ipod_file", "x264", FALSE},
-       {"audio_track", "audio_add", "none", TRUE},
-       {"audio_track", "audio_codec", "none", TRUE},
-       {"audio_track", "audio_bitrate", "none", TRUE},
-       {"audio_track", "audio_sample_rate", "none", TRUE},
-       {"audio_track", "audio_mix", "none", TRUE},
-       {"audio_track", "audio_drc", "none", TRUE},
        {"audio_codec", "audio_bitrate", "ac3", TRUE},
-       {"audio_codec", "audio_sample_rate", "ac3", TRUE},
+       {"audio_codec", "audio_rate", "ac3", TRUE},
        {"audio_codec", "audio_mix", "ac3", TRUE},
        {"audio_codec", "audio_drc", "ac3", TRUE},
        {"x264_bframes", "x264_weighted_bframes", "0", TRUE},
@@ -112,16 +104,6 @@ static dependency_t dep_map[] =
        {"x264_subme", "x264_brdo", "<6", TRUE},
        {"x264_analyse", "x264_direct", "none", TRUE},
        {"x264_me", "x264_merange", "umh|esa", FALSE},
-       {"pref_audio_codec1", "pref_audio_bitrate1", "none", TRUE},
-       {"pref_audio_codec1", "pref_audio_rate1", "none", TRUE},
-       {"pref_audio_codec1", "pref_audio_mix1", "none", TRUE},
-       {"pref_audio_codec1", "pref_audio_codec2", "none", TRUE},
-       {"pref_audio_codec1", "pref_audio_bitrate2", "none", TRUE},
-       {"pref_audio_codec1", "pref_audio_rate2", "none", TRUE},
-       {"pref_audio_codec1", "pref_audio_mix2", "none", TRUE},
-       {"pref_audio_codec2", "pref_audio_bitrate2", "none", TRUE},
-       {"pref_audio_codec2", "pref_audio_rate2", "none", TRUE},
-       {"pref_audio_codec2", "pref_audio_mix2", "none", TRUE},
        {"chapter_markers", "chapters_list", "enable", FALSE},
 };
 
@@ -953,7 +935,7 @@ adjust_audio_rate_combos(signal_user_data_t *ud)
                // Set the values for bitrate and samplerate to the input rates
                ghb_set_passthru_rate_opts (ud->builder, ainfo.bitrate);
                ghb_ui_update_int (ud, "audio_bitrate", ainfo.bitrate);
-               ghb_ui_update_int (ud, "audio_sample_rate", 0);
+               ghb_ui_update_int (ud, "audio_rate", 0);
                ghb_ui_update_int (ud, "audio_mix", 0);
        }
        else
@@ -969,104 +951,75 @@ set_pref_audio(gint titleindex, signal_user_data_t *ud)
        const gchar *svalue;
        GtkWidget *button;
        ghb_audio_info_t ainfo;
-       gboolean skipped_1st = FALSE;
+       gchar* drcstr;
+       gint index;
+       GHashTable *track_indicies;
+       gint *iptr;
        
+       track_indicies = g_hash_table_new(g_int_hash, g_int_equal);
        // Clear the audio list
        clear_audio_list(ud);
-
        // Find "best" audio based on audio preferences
        button = GHB_WIDGET (ud->builder, "audio_add");
-       svalue = ghb_settings_get_short_opt(ud->settings, "pref_source_audio_lang");
-       acodec = ghb_settings_get_int(ud->settings, "pref_source_audio_codec");
-       track = ghb_find_audio_track(titleindex, svalue, acodec);
-       ghb_ui_update_int(ud, "audio_track", track);
-       // Get the resulting track, it may not be what was asked for.
-       track = ghb_settings_get_int(ud->settings, "audio_track");
-       if (track == -1)
-       {
-               // No audio tracks. Perhaps no source dvd yet
-               // Just initialize the audio controls and do not add anything to
-               // the audio list
-               acodec = ghb_settings_get_int(ud->settings, "pref_audio_codec1");
-               ghb_ui_update_int(ud, "audio_codec", acodec);
-               ivalue = ghb_settings_get_int(ud->settings, "pref_audio_bitrate1");
-               ghb_ui_update_int(ud, "audio_bitrate", ivalue);
-               ivalue = ghb_settings_get_int(ud->settings, "pref_audio_rate1");
-               ghb_ui_update_int(ud, "audio_sample_rate", ivalue);
-               ivalue = ghb_settings_get_int(ud->settings, "pref_audio_mix1");
-               ghb_ui_update_int(ud, "audio_mix", ivalue);
-               svalue = ghb_settings_get_string(ud->settings, "pref_audio_drc");
-               ghb_ui_update(ud, "audio_drc", svalue);
-               return;
-       }
-       acodec = ghb_settings_get_int(ud->settings, "pref_audio_codec1");
-       // Check to see if:
-       // 1. pref codec is ac3
-       // 2. source codec is not ac3
-       // 3. 2nd pref is enabled
-       if (ghb_get_audio_info (&ainfo, titleindex, track) && ghb_audio_is_passthru (acodec))
+       svalue = ghb_settings_get_short_opt(ud->settings, "source_audio_lang");
+       gint acount = ghb_pref_acount();
+       gint ii;
+       gint list_count = 0;
+       for (ii = 0; ii < acount; ii++)
        {
-               if (!ghb_audio_is_passthru(ainfo.codec))
+               acodec = ghb_pref_acodec(ii);
+               iptr = g_hash_table_lookup(track_indicies, &acodec);
+               if (iptr == NULL)
+                       index = 0;
+               else
+                       index = *(gint*)iptr;
+
+               track = ghb_find_audio_track(titleindex, svalue, index);
+               // Check to see if:
+               // 1. pref codec is ac3
+               // 2. source codec is not ac3
+               // 3. next pref is enabled
+               if (ghb_get_audio_info (&ainfo, titleindex, track) && 
+                       ghb_audio_is_passthru (acodec))
                {
-                       acodec = ghb_get_default_acodec();
-                       if (ghb_settings_get_int(ud->settings, "pref_audio_codec2") != 0)
+                       if (!ghb_audio_is_passthru(ainfo.codec))
                        {
-                               // Skip first pref audio
-                               acodec = 0;
-                               skipped_1st = TRUE;
+                               acodec = ghb_get_default_acodec();
+                               if ((ii + 1 < acount) || (list_count != 0))
+                               {
+                                       // Skip this audio
+                                       acodec = 0;
+                               }
                        }
                }
-       }
-       ghb_ui_update_int(ud, "audio_codec", acodec);
-       if (!ghb_audio_is_passthru (acodec))
-       {
-               // This gets set autimatically if the codec is passthru
-               ivalue = ghb_settings_get_int(ud->settings, "pref_audio_bitrate1");
-               ghb_ui_update_int(ud, "audio_bitrate", ivalue);
-               ivalue = ghb_settings_get_int(ud->settings, "pref_audio_rate1");
-               ghb_ui_update_int(ud, "audio_sample_rate", ivalue);
-               ivalue = ghb_settings_get_int(ud->settings, "pref_audio_mix1");
-               ivalue = ghb_get_best_mix(titleindex, track, acodec, ivalue);
-               ghb_ui_update_int(ud, "audio_mix", ivalue);
-       }
-       svalue = ghb_settings_get_string(ud->settings, "pref_audio_drc");
-       ghb_ui_update(ud, "audio_drc", svalue);
-       if (acodec != 0) // 0 is none
-       {
-               // Add to audio list
-               g_signal_emit_by_name(button, "clicked", ud);
-       }
-       acodec = ghb_settings_get_int(ud->settings, "pref_audio_codec2");
-       // Check to see if:
-       // 1. pref codec is ac3
-       // 2. source codec is not ac3
-       if (ghb_audio_is_passthru (acodec))
-       {
-               if (!ghb_audio_is_passthru(ainfo.codec) && skipped_1st)
-               {
-                       acodec = ghb_get_default_acodec();
-               }
-               else
-               {
+               if (titleindex >= 0 && track < 0)
                        acodec = 0;
+               if (acodec != 0)
+               {
+                       // Add to audio list
+                       g_signal_emit_by_name(button, "clicked", ud);
+                       list_count++;
+                       ghb_ui_update_int(ud, "audio_track", track);
+                       ghb_ui_update_int(ud, "audio_codec", acodec);
+                       if (!ghb_audio_is_passthru (acodec))
+                       {
+                               // This gets set autimatically if the codec is passthru
+                               ivalue = ghb_pref_bitrate(ii);
+                               ghb_ui_update_int(ud, "audio_bitrate", ivalue);
+                               ivalue = ghb_pref_rate(ii);
+                               ghb_ui_update_int(ud, "audio_rate", ivalue);
+                               ivalue = ghb_pref_mix(ii);
+                               ivalue = ghb_get_best_mix(titleindex, track, acodec, ivalue);
+                               ghb_ui_update_int(ud, "audio_mix", ivalue);
+                       }
+                       drcstr = g_strdup_printf("%.2g", ghb_pref_drc(ii));
+                       ghb_ui_update(ud, "audio_drc", drcstr);
+                       g_free(drcstr);
+                       index++;
+                       g_hash_table_insert(track_indicies, &acodec, &index);
                }
        }
-       if (acodec != 0)
-       {
-               ghb_ui_update_int(ud, "audio_codec", acodec);
-               // Do the second prefs track
-               if (!ghb_audio_is_passthru (acodec))
-               {
-                       ivalue = ghb_settings_get_int(ud->settings, "pref_audio_bitrate2");
-                       ghb_ui_update_int(ud, "audio_bitrate", ivalue);
-                       ivalue = ghb_settings_get_int(ud->settings, "pref_audio_rate2");
-                       ghb_ui_update_int(ud, "audio_sample_rate", ivalue);
-                       ivalue = ghb_settings_get_int(ud->settings, "pref_audio_mix2");
-                       ivalue = ghb_get_best_mix(titleindex, track, acodec, ivalue);
-                       ghb_ui_update_int(ud, "audio_mix", ivalue);
-               }
-               g_signal_emit_by_name(button, "clicked", ud);
-       }
+       g_hash_table_destroy(track_indicies);
 }
 
 static gint preview_button_width;
@@ -1171,11 +1124,11 @@ audio_codec_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
                gint titleindex = ghb_settings_get_int(ud->settings, "title");
                gint track = ghb_settings_get_int(ud->settings, "audio_track");
 
-               ivalue = ghb_settings_get_int(ud->settings, "pref_audio_bitrate1");
+               ivalue = ghb_pref_bitrate(0);
                ghb_ui_update_int (ud, "audio_bitrate", ivalue);
-               ivalue = ghb_settings_get_int(ud->settings, "pref_audio_rate1");
-               ghb_ui_update_int (ud, "audio_sample_rate", ivalue);
-               ivalue = ghb_settings_get_int(ud->settings, "pref_audio_mix1");
+               ivalue = ghb_pref_rate(0);
+               ghb_ui_update_int (ud, "audio_rate", ivalue);
+               ivalue = ghb_pref_mix(0);
                ivalue = ghb_get_best_mix(titleindex, track, acodec, ivalue);
                ghb_ui_update_int (ud, "audio_mix", ivalue);
        }
@@ -1571,14 +1524,14 @@ add_to_audio_list(signal_user_data_t *ud, GHashTable *settings)
                0, ghb_settings_get_option(settings, "audio_track"),
                1, ghb_settings_get_option(settings, "audio_codec"),
                2, ghb_settings_get_option(settings, "audio_bitrate"),
-               3, ghb_settings_get_option(settings, "audio_sample_rate"),
+               3, ghb_settings_get_option(settings, "audio_rate"),
                4, ghb_settings_get_option(settings, "audio_mix"),
                // These are used to set combo box values when a list item is selected
                5, ghb_settings_get_string(settings, "audio_drc"),
                6, ghb_settings_get_short_opt(settings, "audio_track"),
                7, ghb_settings_get_short_opt(settings, "audio_codec"),
                8, ghb_settings_get_short_opt(settings, "audio_bitrate"),
-               9, ghb_settings_get_short_opt(settings, "audio_sample_rate"),
+               9, ghb_settings_get_short_opt(settings, "audio_rate"),
                10, ghb_settings_get_short_opt(settings, "audio_mix"),
                -1);
        gtk_tree_selection_select_iter(selection, &iter);
@@ -1617,14 +1570,14 @@ audio_list_refresh_selected(signal_user_data_t *ud)
                        0, ghb_settings_get_option(asettings, "audio_track"),
                        1, ghb_settings_get_option(asettings, "audio_codec"),
                        2, ghb_settings_get_option(asettings, "audio_bitrate"),
-                       3, ghb_settings_get_option(asettings, "audio_sample_rate"),
+                       3, ghb_settings_get_option(asettings, "audio_rate"),
                        4, ghb_settings_get_option(asettings, "audio_mix"),
                        // These are used to set combo box values when a list item is selected
                        5, ghb_settings_get_string(asettings, "audio_drc"),
                        6, ghb_settings_get_short_opt(asettings, "audio_track"),
                        7, ghb_settings_get_short_opt(asettings, "audio_codec"),
                        8, ghb_settings_get_short_opt(asettings, "audio_bitrate"),
-                       9, ghb_settings_get_short_opt(asettings, "audio_sample_rate"),
+                       9, ghb_settings_get_short_opt(asettings, "audio_rate"),
                        10, ghb_settings_get_short_opt(asettings, "audio_mix"),
                        -1);
        }
@@ -1684,7 +1637,7 @@ audio_list_selection_changed_cb(GtkTreeSelection *selection, signal_user_data_t
                ghb_ui_update(ud, "audio_track", track);
                ghb_ui_update(ud, "audio_codec", codec);
                ghb_ui_update(ud, "audio_bitrate", bitrate);
-               ghb_ui_update(ud, "audio_sample_rate", sample_rate);
+               ghb_ui_update(ud, "audio_rate", sample_rate);
                ghb_ui_update(ud, "audio_mix", mix);
                ghb_ui_update(ud, "audio_drc", drc);
                widget = GHB_WIDGET (ud->builder, "audio_remove");
@@ -1718,8 +1671,8 @@ audio_add_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
        ghb_settings_set(asettings,     "audio_codec", ghb_widget_value(widget));
        widget = GHB_WIDGET(ud->builder, "audio_bitrate");
        ghb_settings_set(asettings,     "audio_bitrate", ghb_widget_value(widget));
-       widget = GHB_WIDGET(ud->builder, "audio_sample_rate");
-       ghb_settings_set(asettings,     "audio_sample_rate", ghb_widget_value(widget));
+       widget = GHB_WIDGET(ud->builder, "audio_rate");
+       ghb_settings_set(asettings,     "audio_rate", ghb_widget_value(widget));
        widget = GHB_WIDGET(ud->builder, "audio_mix");
        ghb_settings_set(asettings,     "audio_mix", ghb_widget_value(widget));
        widget = GHB_WIDGET(ud->builder, "audio_drc");
@@ -1808,14 +1761,14 @@ audio_list_refresh(signal_user_data_t *ud)
                                0, ghb_settings_get_option(asettings, "audio_track"),
                                1, ghb_settings_get_option(asettings, "audio_codec"),
                                2, ghb_settings_get_option(asettings, "audio_bitrate"),
-                               3, ghb_settings_get_option(asettings, "audio_sample_rate"),
+                               3, ghb_settings_get_option(asettings, "audio_rate"),
                                4, ghb_settings_get_option(asettings, "audio_mix"),
                                // These are used to set combo box values when a list item is selected
                                5, ghb_settings_get_string(asettings, "audio_drc"),
                                6, ghb_settings_get_short_opt(asettings, "audio_track"),
                                7, ghb_settings_get_short_opt(asettings, "audio_codec"),
                                8, ghb_settings_get_short_opt(asettings, "audio_bitrate"),
-                               9, ghb_settings_get_short_opt(asettings, "audio_sample_rate"),
+                               9, ghb_settings_get_short_opt(asettings, "audio_rate"),
                                10, ghb_settings_get_short_opt(asettings, "audio_mix"),
                                -1);
                        done = !gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter);
@@ -1920,6 +1873,51 @@ ghb_select_preset(GtkBuilder *builder, const gchar *preset)
        }
 }
 
+static void
+update_audio_presets(signal_user_data_t *ud)
+{
+       GSList *link = ud->audio_settings;
+       GHashTable *asettings;
+       gchar *acodec, *bitrate, *rate, *mix, *drc;
+       GString *pref_acodec, *pref_bitrate, *pref_rate, *pref_mix, *pref_drc;
+       pref_acodec = g_string_new("");
+       pref_bitrate = g_string_new("");
+       pref_rate = g_string_new("");
+       pref_mix = g_string_new("");
+       pref_drc = g_string_new("");
+       while (link)
+       {
+               gchar *format = link->next ? "%s," : "%s";
+               asettings = (GHashTable*)link->data;
+               acodec = (gchar*)ghb_settings_get_short_opt(asettings, "audio_codec");
+               g_string_append_printf( pref_acodec, format, acodec);
+               bitrate = (gchar*)ghb_settings_get_string(asettings, "audio_bitrate");
+               g_string_append_printf( pref_bitrate, format, bitrate);
+               rate = (gchar*)ghb_settings_get_string(asettings, "audio_rate");
+               g_string_append_printf( pref_rate, format, rate);
+               mix = (gchar*)ghb_settings_get_short_opt(asettings, "audio_mix");
+               g_string_append_printf( pref_mix, format, mix);
+               drc = (gchar*)ghb_settings_get_string(asettings, "audio_drc");
+               g_string_append_printf( pref_drc, format, drc);
+               link = link->next;
+       }
+       acodec = g_string_free(pref_acodec, FALSE);
+       bitrate = g_string_free(pref_bitrate, FALSE);
+       rate = g_string_free(pref_rate, FALSE);
+       mix = g_string_free(pref_mix, FALSE);
+       drc = g_string_free(pref_drc, FALSE);
+       ghb_settings_set_string(ud->settings, "pref_audio_codec", acodec);
+       ghb_settings_set_string(ud->settings, "pref_audio_bitrate", bitrate);
+       ghb_settings_set_string(ud->settings, "pref_audio_rate", rate);
+       ghb_settings_set_string(ud->settings, "pref_audio_mix", mix);
+       ghb_settings_set_string(ud->settings, "pref_audio_drc", drc);
+       g_free(acodec);
+       g_free(bitrate);
+       g_free(rate);
+       g_free(mix);
+       g_free(drc);
+}
+
 void
 presets_save_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
 {
@@ -1930,6 +1928,7 @@ presets_save_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
        const gchar *preset = "";
 
        g_debug("presets_save_clicked_cb ()\n");
+       // Construct the audio settings presets from the current audio list
        preset = ghb_settings_get_string (ud->settings, "preset");
        // Clear the description
        desc = GTK_TEXT_VIEW(GHB_WIDGET(ud->builder, "preset_description"));
@@ -1945,6 +1944,7 @@ presets_save_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
                const gchar *name = gtk_entry_get_text(entry);
                g_debug("description to settings\n");
                ghb_widget_to_setting(ud->settings, GTK_WIDGET(desc));
+               update_audio_presets(ud);
                ghb_settings_save(ud, name);
                ghb_presets_list_update(ud);
                // Make the new preset the selected item
@@ -2280,7 +2280,7 @@ add_to_queue_list(signal_user_data_t *ud, job_settings_t *item)
                                GHashTable *asettings = (GHashTable*)link->data;
                                const gchar *acodec = ghb_settings_get_option(asettings, "audio_codec");
                                const gchar *bitrate = ghb_settings_get_string(asettings, "audio_bitrate");
-                               const gchar *samplerate = ghb_settings_get_string(asettings, "audio_sample_rate");
+                               const gchar *samplerate = ghb_settings_get_string(asettings, "audio_rate");
                                gint track = ghb_settings_get_int(asettings, "audio_track");
                                const gchar *mix = ghb_settings_get_option(asettings, "audio_mix");
                                g_string_append_printf(pass,
index d8435291125bda6468e051263aab0baee79d9751..6af3229550dbe08feb89bcfa765c04b2b9d5cc31 100644 (file)
     <property name="upper">4</property>
     <property name="lower">1</property>
     <property name="page_increment">1</property>
-    <property name="step_increment">0.20000000000000001</property>
+    <property name="step_increment">0.2</property>
     <property name="page_size">0</property>
-    <property name="value">2.6000000000000001</property>
+    <property name="value">2.6</property>
   </object>
   <object class="GtkAdjustment" id="adjustment7">
     <property name="upper">4</property>
                                       </packing>
                                     </child>
                                     <child>
-                                      <object class="GtkComboBox" id="audio_sample_rate">
+                                      <object class="GtkComboBox" id="audio_rate">
                                         <property name="visible">True</property>
                                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                                         <signal handler="audio_widget_changed_cb" name="changed"/>
                         </child>
                       </object>
                     </child>
-                  </object>
-                </child>
-                <child type="tab">
-                  <object class="GtkLabel" id="audio_label">
-                    <property name="visible">True</property>
-                    <property name="label" translatable="yes">Audio List</property>
-                  </object>
-                  <packing>
-                    <property name="position">2</property>
-                    <property name="tab_fill">False</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkHBox" id="hbox25">
-                    <property name="visible">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <child>
-                      <object class="GtkVBox" id="vbox19">
+                      <object class="GtkHBox" id="hboxj01">
                         <property name="visible">True</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="spacing">5</property>
                         <child>
-                          <object class="GtkFrame" id="frame8">
+                          <object class="GtkFrame" id="framej01">
                             <property name="visible">True</property>
                             <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                             <property name="label_xalign">0</property>
                             <property name="shadow_type">GTK_SHADOW_ETCHED_OUT</property>
                             <child>
-                              <object class="GtkAlignment" id="alignment19">
+                              <object class="GtkAlignment" id="alignmentj01">
                                 <property name="visible">True</property>
                                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                                 <property name="top_padding">2</property>
                                 <property name="left_padding">12</property>
                                 <property name="right_padding">2</property>
                                 <child>
-                                  <object class="GtkVBox" id="vbox30">
-                                    <property name="visible">True</property>
-                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="spacing">2</property>
-                                    <child>
-                                      <object class="GtkTable" id="table4">
-                                        <property name="visible">True</property>
-                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                        <property name="n_rows">2</property>
-                                        <property name="n_columns">2</property>
-                                        <child>
-                                          <object class="GtkComboBox" id="pref_source_audio_lang">
-                                            <property name="width_request">150</property>
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <signal handler="setting_widget_changed_cb" name="changed"/>
-                                          </object>
-                                          <packing>
-                                            <property name="top_attach">1</property>
-                                            <property name="bottom_attach">2</property>
-                                            <property name="x_options">GTK_FILL</property>
-                                          </packing>
-                                        </child>
-                                        <child>
-                                          <object class="GtkComboBox" id="pref_source_audio_codec">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <signal handler="setting_widget_changed_cb" name="changed"/>
-                                          </object>
-                                          <packing>
-                                            <property name="left_attach">1</property>
-                                            <property name="right_attach">2</property>
-                                            <property name="top_attach">1</property>
-                                            <property name="bottom_attach">2</property>
-                                            <property name="x_options">GTK_FILL</property>
-                                          </packing>
-                                        </child>
-                                        <child>
-                                          <object class="GtkLabel" id="label42">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <property name="label" translatable="yes">Language</property>
-                                          </object>
-                                          <packing>
-                                            <property name="x_options">GTK_FILL</property>
-                                          </packing>
-                                        </child>
-                                        <child>
-                                          <object class="GtkLabel" id="label43">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <property name="label" translatable="yes">Codec</property>
-                                          </object>
-                                          <packing>
-                                            <property name="left_attach">1</property>
-                                            <property name="right_attach">2</property>
-                                            <property name="x_options">GTK_FILL</property>
-                                          </packing>
-                                        </child>
-                                      </object>
-                                    </child>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                            <child type="label">
-                              <object class="GtkLabel" id="label47">
-                                <property name="visible">True</property>
-                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                <property name="label" translatable="yes">&lt;b&gt;Audio Source&lt;/b&gt;</property>
-                                <property name="use_markup">True</property>
-                              </object>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="padding">2</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkFrame" id="frame18">
-                            <property name="visible">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="label_xalign">0</property>
-                            <property name="shadow_type">GTK_SHADOW_ETCHED_OUT</property>
-                            <child>
-                              <object class="GtkAlignment" id="alignment20">
-                                <property name="visible">True</property>
-                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                <property name="left_padding">12</property>
-                                <child>
-                                  <object class="GtkVBox" id="vbox35">
+                                  <object class="GtkHBox" id="hboxj02">
                                     <property name="visible">True</property>
                                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                    <property name="spacing">5</property>
+
                                     <child>
-                                      <object class="GtkTable" id="table3">
-                                        <property name="visible">True</property>
-                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                        <property name="n_rows">3</property>
-                                        <property name="n_columns">4</property>
-                                        <child>
-                                          <object class="GtkComboBox" id="pref_audio_codec1">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <signal handler="setting_widget_changed_cb" name="changed"/>
-                                          </object>
-                                          <packing>
-                                            <property name="top_attach">1</property>
-                                            <property name="bottom_attach">2</property>
-                                          </packing>
-                                        </child>
-                                        <child>
-                                          <object class="GtkComboBox" id="pref_audio_bitrate1">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <signal handler="setting_widget_changed_cb" name="changed"/>
-                                          </object>
-                                          <packing>
-                                            <property name="left_attach">1</property>
-                                            <property name="right_attach">2</property>
-                                            <property name="top_attach">1</property>
-                                            <property name="bottom_attach">2</property>
-                                          </packing>
-                                        </child>
-                                        <child>
-                                          <object class="GtkComboBox" id="pref_audio_rate1">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <signal handler="setting_widget_changed_cb" name="changed"/>
-                                          </object>
-                                          <packing>
-                                            <property name="left_attach">2</property>
-                                            <property name="right_attach">3</property>
-                                            <property name="top_attach">1</property>
-                                            <property name="bottom_attach">2</property>
-                                          </packing>
-                                        </child>
-                                        <child>
-                                          <object class="GtkComboBox" id="pref_audio_mix1">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <signal handler="setting_widget_changed_cb" name="changed"/>
-                                          </object>
-                                          <packing>
-                                            <property name="left_attach">3</property>
-                                            <property name="right_attach">4</property>
-                                            <property name="top_attach">1</property>
-                                            <property name="bottom_attach">2</property>
-                                          </packing>
-                                        </child>
-                                        <child>
-                                          <object class="GtkComboBox" id="pref_audio_codec2">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <signal handler="setting_widget_changed_cb" name="changed"/>
-                                          </object>
-                                          <packing>
-                                            <property name="top_attach">2</property>
-                                            <property name="bottom_attach">3</property>
-                                          </packing>
-                                        </child>
-                                        <child>
-                                          <object class="GtkComboBox" id="pref_audio_bitrate2">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <signal handler="setting_widget_changed_cb" name="changed"/>
-                                          </object>
-                                          <packing>
-                                            <property name="left_attach">1</property>
-                                            <property name="right_attach">2</property>
-                                            <property name="top_attach">2</property>
-                                            <property name="bottom_attach">3</property>
-                                          </packing>
-                                        </child>
-                                        <child>
-                                          <object class="GtkComboBox" id="pref_audio_rate2">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <signal handler="setting_widget_changed_cb" name="changed"/>
-                                          </object>
-                                          <packing>
-                                            <property name="left_attach">2</property>
-                                            <property name="right_attach">3</property>
-                                            <property name="top_attach">2</property>
-                                            <property name="bottom_attach">3</property>
-                                          </packing>
-                                        </child>
-                                        <child>
-                                          <object class="GtkComboBox" id="pref_audio_mix2">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <signal handler="setting_widget_changed_cb" name="changed"/>
-                                          </object>
-                                          <packing>
-                                            <property name="left_attach">3</property>
-                                            <property name="right_attach">4</property>
-                                            <property name="top_attach">2</property>
-                                            <property name="bottom_attach">3</property>
-                                          </packing>
-                                        </child>
-                                        <child>
-                                          <object class="GtkLabel" id="label44">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <property name="label" translatable="yes">Codec</property>
-                                          </object>
-                                        </child>
-                                        <child>
-                                          <object class="GtkLabel" id="label45">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <property name="label" translatable="yes">Bitrate</property>
-                                          </object>
-                                          <packing>
-                                            <property name="left_attach">1</property>
-                                            <property name="right_attach">2</property>
-                                          </packing>
-                                        </child>
-                                        <child>
-                                          <object class="GtkLabel" id="label46">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <property name="label" translatable="yes">Sample Rate</property>
-                                          </object>
-                                          <packing>
-                                            <property name="left_attach">2</property>
-                                            <property name="right_attach">3</property>
-                                          </packing>
-                                        </child>
-                                        <child>
-                                          <object class="GtkLabel" id="label78">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <property name="label" translatable="yes">Mix Down</property>
-                                          </object>
-                                          <packing>
-                                            <property name="left_attach">3</property>
-                                            <property name="right_attach">4</property>
-                                          </packing>
-                                        </child>
-                                      </object>
-                                    </child>
-                                    <child>
-                                      <object class="GtkVBox" id="vbox36">
+                                      <object class="GtkComboBox" id="source_audio_lang">
+                                        <property name="width_request">150</property>
                                         <property name="visible">True</property>
                                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                        <child>
-                                          <object class="GtkLabel" id="label79">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <property name="label" translatable="yes">Dynamic Range Compression</property>
-                                          </object>
-                                        </child>
-                                        <child>
-                                          <object class="GtkHScale" id="pref_audio_drc">
-                                            <property name="visible">True</property>
-                                            <property name="can_focus">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <property name="adjustment">adjustment7</property>
-                                            <property name="value_pos">GTK_POS_RIGHT</property>
-                                            <signal handler="setting_widget_changed_cb" name="value_changed"/>
-                                          </object>
-                                          <packing>
-                                            <property name="position">1</property>
-                                          </packing>
-                                        </child>
+                                        <signal handler="setting_widget_changed_cb" name="changed"/>
                                       </object>
-                                      <packing>
-                                        <property name="position">1</property>
-                                      </packing>
                                     </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
                             <child type="label">
-                              <object class="GtkLabel" id="label75">
+                              <object class="GtkLabel" id="labelj01">
                                 <property name="visible">True</property>
                                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                <property name="label" translatable="yes">&lt;b&gt;Audio Encoding Defaults&lt;/b&gt;</property>
+                                <property name="label" translatable="yes">&lt;b&gt;Preferred Audio Language&lt;/b&gt;</property>
                                 <property name="use_markup">True</property>
                               </object>
                             </child>
                           </object>
-                          <packing>
-                            <property name="position">1</property>
-                          </packing>
                         </child>
                         <child>
-                          <object class="GtkFrame" id="frame17">
+                          <object class="GtkFrame" id="framej02">
                             <property name="visible">True</property>
                             <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                             <property name="label_xalign">0</property>
                             <property name="shadow_type">GTK_SHADOW_ETCHED_OUT</property>
                             <child>
-                              <object class="GtkAlignment" id="alignment40">
+                              <object class="GtkAlignment" id="alignmentj02">
                                 <property name="visible">True</property>
                                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                                 <property name="top_padding">2</property>
                                 <property name="left_padding">12</property>
                                 <property name="right_padding">2</property>
                                 <child>
-                                  <object class="GtkVBox" id="vbox33">
+                                  <object class="GtkHBox" id="hboxj03">
                                     <property name="visible">True</property>
                                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                    <property name="spacing">5</property>
+
                                     <child>
-                                      <object class="GtkHBox" id="hbox44">
+                                      <object class="GtkComboBox" id="subtitle_lang">
+                                        <property name="width_request">150</property>
                                         <property name="visible">True</property>
                                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                        <child>
-                                          <object class="GtkLabel" id="label71">
-                                            <property name="width_request">80</property>
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <property name="xalign">0</property>
-                                            <property name="label" translatable="yes">Language:</property>
-                                          </object>
-                                          <packing>
-                                            <property name="expand">False</property>
-                                          </packing>
-                                        </child>
-                                        <child>
-                                          <object class="GtkComboBox" id="subtitle_lang">
-                                            <property name="width_request">150</property>
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <signal handler="subtitle_changed_cb" name="changed"/>
-                                          </object>
-                                          <packing>
-                                            <property name="expand">False</property>
-                                            <property name="position">1</property>
-                                          </packing>
-                                        </child>
+                                        <signal handler="subtitle_changed_cb" name="changed"/>
                                       </object>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                      </packing>
                                     </child>
                                     <child>
                                       <object class="GtkCheckButton" id="forced_subtitles">
                                         <property name="position">1</property>
                                       </packing>
                                     </child>
-                                    <child>
-                                      <placeholder/>
-                                    </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
                             <child type="label">
-                              <object class="GtkLabel" id="label70">
+                              <object class="GtkLabel" id="labelj02">
                                 <property name="visible">True</property>
                                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                                 <property name="label" translatable="yes">&lt;b&gt;Subtitles&lt;/b&gt;</property>
                             </child>
                           </object>
                           <packing>
-                            <property name="position">2</property>
+                            <property name="position">1</property>
                           </packing>
                         </child>
                       </object>
                       <packing>
                         <property name="expand">False</property>
-                        <property name="padding">2</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkVBox" id="vbox20">
-                        <property name="visible">True</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <child>
-                          <object class="GtkVBox" id="vbox23">
-                            <property name="visible">True</property>
-                            <child>
-                              <placeholder/>
-                            </child>
-                            <child>
-                              <placeholder/>
-                            </child>
-                          </object>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="position">1</property>
+                        <property name="position">3</property>
                       </packing>
                     </child>
                   </object>
                     <property name="label" translatable="yes">Audio/Subtitles</property>
                   </object>
                   <packing>
-                    <property name="position">3</property>
+                    <property name="position">2</property>
                     <property name="tab_fill">False</property>
                   </packing>
                 </child>
@@ -3361,7 +3039,7 @@ no-fast-pskip=0:no-dct-decimate=0:cabac=1</property>
                     <property name="label" translatable="yes">H.264</property>
                   </object>
                   <packing>
-                    <property name="position">4</property>
+                    <property name="position">3</property>
                     <property name="tab_fill">False</property>
                   </packing>
                 </child>
@@ -3425,7 +3103,7 @@ no-fast-pskip=0:no-dct-decimate=0:cabac=1</property>
                     <property name="label" translatable="yes">Chapters</property>
                   </object>
                   <packing>
-                    <property name="position">5</property>
+                    <property name="position">4</property>
                     <property name="tab_fill">False</property>
                   </packing>
                 </child>
index dd63ccf167e41abb5ded63e82a916575a53c458d..57e1a857c19a8022608926a10511287ca8c78db4 100644 (file)
@@ -103,10 +103,10 @@ combo_opts_t vcodec_opts =
 
 static options_map_t d_acodec_opts[] =
 {
-       {"AAC (faac)",      "faac",   HB_ACODEC_FAAC, 0.0, ""},
-       {"MP3 (lame)",      "lame",   HB_ACODEC_LAME, 0.0, ""},
-       {"Vorbis",          "vorbis", HB_ACODEC_VORBIS, 0.0, ""},
-       {"AC3 (pass-thru)", "ac3",    HB_ACODEC_AC3, 0.0, ""},
+       {"AAC (faac)",      "faac",   HB_ACODEC_FAAC, 0.0, "faac"},
+       {"MP3 (lame)",      "lame",   HB_ACODEC_LAME, 0.0, "lame"},
+       {"Vorbis",          "vorbis", HB_ACODEC_VORBIS, 0.0, "vorbis"},
+       {"AC3 (pass-thru)", "ac3",    HB_ACODEC_AC3, 0.0, "ac3"},
 };
 combo_opts_t acodec_opts =
 {
@@ -114,33 +114,6 @@ combo_opts_t acodec_opts =
        d_acodec_opts
 };
 
-static options_map_t d_pref_acodec_opts[] =
-{
-       {"None",            "none",   0, 0.0, ""},
-       {"AAC (faac)",      "faac",   HB_ACODEC_FAAC, 0.0, ""},
-       {"MP3 (lame)",      "lame",   HB_ACODEC_LAME, 0.0, ""},
-       {"Vorbis",          "vorbis", HB_ACODEC_VORBIS, 0.0, ""},
-       {"AC3 (pass-thru)", "ac3",    HB_ACODEC_AC3, 0.0, ""},
-};
-combo_opts_t pref_acodec_opts =
-{
-       sizeof(d_pref_acodec_opts)/sizeof(options_map_t),
-       d_pref_acodec_opts
-};
-
-static options_map_t d_source_acodec_opts[] =
-{
-       {"AC3",      "ac3",   HB_ACODEC_AC3, 0.0, ""},
-       {"DTS",      "dca",   HB_ACODEC_DCA, 0.0, ""},
-       {"MP2",      "mpga",   HB_ACODEC_MPGA, 0.0, ""},
-       {"LPCM",      "lpcm",   HB_ACODEC_LPCM, 0.0, ""},
-};
-combo_opts_t source_acodec_opts =
-{
-       sizeof(d_source_acodec_opts)/sizeof(options_map_t),
-       d_source_acodec_opts
-};
-
 static options_map_t d_direct_opts[] =
 {
        {"None",      "none",     0, 0.0, "none"},
@@ -470,6 +443,78 @@ ghb_vquality_range(signal_user_data_t *ud, gint *min, gint *max)
        }
 }
 
+gint
+ghb_lookup_acodec(const gchar *acodec)
+{
+       gint ii;
+
+       for (ii = 0; ii < acodec_opts.count; ii++)
+       {
+               if (strcmp(acodec_opts.map[ii].shortOpt, acodec) == 0)
+               {
+                       return acodec_opts.map[ii].ivalue;
+               }
+       }
+       return HB_ACODEC_FAAC;
+}
+
+gint
+ghb_lookup_bitrate(const gchar *bitrate)
+{
+       gint ii;
+
+       for (ii = 0; ii < hb_audio_bitrates_count; ii++)
+       {
+               if (strcmp(hb_audio_bitrates[ii].string, bitrate) == 0)
+               {
+                       return hb_audio_bitrates[ii].rate * 1000;
+               }
+       }
+       return 160 * 1000;
+}
+
+gint
+ghb_lookup_rate(const gchar *rate)
+{
+       gint ii;
+
+       for (ii = 0; ii < hb_audio_rates_count; ii++)
+       {
+               if (strcmp(hb_audio_rates[ii].string, rate) == 0)
+               {
+                       return hb_audio_rates[ii].rate;
+               }
+       }
+       // Coincidentally, the string "source" will return 0
+       // which is our flag to use "same as source"
+       return 0;
+}
+
+gint
+ghb_lookup_mix(const gchar *mix)
+{
+       gint ii;
+
+       for (ii = 0; ii < hb_audio_mixdowns_count; ii++)
+       {
+               if (strcmp(hb_audio_mixdowns[ii].short_name, mix) == 0)
+               {
+                       return hb_audio_mixdowns[ii].amixdown;
+               }
+       }
+       return HB_AMIXDOWN_DOLBYPLII;
+}
+
+gdouble
+ghb_lookup_drc(const gchar *drc)
+{
+       gdouble dval;
+       dval = g_strtod(drc, NULL);
+       if (dval < 1.0) dval = 1.0;
+       if (dval > 4.0) dval = 4.0;
+       return dval;
+}
+
 static setting_value_t*
 get_acodec_value(gint val)
 {
@@ -615,14 +660,8 @@ ghb_grey_combo_options(GtkBuilder *builder)
        httpopt = ghb_widget_int(widget);
 
        grey_combo_box_item(builder, "audio_codec", HB_ACODEC_FAAC, FALSE);
-       grey_combo_box_item(builder, "pref_audio_codec1", HB_ACODEC_FAAC, FALSE);
-       grey_combo_box_item(builder, "pref_audio_codec2", HB_ACODEC_FAAC, FALSE);
        grey_combo_box_item(builder, "audio_codec", HB_ACODEC_LAME, FALSE);
-       grey_combo_box_item(builder, "pref_audio_codec1", HB_ACODEC_LAME, FALSE);
-       grey_combo_box_item(builder, "pref_audio_codec2", HB_ACODEC_LAME, FALSE);
        grey_combo_box_item(builder, "audio_codec", HB_ACODEC_VORBIS, FALSE);
-       grey_combo_box_item(builder, "pref_audio_codec1", HB_ACODEC_VORBIS, FALSE);
-       grey_combo_box_item(builder, "pref_audio_codec2", HB_ACODEC_VORBIS, FALSE);
 
        gboolean allow_ac3 = TRUE;
        allow_ac3 = 
@@ -632,14 +671,10 @@ ghb_grey_combo_options(GtkBuilder *builder)
        if (allow_ac3)
        {
                grey_combo_box_item(builder, "audio_codec", HB_ACODEC_AC3, FALSE);
-               grey_combo_box_item(builder, "pref_audio_codec1", HB_ACODEC_AC3, FALSE);
-               grey_combo_box_item(builder, "pref_audio_codec2", HB_ACODEC_AC3, FALSE);
        }
        else
        {
                grey_combo_box_item(builder, "audio_codec", HB_ACODEC_AC3, TRUE);
-               grey_combo_box_item(builder, "pref_audio_codec1", HB_ACODEC_AC3, TRUE);
-               grey_combo_box_item(builder, "pref_audio_codec2", HB_ACODEC_AC3, TRUE);
        }
        if (audio && audio->in.codec != HB_ACODEC_AC3)
        {
@@ -656,28 +691,18 @@ ghb_grey_combo_options(GtkBuilder *builder)
        if (container == HB_MUX_MP4)
        {
                grey_combo_box_item(builder, "audio_codec", HB_ACODEC_LAME, TRUE);
-               grey_combo_box_item(builder, "pref_audio_codec1", HB_ACODEC_LAME, TRUE);
-               grey_combo_box_item(builder, "pref_audio_codec2", HB_ACODEC_LAME, TRUE);
                grey_combo_box_item(builder, "audio_codec", HB_ACODEC_VORBIS, TRUE);
-               grey_combo_box_item(builder, "pref_audio_codec1", HB_ACODEC_VORBIS, TRUE);
-               grey_combo_box_item(builder, "pref_audio_codec2", HB_ACODEC_VORBIS, TRUE);
                grey_combo_box_item(builder, "video_codec", HB_VCODEC_THEORA, TRUE);
        }
        else if (container == HB_MUX_AVI)
        {
                grey_combo_box_item(builder, "audio_codec", HB_ACODEC_FAAC, TRUE);
-               grey_combo_box_item(builder, "pref_audio_codec1", HB_ACODEC_FAAC, TRUE);
-               grey_combo_box_item(builder, "pref_audio_codec2", HB_ACODEC_FAAC, TRUE);
                grey_combo_box_item(builder, "audio_codec", HB_ACODEC_VORBIS, TRUE);
-               grey_combo_box_item(builder, "pref_audio_codec1", HB_ACODEC_VORBIS, TRUE);
-               grey_combo_box_item(builder, "pref_audio_codec2", HB_ACODEC_VORBIS, TRUE);
                grey_combo_box_item(builder, "video_codec", HB_VCODEC_THEORA, TRUE);
        }
        else if (container == HB_MUX_OGM)
        {
                grey_combo_box_item(builder, "audio_codec", HB_ACODEC_FAAC, TRUE);
-               grey_combo_box_item(builder, "pref_audio_codec1", HB_ACODEC_FAAC, TRUE);
-               grey_combo_box_item(builder, "pref_audio_codec2", HB_ACODEC_FAAC, TRUE);
        }
 
        gboolean allow_mono = TRUE;
@@ -952,7 +977,7 @@ mix_opts_set(GtkBuilder *builder, const gchar *name)
        GtkListStore *store;
        gint ii;
        
-       g_debug("audio_bitrate_opts_set ()\n");
+       g_debug("mix_opts_set ()\n");
        store = get_combo_box_store(builder, name);
        gtk_list_store_clear(store);
        gtk_list_store_append(store, &iter);
@@ -983,7 +1008,7 @@ language_opts_set(GtkBuilder *builder, const gchar *name)
        GtkListStore *store;
        gint ii;
        
-       g_debug("audio_bitrate_opts_set ()\n");
+       g_debug("language_opts_set ()\n");
        store = get_combo_box_store(builder, name);
        gtk_list_store_clear(store);
        for (ii = 0; ii < LANG_TABLE_SIZE; ii++)
@@ -1250,14 +1275,15 @@ ghb_longest_title()
 }
 
 gint
-ghb_find_audio_track(gint titleindex, const gchar *lang, gint acodec)
+ghb_find_audio_track(gint titleindex, const gchar *lang, gint index)
 {
        hb_list_t  * list;
        hb_title_t * title;
     hb_audio_config_t * audio;
        gint ii;
        gint count = 0;
-       gint track = 0;
+       gint track = -1;
+       gint match = 0;
        
        g_debug("find_audio_track ()\n");
        if (h != NULL)
@@ -1276,13 +1302,12 @@ ghb_find_audio_track(gint titleindex, const gchar *lang, gint acodec)
                if ((strcmp(lang, audio->lang.iso639_2) == 0) ||
                        (strcmp(lang, "und") == 0))
                {
-                       // Candidate track.  Will use if no better match found
-                       track = ii;
-                       if (audio->in.codec == acodec)
+                       if (index == match)
                        {
-                               // Perfect match
-                               return track;
+                               track = ii;
+                               break;
                        }
+                       match++;
                }
        }
        return track;
@@ -1340,26 +1365,14 @@ ghb_update_ui_combo_box(GtkBuilder *builder, const gchar *name, gint user_data,
        }       
        if (all || strcmp(name, "audio_bitrate") == 0)
                audio_bitrate_opts_set(builder, "audio_bitrate", hb_audio_bitrates, hb_audio_bitrates_count);
-       if (all || strcmp(name, "pref_audio_bitrate1") == 0)
-               audio_bitrate_opts_set(builder, "pref_audio_bitrate1", hb_audio_bitrates, hb_audio_bitrates_count);
-       if (all || strcmp(name, "pref_audio_bitrate2") == 0)
-               audio_bitrate_opts_set(builder, "pref_audio_bitrate2", hb_audio_bitrates, hb_audio_bitrates_count);
-       if (all || strcmp(name, "audio_sample_rate") == 0)
-               audio_samplerate_opts_set(builder, "audio_sample_rate", hb_audio_rates, hb_audio_rates_count);
-       if (all || strcmp(name, "pref_audio_rate1") == 0)
-               audio_samplerate_opts_set(builder, "pref_audio_rate1", hb_audio_rates, hb_audio_rates_count);
-       if (all || strcmp(name, "pref_audio_rate2") == 0)
-               audio_samplerate_opts_set(builder, "pref_audio_rate2", hb_audio_rates, hb_audio_rates_count);
+       if (all || strcmp(name, "audio_rate") == 0)
+               audio_samplerate_opts_set(builder, "audio_rate", hb_audio_rates, hb_audio_rates_count);
        if (all || strcmp(name, "framerate") == 0)
                video_rate_opts_set(builder, "framerate", hb_video_rates, hb_video_rates_count);
        if (all || strcmp(name, "audio_mix") == 0)
                mix_opts_set(builder, "audio_mix");
-       if (all || strcmp(name, "pref_audio_mix1") == 0)
-               mix_opts_set(builder, "pref_audio_mix1");
-       if (all || strcmp(name, "pref_audio_mix2") == 0)
-               mix_opts_set(builder, "pref_audio_mix2");
-       if (all || strcmp(name, "pref_source_audio_lang") == 0)
-               language_opts_set(builder, "pref_source_audio_lang");
+       if (all || strcmp(name, "source_audio_lang") == 0)
+               language_opts_set(builder, "source_audio_lang");
        if (all || strcmp(name, "subtitle_lang") == 0)
                subtitle_opts_set(builder, "subtitle_lang", user_data);
        if (all || strcmp(name, "title") == 0)
@@ -1376,12 +1389,6 @@ ghb_update_ui_combo_box(GtkBuilder *builder, const gchar *name, gint user_data,
                generic_opts_set(builder, "video_codec", &vcodec_opts);
        if (all || strcmp(name, "audio_codec") == 0)
                generic_opts_set(builder, "audio_codec", &acodec_opts);
-       if (all || strcmp(name, "pref_audio_codec1") == 0)
-               generic_opts_set(builder, "pref_audio_codec1", &pref_acodec_opts);
-       if (all || strcmp(name, "pref_audio_codec2") == 0)
-               generic_opts_set(builder, "pref_audio_codec2", &pref_acodec_opts);
-       if (all || strcmp(name, "pref_source_audio_codec") == 0)
-               generic_opts_set(builder, "pref_source_audio_codec", &source_acodec_opts);
        if (all || strcmp(name, "x264_direct") == 0)
                generic_opts_set(builder, "x264_direct", &direct_opts);
        if (all || strcmp(name, "x264_me") == 0)
@@ -1402,16 +1409,10 @@ static void
 init_ui_combo_boxes(GtkBuilder *builder)
 {
        init_combo_box(builder, "audio_bitrate");
-       init_combo_box(builder, "pref_audio_bitrate1");
-       init_combo_box(builder, "pref_audio_bitrate2");
-       init_combo_box(builder, "audio_sample_rate");
-       init_combo_box(builder, "pref_audio_rate1");
-       init_combo_box(builder, "pref_audio_rate2");
+       init_combo_box(builder, "audio_rate");
        init_combo_box(builder, "framerate");
        init_combo_box(builder, "audio_mix");
-       init_combo_box(builder, "pref_audio_mix1");
-       init_combo_box(builder, "pref_audio_mix2");
-       init_combo_box(builder, "pref_source_audio_lang");
+       init_combo_box(builder, "source_audio_lang");
        init_combo_box(builder, "subtitle_lang");
        init_combo_box(builder, "title");
        init_combo_box(builder, "audio_track");
@@ -1420,9 +1421,6 @@ init_ui_combo_boxes(GtkBuilder *builder)
        init_combo_box(builder, "denoise");
        init_combo_box(builder, "video_codec");
        init_combo_box(builder, "audio_codec");
-       init_combo_box(builder, "pref_audio_codec1");
-       init_combo_box(builder, "pref_audio_codec2");
-       init_combo_box(builder, "pref_source_audio_codec");
        init_combo_box(builder, "x264_direct");
        init_combo_box(builder, "x264_me");
        init_combo_box(builder, "x264_subme");
@@ -2630,7 +2628,7 @@ ghb_add_job(job_settings_t *js, gint unique_id)
                        audio.out.mixdown = ghb_get_best_mix(titleindex, audio.in.track, audio.out.codec, 
                                                                                                audio.out.mixdown);
                        audio.out.bitrate = ghb_settings_get_int(asettings, "audio_bitrate") / 1000;
-                       gint srate = ghb_settings_get_int(asettings, "audio_sample_rate");
+                       gint srate = ghb_settings_get_int(asettings, "audio_rate");
                        if (srate == 0) // 0 is same as source
                                audio.out.samplerate = taudio->in.samplerate;
                        else
index d5a65afe670f1759f4af94d97d32a87a321262d8..1b7e641c5e5807e755cbd317e498db8b2dc7f243 100644 (file)
@@ -106,7 +106,7 @@ gboolean ghb_set_passthru_rate_opts(GtkBuilder *builder, gint bitrate);
 gboolean ghb_set_default_rate_opts(GtkBuilder *builder);
 void ghb_grey_combo_options(GtkBuilder *builder);
 void ghb_update_ui_combo_box(GtkBuilder *builder, const gchar *name, gint user_data, gboolean all);
-gint ghb_find_audio_track(gint titleindex, const gchar *lang, gint acodec);
+gint ghb_find_audio_track(gint titleindex, const gchar *lang, gint index);
 gint ghb_longest_title();
 gchar* ghb_build_x264opts_string(GHashTable *settings);
 GdkPixbuf* ghb_get_preview_image(gint titleindex, gint index, GHashTable *settings, gboolean borders);
@@ -119,5 +119,10 @@ gboolean ghb_validate_vquality(GHashTable *settings);
 gboolean ghb_validate_audio(signal_user_data_t *ud);
 gboolean ghb_validate_video(signal_user_data_t *ud);
 void ghb_hb_cleanup(gboolean partial);
+gint ghb_lookup_acodec(const gchar *acodec);
+gint ghb_lookup_bitrate(const gchar *bitrate);
+gint ghb_lookup_rate(const gchar *rate);
+gint ghb_lookup_mix(const gchar *mix);
+gdouble ghb_lookup_drc(const gchar *drc);
 
 #endif // _HBBACKEND_H_
index 0a8d33f596a328910e33d9454ef90cb1686cbe53..19ac6fefe9271d0dc5d2b7bee1504d045929a8ec 100644 (file)
@@ -2,16 +2,11 @@
 preset_description=
 subtitle_lang=none
 forced_subtitles=enable
-pref_source_audio_lang=und
-pref_source_audio_codec=ac3
-pref_audio_codec1=ac3
-pref_audio_codec2=none
-pref_audio_bitrate1=192
-pref_audio_bitrate2=192
-pref_audio_rate1=source
-pref_audio_rate2=source
-pref_audio_mix1=dpl2
-pref_audio_mix2=dpl2
+source_audio_lang=und
+pref_audio_codec=ac3
+pref_audio_bitrate=192
+pref_audio_rate=source
+pref_audio_mix=dpl2
 pref_audio_drc=1.0
 chapter_markers=enable
 container=mp4
index 28c53935fc10cd6677ba26ec6fba20dd768135ec..13ffbe14463d7ac5695a3ae716f49564d1e53a76 100644 (file)
@@ -2,16 +2,11 @@
 "preset_description=\n"
 "subtitle_lang=none\n"
 "forced_subtitles=enable\n"
-"pref_source_audio_lang=und\n"
-"pref_source_audio_codec=ac3\n"
-"pref_audio_codec1=ac3\n"
-"pref_audio_codec2=none\n"
-"pref_audio_bitrate1=192\n"
-"pref_audio_bitrate2=192\n"
-"pref_audio_rate1=source\n"
-"pref_audio_rate2=source\n"
-"pref_audio_mix1=dpl2\n"
-"pref_audio_mix2=dpl2\n"
+"source_audio_lang=und\n"
+"pref_audio_codec=ac3\n"
+"pref_audio_bitrate=192\n"
+"pref_audio_rate=source\n"
+"pref_audio_mix=dpl2\n"
 "pref_audio_drc=1.0\n"
 "chapter_markers=enable\n"
 "container=mp4\n"
index 1e78fcbd6a81217c82e0a201415d72c4748b90b4..6625610385169d1ffc21e3929adf516c20f410d3 100644 (file)
@@ -21,6 +21,7 @@
 #include "hb-backend.h"
 
 void dump_settings(GHashTable *settings);
+void ghb_pref_audio_init(signal_user_data_t *ud);
 
 GObject*
 debug_get_object(GtkBuilder* b, const gchar *n)
@@ -1034,6 +1035,10 @@ preset_update_ui(signal_user_data_t *ud, presets_data_t *data, const gchar *key)
        // Initialize the ui from presets file.
        if (data == NULL) return;
        str = g_key_file_get_string(data->keyFile, data->name, key, NULL);
+       if (str == NULL)
+       {
+               str = g_key_file_get_string(internalKeyFile, "Presets", key, NULL);
+       }
        if (str != NULL)
        {
                ghb_ui_update(ud, key, str);
@@ -1046,7 +1051,7 @@ ghb_set_preset(signal_user_data_t *ud, const gchar *name)
 {
        presets_data_t *data;
        
-       g_debug("ghb_update_from_preset() %s\n", name);
+       g_debug("ghb_set_preset() %s\n", name);
        if (name == NULL)
        {
                name = ghb_presets_get_name(0);
@@ -1061,6 +1066,7 @@ ghb_set_preset(signal_user_data_t *ud, const gchar *name)
                preset_to_ui(ud, data);
                ghb_settings_set_string(ud->settings, "preset", name);
        }
+       ghb_pref_audio_init(ud);
 }
 
 void
@@ -1071,7 +1077,7 @@ ghb_update_from_preset(
 {
        presets_data_t *data;
        
-       g_debug("ghb_set_preset() %s\n", name);
+       g_debug("ghb_update_from_preset() %s %s\n", name, key);
        if (name == NULL) return;
        data = presets_list_search(presetsList, name);
        preset_update_ui(ud, data, key);
@@ -2012,3 +2018,117 @@ ghb_sanitize_x264opts(signal_user_data_t *ud, const gchar *options)
        return result;
 }
 
+static gint pref_acodec[8];
+static gint pref_bitrate[8];
+static gint pref_rate[8];
+static gint pref_mix[8];
+static gdouble pref_drc[8];
+static gint pref_audio_count = 0;
+
+void
+ghb_pref_audio_init(signal_user_data_t *ud)
+{
+       const gchar *acodec, *bitrate, *rate, *mix, *drc;
+       gchar **split_acodec, **split_bitrate, **split_rate;
+       gchar **split_mix, **split_drc;
+
+       acodec = ghb_settings_get_string(ud->settings, "pref_audio_codec");
+       bitrate = ghb_settings_get_string(ud->settings, "pref_audio_bitrate");
+       rate = ghb_settings_get_string(ud->settings, "pref_audio_rate");
+       mix = ghb_settings_get_string(ud->settings, "pref_audio_mix");
+       drc = ghb_settings_get_string(ud->settings, "pref_audio_drc");
+       split_acodec = g_strsplit(acodec, ",", 8);
+       split_bitrate = g_strsplit(bitrate, ",", 8);
+       split_rate = g_strsplit(rate, ",", 8);
+       split_mix = g_strsplit(mix, ",", 8);
+       split_drc = g_strsplit(drc, ",", 8);
+       if (split_acodec == NULL)
+       { // This should never happen, but just in case...
+               split_acodec = g_strsplit("faac", ",", -1);
+       }
+       gint ii;
+       for (ii = 0; split_acodec[ii]; ii++)
+       {
+               pref_acodec[ii] = ghb_lookup_acodec(split_acodec[ii]);
+       }
+       pref_audio_count = ii;
+       for (ii = 0; split_bitrate && split_bitrate[ii]; ii++)
+       {
+               pref_bitrate[ii] = ghb_lookup_bitrate(split_bitrate[ii]);
+       }
+       for (ii = 0; ii < pref_audio_count; ii++)
+       {
+               pref_bitrate[ii] = pref_bitrate[0];
+       }
+       for (ii = 0; split_rate && split_rate[ii]; ii++)
+       {
+               pref_rate[ii] = ghb_lookup_rate(split_rate[ii]);
+       }
+       for (ii = 0; ii < pref_audio_count; ii++)
+       {
+               pref_rate[ii] = pref_rate[0];
+       }
+       for (ii = 0; split_mix && split_mix[ii]; ii++)
+       {
+               pref_mix[ii] = ghb_lookup_mix(split_mix[ii]);
+       }
+       for (ii = 0; ii < pref_audio_count; ii++)
+       {
+               pref_mix[ii] = pref_mix[0];
+       }
+       for (ii = 0; split_drc && split_drc[ii]; ii++)
+       {
+               pref_drc[ii] = ghb_lookup_drc(split_drc[ii]);
+       }
+       for (ii = 0; ii < pref_audio_count; ii++)
+       {
+               pref_drc[ii] = pref_drc[0];
+       }
+}
+
+gint
+ghb_pref_acount()
+{
+       return pref_audio_count;
+}
+
+gint
+ghb_pref_acodec(gint index)
+{
+       if (index >= pref_audio_count)
+               return 0;
+       return pref_acodec[index];
+}
+
+gint
+ghb_pref_bitrate(gint index)
+{
+       if (index >= pref_audio_count)
+               return 0;
+       return pref_bitrate[index];
+}
+
+gint
+ghb_pref_rate(gint index)
+{
+       if (index >= pref_audio_count)
+               return 0;
+       return pref_rate[index];
+}
+
+gint
+ghb_pref_mix(gint index)
+{
+       if (index >= pref_audio_count)
+               return 0;
+       return pref_mix[index];
+}
+
+gdouble
+ghb_pref_drc(gint index)
+{
+       if (index >= pref_audio_count)
+               return 0;
+       return pref_drc[index];
+}
+
index 44f7f906ce8e18ed9fe4e72b856722ef9911dc85..e136a5003781654fb03f238de166b415e8cbbf8e 100644 (file)
@@ -128,5 +128,11 @@ void ghb_set_preset_default(GHashTable *settings);
 void ghb_x264_parse_options(signal_user_data_t *ud, const gchar *options);
 void ghb_x264_opt_update(signal_user_data_t *ud, GtkWidget *widget);
 gchar* ghb_sanitize_x264opts(signal_user_data_t *ud, const gchar *options);
+gint ghb_pref_acount();
+gint ghb_pref_acodec(gint index);
+gint ghb_pref_bitrate(gint index);
+gint ghb_pref_rate(gint index);
+gint ghb_pref_mix(gint index);
+gdouble ghb_pref_drc(gint index);
 
 #endif // _SETTINGS_H_
index 68e03bd812d728cdb9241d4ce023ac8d6327ac07..7b05a07756d4211f4d5e718ffa574fa70d195143 100755 (executable)
@@ -21,8 +21,8 @@ denoise=none
 decomb=disable
 variable_frame_rate=disable
 deblock=disable
-pref_audio_codec1=faac
-pref_audio_bitrate1=160
+pref_audio_codec=faac
+pref_audio_bitrate=160
 subtitles=disable
 
 [Animation]
@@ -49,8 +49,8 @@ denoise=none
 decomb=disable
 variable_frame_rate=disable
 deblock=disable
-pref_audio_codec1=faac
-pref_audio_bitrate1=160
+pref_audio_codec=faac
+pref_audio_bitrate=160
 subtitles=disable
 
 [AppleTV]
@@ -77,9 +77,8 @@ denoise=none
 decomb=disable
 variable_frame_rate=disable
 deblock=disable
-pref_audio_codec1=faac
-pref_audio_codec2=ac3
-pref_audio_bitrate1=160
+pref_audio_codec=faac,ac3
+pref_audio_bitrate=160
 subtitles=disable
 
 [Bedlam]
@@ -106,8 +105,8 @@ denoise=none
 decomb=disable
 variable_frame_rate=disable
 deblock=disable
-pref_audio_codec1=ac3
-pref_audio_bitrate1=160
+pref_audio_codec=ac3
+pref_audio_bitrate=160
 subtitles=disable
 
 [Blind]
@@ -133,8 +132,8 @@ denoise=none
 decomb=disable
 variable_frame_rate=disable
 deblock=disable
-pref_audio_codec1=faac
-pref_audio_bitrate1=128
+pref_audio_codec=faac
+pref_audio_bitrate=128
 subtitles=disable
 
 [Broke]
@@ -162,8 +161,8 @@ denoise=none
 decomb=disable
 variable_frame_rate=disable
 deblock=disable
-pref_audio_codec1=faac
-pref_audio_bitrate1=128
+pref_audio_codec=faac
+pref_audio_bitrate=128
 subtitles=disable
 
 [Classic]
@@ -188,8 +187,8 @@ denoise=none
 decomb=disable
 variable_frame_rate=disable
 deblock=disable
-pref_audio_codec1=faac
-pref_audio_bitrate1=160
+pref_audio_codec=faac
+pref_audio_bitrate=160
 subtitles=disable
 
 [Constant Quality Rate]
@@ -215,8 +214,8 @@ denoise=none
 decomb=disable
 variable_frame_rate=disable
 deblock=disable
-pref_audio_codec1=ac3
-pref_audio_bitrate1=160
+pref_audio_codec=ac3
+pref_audio_bitrate=160
 subtitles=disable
 
 [Deux Six Quatre]
@@ -243,8 +242,8 @@ denoise=none
 decomb=disable
 variable_frame_rate=disable
 deblock=disable
-pref_audio_codec1=ac3
-pref_audio_bitrate1=160
+pref_audio_codec=ac3
+pref_audio_bitrate=160
 subtitles=disable
 
 [Film]
@@ -271,8 +270,8 @@ denoise=none
 decomb=disable
 variable_frame_rate=disable
 deblock=disable
-pref_audio_codec1=ac3
-pref_audio_bitrate1=160
+pref_audio_codec=ac3
+pref_audio_bitrate=160
 subtitles=disable
 
 [iPhone / iPod Touch]
@@ -300,8 +299,8 @@ denoise=none
 decomb=disable
 variable_frame_rate=disable
 deblock=disable
-pref_audio_codec1=faac
-pref_audio_bitrate1=128
+pref_audio_codec=faac
+pref_audio_bitrate=128
 subtitles=disable
 
 [iPod High-Rez]
@@ -329,8 +328,8 @@ denoise=none
 decomb=disable
 variable_frame_rate=disable
 deblock=disable
-pref_audio_codec1=faac
-pref_audio_bitrate1=160
+pref_audio_codec=faac
+pref_audio_bitrate=160
 subtitles=disable
 
 [iPod Low-Rez]
@@ -358,8 +357,8 @@ denoise=none
 decomb=disable
 variable_frame_rate=disable
 deblock=disable
-pref_audio_codec1=faac
-pref_audio_bitrate1=160
+pref_audio_codec=faac
+pref_audio_bitrate=160
 subtitles=disable
 
 [Normal]
@@ -386,8 +385,8 @@ denoise=none
 decomb=disable
 variable_frame_rate=disable
 deblock=disable
-pref_audio_codec1=faac
-pref_audio_bitrate1=160
+pref_audio_codec=faac
+pref_audio_bitrate=160
 subtitles=disable
 
 [PSP]
@@ -413,8 +412,8 @@ denoise=none
 decomb=disable
 variable_frame_rate=disable
 deblock=disable
-pref_audio_codec1=faac
-pref_audio_bitrate1=128
+pref_audio_codec=faac
+pref_audio_bitrate=128
 subtitles=disable
 
 [PS3]
@@ -440,8 +439,8 @@ denoise=none
 decomb=disable
 variable_frame_rate=disable
 deblock=disable
-pref_audio_codec1=faac
-pref_audio_bitrate1=160
+pref_audio_codec=faac
+pref_audio_bitrate=160
 subtitles=disable
 
 [QuickTime]
@@ -468,8 +467,8 @@ denoise=none
 decomb=disable
 variable_frame_rate=disable
 deblock=disable
-pref_audio_codec1=faac
-pref_audio_bitrate1=160
+pref_audio_codec=faac
+pref_audio_bitrate=160
 subtitles=disable
 
 [Television]
@@ -496,6 +495,6 @@ denoise=weak
 decomb=disable
 variable_frame_rate=disable
 deblock=disable
-pref_audio_codec1=faac
-pref_audio_bitrate1=160
+pref_audio_codec=faac
+pref_audio_bitrate=160
 subtitles=disable