]> granicus.if.org Git - handbrake/commitdiff
LinGui: tidy up how combobox values are handled internally and stored in plists
authorjstebbins <jstebbins.hb@gmail.com>
Fri, 19 Sep 2008 00:19:46 +0000 (00:19 +0000)
committerjstebbins <jstebbins.hb@gmail.com>
Fri, 19 Sep 2008 00:19:46 +0000 (00:19 +0000)
fix a problem with storing max picture dims to presets plist

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

12 files changed:
gtk/src/callbacks.c
gtk/src/hb-backend.c
gtk/src/hb-backend.h
gtk/src/internal_defaults.xml
gtk/src/presets.c
gtk/src/resource_data.h
gtk/src/resources.plist
gtk/src/settings.c
gtk/src/settings.h
gtk/src/standard_presets.xml
gtk/src/values.c
gtk/src/values.h

index 3a944568105c8ba0dc4fffcbfec66aed518cc7f5..f93cd13b5e7d764f321d536aac351cc69920c105 100644 (file)
@@ -150,8 +150,11 @@ check_dependency(signal_user_data_t *ud, GtkWidget *widget)
        GValue *array, *data;
        gint count, ii;
        gchar *dep_name;
+       GType type;
 
-       if (ghb_widget_index(widget) < 0) return;
+       type = GTK_WIDGET_TYPE(widget);
+       if (type == GTK_TYPE_COMBO_BOX || type == GTK_TYPE_COMBO_BOX_ENTRY)
+               if (gtk_combo_box_get_active(GTK_COMBO_BOX(widget)) < 0) return;
 
        name = gtk_widget_get_name(widget);
        g_debug("check_dependency () %s", name);
@@ -963,16 +966,17 @@ adjust_audio_rate_combos(signal_user_data_t *ud)
        GtkWidget *widget;
        
        g_debug("adjust_audio_rate_combos ()");
-       titleindex = ghb_settings_get_combo_index(ud->settings, "title");
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
 
        widget = GHB_WIDGET(ud->builder, "audio_track");
-       audioindex = ghb_widget_int(widget);
+       audioindex = ghb_lookup_combo_int("audio_track", ghb_widget_value(widget));
 
        widget = GHB_WIDGET(ud->builder, "audio_codec");
