OSDN Git Service

LinGui: add option to completely disable update checking
[handbrake-jp/handbrake-jp-git.git] / gtk / src / x264handler.c
index f1c4bfa..61adaa0 100644 (file)
@@ -20,6 +20,7 @@
 #include "hb-backend.h"
 #include "x264handler.h"
 
+gint ghb_lookup_bframes(const gchar *options);
 static void x264_opt_update(signal_user_data_t *ud, GtkWidget *widget);
 static gchar* sanitize_x264opts(signal_user_data_t *ud, const gchar *options);
 
@@ -36,7 +37,7 @@ x264_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
                x264_opt_update(ud, widget);
                ignore_options_update = FALSE;
        }
-       ghb_check_dependency(ud, widget);
+       ghb_check_dependency(ud, widget, NULL);
        ghb_clear_presets_selection(ud);
 }
 
@@ -52,7 +53,7 @@ x264_me_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
                x264_opt_update(ud, widget);
                ignore_options_update = FALSE;
        }
-       ghb_check_dependency(ud, widget);
+       ghb_check_dependency(ud, widget, NULL);
        ghb_clear_presets_selection(ud);
        widget = GHB_WIDGET(ud->builder, "x264_merange");
        me = ghb_settings_combo_int(ud->settings, "x264_me");
@@ -120,6 +121,8 @@ x264_focus_out_cb(GtkWidget *widget, GdkEventFocus *event,
 enum
 {
        X264_OPT_NONE,
+       X264_OPT_BOOL_NONE,
+       X264_OPT_INT_NONE,
        X264_OPT_DEBLOCK,
        X264_OPT_PSY,
        X264_OPT_INT,
@@ -183,7 +186,7 @@ struct x264_opt_map_s x264_opt_map[] =
        {x264_me_syns, "x264_me", "hex", X264_OPT_COMBO},
        {x264_merange_syns, "x264_merange", "16", X264_OPT_INT},
        {x264_subme_syns, "x264_subme", "7", X264_OPT_COMBO},
-       {x264_aqmode_syns, "x264_aqmode", "1", X264_OPT_NONE},
+       {x264_aqmode_syns, "x264_aqmode", "1", X264_OPT_INT_NONE},
        {x264_analyse_syns, "x264_analyse", "some", X264_OPT_COMBO},
        {x264_8x8dct_syns, "x264_8x8dct", "1", X264_OPT_BOOL},
        {x264_deblock_syns, "x264_deblock_alpha", "0,0", X264_OPT_DEBLOCK},
@@ -193,8 +196,8 @@ struct x264_opt_map_s x264_opt_map[] =
        {x264_decimate_syns, "x264_no_dct_decimate", "0", X264_OPT_BOOL},
        {x264_cabac_syns, "x264_cabac", "1", X264_OPT_BOOL},
        {x264_psy_syns, "x264_psy_rd", "1,0", X264_OPT_PSY},
-       {x264_mbtree_syns, "x264_mbtree", "1", X264_OPT_BOOL},
        {x264_psy_syns, "x264_psy_trell", "1,0", X264_OPT_PSY},
+       {x264_mbtree_syns, "x264_mbtree", "1", X264_OPT_BOOL_NONE},
 };
 #define X264_OPT_MAP_SIZE (sizeof(x264_opt_map)/sizeof(struct x264_opt_map_s))
 
@@ -222,6 +225,17 @@ x264_update_int(signal_user_data_t *ud, const gchar *name, const gchar *val)
        ghb_ui_update(ud, name, ghb_int64_value(ival));
 }
 
+static void
+x264_update_int_setting(signal_user_data_t *ud, const gchar *name, const gchar *val)
+{
+       gint ival;
+
+       if (val == NULL) return;
+       ival = g_strtod (val, NULL);
+       ghb_settings_set_value(ud->settings, name, ghb_int64_value(ival));
+       ghb_check_dependency(ud, NULL, name);
+}
+
 static gchar *true_str[] =
 {
        "true",
@@ -252,6 +266,17 @@ x264_update_bool(signal_user_data_t *ud, const gchar *name, const gchar *val)
 }
 
 static void
