OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / gtk / src / x264handler.c
index 2368801..d9f1fd7 100644 (file)
@@ -1,7 +1,7 @@
 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
 /*
  * x264handler.c
- * Copyright (C) John Stebbins 2008 <stebbins@stebbins>
+ * Copyright (C) John Stebbins 2008-2011 <stebbins@stebbins>
  * 
  * x264handler.c is free software.
  * 
@@ -42,6 +42,38 @@ x264_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
 }
 
 G_MODULE_EXPORT void
+x264_slider_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
+{
+       ghb_widget_to_setting(ud->settings, widget);
+
+       // Lock slider values to multiples of step_increment
+       GtkAdjustment * adj = gtk_range_get_adjustment(GTK_RANGE(widget));
+       gdouble step = gtk_adjustment_get_step_increment(adj);
+       gdouble val = gtk_range_get_value(GTK_RANGE(widget));
+       gdouble new_val = ((int)((val + step / 2) / step)) * step;
+       gdouble diff = val - new_val;
+       if ( diff > 0.0001 || diff < -0.0001 )
+       {
+               gtk_range_set_value(GTK_RANGE(widget), new_val);
+       }
+       else if (!ignore_options_update)
+       {
+               ignore_options_update = TRUE;
+               x264_opt_update(ud, widget);
+               ignore_options_update = FALSE;
+       }
+       ghb_check_dependency(ud, widget, NULL);
+       ghb_clear_presets_selection(ud);
+}
+
+G_MODULE_EXPORT gchar*
+x264_format_slider_cb(GtkScale *scale, gdouble val, signal_user_data_t *ud)
+{
+       return g_strdup_printf("%-6.6g", val);
+}
+
+
+G_MODULE_EXPORT void
 x264_me_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
 {
        gint me;
@@ -246,8 +278,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_aq_strength_syns, "x264_aq_strength", "1", X264_OPT_DOUBLE},
-       {x264_psy_syns, "x264_psy_rd", "1,0", X264_OPT_PSY},
-       {x264_psy_syns, "x264_psy_trell", "1,0", X264_OPT_PSY},
+       {x264_psy_syns, "x264_psy_rd", "1|0", X264_OPT_PSY},
+       {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))
@@ -427,26 +459,13 @@ x264_update_deblock(signal_user_data_t *ud, const gchar *xval)
 static void
 x264_parse_psy(const gchar *psy, gdouble *psy_rd, gdouble *psy_trell)
 {
-       gchar *val;
-       gchar *trell_val = NULL;
-       gchar *end;
-
        *psy_rd = 0.;
        *psy_trell = 0.;
        if (psy == NULL) return;
-       val = g_strdup(psy);
-       gchar *pos = strchr(val, ',');
-       if (pos != NULL)
-       {
-               trell_val = pos + 1;
-               *pos = 0;
-       }
-       *psy_rd = g_strtod (val, &end);
-       if (trell_val != NULL)
+       if (2 == sscanf(psy, "%lf|%lf", psy_rd, psy_trell) ||
+           2 == sscanf(psy, "%lf,%lf", psy_rd, psy_trell))
        {
-               *psy_trell = g_strtod (trell_val, &end);
        }
-       g_free(val);
 }
 
 static void
@@ -637,7 +656,7 @@ get_psy_val(signal_user_data_t *ud)
        gchar *result;
        rd = ghb_settings_get_double(ud->settings, "x264_psy_rd");
        trell = ghb_settings_get_double(ud->settings, "x264_psy_trell");
-       result = g_strdup_printf("%g,%g", rd, trell);
+       result = g_strdup_printf("%g|%g", rd, trell);
        return result;
 }
 
@@ -993,7 +1012,7 @@ sanitize_x264opts(signal_user_data_t *ud, const gchar *options)
                                x264_parse_psy(pos+1, &psy_rd, &psy_trell);
                        }
                        g_free(split[psy]);
-                       split[psy] = g_strdup_printf("psy-rd=%g,0", psy_rd);
+                       split[psy] = g_strdup_printf("psy-rd=%g|0", psy_rd);
                }
        }
        gint bframes = ghb_settings_get_int(ud->settings, "x264_bframes");
@@ -1006,10 +1025,6 @@ sanitize_x264opts(signal_user_data_t *ud, const gchar *options)
        {
                x264_remove_opt(split, x264_bpyramid_syns);
        }
-       if (!ghb_settings_get_boolean(ud->settings, "x264_cabac"))
-       {
-               x264_remove_opt(split, x264_trellis_syns);
-       }
        // Remove entries that match the defaults
        for (ii = 0; split[ii] != NULL; ii++)
        {