-       acodec = ghb_widget_int(widget);
+       acodec = ghb_lookup_combo_int("audio_codec", ghb_widget_value(widget));
 
        if (ghb_audio_is_passthru (acodec))
        {
+               ghb_set_default_bitrate_opts (ud->builder, -1);
                if (ghb_get_audio_info (&ainfo, titleindex, audioindex))
                {
                        gint br = ainfo.bitrate / 1000;
@@ -984,6 +988,7 @@ adjust_audio_rate_combos(signal_user_data_t *ud)
                }
                else
                {
+                       ghb_ui_update(ud, "audio_bitrate", ghb_int64_value(384));
                        ghb_ui_update(ud, "audio_rate", ghb_int64_value(0));
                        ghb_ui_update(ud, "audio_mix", ghb_int64_value(0));
                }
@@ -993,7 +998,7 @@ adjust_audio_rate_combos(signal_user_data_t *ud)
                gint br;
 
                widget = GHB_WIDGET(ud->builder, "audio_bitrate");
-               br = ghb_widget_int(widget);
+               br = ghb_lookup_combo_int("audio_bitrate", ghb_widget_value(widget));
                if (br > 160)
                        ghb_ui_update(ud, "audio_bitrate", ghb_int64_value(160));
                ghb_set_default_bitrate_opts (ud->builder, 160);
@@ -1039,7 +1044,7 @@ set_pref_audio(gint titleindex, signal_user_data_t *ud)
                rate = ghb_settings_get_value(audio, "audio_rate");
                mix = ghb_settings_get_value(audio, "audio_mix");
                drc = ghb_settings_get_value(audio, "audio_drc");
-               acodec_code = ghb_lookup_acodec(acodec);
+               acodec_code = ghb_lookup_combo_int("audio_codec", acodec);
                // If there are multiple audios using the same codec, then
                // select sequential tracks for each.  This hash keeps track 
                // of the last used track for each codec.
@@ -1083,7 +1088,7 @@ set_pref_audio(gint titleindex, signal_user_data_t *ud)
                                // This gets set autimatically if the codec is passthru
                                ghb_ui_update(ud, "audio_bitrate", bitrate);
                                ghb_ui_update(ud, "audio_rate", rate);
-                               mix_code = ghb_lookup_mix(mix);
+                               mix_code = ghb_lookup_combo_int("audio_mix", mix);
                                mix_code = ghb_get_best_mix(
                                        titleindex, track, acodec_code, mix_code);
                                ghb_ui_update(ud, "audio_mix", ghb_int64_value(mix_code));
@@ -1108,7 +1113,9 @@ set_preview_image(signal_user_data_t *ud)
        gint preview_width, preview_height, target_height, width, height;
 
        g_debug("set_preview_button_image ()");
-       gint titleindex = ghb_settings_get_int(ud->settings, "title");
+       gint titleindex;
+
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
        if (titleindex < 0) return;
        widget = GHB_WIDGET (ud->builder, "preview_frame");
        gint frame = ghb_widget_int(widget) - 1;
@@ -1155,9 +1162,10 @@ title_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
        ghb_widget_to_setting(ud->settings, widget);
        check_dependency(ud, widget);
 
-       titleindex = ghb_settings_get_int(ud->settings, "title");
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
        ghb_update_ui_combo_box (ud->builder, "audio_track", titleindex, FALSE);
        ghb_update_ui_combo_box (ud->builder, "subtitle_lang", titleindex, FALSE);
+
        preset = ghb_settings_get_string (ud->settings, "preset");
        ghb_update_from_preset(ud, preset, "subtitle_lang");
        g_free(preset);
@@ -1191,18 +1199,21 @@ audio_codec_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
        GValue *asettings;
        
        g_debug("audio_codec_changed_cb ()");
-       acodec_code = ghb_widget_int(widget);
+       acodec_code = ghb_lookup_combo_int("audio_codec", ghb_widget_value(widget));
        if (ghb_audio_is_passthru (prev_acodec) && 
                !ghb_audio_is_passthru (acodec_code))
        {
                // Transition from passthru to not, put some audio settings back to 
                // pref settings
-               gint titleindex = ghb_settings_get_int(ud->settings, "title");
-               gint track = ghb_settings_get_int(ud->settings, "audio_track");
+               gint titleindex;
+               gint track;
+
+               titleindex = ghb_settings_combo_int(ud->settings, "title");
+               track = ghb_settings_combo_int(ud->settings, "audio_track");
 
                ghb_ui_update(ud, "audio_bitrate", ghb_string_value("160"));
                ghb_ui_update(ud, "audio_rate", ghb_string_value("source"));
-               mix_code = ghb_lookup_mix(ghb_string_value("dpl2"));
+               mix_code = ghb_lookup_combo_int("audio_mix", ghb_string_value("dpl2"));
                mix_code = ghb_get_best_mix( titleindex, track, acodec_code, mix_code);
                ghb_ui_update(ud, "audio_mix", ghb_int64_value(mix_code));
                ghb_ui_update(ud, "audio_drc", ghb_double_value(1.0));
@@ -1247,13 +1258,12 @@ audio_track_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
        asettings = get_selected_asettings(ud);
        if (asettings != NULL)
        {
-               gchar *track;
+               const gchar *track;
 
                ghb_widget_to_setting(asettings, widget);
                audio_list_refresh_selected(ud);
-               track = ghb_settings_get_combo_option(asettings, "audio_track");
+               track = ghb_settings_combo_option(asettings, "audio_track");
                ghb_settings_set_string(asettings, "audio_track_long", track);
-               g_free(track);
        }
 }
 
@@ -1295,7 +1305,7 @@ validate_filter_widget(signal_user_data_t *ud, const gchar *name)
        const gchar *str;
        gboolean foundit = FALSE;
        GtkComboBox *combo = GTK_COMBO_BOX(GHB_WIDGET(ud->builder, name));
-       if (ghb_widget_index(GTK_WIDGET(combo)) < 0)
+       if (gtk_combo_box_get_active(combo) < 0)
        { // Validate user input
                gchar *val = ghb_settings_get_string(ud->settings, name);
                store = gtk_combo_box_get_model(combo);
@@ -1399,7 +1409,8 @@ target_size_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
        clear_presets_selection(ud);
        if (ghb_settings_get_boolean(ud->settings, "vquality_type_target"))
        {
-               gint titleindex = ghb_settings_get_int(ud->settings, "title");
+               gint titleindex;
+               titleindex = ghb_settings_combo_int(ud->settings, "title");
                gint bitrate = ghb_calculate_target_bitrate (ud->settings, titleindex);
                ghb_ui_update(ud, "video_bitrate", ghb_int64_value(bitrate));
        }
@@ -1408,14 +1419,15 @@ target_size_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
 void
 start_chapter_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
 {
+       gint start, end;
        const gchar *name = gtk_widget_get_name(widget);
+
        g_debug("start_chapter_changed_cb () %s", name);
        ghb_widget_to_setting(ud->settings, widget);
-       GtkWidget *end_ch = GHB_WIDGET (ud->builder, "end_chapter");
-       gdouble start, end;
-       gtk_spin_button_get_range (GTK_SPIN_BUTTON(end_ch), &start, &end);
        start = ghb_settings_get_int(ud->settings, "start_chapter");
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON(end_ch), start, end);
+       end = ghb_settings_get_int(ud->settings, "end_chapter");
+       if (start > end)
+               ghb_ui_update(ud, "end_chapter", ghb_int_value(start));
        check_dependency(ud, widget);
        if (ghb_settings_get_boolean(ud->settings, "chapters_in_destination"))
        {
@@ -1426,14 +1438,15 @@ start_chapter_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
 void
 end_chapter_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
 {
+       gint start, end;
        const gchar *name = gtk_widget_get_name(widget);
+
        g_debug("end_chapter_changed_cb () %s", name);
        ghb_widget_to_setting(ud->settings, widget);
-       GtkWidget *start_ch = GHB_WIDGET (ud->builder, "start_chapter");
-       gdouble start, end;
-       gtk_spin_button_get_range (GTK_SPIN_BUTTON(start_ch), &start, &end);
+       start = ghb_settings_get_int(ud->settings, "start_chapter");
        end = ghb_settings_get_int(ud->settings, "end_chapter");
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON(start_ch), start, end);
+       if (start > end)
+               ghb_ui_update(ud, "start_chapter", ghb_int_value(end));
        check_dependency(ud, widget);
        if (ghb_settings_get_boolean(ud->settings, "chapters_in_destination"))
        {
@@ -1490,7 +1503,7 @@ crop_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
        crop[1] = ghb_settings_get_int(ud->settings, "crop_bottom");
        crop[2] = ghb_settings_get_int(ud->settings, "crop_left");
        crop[3] = ghb_settings_get_int(ud->settings, "crop_right");
-       titleindex = ghb_settings_get_combo_index(ud->settings, "title");
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
        if (ghb_get_title_info (&tinfo, titleindex))
        {
                gint width, height;
@@ -1654,8 +1667,8 @@ add_to_audio_list(signal_user_data_t *ud, GValue *settings)
        GtkTreeIter iter;
        GtkListStore *store;
        GtkTreeSelection *selection;
-       gchar *track, *codec, *br, *sr, *mix, *drc;
-       gchar *s_track, *s_codec, *s_br, *s_sr, *s_mix;
+       const gchar *track, *codec, *br, *sr, *mix;
+       gchar *drc, *s_track, *s_codec, *s_br, *s_sr, *s_mix;
        gdouble s_drc;
        
        g_debug("add_to_audio_list ()");
@@ -1663,19 +1676,19 @@ add_to_audio_list(signal_user_data_t *ud, GValue *settings)
        selection = gtk_tree_view_get_selection (treeview);
        store = GTK_LIST_STORE(gtk_tree_view_get_model(treeview));
 
-       track = ghb_settings_get_combo_option(settings, "audio_track"),
-       codec = ghb_settings_get_combo_option(settings, "audio_codec"),
-       br = ghb_settings_get_combo_option(settings, "audio_bitrate"),
-       sr = ghb_settings_get_combo_option(settings, "audio_rate"),
-       mix = ghb_settings_get_combo_option(settings, "audio_mix"),
+       track = ghb_settings_combo_option(settings, "audio_track");
+       codec = ghb_settings_combo_option(settings, "audio_codec");
+       br = ghb_settings_combo_option(settings, "audio_bitrate");
+       sr = ghb_settings_combo_option(settings, "audio_rate");
+       mix = ghb_settings_combo_option(settings, "audio_mix");
        drc = ghb_settings_get_string(settings, "audio_drc");
 
-       s_track = ghb_settings_get_string(settings, "audio_track"),
-       s_codec = ghb_settings_get_string(settings, "audio_codec"),
-       s_br = ghb_settings_get_string(settings, "audio_bitrate"),
-       s_sr = ghb_settings_get_string(settings, "audio_rate"),
-       s_mix = ghb_settings_get_string(settings, "audio_mix"),
-       s_drc = ghb_settings_get_double(settings, "audio_drc"),
+       s_track = ghb_settings_get_string(settings, "audio_track");
+       s_codec = ghb_settings_get_string(settings, "audio_codec");
+       s_br = ghb_settings_get_string(settings, "audio_bitrate");
+       s_sr = ghb_settings_get_string(settings, "audio_rate");
+       s_mix = ghb_settings_get_string(settings, "audio_mix");
+       s_drc = ghb_settings_get_double(settings, "audio_drc");
 
        gtk_list_store_append(store, &iter);
        gtk_list_store_set(store, &iter, 
@@ -1695,11 +1708,6 @@ add_to_audio_list(signal_user_data_t *ud, GValue *settings)
                11, s_drc,
                -1);
        gtk_tree_selection_select_iter(selection, &iter);
-       g_free(track);
-       g_free(codec);
-       g_free(br);
-       g_free(sr);
-       g_free(mix);
        g_free(drc);
        g_free(s_track);
        g_free(s_codec);
@@ -1726,8 +1734,8 @@ audio_list_refresh_selected(signal_user_data_t *ud)
        selection = gtk_tree_view_get_selection (treeview);
        if (gtk_tree_selection_get_selected(selection, &store, &iter))
        {
-               gchar *track, *codec, *br, *sr, *mix, *drc;
-               gchar *s_track, *s_codec, *s_br, *s_sr, *s_mix;
+               const gchar *track, *codec, *br, *sr, *mix;
+               gchar *drc, *s_track, *s_codec, *s_br, *s_sr, *s_mix;
                gdouble s_drc;
                // Get the row number
                treepath = gtk_tree_model_get_path (store, &iter);
@@ -1741,19 +1749,19 @@ audio_list_refresh_selected(signal_user_data_t *ud)
                        return;
                asettings = ghb_array_get_nth(audio_list, row);
 
-               track = ghb_settings_get_combo_option(asettings, "audio_track"),
-               codec = ghb_settings_get_combo_option(asettings, "audio_codec"),
-               br = ghb_settings_get_combo_option(asettings, "audio_bitrate"),
-               sr = ghb_settings_get_combo_option(asettings, "audio_rate"),
-               mix = ghb_settings_get_combo_option(asettings, "audio_mix"),
+               track = ghb_settings_combo_option(asettings, "audio_track");
+               codec = ghb_settings_combo_option(asettings, "audio_codec");
+               br = ghb_settings_combo_option(asettings, "audio_bitrate");
+               sr = ghb_settings_combo_option(asettings, "audio_rate");
+               mix = ghb_settings_combo_option(asettings, "audio_mix");
                drc = ghb_settings_get_string(asettings, "audio_drc");
 
-               s_track = ghb_settings_get_string(asettings, "audio_track"),
-               s_codec = ghb_settings_get_string(asettings, "audio_codec"),
-               s_br = ghb_settings_get_string(asettings, "audio_bitrate"),
-               s_sr = ghb_settings_get_string(asettings, "audio_rate"),
-               s_mix = ghb_settings_get_string(asettings, "audio_mix"),
-               s_drc = ghb_settings_get_double(asettings, "audio_drc"),
+               s_track = ghb_settings_get_string(asettings, "audio_track");
+               s_codec = ghb_settings_get_string(asettings, "audio_codec");
+               s_br = ghb_settings_get_string(asettings, "audio_bitrate");
+               s_sr = ghb_settings_get_string(asettings, "audio_rate");
+               s_mix = ghb_settings_get_string(asettings, "audio_mix");
+               s_drc = ghb_settings_get_double(asettings, "audio_drc");
 
                gtk_list_store_set(GTK_LIST_STORE(store), &iter, 
                        // These are displayed in list
@@ -1771,11 +1779,6 @@ audio_list_refresh_selected(signal_user_data_t *ud)
                        10, s_mix,
                        11, s_drc,
                        -1);
-               g_free(track);
-               g_free(codec);
-               g_free(br);
-               g_free(sr);
-               g_free(mix);
                g_free(drc);
                g_free(s_track);
                g_free(s_codec);
@@ -1830,6 +1833,7 @@ audio_list_selection_changed_cb(GtkTreeSelection *selection, signal_user_data_t
        {
                const gchar *track, *codec, *bitrate, *sample_rate, *mix;
                gdouble drc;
+
                gtk_tree_model_get(store, &iter,
                                                   6, &track,
                                                   7, &codec,
@@ -1866,7 +1870,7 @@ audio_add_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
        GtkWidget *widget;
        gint count;
        GValue *audio_list;
-       gchar *track;
+       const gchar *track;
        
        g_debug("audio_add_clicked_cb ()");
        asettings = ghb_dict_value_new();
@@ -1883,9 +1887,8 @@ audio_add_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
        ghb_settings_take_value(asettings, "audio_mix", ghb_widget_value(widget));
        widget = GHB_WIDGET(ud->builder, "audio_drc");
        ghb_settings_take_value(asettings, "audio_drc", ghb_widget_value(widget));
-       track = ghb_settings_get_combo_option(asettings, "audio_track");
+       track = ghb_settings_combo_option(asettings, "audio_track");
        ghb_settings_set_string(asettings, "audio_track_long", track);
-       g_free(track);
 
        audio_list = ghb_settings_get_value(ud->settings, "audio_list");
        if (audio_list == NULL)
@@ -1969,8 +1972,8 @@ audio_list_refresh(signal_user_data_t *ud)
        {
                do
                {
-                       gchar *track, *codec, *br, *sr, *mix, *drc;
-                       gchar *s_track, *s_codec, *s_br, *s_sr, *s_mix;
+                       const gchar *track, *codec, *br, *sr, *mix;
+                       gchar *drc, *s_track, *s_codec, *s_br, *s_sr, *s_mix;
                        gdouble s_drc;
                        GValue *asettings;
 
@@ -1979,18 +1982,18 @@ audio_list_refresh(signal_user_data_t *ud)
                                return;
                        asettings = ghb_array_get_nth(audio_list, row);
 
-                       track = ghb_settings_get_combo_option(asettings, "audio_track"),
-                       codec = ghb_settings_get_combo_option(asettings, "audio_codec"),
-                       br = ghb_settings_get_combo_option(asettings, "audio_bitrate"),
-                       sr = ghb_settings_get_combo_option(asettings, "audio_rate"),
-                       mix = ghb_settings_get_combo_option(asettings, "audio_mix"),
+                       track = ghb_settings_combo_option(asettings, "audio_track");
+                       codec = ghb_settings_combo_option(asettings, "audio_codec");
+                       br = ghb_settings_combo_option(asettings, "audio_bitrate");
+                       sr = ghb_settings_combo_option(asettings, "audio_rate");
+                       mix = ghb_settings_combo_option(asettings, "audio_mix");
                        drc = ghb_settings_get_string(asettings, "audio_drc");
 
-                       s_track = ghb_settings_get_string(asettings, "audio_track"),
-                       s_codec = ghb_settings_get_string(asettings, "audio_codec"),
-                       s_br = ghb_settings_get_string(asettings, "audio_bitrate"),
-                       s_sr = ghb_settings_get_string(asettings, "audio_rate"),
-                       s_mix = ghb_settings_get_string(asettings, "audio_mix"),
+                       s_track = ghb_settings_get_string(asettings, "audio_track");
+                       s_codec = ghb_settings_get_string(asettings, "audio_codec");
+                       s_br = ghb_settings_get_string(asettings, "audio_bitrate");
+                       s_sr = ghb_settings_get_string(asettings, "audio_rate");
+                       s_mix = ghb_settings_get_string(asettings, "audio_mix");
                        s_drc = ghb_settings_get_double(asettings, "audio_drc");
 
                        gtk_list_store_set(GTK_LIST_STORE(store), &iter, 
@@ -2009,11 +2012,6 @@ audio_list_refresh(signal_user_data_t *ud)
                                10, s_mix,
                                11, s_drc,
                                -1);
-                       g_free(track);
-                       g_free(codec);
-                       g_free(br);
-                       g_free(sr);
-                       g_free(mix);
                        g_free(drc);
                        g_free(s_track);
                        g_free(s_codec);
@@ -2325,7 +2323,8 @@ presets_list_selection_changed_cb(GtkTreeSelection *selection, signal_user_data_
                // it shouldn't be
                clear_audio_list(ud);
                ghb_set_preset(ud, preset);
-               gint titleindex = ghb_settings_get_int(ud->settings, "title");
+               gint titleindex;
+               titleindex = ghb_settings_combo_int(ud->settings, "title");
                set_pref_audio(titleindex, ud);
                ghb_settings_set_boolean(ud->settings, "preset_modified", FALSE);
                ud->dont_clear_presets = FALSE;
@@ -2390,14 +2389,13 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
        gint title, start_chapter, end_chapter, width, height, vqvalue;
        gint source_width, source_height;
        gboolean pass2, anamorphic, round_dim, keep_aspect, vqtype, turbo;
-       GValue *gval;
        
        g_debug("update_queue_list ()");
        if (settings == NULL) return;
        treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "queue_list"));
        store = GTK_TREE_STORE(gtk_tree_view_get_model(treeview));
                
-       title = ghb_settings_get_int(settings, "title");
+       title = ghb_settings_combo_int(settings, "title");
        start_chapter = ghb_settings_get_int(settings, "start_chapter");
        end_chapter = ghb_settings_get_int(settings, "end_chapter");
        pass2 = ghb_settings_get_boolean(settings, "two_pass");
@@ -2441,9 +2439,8 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
        gboolean preset_modified;
        gint mux;
 
-       gval = ghb_settings_get_value(settings, "container");
-       container = ghb_lookup_container_option(gval);
-       mux = ghb_lookup_container(gval);
+       container = ghb_settings_combo_option(settings, "container");
+       mux = ghb_settings_combo_int(settings, "container");
        dest = ghb_settings_get_string(settings, "destination");
        preset_modified = ghb_settings_get_boolean(settings, "preset_modified");
        preset = ghb_settings_get_string(settings, "preset");
@@ -2550,8 +2547,7 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
                g_free(fps);
                fps = g_strdup("Same As Source");
        }
-       gval = ghb_settings_get_value(settings, "video_codec");
-       vcodec = ghb_lookup_vcodec_option(gval);
+       vcodec = ghb_settings_combo_option(settings, "video_codec");
        vcodec_abbr = ghb_settings_get_string(settings, "video_codec");
        source_width = ghb_settings_get_int(settings, "source_width");
        source_height = ghb_settings_get_int(settings, "source_height");
@@ -2586,8 +2582,7 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
 
                asettings = ghb_array_get_nth(audio_list, ii);
 
-               gval = ghb_settings_get_value(asettings, "audio_codec");
-               acodec = ghb_lookup_acodec_option(gval);
+               acodec = ghb_settings_combo_option(asettings, "audio_codec");
                bitrate = ghb_settings_get_string(asettings, "audio_bitrate");
                samplerate = ghb_settings_get_string(asettings, "audio_rate");
                if (strcmp("source", samplerate) == 0)
@@ -2596,8 +2591,7 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
                        samplerate = g_strdup("Same As Source");
                }
                track = ghb_settings_get_string(asettings, "audio_track_long");
-               gval = ghb_settings_get_value(asettings, "audio_mix");
-               mix = ghb_lookup_mix_option(gval);
+               mix = ghb_settings_combo_option(asettings, "audio_mix");
                g_string_append_printf(str,
                        "<b>Audio:</b> %s, Encoder: %s, Mixdown: %s, SampleRate: %s, Bitrate: %s",
                         track, acodec, mix, samplerate, bitrate);
@@ -2647,7 +2641,9 @@ estimate_file_size(signal_user_data_t *ud)
        gint duration;
        gint bitrate;
        gint64 size;
-       gint titleindex = ghb_settings_get_int(ud->settings, "title");
+       gint titleindex;
+
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
        if (titleindex < 0) return 0;
                        
        if (!ghb_get_title_info(&tinfo, titleindex)) return 0;
@@ -2666,8 +2662,9 @@ validate_settings(signal_user_data_t *ud)
        // already in the queue
        gchar *message, *dest;
        gint count, ii;
-       gint titleindex = ghb_settings_get_int(ud->settings, "title");
+       gint titleindex;
 
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
        if (titleindex < 0) return FALSE;
        dest = ghb_settings_get_string(ud->settings, "destination");
        count = ghb_array_len(ud->queue);
@@ -2823,7 +2820,7 @@ queue_add(signal_user_data_t *ud)
        settings = ghb_value_dup(ud->settings);
        ghb_settings_set_int(settings, "job_status", GHB_QUEUE_PENDING);
        ghb_settings_set_int(settings, "job_unique_id", 0);
-       titleindex = ghb_settings_get_int(settings, "title");
+       titleindex = ghb_settings_combo_int(settings, "title");
        titlenum = ghb_get_title_number(titleindex);
        ghb_settings_set_int(settings, "titlenum", titlenum);
        ghb_array_append(ud->queue, settings);
@@ -3157,7 +3154,7 @@ queue_buttons_grey(signal_user_data_t *ud, gboolean working)
        gboolean title_ok;
 
        queue_count = ghb_array_len(ud->queue);
-       titleindex = ghb_settings_get_int(ud->settings, "title");
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
        title_ok = (titleindex >= 0);
 
        widget = GHB_WIDGET (ud->builder, "queue_start1");
@@ -3715,7 +3712,7 @@ update_chapter_list(signal_user_data_t *ud)
        gint count;
        
        g_debug("update_chapter_list ()");
-       titleindex = ghb_settings_get_combo_index(ud->settings, "title");
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
        chapters = ghb_get_chapters(titleindex);
        count = ghb_array_len(chapters);
        if (chapters)
@@ -3887,7 +3884,9 @@ queue_list_size_allocate_cb(GtkWidget *widget, GtkAllocation *allocation, GtkCel
 void
 preview_button_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
 {
-       gint titleindex = ghb_settings_get_int(ud->settings, "title");
+       gint titleindex;
+
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
        if (titleindex < 0) return;
        g_debug("titleindex %d", titleindex);
 
@@ -4236,67 +4235,67 @@ drive_changed_cb(GVolumeMonitor *gvm, GDrive *gd, signal_user_data_t *ud)
 static gboolean
 dbus_init (void)
 {
-    DBusError error;
+       DBusError error;
 
-    if (dbus_connection != NULL)
-        return TRUE;
+       if (dbus_connection != NULL)
+               return TRUE;
 
-    dbus_error_init (&error);
-    if (!(dbus_connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error))) {
-        g_debug ("could not get system bus: %s", error.message);
-        dbus_error_free (&error);
-        return FALSE;
-    }
+       dbus_error_init (&error);
+       if (!(dbus_connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error))) {
+               g_debug ("could not get system bus: %s", error.message);
+               dbus_error_free (&error);
+               return FALSE;
+       }
 
-    //dbus_connection_setup_with_g_main (dbus_connection, NULL);
-    //dbus_connection_set_exit_on_disconnect (dbus_connection, FALSE);
-    //dbus_connection_add_filter (dbus_connection, gvm_dbus_filter_function, NULL, NULL);
+       //dbus_connection_setup_with_g_main (dbus_connection, NULL);
+       //dbus_connection_set_exit_on_disconnect (dbus_connection, FALSE);
+       //dbus_connection_add_filter (dbus_connection, gvm_dbus_filter_function, NULL, NULL);
 
-    return TRUE;
+       return TRUE;
 }
 
 void
 ghb_hal_init()
 {
-    DBusError error;
-    char **devices;
-    int nr;
-
-    if (!dbus_init ())
-        return;
-
-    if (!(hal_ctx = libhal_ctx_new ())) {
-        g_warning ("failed to create a HAL context!");
-        return;
-    }
-
-    libhal_ctx_set_dbus_connection (hal_ctx, dbus_connection);
-    dbus_error_init (&error);
-    if (!libhal_ctx_init (hal_ctx, &error)) {
-        g_warning ("libhal_ctx_init failed: %s", error.message ? error.message : "unknown");
-        dbus_error_free (&error);
-        libhal_ctx_free (hal_ctx);
-        return;
-    }
-
-    /*
-     * Do something to ping the HAL daemon - the above functions will
-     * succeed even if hald is not running, so long as DBUS is.  But we
-     * want to exit silently if hald is not running, to behave on
-     * pre-2.6 systems.
-     */
-    if (!(devices = libhal_get_all_devices (hal_ctx, &nr, &error))) {
-        g_warning ("seems that HAL is not running: %s", error.message ? error.message : "unknown");
-        dbus_error_free (&error);
-
-        libhal_ctx_shutdown (hal_ctx, NULL);
-        libhal_ctx_free (hal_ctx);
-        return;
-    }
-
-    libhal_free_string_array (devices);
-
-    //gvm_hal_claim_branch ("/org/freedesktop/Hal/devices/local");
+       DBusError error;
+       char **devices;
+       int nr;
+
+       if (!dbus_init ())
+               return;
+
+       if (!(hal_ctx = libhal_ctx_new ())) {
+               g_warning ("failed to create a HAL context!");
+               return;
+       }
+
+       libhal_ctx_set_dbus_connection (hal_ctx, dbus_connection);
+       dbus_error_init (&error);
+       if (!libhal_ctx_init (hal_ctx, &error)) {
+               g_warning ("libhal_ctx_init failed: %s", error.message ? error.message : "unknown");
+               dbus_error_free (&error);
+               libhal_ctx_free (hal_ctx);
+               return;
+       }
+
+       /*
+        * Do something to ping the HAL daemon - the above functions will
+        * succeed even if hald is not running, so long as DBUS is.  But we
+        * want to exit silently if hald is not running, to behave on
+        * pre-2.6 systems.
+        */
+       if (!(devices = libhal_get_all_devices (hal_ctx, &nr, &error))) {
+               g_warning ("seems that HAL is not running: %s", error.message ? error.message : "unknown");
+               dbus_error_free (&error);
+
+               libhal_ctx_shutdown (hal_ctx, NULL);
+               libhal_ctx_free (hal_ctx);
+               return;
+       }
+
+       libhal_free_string_array (devices);
+
+       //gvm_hal_claim_branch ("/org/freedesktop/Hal/devices/local");
 }
 
 gboolean 
index 8b5b8dbd1b04203265d4ba5a5c8ef7265114ef82..b05c249cc69a0c70d7ccd5e1fad9ac3e8959d1ed 100644 (file)
@@ -38,7 +38,6 @@ typedef struct
        const gchar *option;
        const gchar *shortOpt;
        gint ivalue;
-       gdouble dvalue;
        const gchar *svalue;
 } options_map_t;
 
@@ -48,13 +47,28 @@ typedef struct
        options_map_t *map;
 } combo_opts_t;
 
+static const gchar *index_str[] =
+{
+       "0",
+       "1",
+       "2",
+       "3",
+       "4",
+       "5",
+       "6",
+       "7",
+       "8",
+       "9",
+       "10",
+};
+
 static options_map_t d_container_opts[] =
 {
-       {"MKV", "mkv", HB_MUX_MKV, 0.0, "mkv"},
-       {"MP4", "mp4", HB_MUX_MP4, 0.0, "mp4"},
-       {"M4V", "m4v", HB_MUX_MP4, 0.0, "m4v"},
-       {"AVI", "avi", HB_MUX_AVI, 0.0, "avi"},
-       {"OGM", "ogm", HB_MUX_OGM, 0.0, "ogm"},
+       {"MKV", "mkv", HB_MUX_MKV, "mkv"},
+       {"MP4", "mp4", HB_MUX_MP4, "mp4"},
+       {"M4V", "m4v", HB_MUX_MP4, "m4v"},
+       {"AVI", "avi", HB_MUX_AVI, "avi"},
+       {"OGM", "ogm", HB_MUX_OGM, "ogm"},
 };
 combo_opts_t container_opts =
 {
@@ -64,10 +78,10 @@ combo_opts_t container_opts =
 
 static options_map_t d_deint_opts[] =
 {
-       {"None",   "none",   0, 0.0, ""},
-       {"Fast",   "fast",   1, 0.0, "-1:-1:-1:0:1"},
-       {"Slow",   "slow",   2, 0.0, "2:-1:-1:0:1"},
-       {"Slower", "slower", 3, 0.0, "0:-1:-1:0:1"},
+       {"None",   "none",   0, ""},
+       {"Fast",   "fast",   1, "-1:-1:-1:0:1"},
+       {"Slow",   "slow",   2, "2:-1:-1:0:1"},
+       {"Slower", "slower", 3, "0:-1:-1:0:1"},
 };
 combo_opts_t deint_opts =
 {
@@ -77,10 +91,10 @@ combo_opts_t deint_opts =
 
 static options_map_t d_denoise_opts[] =
 {
-       {"None",   "none",   0, 0.0, ""},
-       {"Weak",   "weak",   1, 0.0, "2:1:2:3"},
-       {"Medium", "medium", 2, 0.0, "3:2:2:3"},
-       {"Strong", "strong", 3, 0.0, "7:7:5:5"},
+       {"None",   "none",   0, ""},
+       {"Weak",   "weak",   1, "2:1:2:3"},
+       {"Medium", "medium", 2, "3:2:2:3"},
+       {"Strong", "strong", 3, "7:7:5:5"},
 };
 combo_opts_t denoise_opts =
 {
@@ -90,10 +104,10 @@ combo_opts_t denoise_opts =
 
 static options_map_t d_vcodec_opts[] =
 {
-       {"H.264 (x264)",    "x264",   HB_VCODEC_X264, 0.0, ""},
-       {"MPEG-4 (XviD)",   "xvid",   HB_VCODEC_XVID, 0.0, ""},
-       {"MPEG-4 (FFMPEG)", "ffmpeg", HB_VCODEC_FFMPEG, 0.0, ""},
-       {"Theora",          "theora", HB_VCODEC_THEORA, 0.0, ""},
+       {"H.264 (x264)",    "x264",   HB_VCODEC_X264, ""},
+       {"MPEG-4 (XviD)",   "xvid",   HB_VCODEC_XVID, ""},
+       {"MPEG-4 (FFMPEG)", "ffmpeg", HB_VCODEC_FFMPEG, ""},
+       {"Theora",          "theora", HB_VCODEC_THEORA, ""},
 };
 combo_opts_t vcodec_opts =
 {
@@ -103,10 +117,10 @@ combo_opts_t vcodec_opts =
 
 static options_map_t d_acodec_opts[] =
 {
-       {"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"},
+       {"AAC (faac)",      "faac",   HB_ACODEC_FAAC, "faac"},
+       {"MP3 (lame)",      "lame",   HB_ACODEC_LAME, "lame"},
+       {"Vorbis",          "vorbis", HB_ACODEC_VORBIS, "vorbis"},
+       {"AC3 (pass-thru)", "ac3",    HB_ACODEC_AC3, "ac3"},
 };
 combo_opts_t acodec_opts =
 {
@@ -116,10 +130,10 @@ combo_opts_t acodec_opts =
 
 static options_map_t d_direct_opts[] =
 {
-       {"None",      "none",     0, 0.0, "none"},
-       {"Spatial",   "spatial",  1, 0.0, "spatial"},
-       {"Temporal",  "temporal", 2, 0.0, "temporal"},
-       {"Automatic", "auto",     3, 0.0, "auto"},
+       {"None",      "none",     0, "none"},
+       {"Spatial",   "spatial",  1, "spatial"},
+       {"Temporal",  "temporal", 2, "temporal"},
+       {"Automatic", "auto",     3, "auto"},
 };
 combo_opts_t direct_opts =
 {
@@ -129,10 +143,10 @@ combo_opts_t direct_opts =
 
 static options_map_t d_me_opts[] =
 {
-       {"Diamond",              "dia", 0, 0.0, "dia"},
-       {"Hexagon",              "hex", 1, 0.0, "hex"},
-       {"Uneven Multi-Hexagon", "umh", 2, 0.0, "umh"},
-       {"Exhaustive",           "esa", 3, 0.0, "esa"},
+       {"Diamond",              "dia", 0, "dia"},
+       {"Hexagon",              "hex", 1, "hex"},
+       {"Uneven Multi-Hexagon", "umh", 2, "umh"},
+       {"Exhaustive",           "esa", 3, "esa"},
 };
 combo_opts_t me_opts =
 {
@@ -142,13 +156,13 @@ combo_opts_t me_opts =
 
 static options_map_t d_subme_opts[] =
 {
-       {"1", "1", 1, 0.0, "1"},
-       {"2", "2", 2, 0.0, "2"},
-       {"3", "3", 3, 0.0, "3"},
-       {"4", "4", 4, 0.0, "4"},
-       {"5", "5", 5, 0.0, "5"},
-       {"6", "6", 6, 0.0, "6"},
-       {"7", "7", 7, 0.0, "7"},
+       {"1", "1", 1, "1"},
+       {"2", "2", 2, "2"},
+       {"3", "3", 3, "3"},
+       {"4", "4", 4, "4"},
+       {"5", "5", 5, "5"},
+       {"6", "6", 6, "6"},
+       {"7", "7", 7, "7"},
 };
 combo_opts_t subme_opts =
 {
@@ -158,10 +172,10 @@ combo_opts_t subme_opts =
 
 static options_map_t d_analyse_opts[] =
 {
-       {"Some", "some", 0, 0.0, "some"},
-       {"None", "none", 1, 0.0, "none"},
-       {"All",  "all",  2, 0.0, "all"},
-       {"Custom",  "custom",  3, 0.0, "all"},
+       {"Some", "some", 0, "some"},
+       {"None", "none", 1, "none"},
+       {"All",  "all",  2, "all"},
+       {"Custom",  "custom",  3, "all"},
 };
 combo_opts_t analyse_opts =
 {
@@ -171,9 +185,9 @@ combo_opts_t analyse_opts =
 
 static options_map_t d_trellis_opts[] =
 {
-       {"Disabled",          "0",    0, 0.0, "0"},
-       {"Final Macro Block", "1",    1, 0.0, "1"},
-       {"Always",            "2", 2, 0.0, "2"},
+       {"Disabled",          "0",    0, "0"},
+       {"Final Macro Block", "1",    1, "1"},
+       {"Always",            "2", 2, "2"},
 };
 combo_opts_t trellis_opts =
 {
@@ -181,6 +195,50 @@ combo_opts_t trellis_opts =
        d_trellis_opts
 };
 
+combo_opts_t subtitle_opts =
+{
+       0,
+       NULL
+};
+
+combo_opts_t title_opts =
+{
+       0,
+       NULL
+};
+
+combo_opts_t audio_track_opts =
+{
+       0,
+       NULL
+};
+
+typedef struct
+{
+       const gchar *name;
+       combo_opts_t *opts;
+} combo_name_map_t;
+
+combo_name_map_t combo_name_map[] =
+{
+       {"container", &container_opts},
+       {"deinterlace", &deint_opts},
+       {"tweak_deinterlace", &deint_opts},
+       {"denoise", &denoise_opts},
+       {"tweak_denoise", &denoise_opts},
+       {"video_codec", &vcodec_opts},
+       {"audio_codec", &acodec_opts},
+       {"x264_direct", &direct_opts},
+       {"x264_me", &me_opts},
+       {"x264_subme", &subme_opts},
+       {"x264_analyse", &analyse_opts},
+       {"x264_trellis", &trellis_opts},
+       {"subtitle_lang", &subtitle_opts},
+       {"title", &title_opts},
+       {"audio_track", &audio_track_opts},
+       {NULL, NULL}
+};
+
 typedef struct iso639_lang_t
 {
     char * eng_name;        /* Description in English */
@@ -193,7 +251,7 @@ typedef struct iso639_lang_t
 static const iso639_lang_t language_table[] =
 { 
        { "Any", "", "zz", "und" },
-       { "Afar", "", "aa", "aar" },
+       { "Afar", "", "aa", "aar" },
        { "Abkhazian", "", "ab", "abk" },
        { "Afrikaans", "", "af", "afr" },
        { "Akan", "", "ak", "aka" },
@@ -421,7 +479,7 @@ ghb_vquality_range(signal_user_data_t *ud, gint *min, gint *max)
 {
        if (ghb_settings_get_boolean(ud->settings, "directqp"))
        {
-               gint vcodec = ghb_settings_get_int(ud->settings, "video_codec");
+               gint vcodec = ghb_settings_combo_int(ud->settings, "video_codec");
                // Only x264 and ffmpeg currently support direct qp/crf entry
                if (vcodec == HB_VCODEC_X264)
                {
@@ -446,287 +504,262 @@ ghb_vquality_range(signal_user_data_t *ud, gint *min, gint *max)
        }
 }
 
-gint
-ghb_lookup_vrate(const GValue *vrate)
-{
-       gint ii;
-       gchar *str;
-       gint result = 0;
-
-       str = ghb_value_string(vrate);
-       for (ii = 0; ii < hb_video_rates_count; ii++)
-       {
-               if (strcmp(hb_video_rates[ii].string, str) == 0)
-               {
-                       result = hb_video_rates[ii].rate;
-               }
-       }
-       g_free(str);
-       // Default to "same as source"
-       return result;
-}
-
-gint
-ghb_lookup_vcodec(const GValue *vcodec)
+static gint
+lookup_generic_int(combo_opts_t *opts, const GValue *gval)
 {
        gint ii;
        gchar *str;
-       gint result = HB_VCODEC_FFMPEG;
+       gint result = -1;
 
-       str = ghb_value_string(vcodec);
-       for (ii = 0; ii < vcodec_opts.count; ii++)
+       str = ghb_value_string(gval);
+       for (ii = 0; ii < opts->count; ii++)
        {
-               if (strcmp(vcodec_opts.map[ii].shortOpt, str) == 0)
+               if (strcmp(opts->map[ii].shortOpt, str) == 0)
                {
-                       result = vcodec_opts.map[ii].ivalue;
+                       result = opts->map[ii].ivalue;
+                       break;
                }
        }
        g_free(str);
        return result;
 }
 
-const gchar*
-ghb_lookup_vcodec_option(const GValue *vcodec)
+static const gchar*
+lookup_generic_option(combo_opts_t *opts, const GValue *gval)
 {
        gint ii;
        gchar *str;
        const gchar *result = "";
 
-       str = ghb_value_string(vcodec);
-       for (ii = 0; ii < vcodec_opts.count; ii++)
+       str = ghb_value_string(gval);
+       for (ii = 0; ii < opts->count; ii++)
        {
-               if (strcmp(vcodec_opts.map[ii].shortOpt, str) == 0)
+               if (strcmp(opts->map[ii].shortOpt, str) == 0)
                {
-                       result = vcodec_opts.map[ii].option;
+                       result = opts->map[ii].option;
+                       break;
                }
        }
        g_free(str);
        return result;
 }
 
-gint
-ghb_lookup_container(const GValue *container)
+static gint
+lookup_mix_int(const GValue *mix)
 {
        gint ii;
        gchar *str;
-       gint result = -1;
+       gint result = HB_AMIXDOWN_DOLBYPLII;
 
-       str = ghb_value_string(container);
-       for (ii = 0; ii < container_opts.count; ii++)
+
+       str = ghb_value_string(mix);
+       for (ii = 0; ii < hb_audio_mixdowns_count; ii++)
        {
-               if (strcmp(container_opts.map[ii].shortOpt, str) == 0)
+               if (strcmp(hb_audio_mixdowns[ii].short_name, str) == 0)
                {
-                       result = container_opts.map[ii].ivalue;
+                       result = hb_audio_mixdowns[ii].amixdown;
+                       break;
                }
        }
        g_free(str);
        return result;
 }
 
-const gchar*
-ghb_lookup_container_option(const GValue *container)
+static const gchar*
+lookup_mix_option(const GValue *mix)
 {
        gint ii;
        gchar *str;
-       const gchar *result = "";
+       gchar *result = "None";
+
 
-       str = ghb_value_string(container);
-       for (ii = 0; ii < container_opts.count; ii++)
+       str = ghb_value_string(mix);
+       for (ii = 0; ii < hb_audio_mixdowns_count; ii++)
        {
-               if (strcmp(container_opts.map[ii].shortOpt, str) == 0)
+               if (strcmp(hb_audio_mixdowns[ii].short_name, str) == 0)
                {
-                       result = container_opts.map[ii].option;
+                       result = hb_audio_mixdowns[ii].human_readable_name;
+                       break;
                }
        }
        g_free(str);
        return result;
 }
 
-gint
-ghb_lookup_denoise(const GValue *denoise)
+static gint
+lookup_video_rate_int(const GValue *vrate)
 {
        gint ii;
        gchar *str;
-       gint result = -1;
+       gint result = 0;
 
-       str = ghb_value_string(denoise);
-       for (ii = 0; ii < denoise_opts.count; ii++)
+       str = ghb_value_string(vrate);
+       for (ii = 0; ii < hb_video_rates_count; ii++)
        {
-               if (strcmp(denoise_opts.map[ii].shortOpt, str) == 0)
+               if (strcmp(hb_video_rates[ii].string, str) == 0)
                {
-                       result = denoise_opts.map[ii].ivalue;
+                       result = hb_video_rates[ii].rate;
+                       break;
                }
        }
        g_free(str);
-       // Custom
+       // Default to "same as source"
        return result;
 }
 
-gint
-ghb_lookup_deint(const GValue *deint)
+static const gchar*
+lookup_video_rate_option(const GValue *vrate)
 {
        gint ii;
        gchar *str;
-       gint result = -1;
+       const gchar *result = "Same as source";
 
-       str = ghb_value_string(deint);
-       for (ii = 0; ii < deint_opts.count; ii++)
+       str = ghb_value_string(vrate);
+       for (ii = 0; ii < hb_video_rates_count; ii++)
        {
-               if (strcmp(deint_opts.map[ii].shortOpt, str) == 0)
+               if (strcmp(hb_video_rates[ii].string, str) == 0)
                {
-                       result = deint_opts.map[ii].ivalue;
+                       result = hb_video_rates[ii].string;
+                       break;
                }
        }
        g_free(str);
-       // Custom
+       // Default to "same as source"
        return result;
 }
 
-gint
-ghb_lookup_mux(const GValue *mux)
+static gint
+lookup_audio_rate_int(const GValue *rate)
 {
        gint ii;
        gchar *str;
-       gint result = HB_MUX_MKV;
+       gint result = 0;
 
-       str = ghb_value_string(mux);
-       for (ii = 0; ii < container_opts.count; ii++)
+       // Coincidentally, the string "source" will return 0
+       // which is our flag to use "same as source"
+       str = ghb_value_string(rate);
+       for (ii = 0; ii < hb_audio_rates_count; ii++)
        {
-               if (strcmp(container_opts.map[ii].shortOpt, str) == 0)
+               if (strcmp(hb_audio_rates[ii].string, str) == 0)
                {
-                       result = container_opts.map[ii].ivalue;
+                       result = hb_audio_rates[ii].rate;
+                       break;
                }
        }
        g_free(str);
        return result;
 }
 
-gint
-ghb_lookup_acodec(const GValue *acodec)
+static const gchar*
+lookup_audio_rate_option(const GValue *rate)
 {
        gint ii;
        gchar *str;
-       gint result = HB_ACODEC_FAAC;
+       const gchar *result = "Same as source";
 
-       str = ghb_value_string(acodec);
-       for (ii = 0; ii < acodec_opts.count; ii++)
+       // Coincidentally, the string "source" will return 0
+       // which is our flag to use "same as source"
+       str = ghb_value_string(rate);
+       for (ii = 0; ii < hb_audio_rates_count; ii++)
        {
-               if (strcmp(acodec_opts.map[ii].shortOpt, str) == 0)
+               if (strcmp(hb_audio_rates[ii].string, str) == 0)
                {
-                       result = acodec_opts.map[ii].ivalue;
+                       result = hb_audio_rates[ii].string;
+                       break;
                }
        }
        g_free(str);
        return result;
 }
 
-const gchar*
-ghb_lookup_acodec_option(const GValue *acodec)
+static gint
+lookup_audio_bitrate_int(const GValue *rate)
 {
        gint ii;
        gchar *str;
-       const gchar *result = "";
+       gint result = 0;
 
-       str = ghb_value_string(acodec);
-       for (ii = 0; ii < acodec_opts.count; ii++)
+       // Coincidentally, the string "source" will return 0
+       // which is our flag to use "same as source"
+       str = ghb_value_string(rate);
+       for (ii = 0; ii < hb_audio_bitrates_count; ii++)
        {
-               if (strcmp(acodec_opts.map[ii].shortOpt, str) == 0)
+               if (strcmp(hb_audio_bitrates[ii].string, str) == 0)
                {
-                       result = acodec_opts.map[ii].option;
+                       result = hb_audio_bitrates[ii].rate;
+                       break;
                }
        }
        g_free(str);
        return result;
 }
 
-const gchar*
-ghb_lookup_mix_option(const GValue *mix)
+static const gchar*
+lookup_audio_bitrate_option(const GValue *rate)
 {
        gint ii;
        gchar *str;
-       gchar *result = "None";
+       const gchar *result = "Same as source";
 
-
-       str = ghb_value_string(mix);
-       for (ii = 0; ii < hb_audio_mixdowns_count; ii++)
+       // Coincidentally, the string "source" will return 0
+       // which is our flag to use "same as source"
+       str = ghb_value_string(rate);
+       for (ii = 0; ii < hb_audio_bitrates_count; ii++)
        {
-               if (strcmp(hb_audio_mixdowns[ii].short_name, str) == 0)
+               if (strcmp(hb_audio_bitrates[ii].string, str) == 0)
                {
-                       result = hb_audio_mixdowns[ii].human_readable_name;
+                       result = hb_audio_bitrates[ii].string;
+                       break;
                }
        }
        g_free(str);
        return result;
 }
 
-gint
-ghb_lookup_mix(const GValue *mix)
+static gint
+lookup_audio_lang_int(const GValue *rate)
 {
        gint ii;
        gchar *str;
-       gint result = HB_AMIXDOWN_DOLBYPLII;
-
+       gint result = 0;
 
-       str = ghb_value_string(mix);
-       for (ii = 0; ii < hb_audio_mixdowns_count; ii++)
+       // Coincidentally, the string "source" will return 0
+       // which is our flag to use "same as source"
+       str = ghb_value_string(rate);
+       for (ii = 0; ii < LANG_TABLE_SIZE; ii++)
        {
-               if (strcmp(hb_audio_mixdowns[ii].short_name, str) == 0)
+               if (strcmp(language_table[ii].iso639_2, str) == 0)
                {
-                       result = hb_audio_mixdowns[ii].amixdown;
+                       result = ii;
+                       break;
                }
        }
        g_free(str);
        return result;
 }
 
-gint
-ghb_lookup_rate(const GValue *rate)
+static const gchar*
+lookup_audio_lang_option(const GValue *rate)
 {
        gint ii;
        gchar *str;
-       gint result = 0;
+       const gchar *result = "Same as source";
 
        // Coincidentally, the string "source" will return 0
        // which is our flag to use "same as source"
        str = ghb_value_string(rate);
-       for (ii = 0; ii < hb_audio_rates_count; ii++)
+       for (ii = 0; ii < LANG_TABLE_SIZE; ii++)
        {
-               if (strcmp(hb_audio_rates[ii].string, str) == 0)
+               if (strcmp(language_table[ii].iso639_2, str) == 0)
                {
-                       result = hb_audio_rates[ii].rate;
+                       result = language_table[ii].eng_name;
+                       break;
                }
        }
        g_free(str);
        return result;
 }
 
-#if 0
-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;
-               }
-       }
-       return 160;
-}
-
-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;
-}
-#endif
-
 static GValue*
 get_acodec_value(gint val)
 {
@@ -737,12 +770,7 @@ get_acodec_value(gint val)
        {
                if (acodec_opts.map[ii].ivalue == val)
                {
-                       value = ghb_combo_value_new(
-                               ii,
-                               acodec_opts.map[ii].option,
-                               acodec_opts.map[ii].shortOpt,
-                               acodec_opts.map[ii].svalue,
-                               acodec_opts.map[ii].ivalue);
+                       value = ghb_string_value_new(acodec_opts.map[ii].shortOpt);
                        break;
                }
        }
@@ -759,12 +787,7 @@ get_abitrate_value(gint val)
        {
                if (hb_audio_bitrates[ii].rate == val)
                {
-                       value = ghb_combo_value_new(
-                               ii,
-                               hb_audio_bitrates[ii].string,
-                               hb_audio_bitrates[ii].string,
-                               hb_audio_bitrates[ii].string,
-                               hb_audio_bitrates[ii].rate);
+                       value = ghb_string_value_new(hb_audio_bitrates[ii].string);
                        break;
                }
        }
@@ -781,12 +804,7 @@ get_amix_value(gint val)
        {
                if (hb_audio_mixdowns[ii].amixdown == val)
                {
-                       value = ghb_combo_value_new(
-                               ii,
-                               hb_audio_mixdowns[ii].human_readable_name,
-                               hb_audio_mixdowns[ii].short_name,
-                               hb_audio_mixdowns[ii].internal_name,
-                               hb_audio_mixdowns[ii].amixdown);
+                       value = ghb_string_value_new(hb_audio_mixdowns[ii].short_name);
                        break;
                }
        }
@@ -901,14 +919,14 @@ ghb_grey_combo_options(GtkBuilder *builder)
     hb_audio_config_t *audio = NULL;
        
        widget = GHB_WIDGET (builder, "title");
-       titleindex = ghb_widget_int(widget);
+       titleindex = ghb_lookup_combo_int("title", ghb_widget_value(widget));
        widget = GHB_WIDGET (builder, "audio_track");
-       track = ghb_widget_int(widget);
+       track = ghb_lookup_combo_int("audio_track", ghb_widget_value(widget));
        audio = get_hb_audio(titleindex, track);
        widget = GHB_WIDGET (builder, "container");
-       container = ghb_widget_int(widget);
+       container = ghb_lookup_combo_int("container", ghb_widget_value(widget));
        widget = GHB_WIDGET (builder, "http_optimize_mp4");
-       httpopt = ghb_widget_int(widget);
+       httpopt = ghb_widget_boolean(widget);
 
        grey_combo_box_item(builder, "audio_codec", HB_ACODEC_FAAC, FALSE);
        grey_combo_box_item(builder, "audio_codec", HB_ACODEC_LAME, FALSE);
@@ -934,7 +952,7 @@ ghb_grey_combo_options(GtkBuilder *builder)
        grey_combo_box_item(builder, "video_codec", HB_VCODEC_THEORA, FALSE);
 
        widget = GHB_WIDGET (builder, "audio_codec");
-       acodec = ghb_widget_int(widget);
+       acodec = ghb_lookup_combo_int("audio_codec", ghb_widget_value(widget));
        if (acodec != HB_ACODEC_AC3)
        {
                grey_combo_box_item(builder, "audio_mix", 0, TRUE);
@@ -1081,33 +1099,18 @@ init_combo_box(GtkBuilder *builder, const gchar *name)
                                                           G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING);
        gtk_combo_box_set_model(combo, GTK_TREE_MODEL(store));
 
-       gtk_cell_layout_clear(GTK_CELL_LAYOUT(combo));
-    cell = GTK_CELL_RENDERER(gtk_cell_renderer_text_new());
-    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), cell, TRUE);
-    gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), cell,
-      "text", 0, "sensitive", 1, NULL);
-}      
-
-// Set up the model for the combo box
-static void
-init_combo_box_entry(GtkBuilder *builder, const gchar *name)
-{
-       GtkComboBox *combo;
-       GtkListStore *store;
-
-       g_debug("init_combo_box_entry() %s\n", name);
-       // First modify the combobox model to allow greying out of options
-       combo = GTK_COMBO_BOX(GHB_WIDGET(builder, name));
-       // Store contains:
-       // 1 - String to display
-       // 2 - bool indicating whether the entry is selectable (grey or not)
-       // 3 - String that is used for presets
-       // 4 - Int value determined by backend
-       // 5 - String value determined by backend
-       store = gtk_list_store_new(5, G_TYPE_STRING, G_TYPE_BOOLEAN, 
-                                                          G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING);
-       gtk_combo_box_set_model(combo, GTK_TREE_MODEL(store));
-       gtk_combo_box_entry_set_text_column(GTK_COMBO_BOX_ENTRY(combo), 0);
+       if (GTK_WIDGET_TYPE(combo) == GTK_TYPE_COMBO_BOX)
+       {
+               gtk_cell_layout_clear(GTK_CELL_LAYOUT(combo));
+       cell = GTK_CELL_RENDERER(gtk_cell_renderer_text_new());
+       gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), cell, TRUE);
+       gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), cell,
+               "text", 0, "sensitive", 1, NULL);
+       }
+       else
+       { // Combo box entry
+               gtk_combo_box_entry_set_text_column(GTK_COMBO_BOX_ENTRY(combo), 0);
+       }
 }      
 
 static void
@@ -1244,13 +1247,15 @@ language_opts_set(GtkBuilder *builder, const gchar *name)
        }
 }
 
+static gchar **titles = NULL;
+
 void
 title_opts_set(GtkBuilder *builder, const gchar *name)
 {
        GtkTreeIter iter;
        GtkListStore *store;
-       hb_list_t  * list;
-       hb_title_t * title;
+       hb_list_t  * list = NULL;
+       hb_title_t * title = NULL;
        gint ii;
        gint count = 0;
        
@@ -1263,6 +1268,20 @@ title_opts_set(GtkBuilder *builder, const gchar *name)
                count = hb_list_count( list );
                if (count > 100) count = 100;
        }
+       if (titles) g_strfreev(titles);
+       if (title_opts.map) g_free(title_opts.map);
+       if (count > 0)
+       {
+               title_opts.count = count;
+               title_opts.map = g_malloc(count*sizeof(options_map_t));
+               titles = g_malloc((count+1) * sizeof(gchar*));
+       }
+       else
+       {
+               title_opts.count = 1;
+               title_opts.map = g_malloc(sizeof(options_map_t));
+               titles = NULL;
+       }
        if( count <= 0 )
        {
                // No titles.  Fill in a default.
@@ -1274,32 +1293,38 @@ title_opts_set(GtkBuilder *builder, const gchar *name)
                                                   3, -1, 
                                                   4, "none", 
                                                   -1);
+               title_opts.map[0].option = "No Titles";
+               title_opts.map[0].shortOpt = "none";
+               title_opts.map[0].ivalue = -1;
+               title_opts.map[0].svalue = "none";
                return;
        }
        for (ii = 0; ii < count; ii++)
        {
-               gchar *option;
-               
                title = (hb_title_t*)hb_list_item(list, ii);
                if (title->duration != 0)
                {
-                       option  = g_strdup_printf ("%d - %02dh%02dm%02ds",
+                       titles[ii]  = g_strdup_printf ("%d - %02dh%02dm%02ds",
                                title->index, title->hours, title->minutes, title->seconds);
                }
                else
                {
-                       option  = g_strdup_printf ("%d - Unknown Length", title->index);
+                       titles[ii]  = g_strdup_printf ("%d - Unknown Length", title->index);
                }
                gtk_list_store_append(store, &iter);
                gtk_list_store_set(store, &iter, 
-                                                  0, option
+                                                  0, titles[ii]
                                                   1, TRUE, 
-                                                  2, option
+                                                  2, titles[ii]
                                                   3, ii, 
-                                                  4, option
+                                                  4, titles[ii]
                                                   -1);
-               g_free(option);
+               title_opts.map[ii].option = titles[ii];
+               title_opts.map[ii].shortOpt = titles[ii];
+               title_opts.map[ii].ivalue = ii;
+               title_opts.map[ii].svalue = titles[ii];
        }
+       titles[ii] = NULL;
 }
 
 static gboolean
@@ -1328,8 +1353,8 @@ audio_track_opts_set(GtkBuilder *builder, const gchar *name, gint titleindex)
 {
        GtkTreeIter iter;
        GtkListStore *store;
-       hb_list_t  * list;
-       hb_title_t * title;
+       hb_list_t  * list = NULL;
+       hb_title_t * title = NULL;
     hb_audio_config_t * audio;
        gint ii;
        gint count = 0;
@@ -1347,6 +1372,17 @@ audio_track_opts_set(GtkBuilder *builder, const gchar *name, gint titleindex)
                }
        }
        if (count > 10) count = 10;
+       if (audio_track_opts.map) g_free(audio_track_opts.map);
+       if (count > 0)
+       {
+               audio_track_opts.count = count;
+               audio_track_opts.map = g_malloc(count*sizeof(options_map_t));
+       }
+       else
+       {
+               audio_track_opts.count = 1;
+               audio_track_opts.map = g_malloc(sizeof(options_map_t));
+       }
        if( count <= 0 )
        {
                // No audio. set some default
@@ -1358,38 +1394,43 @@ audio_track_opts_set(GtkBuilder *builder, const gchar *name, gint titleindex)
                                                   3, -1, 
                                                   4, "none", 
                                                   -1);
+               audio_track_opts.map[0].option = "No Audio";
+               audio_track_opts.map[0].shortOpt = "none";
+               audio_track_opts.map[0].ivalue = -1;
+               audio_track_opts.map[0].svalue = "none";
                return;
        }
        for (ii = 0; ii < count; ii++)
        {
-               gchar *str;
-
         audio = (hb_audio_config_t *) hb_list_audio_config_item( title->list_audio, ii );
                gtk_list_store_append(store, &iter);
-               str = g_strdup_printf("%d", ii);
                gtk_list_store_set(store, &iter, 
                                                   0, audio->lang.description, 
                                                   1, TRUE, 
-                                                  2, str
+                                                  2, index_str[ii]
                                                   3, ii, 
-                                                  4, str
+                                                  4, index_str[ii]
                                                   -1);
-               g_free(str);
+               audio_track_opts.map[ii].option = audio->lang.description,
+               audio_track_opts.map[ii].shortOpt = index_str[ii];
+               audio_track_opts.map[ii].ivalue = ii;
+               audio_track_opts.map[ii].svalue = index_str[ii];
        }
 }
 