+x264_update_bool_setting(signal_user_data_t *ud, const gchar *name, const gchar *val)
+{
+       if (val == NULL)
+               ghb_settings_set_value(ud->settings, name, ghb_boolean_value(1));
+       else
+               ghb_settings_set_value(ud->settings, name, ghb_boolean_value(str_is_true(val)));
+
+       ghb_check_dependency(ud, NULL, name);
+}
+
+static void
 x264_update_combo(signal_user_data_t *ud, const gchar *name, const gchar *val)
 {
        GtkTreeModel *store;
@@ -421,6 +446,12 @@ ghb_x264_parse_options(signal_user_data_t *ud, const gchar *options)
                                        x264_opt_map[jj+1].found = TRUE;
                                        x264_update_psy(ud, val);
                                        break;
+                               case X264_OPT_BOOL_NONE:
+                                       x264_update_bool_setting(ud, x264_opt_map[jj].name, val);
+                                       break;
+                               case X264_OPT_INT_NONE:
+                                       x264_update_int_setting(ud, x264_opt_map[jj].name, val);
+                                       break;
                                }
                                break;
                        }
@@ -450,6 +481,12 @@ ghb_x264_parse_options(signal_user_data_t *ud, const gchar *options)
                        case X264_OPT_PSY:
                                x264_update_psy(ud, val);
                                break;
+                       case X264_OPT_BOOL_NONE:
+                               x264_update_bool_setting(ud, x264_opt_map[jj].name, val);
+                               break;
+                       case X264_OPT_INT_NONE:
+                               x264_update_int_setting(ud, x264_opt_map[jj].name, val);
+                               break;
                        }
                        x264_opt_map[jj].found = TRUE;
                        g_free(val);
@@ -486,7 +523,7 @@ static void
 x264_opt_update(signal_user_data_t *ud, GtkWidget *widget)
 {
        gint jj;
-       const gchar *name = gtk_widget_get_name(widget);
+       const gchar *name = ghb_get_setting_key(widget);
        gchar **opt_syns = NULL;
        const gchar *def_val = NULL;
        gint type;
@@ -728,6 +765,50 @@ ghb_lookup_aqmode(const gchar *options)
        return ret;
 }
 
+gint
+ghb_lookup_bframes(const gchar *options)
+{
+       gint ret = 0;
+       gchar *result;
+       gchar **split;
+       
+       if (options == NULL)
+               options = "";
+
+       split = g_strsplit(options, ":", -1);
+
+       result = x264_lookup_value(split, x264_bframes_syns);
+       g_strfreev(split);
+       if (result != NULL)
+       {
+               ret = g_strtod(result, NULL);
+               g_free(result);
+       }
+       return ret;
+}
+
+gint
+ghb_lookup_mbtree(const gchar *options)
+{
+       gint ret = ghb_lookup_bframes(options) != 0;
+       gchar *result;
+       gchar **split;
+       
+       if (options == NULL)
+               options = "";
+
+       split = g_strsplit(options, ":", -1);
+
+       result = x264_lookup_value(split, x264_mbtree_syns);
+       g_strfreev(split);
+       if (result != NULL)
+       {
+               ret = g_strtod(result, NULL);
+               g_free(result);
+       }
+       return ret;
+}
+
 // Construct the x264 options string
 // The result is allocated, so someone must free it at some point.
 static gchar*
@@ -738,11 +819,6 @@ sanitize_x264opts(signal_user_data_t *ud, const gchar *options)
        gint ii;
 
        // Fix up option dependencies
-       gboolean mbtree = ghb_settings_get_boolean(ud->settings, "x264_mbtree");
-       if (mbtree)
-       {
-               x264_remove_opt(split, x264_bpyramid_syns);
-       }
        gint subme = ghb_settings_combo_int(ud->settings, "x264_subme");
        if (subme < 6)
        {
@@ -811,7 +887,8 @@ sanitize_x264opts(signal_user_data_t *ud, const gchar *options)
                {
                        val = "1";
                }
-               const gchar *def_val = x264_opt_get_default(opt);
+               const gchar *def_val;
+               def_val = x264_opt_get_default(opt);
                if (strcmp(val, def_val) == 0)
                {
                        // Matches the default, so remove it