/* -*- 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.
*
}
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;
{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))
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
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;
}
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");
{
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++)
{