+
 void
 subtitle_opts_set(GtkBuilder *builder, const gchar *name, gint titleindex)
 {
        GtkTreeIter iter;
        GtkListStore *store;
-       hb_list_t  * list;
-       hb_title_t * title;
+       hb_list_t  * list = NULL;
+       hb_title_t * title = NULL;
     hb_subtitle_t * subtitle;
        gint ii;
        gint count = 0;
        
-       g_debug("subtitle_opts_set ()\n");
+       g_debug("subtitle_opts_set () %s\n", name);
        store = get_combo_box_store(builder, name);
        gtk_list_store_clear(store);
        if (h_scan != NULL)
@@ -1402,6 +1443,17 @@ subtitle_opts_set(GtkBuilder *builder, const gchar *name, gint titleindex)
                }
        }
        if (count > 10) count = 10;
+       if (subtitle_opts.map) g_free(subtitle_opts.map);
+       if (count > 0)
+       {
+               subtitle_opts.count = count+2;
+               subtitle_opts.map = g_malloc((count+2)*sizeof(options_map_t));
+       }
+       else
+       {
+               subtitle_opts.count = LANG_TABLE_SIZE+2;
+               subtitle_opts.map = g_malloc((LANG_TABLE_SIZE+2)*sizeof(options_map_t));
+       }
        // Add options for "none" and "autoselect"
        gtk_list_store_append(store, &iter);
        gtk_list_store_set(store, &iter, 
@@ -1411,27 +1463,42 @@ subtitle_opts_set(GtkBuilder *builder, const gchar *name, gint titleindex)
                                           3, -2, 
                                           4, "none", 
                                           -1);
+       subtitle_opts.map[0].option = "None";
+       subtitle_opts.map[0].shortOpt = "none";
+       subtitle_opts.map[0].ivalue = -2;
+       subtitle_opts.map[0].svalue = "none";
        gtk_list_store_append(store, &iter);
        gtk_list_store_set(store, &iter, 
-                                          0, "Same As Audio", 
+                                          0, "Same as audio", 
                                           1, TRUE, 
                                           2, "auto", 
                                           3, -1, 
                                           4, "auto", 
                                           -1);
-       for (ii = 0; ii < count; ii++)
+       subtitle_opts.map[0].option = "Same as audio";
+       subtitle_opts.map[0].shortOpt = "auto";
+       subtitle_opts.map[0].ivalue = -1;
+       subtitle_opts.map[0].svalue = "auto";
+       if (count >0)
        {
-        subtitle = (hb_subtitle_t *) hb_list_item( title->list_subtitle, ii );
-               gtk_list_store_append(store, &iter);
-               gtk_list_store_set(store, &iter, 
-                                                  0, subtitle->lang, 
-                                                  1, TRUE, 
-                                                  2, subtitle->iso639_2, 
-                                                  3, ii, 
-                                                  4, subtitle->iso639_2, 
-                                                  -1);
+               for (ii = 0; ii < count; ii++)
+               {
+                       subtitle = (hb_subtitle_t *)hb_list_item(title->list_subtitle, ii);
+                       gtk_list_store_append(store, &iter);
+                       gtk_list_store_set(store, &iter, 
+                                               0, subtitle->lang, 
+                                               1, TRUE, 
+                                               2, subtitle->iso639_2, 
+                                               3, ii, 
+                                               4, subtitle->iso639_2, 
+                                               -1);
+                       subtitle_opts.map[ii+2].option = subtitle->lang;
+                       subtitle_opts.map[ii+2].shortOpt = subtitle->iso639_2;
+                       subtitle_opts.map[ii+2].ivalue = ii;
+                       subtitle_opts.map[ii+2].svalue = subtitle->iso639_2;
+               }
        }
-       if (titleindex == -1)
+       else
        {
                for (ii = 0; ii < LANG_TABLE_SIZE; ii++)
                {
@@ -1443,6 +1510,10 @@ subtitle_opts_set(GtkBuilder *builder, const gchar *name, gint titleindex)
                                3, ii, 
                                4, language_table[ii].iso639_2, 
                                -1);
+                       subtitle_opts.map[ii+2].option = language_table[ii].eng_name;
+                       subtitle_opts.map[ii+2].shortOpt = language_table[ii].iso639_2;
+                       subtitle_opts.map[ii+2].ivalue = ii;
+                       subtitle_opts.map[ii+2].svalue = language_table[ii].iso639_2;
                }
        }
 }
@@ -1521,6 +1592,7 @@ generic_opts_set(GtkBuilder *builder, const gchar *name, combo_opts_t *opts)
        gint ii;
        
        g_debug("generic_opts_set ()\n");
+       if (name == NULL || opts == NULL) return;
        store = get_combo_box_store(builder, name);
        gtk_list_store_clear(store);
        for (ii = 0; ii < opts->count; ii++)
@@ -1536,6 +1608,63 @@ generic_opts_set(GtkBuilder *builder, const gchar *name, combo_opts_t *opts)
        }
 }
 
+combo_opts_t*
+find_combo_table(const gchar *name)
+{
+       gint ii;
+
+       for (ii = 0; combo_name_map[ii].name != NULL; ii++)
+       {
+               if (strcmp(name, combo_name_map[ii].name) == 0)
+               {
+                       return combo_name_map[ii].opts;
+               }
+       }
+       return NULL;
+}
+
+gint
+ghb_lookup_combo_int(const gchar *name, const GValue *gval)
+{
+       if (strcmp(name, "audio_bitrate") == 0)
+               return lookup_audio_bitrate_int(gval);
+       else if (strcmp(name, "audio_rate") == 0)
+               return lookup_audio_rate_int(gval);
+       else if (strcmp(name, "framerate") == 0)
+               return lookup_video_rate_int(gval);
+       else if (strcmp(name, "audio_mix") == 0)
+               return lookup_mix_int(gval);
+       else if (strcmp(name, "source_audio_lang") == 0)
+               return lookup_audio_lang_int(gval);
+       else
+       {
+               return lookup_generic_int(find_combo_table(name), gval);
+       }
+       g_warning("ghb_lookup_combo_int() couldn't find %s", name);
+       return 0;
+}
+
+const gchar*
+ghb_lookup_combo_option(const gchar *name, const GValue *gval)
+{
+       if (strcmp(name, "audio_bitrate") == 0)
+               return lookup_audio_bitrate_option(gval);
+       else if (strcmp(name, "audio_rate") == 0)
+               return lookup_audio_rate_option(gval);
+       else if (strcmp(name, "framerate") == 0)
+               return lookup_video_rate_option(gval);
+       else if (strcmp(name, "audio_mix") == 0)
+               return lookup_mix_option(gval);
+       else if (strcmp(name, "source_audio_lang") == 0)
+               return lookup_audio_lang_option(gval);
+       else
+       {
+               return lookup_generic_option(find_combo_table(name), gval);
+       }
+       g_warning("ghb_lookup_combo_int() couldn't find %s", name);
+       return 0;
+}
+
 void
 ghb_update_ui_combo_box(GtkBuilder *builder, const gchar *name, gint user_data, gboolean all)
 {
@@ -1563,46 +1692,50 @@ ghb_update_ui_combo_box(GtkBuilder *builder, const gchar *name, gint user_data,
                        }
                }
        }       
-       if (all || strcmp(name, "audio_bitrate") == 0)
+       if (all)
+       {
                audio_bitrate_opts_set(builder, "audio_bitrate");
-       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, "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)
                title_opts_set(builder, "title");
-       if (all || strcmp(name, "audio_track") == 0)
                audio_track_opts_set(builder, "audio_track", user_data);
-       if (all || strcmp(name, "container") == 0)
                generic_opts_set(builder, "container", &container_opts);
-       if (all || strcmp(name, "deinterlace") == 0)
                generic_opts_set(builder, "deinterlace", &deint_opts);
-       if (all || strcmp(name, "tweak_deinterlace") == 0)
                generic_opts_set(builder, "tweak_deinterlace", &deint_opts);
-       if (all || strcmp(name, "denoise") == 0)
                generic_opts_set(builder, "denoise", &denoise_opts);
-       if (all || strcmp(name, "tweak_denoise") == 0)
                generic_opts_set(builder, "tweak_denoise", &denoise_opts);
-       if (all || strcmp(name, "video_codec") == 0)
                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, "x264_direct") == 0)
                generic_opts_set(builder, "x264_direct", &direct_opts);
-       if (all || strcmp(name, "x264_me") == 0)
                generic_opts_set(builder, "x264_me", &me_opts);
-       if (all || strcmp(name, "x264_subme") == 0)
                generic_opts_set(builder, "x264_subme", &subme_opts);
-       if (all || strcmp(name, "x264_analyse") == 0)
                generic_opts_set(builder, "x264_analyse", &analyse_opts);
-       if (all || strcmp(name, "x264_trellis") == 0)
                generic_opts_set(builder, "x264_trellis", &trellis_opts);
+       }
+       else
+       {
+               if (strcmp(name, "audio_bitrate") == 0)
+                       audio_bitrate_opts_set(builder, "audio_bitrate");
+               else if (strcmp(name, "audio_rate") == 0)
+                       audio_samplerate_opts_set(builder, "audio_rate", hb_audio_rates, hb_audio_rates_count);
+               else if (strcmp(name, "framerate") == 0)
+                       video_rate_opts_set(builder, "framerate", hb_video_rates, hb_video_rates_count);
+               else if (strcmp(name, "audio_mix") == 0)
+                       mix_opts_set(builder, "audio_mix");
+               else if (strcmp(name, "source_audio_lang") == 0)
+                       language_opts_set(builder, "source_audio_lang");
+               else if (strcmp(name, "subtitle_lang") == 0)
+                       subtitle_opts_set(builder, "subtitle_lang", user_data);
+               else if (strcmp(name, "title") == 0)
+                       title_opts_set(builder, "title");
+               else if (strcmp(name, "audio_track") == 0)
+                       audio_track_opts_set(builder, "audio_track", user_data);
+               else
+                       generic_opts_set(builder, name, find_combo_table(name));
+       }
        if (handler_id > 0)
        {
                g_signal_handler_unblock ((gpointer)combo, handler_id);
@@ -1612,6 +1745,8 @@ ghb_update_ui_combo_box(GtkBuilder *builder, const gchar *name, gint user_data,
 static void
 init_ui_combo_boxes(GtkBuilder *builder)
 {
+       gint ii;
+
        init_combo_box(builder, "audio_bitrate");
        init_combo_box(builder, "audio_rate");
        init_combo_box(builder, "framerate");
@@ -1620,18 +1755,10 @@ init_ui_combo_boxes(GtkBuilder *builder)
        init_combo_box(builder, "subtitle_lang");
        init_combo_box(builder, "title");
        init_combo_box(builder, "audio_track");
-       init_combo_box(builder, "container");
-       init_combo_box(builder, "deinterlace");
-       init_combo_box_entry(builder, "tweak_deinterlace");
-       init_combo_box(builder, "denoise");
-       init_combo_box_entry(builder, "tweak_denoise");
-       init_combo_box(builder, "video_codec");
-       init_combo_box(builder, "audio_codec");
-       init_combo_box(builder, "x264_direct");
-       init_combo_box(builder, "x264_me");
-       init_combo_box(builder, "x264_subme");
-       init_combo_box(builder, "x264_analyse");
-       init_combo_box(builder, "x264_trellis");
+       for (ii = 0; combo_name_map[ii].name != NULL; ii++)
+       {
+               init_combo_box(builder, combo_name_map[ii].name);
+       }
 }
        
 static const char * turbo_opts = 
@@ -1703,7 +1830,7 @@ ghb_ac3_in_audio_list(const GValue *audio_list)
                gint acodec;
 
                asettings = ghb_array_get_nth(audio_list, ii);
-               acodec = ghb_settings_get_int(asettings, "audio_codec");
+               acodec = ghb_settings_combo_int(asettings, "audio_codec");
                if (acodec == HB_ACODEC_AC3)
                        return TRUE;
        }
@@ -2090,7 +2217,9 @@ ghb_set_scale(signal_user_data_t *ud, gint mode)
                /* No valid title, stop right there */
                return;
        }
-       gint titleindex = ghb_settings_get_int(ud->settings, "title");
+       gint titleindex;
+
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
     title = hb_list_item( list, titleindex );
        if (title == NULL) return;
        job   = title->job;
@@ -2219,7 +2348,8 @@ ghb_set_scale(signal_user_data_t *ud, gint mode)
                        job->maxHeight = max_height;
                job->crop[0] = crop[0]; job->crop[1] = crop[1];
                job->crop[2] = crop[2]; job->crop[3] = crop[3];
-               hb_set_anamorphic_size( job, &width, &height, &par_width, &par_height );
+               hb_set_anamorphic_size( job, &width, &height, 
+                                                               &par_width, &par_height );
        }
        else 
        {
@@ -2301,7 +2431,7 @@ set_preview_job_settings(hb_job_t *job, GValue *settings)
        }
        job->width = ghb_settings_get_int(settings, "scale_width");
        job->height = ghb_settings_get_int(settings, "scale_height");
-       gint deint = ghb_settings_get_int(settings, "deinterlace");
+       gint deint = ghb_settings_combo_int(settings, "deinterlace");
        gboolean decomb = ghb_settings_get_boolean(settings, "decomb");
        job->deinterlace = (!decomb && deint == 0) ? 0 : 1;
 }
@@ -2336,7 +2466,7 @@ ghb_guess_bitrate(GValue *settings)
                gint vcodec;
                gdouble vquality;
 
-               vcodec = ghb_settings_get_int(settings, "video_codec");
+               vcodec = ghb_settings_combo_int(settings, "video_codec");
                vquality = ghb_settings_get_double(settings, "video_quality")/100;
                if (vcodec == HB_VCODEC_X264 && 
                                !ghb_settings_get_boolean(settings, "linear_vquality"))
@@ -2434,7 +2564,8 @@ ghb_validate_filters(signal_user_data_t *ud)
                }
                g_free(str);
                // deinte 4
-               index = ghb_settings_get_combo_index(ud->settings, "tweak_deinterlace");
+               index = ghb_lookup_combo_int("tweak_deinterlace", 
+                       ghb_settings_get_value(ud->settings, "tweak_deinterlace"));
                if (index < 0)
                {
                        str = ghb_settings_get_string(ud->settings, "tweak_deinterlace");
@@ -2468,7 +2599,8 @@ ghb_validate_filters(signal_user_data_t *ud)
                g_free(str);
 #endif
                // denois 4
-               index = ghb_settings_get_combo_index(ud->settings, "tweak_denoise");
+               index = ghb_lookup_combo_int("tweak_denoise", 
+                               ghb_settings_get_value(ud->settings, "tweak_denoise"));
                if (index < 0)
                {
                        str = ghb_settings_get_string(ud->settings, "tweak_denoise");
@@ -2494,8 +2626,8 @@ ghb_validate_video(signal_user_data_t *ud)
        gint vcodec, mux;
        gchar *message;
 
-       mux = ghb_settings_get_int(ud->settings, "container");
-       vcodec = ghb_settings_get_int(ud->settings, "video_codec");
+       mux = ghb_settings_combo_int(ud->settings, "container");
+       vcodec = ghb_settings_combo_int(ud->settings, "video_codec");
        if ((mux == HB_MUX_MP4 || mux == HB_MUX_AVI) && 
                (vcodec == HB_VCODEC_THEORA))
        {
@@ -2538,7 +2670,7 @@ ghb_validate_container(signal_user_data_t *ud)
        gint container;
        gchar *message;
 
-       container = ghb_settings_get_int(ud->settings, "container");
+       container = ghb_settings_combo_int(ud->settings, "container");
        if (container == HB_MUX_MP4)
        {
                const GValue *audio_list;
@@ -2567,7 +2699,7 @@ ghb_validate_container(signal_user_data_t *ud)
                                GValue *asettings;
 
                                asettings = ghb_array_get_nth(audio_list, ii);
-                               gint acodec = ghb_settings_get_int(asettings, "audio_codec");
+                               gint acodec = ghb_settings_combo_int(asettings, "audio_codec");
                                if (acodec == HB_ACODEC_AC3)
                                {
                                        GValue *value;
@@ -2599,10 +2731,12 @@ ghb_validate_audio(signal_user_data_t *ud)
                return FALSE;
        }
 
-       gint titleindex = ghb_settings_get_int(ud->settings, "title");
+       gint titleindex;
+
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
     title = hb_list_item( list, titleindex );
        if (title == NULL) return FALSE;
-       gint mux = ghb_settings_get_int(ud->settings, "container");
+       gint mux = ghb_settings_combo_int(ud->settings, "container");
 
        const GValue *audio_list;
        gint count, ii;
@@ -2615,9 +2749,10 @@ ghb_validate_audio(signal_user_data_t *ud)
            hb_audio_config_t *taudio;
 
                asettings = ghb_array_get_nth(audio_list, ii);
-               gint track = ghb_settings_get_int(asettings, "audio_track");
-               gint codec = ghb_settings_get_int(asettings, "audio_codec");
-        taudio = (hb_audio_config_t *) hb_list_audio_config_item( title->list_audio, track );
+               gint track = ghb_settings_combo_int(asettings, "audio_track");
+               gint codec = ghb_settings_combo_int(asettings, "audio_codec");
+        taudio = (hb_audio_config_t *) hb_list_audio_config_item(
+                                                                                       title->list_audio, track );
                if ((taudio->in.codec != HB_ACODEC_AC3) && (codec == HB_ACODEC_AC3))
                {
                        // Not supported.  AC3 is passthrough only, so input must be AC3
@@ -2704,7 +2839,7 @@ ghb_validate_audio(signal_user_data_t *ud)
                        value = get_acodec_value(codec);
                        ghb_settings_take_value(asettings, "audio_codec", value);
                }
-               gint mix = ghb_settings_get_int (asettings, "audio_mix");
+               gint mix = ghb_settings_combo_int (asettings, "audio_mix");
                gboolean allow_mono = TRUE;
                gboolean allow_stereo = TRUE;
                gboolean allow_dolby = TRUE;
@@ -2776,7 +2911,7 @@ ghb_validate_vquality(GValue *settings)
        gint min, max;
 
        if (ghb_settings_get_boolean(settings, "nocheckvquality")) return TRUE;
-       vcodec = ghb_settings_get_int(settings, "video_codec");
+       vcodec = ghb_settings_combo_int(settings, "video_codec");
        if (ghb_settings_get_boolean(settings, "vquality_type_constant"))
        {
                if (!ghb_settings_get_boolean(settings, "directqp"))
@@ -2869,7 +3004,7 @@ ghb_add_job(GValue *js, gint unique_id)
        if (job == NULL) return;
 
        tweaks = ghb_settings_get_boolean(js, "allow_tweaks");
-       job->mux = ghb_lookup_mux(ghb_settings_get_value(js, "container"));
+       job->mux = ghb_settings_combo_int(js, "container");
        if (job->mux == HB_MUX_MP4)
        {
                job->largeFileSize = ghb_settings_get_boolean(js, "large_mp4");
@@ -2925,8 +3060,8 @@ ghb_add_job(GValue *js, gint unique_id)
 
        
        gboolean decomb = ghb_settings_get_boolean(js, "decomb");
-       gint deint = ghb_lookup_deint(
-               ghb_settings_get_value(js, tweaks ? "tweak_deinterlace":"deinterlace"));
+       gint deint = ghb_settings_combo_int(js, 
+                                       tweaks ? "tweak_deinterlace":"deinterlace");
        if (!decomb)
                job->deinterlace = (deint != 0) ? 1 : 0;
        else
@@ -3001,8 +3136,8 @@ ghb_add_job(GValue *js, gint unique_id)
                hb_filter_deblock.settings = deblock_str;
                hb_list_add( job->filters, &hb_filter_deblock );
        }
-       gint denoise = ghb_lookup_denoise(
-               ghb_settings_get_value(js, tweaks ? "tweak_denoise" : "denoise"));
+       gint denoise = ghb_settings_combo_int(js, 
+                                       tweaks ? "tweak_denoise" : "denoise");
        if( denoise != 0 )
        {
                if (denoise > 0)
@@ -3016,7 +3151,7 @@ ghb_add_job(GValue *js, gint unique_id)
        job->width = ghb_settings_get_int(js, "scale_width");
        job->height = ghb_settings_get_int(js, "scale_height");
 
-       job->vcodec = ghb_lookup_vcodec(ghb_settings_get_value(js, "video_codec"));
+       job->vcodec = ghb_settings_combo_int(js, "video_codec");
        if ((job->mux == HB_MUX_MP4 || job->mux == HB_MUX_AVI) && 
                (job->vcodec == HB_VCODEC_THEORA))
        {
@@ -3071,7 +3206,7 @@ ghb_add_job(GValue *js, gint unique_id)
                job->vfr = FALSE;
        }
 
-       gint vrate = ghb_lookup_vrate(ghb_settings_get_value(js, "framerate"));
+       gint vrate = ghb_settings_combo_int(js, "framerate");
        if( vrate == 0 || job->vfr )
        {
                job->vrate = title->rate;
@@ -3110,9 +3245,9 @@ ghb_add_job(GValue *js, gint unique_id)
                asettings = ghb_array_get_nth(audio_list, ii);
                audio.in.track = ghb_settings_get_int(asettings, "audio_track");
                audio.out.track = tcount;
-               audio.out.codec = ghb_lookup_acodec(
-                       ghb_settings_get_value(asettings, "audio_codec"));
-        taudio = (hb_audio_config_t *) hb_list_audio_config_item( title->list_audio, audio.in.track );
+               audio.out.codec = ghb_settings_combo_int(asettings, "audio_codec");
+        taudio = (hb_audio_config_t *) hb_list_audio_config_item(
+                                                                       title->list_audio, audio.in.track );
                if ((taudio->in.codec != HB_ACODEC_AC3) && (audio.out.codec == HB_ACODEC_AC3))
                {
                        // Not supported.  AC3 is passthrough only, so input must be AC3
@@ -3155,15 +3290,13 @@ ghb_add_job(GValue *js, gint unique_id)
                }
                else
                {
-                       audio.out.mixdown = ghb_lookup_mix(
-                               ghb_settings_get_value (asettings, "audio_mix"));
+                       audio.out.mixdown = ghb_settings_combo_int(asettings, "audio_mix");
                        // Make sure the mixdown is valid and pick a new one if not.
                        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");
-                       gint srate = ghb_lookup_rate(
-                               ghb_settings_get_value(asettings, "audio_rate"));
+                               ghb_settings_combo_int(asettings, "audio_bitrate");
+                       gint srate = ghb_settings_combo_int(asettings, "audio_rate");
                        if (srate == 0) // 0 is same as source
                                audio.out.samplerate = taudio->in.samplerate;
                        else
index 921c822d1024cb1c39693db25d2af4ce858888d0..df0aabcdba80b8176895f2539b46b22bae8630c2 100644 (file)
@@ -131,17 +131,7 @@ gboolean ghb_validate_video(signal_user_data_t *ud);
 gboolean ghb_validate_filters(signal_user_data_t *ud);
 gboolean ghb_validate_filter_string(const gchar *str, gint max_fields);
 void ghb_hb_cleanup(gboolean partial);
-gint ghb_lookup_acodec(const GValue *acodec);
-const gchar* ghb_lookup_acodec_option(const GValue *acodec);
-gint ghb_lookup_mix(const GValue *mix);
-const gchar* ghb_lookup_mix_option(const GValue *mix);
-const gchar* ghb_lookup_container_option(const GValue *container);
-gint ghb_lookup_container(const GValue *container);
-const gchar* ghb_lookup_vcodec_option(const GValue *vcodec);
-#if 0
-gint ghb_lookup_bitrate(const gchar *bitrate);
-gint ghb_lookup_rate(const gchar *rate);
-gdouble ghb_lookup_drc(const gchar *drc);
-#endif
+gint ghb_lookup_combo_int(const gchar *name, const GValue *acodec);
+const gchar* ghb_lookup_combo_option(const gchar *name, const GValue *acodec);
 
 #endif // _HBBACKEND_H_
index b562117e61c30a2b2be61ba97dbc5076a74ed437..7b7842007b8c70a853612c2bd0e1051ff88f428f 100644 (file)
@@ -59,7 +59,7 @@
                <key>x264_refs</key>
                <integer>1</integer>
                <key>x264_subme</key>
-               <integer>5</integer>
+               <integer>6</integer>
                <key>x264_trellis</key>
                <integer>0</integer>
                <key>x264_weighted_bframes</key>
index 8f8a0cd6586c48df6531d87179d1b3e8255c412b..e3ec465911c03a5c31a7a63b92db9bd5d57696e3 100644 (file)
@@ -745,19 +745,22 @@ ghb_settings_save(signal_user_data_t *ud, const gchar *name)
        while (g_hash_table_iter_next(
                        &iter, (gpointer*)(void*)&key, (gpointer*)(void*)&value))
        {
+               const GValue *gval;
+               gchar *key2;
+
+               key2 = key;
                if (!autoscale)
                {
-                       if (strcmp(key, "scale_width"))
+                       if (strcmp(key, "max_width") == 0)
                        {
-                               key = "max_width";
+                               key2 = "scale_width";
                        }
-                       if (strcmp(key, "scale_height"))
+                       else if (strcmp(key, "max_height") == 0)
                        {
-                               key = "max_height";
+                               key2 = "scale_height";
                        }
                }
-               const GValue *gval;
-               gval = ghb_settings_get_value(ud->settings, key);
+               gval = ghb_settings_get_value(ud->settings, key2);
                if (gval == NULL)
                {
                        g_debug("Setting (%s) is not in defaults\n", (gchar*)key);
index 391ae20ae48ee8e71b2aa872948657b3ff3e7426..19a7d4759a8a0e5343b981cbac1d7ae17b417b3c 100644 (file)
 "                      <key>x264_refs</key>\n"
 "                      <integer>1</integer>\n"
 "                      <key>x264_subme</key>\n"
-"                      <integer>5</integer>\n"
+"                      <integer>6</integer>\n"
 "                      <key>x264_trellis</key>\n"
 "                      <integer>0</integer>\n"
 "                      <key>x264_weighted_bframes</key>\n"
 "                      <true />\n"
 "                      <key>x264_options</key>\n"
 "                      <string>ref=5:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-"
-"pyramid:me=umh:subme=5:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pski"
-"p:filter=2,2</string>\n"
+"pyramid:me=umh:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter"
+"=2,2</string>\n"
 "              </dict>\n"
 "              <key>AppleTV</key>\n"
 "              <dict>\n"
 "                      <key>vquality_type_bitrate</key>\n"
 "                      <true />\n"
 "                      <key>x264_options</key>\n"
-"                      <string>bframes=3:ref=1:subme=5:me=umh:no-fast-pskip=1:trellis=1:cab"
-"ac=0</string>\n"
+"                      <string>bframes=3:ref=1:me=umh:no-fast-pskip=1:trellis=1:cabac=0</st"
+"ring>\n"
 "              </dict>\n"
 "              <key>Bedlam</key>\n"
 "              <dict>\n"
 "                      <true />\n"
 "                      <key>x264_options</key>\n"
 "                      <string>ref=3:mixed-refs:bframes=16:bime:weightb:b-rdo:b-pyramid:dir"
-"ect=auto:me=umh:subme=6:trellis=1:analyse=all:8x8dct:no-fast-pskip</str"
-"ing>\n"
+"ect=auto:me=umh:trellis=1:analyse=all:8x8dct:no-fast-pskip</string>\n"
 "              </dict>\n"
 "              <key>Classic</key>\n"
 "              <dict>\n"
 "                      <true />\n"
 "                      <key>x264_options</key>\n"
 "                      <string>ref=3:mixed-refs:bframes=3:b-pyramid:b-rdo:bime:weightb:filt"
-"er=-2,-1:subme=6:trellis=1:analyse=all:8x8dct:me=umh</string>\n"
+"er=-2,-1:trellis=1:analyse=all:8x8dct:me=umh</string>\n"
 "              </dict>\n"
 "              <key>Deux Six Quatre</key>\n"
 "              <dict>\n"
 "                      <key>vquality_type_bitrate</key>\n"
 "                      <true />\n"
 "                      <key>x264_options</key>\n"
-"                      <string>ref=2:bframes=2:subme=5:me=umh</string>\n"
+"                      <string>ref=2:bframes=2:me=umh</string>\n"
 "              </dict>\n"
 "              <key>PS3</key>\n"
 "              <dict>\n"
 "                      <key>vquality_type_bitrate</key>\n"
 "                      <true />\n"
 "                      <key>x264_options</key>\n"
-"                      <string>level=41:subme=5:me=umh</string>\n"
+"                      <string>level=41:me=umh</string>\n"
 "              </dict>\n"
 "              <key>PSP</key>\n"
 "              <dict>\n"
 "                      <true />\n"
 "                      <key>x264_options</key>\n"
 "                      <string>ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:me"
-"=umh:subme=5:analyse=all:trellis=1:no-fast-pskip</string>\n"
+"=umh:analyse=all:trellis=1:no-fast-pskip</string>\n"
 "              </dict>\n"
 "              <key>Television</key>\n"
 "              <dict>\n"
 "                      <true />\n"
 "                      <key>x264_options</key>\n"
 "                      <string>ref=3:mixed-refs:bframes=6:bime:weightb:direct=auto:b-pyrami"
-"d:me=umh:subme=6:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip</str"
-"ing>\n"
+"d:me=umh:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip</string>\n"
 "              </dict>\n"
 "              <key>Xbox 360</key>\n"
 "              <dict>\n"
 "                      <true />\n"
 "                      <key>x264_options</key>\n"
 "                      <string>level=40:ref=2:mixed-refs:bframes=3:bime:weightb:b-rdo:direc"
-"t=auto:b-pyramid:me=umh:subme=5:analyse=all:no-fast-pskip:filter=-2,-1<"
-"/string>\n"
+"t=auto:b-pyramid:me=umh:analyse=all:no-fast-pskip:filter=-2,-1</string>"
+"\n"
 "              </dict>\n"
 "              <key>iPhone / iPod Touch</key>\n"
 "              <dict>\n"
 "                      <key>vquality_type_bitrate</key>\n"
 "                      <true />\n"
 "                      <key>x264_options</key>\n"
-"                      <string>level=30:cabac=0:ref=1:analyse=all:me=umh:subme=6:no-fast-ps"
-"kip=1:trellis=1</string>\n"
+"                      <string>level=30:cabac=0:ref=1:analyse=all:me=umh:no-fast-pskip=1:tr"
+"ellis=1</string>\n"
 "              </dict>\n"
 "              <key>iPod High-Rez</key>\n"
 "              <dict>\n"
 "                      <true />\n"
 "                      <key>x264_options</key>\n"
 "                      <string>level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsiz"
-"e=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1</string>\n"
+"e=2000:analyse=all:me=umh:no-fast-pskip=1</string>\n"
 "              </dict>\n"
 "              <key>iPod Low-Rez</key>\n"
 "              <dict>\n"
 "                      <true />\n"
 "                      <key>x264_options</key>\n"
 "                      <string>level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize"
-"=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1</string>\n"
+"=2000:analyse=all:me=umh:no-fast-pskip=1</string>\n"
 "              </dict>\n"
 "      </dict>\n"
 "      <key>widget-deps</key>\n"
index e0ee6aef31ff2232c30f4cf8af3656d2cbe8f612..8710bb6d122d0f374b6c8059df64f510d874df2f 100644 (file)
@@ -4884,7 +4884,7 @@ R2RrUAAABBgBAQACAAAAQAAAABAAAAAQ////AP///wD///8A////AP///wD///8A////AP///wD///8A
                        <key>x264_refs</key>
                        <integer>1</integer>
                        <key>x264_subme</key>
-                       <integer>5</integer>
+                       <integer>6</integer>
                        <key>x264_trellis</key>
                        <integer>0</integer>
                        <key>x264_weighted_bframes</key>
@@ -5088,7 +5088,7 @@ R2RrUAAABBgBAQACAAAAQAAAABAAAAAQ////AP///wD///8A////AP///wD///8A////AP///wD///8A
                        <key>vquality_type_bitrate</key>
                        <true />
                        <key>x264_options</key>
-                       <string>ref=5:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=5:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter=2,2</string>
+                       <string>ref=5:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter=2,2</string>
                </dict>
                <key>AppleTV</key>
                <dict>
@@ -5170,7 +5170,7 @@ R2RrUAAABBgBAQACAAAAQAAAABAAAAAQ////AP///wD///8A////AP///wD///8A////AP///wD///8A
                        <key>vquality_type_bitrate</key>
                        <true />
                        <key>x264_options</key>
-                       <string>bframes=3:ref=1:subme=5:me=umh:no-fast-pskip=1:trellis=1:cabac=0</string>
+                       <string>bframes=3:ref=1:me=umh:no-fast-pskip=1:trellis=1:cabac=0</string>
                </dict>
                <key>Bedlam</key>
                <dict>
@@ -5386,7 +5386,7 @@ R2RrUAAABBgBAQACAAAAQAAAABAAAAAQ////AP///wD///8A////AP///wD///8A////AP///wD///8A
                        <key>vquality_type_target</key>
                        <true />
                        <key>x264_options</key>
-                       <string>ref=3:mixed-refs:bframes=16:bime:weightb:b-rdo:b-pyramid:direct=auto:me=umh:subme=6:trellis=1:analyse=all:8x8dct:no-fast-pskip</string>
+                       <string>ref=3:mixed-refs:bframes=16:bime:weightb:b-rdo:b-pyramid:direct=auto:me=umh:trellis=1:analyse=all:8x8dct:no-fast-pskip</string>
                </dict>
                <key>Classic</key>
                <dict>
@@ -5528,7 +5528,7 @@ R2RrUAAABBgBAQACAAAAQAAAABAAAAAQ////AP///wD///8A////AP///wD///8A////AP///wD///8A
                        <key>vquality_type_constant</key>
                        <true />
                        <key>x264_options</key>
-                       <string>ref=3:mixed-refs:bframes=3:b-pyramid:b-rdo:bime:weightb:filter=-2,-1:subme=6:trellis=1:analyse=all:8x8dct:me=umh</string>
+                       <string>ref=3:mixed-refs:bframes=3:b-pyramid:b-rdo:bime:weightb:filter=-2,-1:trellis=1:analyse=all:8x8dct:me=umh</string>
                </dict>
                <key>Deux Six Quatre</key>
                <dict>
@@ -5744,7 +5744,7 @@ R2RrUAAABBgBAQACAAAAQAAAABAAAAAQ////AP///wD///8A////AP///wD///8A////AP///wD///8A
                        <key>vquality_type_bitrate</key>
                        <true />
                        <key>x264_options</key>
-                       <string>ref=2:bframes=2:subme=5:me=umh</string>
+                       <string>ref=2:bframes=2:me=umh</string>
                </dict>
                <key>PS3</key>
                <dict>
@@ -5812,7 +5812,7 @@ R2RrUAAABBgBAQACAAAAQAAAABAAAAAQ////AP///wD///8A////AP///wD///8A////AP///wD///8A
                        <key>vquality_type_bitrate</key>
                        <true />
                        <key>x264_options</key>
-                       <string>level=41:subme=5:me=umh</string>
+                       <string>level=41:me=umh</string>
                </dict>
                <key>PSP</key>
                <dict>
@@ -5954,7 +5954,7 @@ R2RrUAAABBgBAQACAAAAQAAAABAAAAAQ////AP///wD///8A////AP///wD///8A////AP///wD///8A
                        <key>vquality_type_bitrate</key>
                        <true />
                        <key>x264_options</key>
-                       <string>ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:me=umh:subme=5:analyse=all:trellis=1:no-fast-pskip</string>
+                       <string>ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:me=umh:analyse=all:trellis=1:no-fast-pskip</string>
                </dict>
                <key>Television</key>
                <dict>
@@ -6026,7 +6026,7 @@ R2RrUAAABBgBAQACAAAAQAAAABAAAAAQ////AP///wD///8A////AP///wD///8A////AP///wD///8A
                        <key>vquality_type_bitrate</key>
                        <true />
                        <key>x264_options</key>
-                       <string>ref=3:mixed-refs:bframes=6:bime:weightb:direct=auto:b-pyramid:me=umh:subme=6:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip</string>
+                       <string>ref=3:mixed-refs:bframes=6:bime:weightb:direct=auto:b-pyramid:me=umh:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip</string>
                </dict>
                <key>Xbox 360</key>
                <dict>
@@ -6094,7 +6094,7 @@ R2RrUAAABBgBAQACAAAAQAAAABAAAAAQ////AP///wD///8A////AP///wD///8A////AP///wD///8A
                        <key>vquality_type_bitrate</key>
                        <true />
                        <key>x264_options</key>
-                       <string>level=40:ref=2:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=5:analyse=all:no-fast-pskip:filter=-2,-1</string>
+                       <string>level=40:ref=2:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:analyse=all:no-fast-pskip:filter=-2,-1</string>
                </dict>
                <key>iPhone / iPod Touch</key>
                <dict>
@@ -6166,7 +6166,7 @@ R2RrUAAABBgBAQACAAAAQAAAABAAAAAQ////AP///wD///8A////AP///wD///8A////AP///wD///8A
                        <key>vquality_type_bitrate</key>
                        <true />
                        <key>x264_options</key>
-                       <string>level=30:cabac=0:ref=1:analyse=all:me=umh:subme=6:no-fast-pskip=1:trellis=1</string>
+                       <string>level=30:cabac=0:ref=1:analyse=all:me=umh:no-fast-pskip=1:trellis=1</string>
                </dict>
                <key>iPod High-Rez</key>
                <dict>
@@ -6238,7 +6238,7 @@ R2RrUAAABBgBAQACAAAAQAAAABAAAAAQ////AP///wD///8A////AP///wD///8A////AP///wD///8A
                        <key>vquality_type_bitrate</key>
                        <true />
                        <key>x264_options</key>
-                       <string>level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1</string>
+                       <string>level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1</string>
                </dict>
                <key>iPod Low-Rez</key>
                <dict>
@@ -6310,7 +6310,7 @@ R2RrUAAABBgBAQACAAAAQAAAABAAAAAQ////AP///wD///8A////AP///wD///8A////AP///wD///8A
                        <key>vquality_type_bitrate</key>
                        <true />
                        <key>x264_options</key>
-                       <string>level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1</string>
+                       <string>level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1</string>
                </dict>
        </dict>
        <key>widget-deps</key>
index 4167a160f08315201a3b300c54072d9f96e999ca..36f4d58a165ed45126b6e16c4f117700e32af547 100644 (file)
@@ -97,21 +97,6 @@ ghb_settings_set_boolean(GValue *settings, const gchar *key, gboolean bval)
        ghb_dict_insert(settings, g_strdup(key), value);
 }
 
-void
-ghb_settings_set_combo(
-       GValue *settings, 
-       const gchar *key, 
-       gint index,
-       const gchar *option,
-       const gchar *shortOpt,
-       const gchar *svalue,
-       gint ivalue)
-{
-       GValue *value;
-       value = ghb_combo_value_new(index, option, shortOpt, svalue, ivalue);
-       ghb_dict_insert(settings, g_strdup(key), value);
-}
-
 GValue*
 ghb_settings_get_value(GValue *settings, const gchar *key)
 {
@@ -168,29 +153,15 @@ ghb_settings_get_string(GValue *settings, const gchar *key)
 }
 
 gint
-ghb_settings_get_combo_index(GValue *settings, const gchar *key)
+ghb_settings_combo_int(GValue *settings, const gchar *key)
 {
-       const GValue* value;
-       value = ghb_settings_get_value(settings, key);
-       if (value == NULL) return 0;
-       ghb_combodata_t *cd;
-       if (G_VALUE_TYPE(value) != ghb_combodata_get_type())
-               return 0;
-       cd = g_value_get_boxed(value);
-       return cd->index;
+       return ghb_lookup_combo_int(key, ghb_settings_get_value(settings, key));
 }
 
-gchar*
-ghb_settings_get_combo_option(GValue *settings, const gchar *key)
+const gchar*
+ghb_settings_combo_option(GValue *settings, const gchar *key)
 {
-       const GValue* value;
-       value = ghb_settings_get_value(settings, key);
-       if (value == NULL) return g_strdup("");
-       ghb_combodata_t *cd;
-       if (G_VALUE_TYPE(value) != ghb_combodata_get_type())
-               return g_strdup("");
-       cd = g_value_get_boxed(value);
-       return g_strdup(cd->option);
+       return ghb_lookup_combo_option(key, ghb_settings_get_value(settings, key));
 }
 
 // Map widget names to setting keys
@@ -274,49 +245,40 @@ ghb_widget_value(GtkWidget *widget)
                g_debug("\tcombo_box");
                GtkTreeModel *store;
                GtkTreeIter iter;
-               gchar *shortOpt, *option, *svalue;
-               gint index, ivalue;
+               gchar *shortOpt;
 
-               index = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
                store = gtk_combo_box_get_model(GTK_COMBO_BOX(widget));
                if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(widget), &iter))
                {
-                       gtk_tree_model_get(store, &iter, 0, &option, 2, &shortOpt, 
-                                                          3, &ivalue, 4, &svalue, -1);
-                       value = ghb_combo_value_new(index, option, shortOpt, 
-                                                                               svalue, ivalue);
-                       g_free(option);
+                       gtk_tree_model_get(store, &iter, 2, &shortOpt, -1);
+                       value = ghb_string_value_new(shortOpt);
                        g_free(shortOpt);
-                       g_free(svalue);
                }
                else
                {
-                       value = ghb_combo_value_new(-1, "", "", "", 0);
+                       value = ghb_string_value_new("");
                }
-               g_debug("\tdone");
        }
        else if (type == GTK_TYPE_COMBO_BOX_ENTRY)
        {
                GtkTreeModel *store;
                GtkTreeIter iter;
-               gchar *shortOpt, *option, *svalue;
-               gint index, ivalue;
+               gchar *shortOpt;
 
-               index = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
+               g_debug("\tcombo_box_entry");
                store = gtk_combo_box_get_model(GTK_COMBO_BOX(widget));
                if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(widget), &iter))
                {
-                       gtk_tree_model_get(store, &iter, 0, &option, 2, &shortOpt, 
-                                                          3, &ivalue, 4, &svalue, -1);
-                       value = ghb_combo_value_new(index, option, shortOpt, 
-                                                                               svalue, ivalue);
+                       gtk_tree_model_get(store, &iter, 2, &shortOpt, -1);
+                       value = ghb_string_value_new(shortOpt);
+                       g_free(shortOpt);
                }
                else
                {
                        const gchar *str;
                        str = gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget));
                        if (str == NULL) str = "";
-                       value = ghb_combo_value_new(-1, str, str, str, -1);
+                       value = ghb_string_value_new(str);
                }
        }
        else if (type == GTK_TYPE_SPIN_BUTTON)
@@ -407,23 +369,15 @@ ghb_widget_int(GtkWidget *widget)
 }
 
 gint
-ghb_widget_index(GtkWidget *widget)
+ghb_widget_boolean(GtkWidget *widget)
 {
        GValue *value;
-       gint index = 0;
+       gboolean bval;
        
        value = ghb_widget_value(widget);
-       if (value == NULL) return 0;
-       ghb_combodata_t *cd;
-       if (G_VALUE_TYPE(value) != ghb_combodata_get_type())
-       {
-               ghb_value_free(value);
-               return 0;
-       }
-       cd = g_value_get_boxed(value);
-       index = cd->index;
+       bval = ghb_value_boolean(value);
        ghb_value_free(value);
-       return index;
+       return bval;
 }
 
 void
@@ -456,6 +410,7 @@ update_widget(GtkWidget *widget, const GValue *value)
        gint ival;
        gdouble dval;
 
+       g_debug("update_widget");
        type = G_VALUE_TYPE(value);
        if (type == ghb_array_get_type() || type == ghb_dict_get_type())
                return;
@@ -612,6 +567,7 @@ ghb_ui_update(signal_user_data_t *ud, const gchar *name, const GValue *value)
 {
        GObject *object;
 
+       g_debug("ghb_ui_update() %s", name);
        if (name == NULL || value == NULL)
                return 0;
        object = GHB_OBJECT(ud->builder, name);
@@ -689,7 +645,7 @@ struct x264_opt_map_s x264_opt_map[] =
        {x264_bpyramid_syns, "x264_bpyramid", "0", X264_OPT_BOOL},
        {x264_me_syns, "x264_me", "hex", X264_OPT_COMBO},
        {x264_merange_syns, "x264_merange", "16", X264_OPT_INT},
-       {x264_subme_syns, "x264_subme", "4", X264_OPT_COMBO},
+       {x264_subme_syns, "x264_subme", "6", X264_OPT_COMBO},
        {x264_analyse_syns, "x264_analyse", "some", X264_OPT_COMBO},
        {x264_8x8dct_syns, "x264_8x8dct", "0", X264_OPT_BOOL},
        {x264_deblock_syns, "x264_deblock_alpha", "0,0", X264_OPT_DEBLOCK},
@@ -1114,7 +1070,10 @@ ghb_sanitize_x264opts(signal_user_data_t *ud, const gchar *options)
        {
                x264_remove_opt(split, x264_mixed_syns);
        }
-       gint subme = ghb_settings_get_int(ud->settings, "x264_subme");
+       gint subme;
+
+       subme = ghb_lookup_combo_int("x264_subme",
+                                       ghb_settings_get_value(ud->settings, "x264_subme"));
        if (subme < 6)
        {
                x264_remove_opt(split, x264_brdo_syns);
@@ -1140,7 +1099,9 @@ ghb_sanitize_x264opts(signal_user_data_t *ud, const gchar *options)
        {
                x264_remove_opt(split, x264_trellis_syns);
        }
-       gint analyse = ghb_settings_get_int(ud->settings, "x264_analyse");
+       gint analyse;
+       analyse = ghb_lookup_combo_int("x264_analyse",
+                                               ghb_settings_get_value(ud->settings, "x264_analyse"));
        if (analyse == 1)
        {
                x264_remove_opt(split, x264_direct_syns);
index cc89f1f7fed6274b8463a0a8500088dd331a760c..ca3ffa1e2045b38a411b5bf87fab5f0ad498d54e 100644 (file)
@@ -72,9 +72,6 @@ void ghb_settings_set_int64(GValue *settings, const gchar *key, gint64 ival);
 void ghb_settings_set_int(GValue *settings, const gchar *key, gint ival);
 void ghb_settings_set_boolean(
        GValue *settings, const gchar *key, gboolean bval);
-void ghb_settings_set_combo(
-       GValue *settings, const gchar *key, gint index, const gchar *option,
-       const gchar *shortOpt, const gchar *svalue, gint ivalue);
 void ghb_settings_copy(
        GValue *settings, const gchar *key, const GValue *value);
 GValue* ghb_settings_get_value(GValue *settings, const gchar *key);
@@ -83,15 +80,15 @@ gint64 ghb_settings_get_int64(GValue *settings, const gchar *key);
 gint ghb_settings_get_int(GValue *settings, const gchar *key);
 gdouble ghb_settings_get_double(GValue *settings, const gchar *key);
 gchar* ghb_settings_get_string(GValue *settings, const gchar *key);
-gint ghb_settings_get_combo_index(GValue *settings, const gchar *key);
-gchar* ghb_settings_get_combo_option(GValue *settings, const gchar *name);
+gint ghb_settings_combo_int(GValue *settings, const gchar *key);
+const gchar* ghb_settings_combo_option(GValue *settings, const gchar *key);
 
 GValue* ghb_widget_value(GtkWidget *widget);
 gchar* ghb_widget_string(GtkWidget *widget);
 gdouble ghb_widget_double(GtkWidget *widget);
 gint64 ghb_widget_int64(GtkWidget *widget);
 gint ghb_widget_int(GtkWidget *widget);
-gint ghb_widget_index(GtkWidget *widget);
+gint ghb_widget_boolean(GtkWidget *widget);
 
 void ghb_widget_to_setting(GValue *settings, GtkWidget *widget);
 int ghb_ui_update(
index 56827727b3814e36ed178e5c5d6a07945ba8a396..46a78ff5fe76d5fedfd3b15f0f50ceb02e82d5dd 100644 (file)
@@ -72,7 +72,7 @@
                <key>vquality_type_bitrate</key>
                <true />
                <key>x264_options</key>
-               <string>ref=5:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=5:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter=2,2</string>
+               <string>ref=5:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter=2,2</string>
        </dict>
        <key>AppleTV</key>
        <dict>
                <key>vquality_type_bitrate</key>
                <true />
                <key>x264_options</key>
-               <string>bframes=3:ref=1:subme=5:me=umh:no-fast-pskip=1:trellis=1:cabac=0</string>
+               <string>bframes=3:ref=1:me=umh:no-fast-pskip=1:trellis=1:cabac=0</string>
        </dict>
        <key>Bedlam</key>
        <dict>
                <key>vquality_type_target</key>
                <true />
                <key>x264_options</key>
-               <string>ref=3:mixed-refs:bframes=16:bime:weightb:b-rdo:b-pyramid:direct=auto:me=umh:subme=6:trellis=1:analyse=all:8x8dct:no-fast-pskip</string>
+               <string>ref=3:mixed-refs:bframes=16:bime:weightb:b-rdo:b-pyramid:direct=auto:me=umh:trellis=1:analyse=all:8x8dct:no-fast-pskip</string>
        </dict>
        <key>Classic</key>
        <dict>
                <key>vquality_type_constant</key>
                <true />
                <key>x264_options</key>
-               <string>ref=3:mixed-refs:bframes=3:b-pyramid:b-rdo:bime:weightb:filter=-2,-1:subme=6:trellis=1:analyse=all:8x8dct:me=umh</string>
+               <string>ref=3:mixed-refs:bframes=3:b-pyramid:b-rdo:bime:weightb:filter=-2,-1:trellis=1:analyse=all:8x8dct:me=umh</string>
        </dict>
        <key>Deux Six Quatre</key>
        <dict>
                <key>vquality_type_bitrate</key>
                <true />
                <key>x264_options</key>
-               <string>ref=2:bframes=2:subme=5:me=umh</string>
+               <string>ref=2:bframes=2:me=umh</string>
        </dict>
        <key>PS3</key>
        <dict>
                <key>vquality_type_bitrate</key>
                <true />
                <key>x264_options</key>
-               <string>level=41:subme=5:me=umh</string>
+               <string>level=41:me=umh</string>
        </dict>
        <key>PSP</key>
        <dict>
                <key>vquality_type_bitrate</key>
                <true />
                <key>x264_options</key>
-               <string>ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:me=umh:subme=5:analyse=all:trellis=1:no-fast-pskip</string>
+               <string>ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:me=umh:analyse=all:trellis=1:no-fast-pskip</string>
        </dict>
        <key>Television</key>
        <dict>
                <key>vquality_type_bitrate</key>
                <true />
                <key>x264_options</key>
-               <string>ref=3:mixed-refs:bframes=6:bime:weightb:direct=auto:b-pyramid:me=umh:subme=6:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip</string>
+               <string>ref=3:mixed-refs:bframes=6:bime:weightb:direct=auto:b-pyramid:me=umh:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip</string>
        </dict>
        <key>Xbox 360</key>
        <dict>
                <key>vquality_type_bitrate</key>
                <true />
                <key>x264_options</key>
-               <string>level=40:ref=2:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=5:analyse=all:no-fast-pskip:filter=-2,-1</string>
+               <string>level=40:ref=2:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:analyse=all:no-fast-pskip:filter=-2,-1</string>
        </dict>
        <key>iPhone / iPod Touch</key>
        <dict>
                <key>vquality_type_bitrate</key>
                <true />
                <key>x264_options</key>
-               <string>level=30:cabac=0:ref=1:analyse=all:me=umh:subme=6:no-fast-pskip=1:trellis=1</string>
+               <string>level=30:cabac=0:ref=1:analyse=all:me=umh:no-fast-pskip=1:trellis=1</string>
        </dict>
        <key>iPod High-Rez</key>
        <dict>
                <key>vquality_type_bitrate</key>
                <true />
                <key>x264_options</key>
-               <string>level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1</string>
+               <string>level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1</string>
        </dict>
        <key>iPod Low-Rez</key>
        <dict>
                <key>vquality_type_bitrate</key>
                <true />
                <key>x264_options</key>
-               <string>level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1</string>
+               <string>level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1</string>
        </dict>
 </dict>
 </plist>
index 6e8a06e4c7dc9f0252447c834f7695d7f6da4e8c..6013db8d8011090995df14d84d448a9ae342ec2b 100644 (file)
@@ -65,10 +65,6 @@ debug_show_type(GType tp)
        {
                str ="bool";
        }
-       else if (tp == ghb_combodata_get_type())
-       {
-               str ="combo";
-       }
        else if (tp == ghb_array_get_type())
        {
                str ="array";
@@ -218,8 +214,6 @@ ghb_value_cmp(const GValue *vala, const GValue *valb)
 
        typa = G_VALUE_TYPE(vala);
        typb = G_VALUE_TYPE(valb);
-       if (typa == ghb_combodata_get_type()) typa = G_TYPE_STRING;
-       if (typb == ghb_combodata_get_type()) typb = G_TYPE_STRING;
        if (typa != typb)
        {
                return 1;
@@ -368,19 +362,6 @@ ghb_boolean_value_new(gboolean bval)
        return gval;
 }
 
-GValue*
-ghb_combo_value_new(
-       gint index,
-       const gchar *option,
-       const gchar *shortOpt,
-       const gchar *svalue,
-       gint ivalue)
-{
-       GValue *gval = ghb_value_new(ghb_combodata_get_type());
-    ghb_value_set_combodata(gval, index, option, shortOpt, svalue, ivalue);
-       return gval;
-}
-
 GValue*
 ghb_dict_value_new()
 {
@@ -428,96 +409,6 @@ ghb_rawdata_value_new(ghb_rawdata_t *data)
        return gval;
 }
 
-static gpointer
-combodata_copy(gpointer boxed)
-{
-       const ghb_combodata_t *combodata = (const ghb_combodata_t*)boxed;
-       ghb_combodata_t *copy = g_malloc0(sizeof(ghb_combodata_t));
-       if (combodata->option)
-               copy->option = g_strdup(combodata->option);
-       if (combodata->shortOpt)
-               copy->shortOpt = g_strdup(combodata->shortOpt);
-       if (combodata->svalue)
-               copy->svalue = g_strdup(combodata->svalue);
-
-       copy->index = combodata->index;
-       copy->ivalue = combodata->ivalue;
-       return copy;
-}
-
-static void
-combodata_free(gpointer boxed)
-{
-       ghb_combodata_t *combodata = (ghb_combodata_t*)boxed;
-       if (combodata->option) 
-               g_free(combodata->option);
-       if (combodata->shortOpt) 
-               g_free(combodata->shortOpt);
-       if (combodata->svalue) 
-               g_free(combodata->svalue);
-       g_free(combodata);
-}
-
-
-static void
-xform_combodata_to_string(const GValue *combo, GValue *sval)
-{
-       const ghb_combodata_t *combodata = g_value_get_boxed(combo);
-       g_value_set_string(sval, combodata->shortOpt);
-}
-
-static void
-xform_combodata_to_int64(const GValue *combo, GValue *ival)
-{
-       const ghb_combodata_t *combodata = g_value_get_boxed(combo);
-       g_value_set_int64(ival, combodata->ivalue);
-}
-
-static void
-xform_combodata_to_double(const GValue *combo, GValue *dval)
-{
-       const ghb_combodata_t *combodata = g_value_get_boxed(combo);
-       g_value_set_double(dval, (gdouble)combodata->ivalue);
-}
-
-GType
-ghb_combodata_get_type(void)
-{
-       static GType type_id = 0;
-       if (!type_id)
-       {
-               type_id = g_boxed_type_register_static(
-                                       g_intern_static_string("GHBCombo"),
-                                       (GBoxedCopyFunc) combodata_copy,
-                                       (GBoxedFreeFunc) combodata_free);
-               g_value_register_transform_func(type_id, G_TYPE_STRING, 
-                                                                       xform_combodata_to_string);
-               g_value_register_transform_func(type_id, G_TYPE_INT64, 
-                                                                       xform_combodata_to_int64);
-               g_value_register_transform_func(type_id, G_TYPE_DOUBLE, 
-                                                                       xform_combodata_to_double);
-       }
-       return type_id;
-}
-
-void
-ghb_value_set_combodata(
-       GValue *gval, 
-       gint index,
-       const gchar *option,
-       const gchar *shortOpt,
-       const gchar *svalue,
-       gint ivalue)
-{
-       ghb_combodata_t combodata;
-       combodata.index = index;
-       combodata.option = (gchar*)option;
-       combodata.shortOpt = (gchar*)shortOpt;
-       combodata.svalue = (gchar*)svalue;
-       combodata.ivalue = ivalue;
-       g_value_set_boxed(gval, &combodata);
-}
-
 static gpointer
 rawdata_copy(gpointer boxed)
 {
index d184a5f86a90bc404393a364c52218cdcf79ad37..5e02900c7657a3f20833a257beff3c60416e36ed 100644 (file)
@@ -25,24 +25,6 @@ typedef struct
        gsize size;
 } ghb_rawdata_t;
 
-typedef struct
-{
-       gint index;
-       gchar *option;
-       gchar *shortOpt;
-       gchar *svalue;
-       gint ivalue;
-} ghb_combodata_t;
-
-GType ghb_combodata_get_type(void);
-void ghb_value_set_combodata(
-       GValue *gval, 
-       gint index,
-       const gchar *option,
-       const gchar *shortOpt,
-       const gchar *svalue,
-       gint ivalue);
-
 GType ghb_rawdata_get_type(void);
 
 GType ghb_array_get_type(void);
@@ -74,12 +56,6 @@ GValue* ghb_int64_value_new(gint64 ival);
 GValue* ghb_int_value_new(gint ival);
 GValue* ghb_double_value_new(gdouble dval);
 GValue* ghb_boolean_value_new(gboolean bval);
-GValue* ghb_combo_value_new(
-       gint index,
-       const gchar *option,
-       const gchar *shortOpt,
-       const gchar *svalue,
-       gint ivalue);
 GValue* ghb_dict_value_new(void);
 GValue* ghb_array_value_new(guint size);
 void ghb_array_value_reset(GValue *gval, guint size);