summaryrefslogtreecommitdiffstats
path: root/gtk/src/x264handler.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/src/x264handler.c')
-rw-r--r--gtk/src/x264handler.c1668
1 files changed, 834 insertions, 834 deletions
diff --git a/gtk/src/x264handler.c b/gtk/src/x264handler.c
index 248a9137e..1056d9820 100644
--- a/gtk/src/x264handler.c
+++ b/gtk/src/x264handler.c
@@ -216,81 +216,81 @@ x264_option_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
G_MODULE_EXPORT void
x264_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
- ghb_widget_to_setting(ud->settings, widget);
- 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);
+ ghb_widget_to_setting(ud->settings, widget);
+ 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 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);
+ 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);
+ return g_strdup_printf("%-6.6g", val);
}
G_MODULE_EXPORT void
x264_me_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
- gint me;
-
- ghb_widget_to_setting(ud->settings, widget);
- 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);
- widget = GHB_WIDGET(ud->builder, "x264_merange");
- me = ghb_settings_combo_int(ud->settings, "x264_me");
- if (me < 2)
- { // me < umh
- // me_range 4 - 16
- gtk_spin_button_set_range(GTK_SPIN_BUTTON(widget), 4, 16);
- }
- else
- {
- // me_range 4 - 64
- gtk_spin_button_set_range(GTK_SPIN_BUTTON(widget), 4, 64);
- }
+ gint me;
+
+ ghb_widget_to_setting(ud->settings, widget);
+ 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);
+ widget = GHB_WIDGET(ud->builder, "x264_merange");
+ me = ghb_settings_combo_int(ud->settings, "x264_me");
+ if (me < 2)
+ { // me < umh
+ // me_range 4 - 16
+ gtk_spin_button_set_range(GTK_SPIN_BUTTON(widget), 4, 16);
+ }
+ else
+ {
+ // me_range 4 - 64
+ gtk_spin_button_set_range(GTK_SPIN_BUTTON(widget), 4, 64);
+ }
}
G_MODULE_EXPORT void
x264_entry_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
- g_debug("x264_entry_changed_cb ()");
+ g_debug("x264_entry_changed_cb ()");
static char *tt = NULL;
@@ -300,24 +300,24 @@ x264_entry_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
tt = gtk_widget_get_tooltip_text(eo);
}
- if (!ignore_options_update)
- {
- GtkWidget *textview;
- gchar *options;
+ if (!ignore_options_update)
+ {
+ GtkWidget *textview;
+ gchar *options;
- textview = GTK_WIDGET(GHB_WIDGET(ud->builder, "x264Option"));
- ghb_widget_to_setting(ud->settings, textview);
- options = ghb_settings_get_string(ud->settings, "x264Option");
+ textview = GTK_WIDGET(GHB_WIDGET(ud->builder, "x264Option"));
+ ghb_widget_to_setting(ud->settings, textview);
+ options = ghb_settings_get_string(ud->settings, "x264Option");
- ignore_options_update = TRUE;
- ghb_x264_parse_options(ud, options);
- if (!gtk_widget_has_focus(textview))
- {
- gchar *sopts;
+ ignore_options_update = TRUE;
+ ghb_x264_parse_options(ud, options);
+ if (!gtk_widget_has_focus(textview))
+ {
+ gchar *sopts;
- sopts = sanitize_x264opts(ud, options);
- ghb_ui_update(ud, "x264Option", ghb_string_value(sopts));
- ghb_x264_parse_options(ud, sopts);
+ sopts = sanitize_x264opts(ud, options);
+ ghb_ui_update(ud, "x264Option", ghb_string_value(sopts));
+ ghb_x264_parse_options(ud, sopts);
GtkWidget *eo = GTK_WIDGET(GHB_WIDGET(ud->builder, "x264OptionExtra"));
char * new_tt;
@@ -329,7 +329,7 @@ x264_entry_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
g_free(options);
options = sopts;
- }
+ }
#if 0
if (ghb_settings_get_boolean(ud->settings, "x264UseAdvancedOptions"))
{
@@ -341,109 +341,109 @@ x264_entry_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
ghb_ui_update(ud, "x264OptionExtra", ghb_string_value(options));
}
#endif
- g_free(options);
- ignore_options_update = FALSE;
- }
+ g_free(options);
+ ignore_options_update = FALSE;
+ }
}
G_MODULE_EXPORT gboolean
x264_focus_out_cb(GtkWidget *widget, GdkEventFocus *event,
- signal_user_data_t *ud)
+ signal_user_data_t *ud)
{
- gchar *options, *sopts;
-
- ghb_widget_to_setting(ud->settings, widget);
- options = ghb_settings_get_string(ud->settings, "x264Option");
- sopts = sanitize_x264opts(ud, options);
- ignore_options_update = TRUE;
- if (sopts != NULL && strcmp(sopts, options) != 0)
- {
- ghb_ui_update(ud, "x264Option", ghb_string_value(sopts));
- ghb_x264_parse_options(ud, sopts);
- }
- g_free(options);
- g_free(sopts);
- ignore_options_update = FALSE;
- return FALSE;
+ gchar *options, *sopts;
+
+ ghb_widget_to_setting(ud->settings, widget);
+ options = ghb_settings_get_string(ud->settings, "x264Option");
+ sopts = sanitize_x264opts(ud, options);
+ ignore_options_update = TRUE;
+ if (sopts != NULL && strcmp(sopts, options) != 0)
+ {
+ ghb_ui_update(ud, "x264Option", ghb_string_value(sopts));
+ ghb_x264_parse_options(ud, sopts);
+ }
+ g_free(options);
+ g_free(sopts);
+ ignore_options_update = FALSE;
+ return FALSE;
}
enum
{
- X264_OPT_NONE,
- X264_OPT_BOOL_NONE,
- X264_OPT_INT_NONE,
- X264_OPT_DEBLOCK,
- X264_OPT_PSY,
- X264_OPT_INT,
- X264_OPT_DOUBLE,
- X264_OPT_COMBO,
- X264_OPT_BOOL,
- X264_OPT_TRANS,
+ X264_OPT_NONE,
+ X264_OPT_BOOL_NONE,
+ X264_OPT_INT_NONE,
+ X264_OPT_DEBLOCK,
+ X264_OPT_PSY,
+ X264_OPT_INT,
+ X264_OPT_DOUBLE,
+ X264_OPT_COMBO,
+ X264_OPT_BOOL,
+ X264_OPT_TRANS,
};
typedef struct
{
- gchar *x264_val;
- char *ui_val;
+ gchar *x264_val;
+ char *ui_val;
} trans_entry_t;
typedef struct
{
- gint count;
- gint x264_type;
- gint ui_type;
- trans_entry_t *map;
+ gint count;
+ gint x264_type;
+ gint ui_type;
+ trans_entry_t *map;
} trans_table_t;
static gchar *
trans_x264_val(trans_table_t *trans, char *val)
{
- int ii;
-
- if (val == NULL)
- return NULL;
- for (ii = 0; ii < trans->count; ii++)
- {
- if (strcmp(val, trans->map[ii].x264_val) == 0)
- {
- return trans->map[ii].ui_val;
- }
- }
- return NULL;
+ int ii;
+
+ if (val == NULL)
+ return NULL;
+ for (ii = 0; ii < trans->count; ii++)
+ {
+ if (strcmp(val, trans->map[ii].x264_val) == 0)
+ {
+ return trans->map[ii].ui_val;
+ }
+ }
+ return NULL;
}
static gchar *
trans_ui_val(trans_table_t *trans, char *val)
{
- int ii;
-
- if (val == NULL)
- return NULL;
- for (ii = 0; ii < trans->count; ii++)
- {
- if (strcmp(val, trans->map[ii].ui_val) == 0)
- {
- return trans->map[ii].x264_val;
- }
- }
- return NULL;
+ int ii;
+
+ if (val == NULL)
+ return NULL;
+ for (ii = 0; ii < trans->count; ii++)
+ {
+ if (strcmp(val, trans->map[ii].ui_val) == 0)
+ {
+ return trans->map[ii].x264_val;
+ }
+ }
+ return NULL;
}
struct x264_opt_map_s
{
- gchar **opt_syns;
- gchar *name;
- gchar *def_val;
- gint type;
- trans_table_t *translation;
- gboolean found;
+ gchar **opt_syns;
+ gchar *name;
+ gchar *def_val;
+ gint type;
+ trans_table_t *translation;
+ gboolean found;
};
static gchar *x264_ref_syns[] = {"ref", "frameref", NULL};
static gchar *x264_bframes_syns[] = {"bframes", NULL};
static gchar *x264_badapt_syns[] = {"b-adapt", "b_adapt", NULL};
static gchar *x264_direct_syns[] =
- {"direct", "direct-pred", "direct_pred", NULL};
+ {"direct", "direct-pred", "direct_pred", NULL};
static gchar *x264_weightp_syns[] = {"weightp", NULL};
static gchar *x264_bpyramid_syns[] = {"b-pyramid", "b_pyramid", NULL};
static gchar *x264_me_syns[] = {"me", NULL};
@@ -459,734 +459,734 @@ static gchar *x264_psy_syns[] = {"psy-rd", "psy_rd", NULL};
static gchar *x264_aq_strength_syns[] = {"aq-strength", "aq_strength", NULL};
static gchar *x264_mbtree_syns[] = {"mbtree", NULL};
static gchar *x264_decimate_syns[] =
- {"no-dct-decimate", "no_dct_decimate", NULL};
+ {"no-dct-decimate", "no_dct_decimate", NULL};
static gchar *x264_cabac_syns[] = {"cabac", NULL};
static gint
find_syn_match(const gchar *opt, gchar **syns)
{
- gint ii;
- for (ii = 0; syns[ii] != NULL; ii++)
- {
- if (strcmp(opt, syns[ii]) == 0)
- return ii;
- }
- return -1;
+ gint ii;
+ for (ii = 0; syns[ii] != NULL; ii++)
+ {
+ if (strcmp(opt, syns[ii]) == 0)
+ return ii;
+ }
+ return -1;
}
struct x264_opt_map_s x264_opt_map[] =
{
- {x264_ref_syns, "x264_refs", "3", X264_OPT_INT},
- {x264_bframes_syns, "x264_bframes", "3", X264_OPT_INT},
- {x264_direct_syns, "x264_direct", "spatial", X264_OPT_COMBO},
- {x264_badapt_syns, "x264_b_adapt", "1", X264_OPT_COMBO},
- {x264_weightp_syns, "x264_weighted_pframes", "2", X264_OPT_COMBO},
- {x264_bpyramid_syns, "x264_bpyramid", "normal", X264_OPT_COMBO},
- {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_INT_NONE},
- {x264_analyse_syns, "x264_analyse", "p8x8,b8x8,i8x8,i4x4", X264_OPT_COMBO},
- {x264_8x8dct_syns, "x264_8x8dct", "1", X264_OPT_BOOL},
- {x264_deblock_syns, "x264_deblock_alpha", "0,0", X264_OPT_DEBLOCK},
- {x264_deblock_syns, "x264_deblock_beta", "0,0", X264_OPT_DEBLOCK},
- {x264_trellis_syns, "x264_trellis", "1", X264_OPT_COMBO},
- {x264_pskip_syns, "x264_no_fast_pskip", "0", X264_OPT_BOOL},
- {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_mbtree_syns, "x264_mbtree", "1", X264_OPT_BOOL_NONE},
+ {x264_ref_syns, "x264_refs", "3", X264_OPT_INT},
+ {x264_bframes_syns, "x264_bframes", "3", X264_OPT_INT},
+ {x264_direct_syns, "x264_direct", "spatial", X264_OPT_COMBO},
+ {x264_badapt_syns, "x264_b_adapt", "1", X264_OPT_COMBO},
+ {x264_weightp_syns, "x264_weighted_pframes", "2", X264_OPT_COMBO},
+ {x264_bpyramid_syns, "x264_bpyramid", "normal", X264_OPT_COMBO},
+ {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_INT_NONE},
+ {x264_analyse_syns, "x264_analyse", "p8x8,b8x8,i8x8,i4x4", X264_OPT_COMBO},
+ {x264_8x8dct_syns, "x264_8x8dct", "1", X264_OPT_BOOL},
+ {x264_deblock_syns, "x264_deblock_alpha", "0,0", X264_OPT_DEBLOCK},
+ {x264_deblock_syns, "x264_deblock_beta", "0,0", X264_OPT_DEBLOCK},
+ {x264_trellis_syns, "x264_trellis", "1", X264_OPT_COMBO},
+ {x264_pskip_syns, "x264_no_fast_pskip", "0", X264_OPT_BOOL},
+ {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_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 const gchar*
x264_opt_get_default(const gchar *opt)
{
- gint jj;
- for (jj = 0; jj < X264_OPT_MAP_SIZE; jj++)
- {
- if (find_syn_match(opt, x264_opt_map[jj].opt_syns) >= 0)
- {
- return x264_opt_map[jj].def_val;
- }
- }
- return "";
+ gint jj;
+ for (jj = 0; jj < X264_OPT_MAP_SIZE; jj++)
+ {
+ if (find_syn_match(opt, x264_opt_map[jj].opt_syns) >= 0)
+ {
+ return x264_opt_map[jj].def_val;
+ }
+ }
+ return "";
}
static void
x264_update_double(signal_user_data_t *ud, const gchar *name, const gchar *val)
{
- gdouble dval;
+ gdouble dval;
- if (val == NULL) return;
- dval = g_strtod (val, NULL);
- ghb_ui_update(ud, name, ghb_double_value(dval));
+ if (val == NULL) return;
+ dval = g_strtod (val, NULL);
+ ghb_ui_update(ud, name, ghb_double_value(dval));
}
static void
x264_update_int(signal_user_data_t *ud, const gchar *name, const gchar *val)
{
- gint ival;
+ gint ival;
- if (val == NULL) return;
- ival = g_strtod (val, NULL);
- ghb_ui_update(ud, name, ghb_int64_value(ival));
+ if (val == NULL) return;
+ ival = g_strtod (val, NULL);
+ 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;
+ 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);
+ 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",
- "yes",
- "1",
- NULL
+ "true",
+ "yes",
+ "1",
+ NULL
};
static gboolean
str_is_true(const gchar *str)
{
- gint ii;
- for (ii = 0; true_str[ii]; ii++)
- {
- if (g_ascii_strcasecmp(str, true_str[ii]) == 0)
- return TRUE;
- }
- return FALSE;
+ gint ii;
+ for (ii = 0; true_str[ii]; ii++)
+ {
+ if (g_ascii_strcasecmp(str, true_str[ii]) == 0)
+ return TRUE;
+ }
+ return FALSE;
}
static void
x264_update_bool(signal_user_data_t *ud, const gchar *name, const gchar *val)
{
- if (val == NULL)
- ghb_ui_update(ud, name, ghb_boolean_value(1));
- else
- ghb_ui_update(ud, name, ghb_boolean_value(str_is_true(val)));
+ if (val == NULL)
+ ghb_ui_update(ud, name, ghb_boolean_value(1));
+ else
+ ghb_ui_update(ud, name, ghb_boolean_value(str_is_true(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)));
+ 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);
+ ghb_check_dependency(ud, NULL, name);
}
static void
x264_update_combo(signal_user_data_t *ud, const gchar *name, const gchar *val)
{
- GtkTreeModel *store;
- GtkTreeIter iter;
- gchar *shortOpt;
- gdouble ivalue;
- gboolean foundit = FALSE;
- GtkWidget *widget;
-
- if (val == NULL) return;
- widget = GHB_WIDGET(ud->builder, name);
- if (widget == NULL)
- {
- g_debug("Failed to find widget for key: %s\n", name);
- return;
- }
- store = gtk_combo_box_get_model(GTK_COMBO_BOX(widget));
- if (gtk_tree_model_get_iter_first (store, &iter))
- {
- do
- {
- gtk_tree_model_get(store, &iter, 2, &shortOpt, 3, &ivalue, -1);
- if (strcmp(shortOpt, val) == 0)
- {
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX(widget), &iter);
- g_free(shortOpt);
- foundit = TRUE;
- break;
- }
- g_free(shortOpt);
- } while (gtk_tree_model_iter_next (store, &iter));
- }
- if (!foundit)
- {
- if (gtk_tree_model_get_iter_first (store, &iter))
- {
- do
- {
- gtk_tree_model_get(store, &iter, 2, &shortOpt, 3, &ivalue, -1);
- if (strcmp(shortOpt, "custom") == 0)
- {
- gtk_list_store_set(GTK_LIST_STORE(store), &iter, 4, val, -1);
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX(widget), &iter);
- g_free(shortOpt);
- foundit = TRUE;
- break;
- }
- g_free(shortOpt);
- } while (gtk_tree_model_iter_next (store, &iter));
- }
- }
- // Its possible the value hasn't changed. Since settings are only
- // updated when the value changes, I'm initializing settings here as well.
- ghb_widget_to_setting(ud->settings, widget);
+ GtkTreeModel *store;
+ GtkTreeIter iter;
+ gchar *shortOpt;
+ gdouble ivalue;
+ gboolean foundit = FALSE;
+ GtkWidget *widget;
+
+ if (val == NULL) return;
+ widget = GHB_WIDGET(ud->builder, name);
+ if (widget == NULL)
+ {
+ g_debug("Failed to find widget for key: %s\n", name);
+ return;
+ }
+ store = gtk_combo_box_get_model(GTK_COMBO_BOX(widget));
+ if (gtk_tree_model_get_iter_first (store, &iter))
+ {
+ do
+ {
+ gtk_tree_model_get(store, &iter, 2, &shortOpt, 3, &ivalue, -1);
+ if (strcmp(shortOpt, val) == 0)
+ {
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX(widget), &iter);
+ g_free(shortOpt);
+ foundit = TRUE;
+ break;
+ }
+ g_free(shortOpt);
+ } while (gtk_tree_model_iter_next (store, &iter));
+ }
+ if (!foundit)
+ {
+ if (gtk_tree_model_get_iter_first (store, &iter))
+ {
+ do
+ {
+ gtk_tree_model_get(store, &iter, 2, &shortOpt, 3, &ivalue, -1);
+ if (strcmp(shortOpt, "custom") == 0)
+ {
+ gtk_list_store_set(GTK_LIST_STORE(store), &iter, 4, val, -1);
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX(widget), &iter);
+ g_free(shortOpt);
+ foundit = TRUE;
+ break;
+ }
+ g_free(shortOpt);
+ } while (gtk_tree_model_iter_next (store, &iter));
+ }
+ }
+ // Its possible the value hasn't changed. Since settings are only
+ // updated when the value changes, I'm initializing settings here as well.
+ ghb_widget_to_setting(ud->settings, widget);
}
static void
x264_update_deblock(signal_user_data_t *ud, const gchar *xval)
{
- gdouble avalue, bvalue;
- gchar *end;
- gchar *val;
- gchar *bval = NULL;
-
- if (xval == NULL) return;
- val = g_strdup(xval);
- bvalue = avalue = 0;
- if (val != NULL)
- {
- gchar *pos = strchr(val, ',');
- if (pos != NULL)
- {
- bval = pos + 1;
- *pos = 0;
- }
- avalue = g_strtod (val, &end);
- if (bval != NULL)
- {
- bvalue = g_strtod (bval, &end);
- }
- }
- g_free(val);
- ghb_ui_update(ud, "x264_deblock_alpha", ghb_int64_value(avalue));
- ghb_ui_update(ud, "x264_deblock_beta", ghb_int64_value(bvalue));
+ gdouble avalue, bvalue;
+ gchar *end;
+ gchar *val;
+ gchar *bval = NULL;
+
+ if (xval == NULL) return;
+ val = g_strdup(xval);
+ bvalue = avalue = 0;
+ if (val != NULL)
+ {
+ gchar *pos = strchr(val, ',');
+ if (pos != NULL)
+ {
+ bval = pos + 1;
+ *pos = 0;
+ }
+ avalue = g_strtod (val, &end);
+ if (bval != NULL)
+ {
+ bvalue = g_strtod (bval, &end);
+ }
+ }
+ g_free(val);
+ ghb_ui_update(ud, "x264_deblock_alpha", ghb_int64_value(avalue));
+ ghb_ui_update(ud, "x264_deblock_beta", ghb_int64_value(bvalue));
}
static void
x264_parse_psy(const gchar *psy, gdouble *psy_rd, gdouble *psy_trell)
{
- *psy_rd = 0.;
- *psy_trell = 0.;
- if (psy == NULL) return;
- if (2 == sscanf(psy, "%lf|%lf", psy_rd, psy_trell) ||
- 2 == sscanf(psy, "%lf,%lf", psy_rd, psy_trell))
- {
- }
+ *psy_rd = 0.;
+ *psy_trell = 0.;
+ if (psy == NULL) return;
+ if (2 == sscanf(psy, "%lf|%lf", psy_rd, psy_trell) ||
+ 2 == sscanf(psy, "%lf,%lf", psy_rd, psy_trell))
+ {
+ }
}
static void
x264_update_psy(signal_user_data_t *ud, const gchar *xval)
{
- gdouble rd_value, trell_value;
+ gdouble rd_value, trell_value;
- if (xval == NULL) return;
- x264_parse_psy(xval, &rd_value, &trell_value);
- ghb_ui_update(ud, "x264_psy_rd", ghb_double_value(rd_value));
- ghb_ui_update(ud, "x264_psy_trell", ghb_double_value(trell_value));
+ if (xval == NULL) return;
+ x264_parse_psy(xval, &rd_value, &trell_value);
+ ghb_ui_update(ud, "x264_psy_rd", ghb_double_value(rd_value));
+ ghb_ui_update(ud, "x264_psy_trell", ghb_double_value(trell_value));
}
static void do_update(signal_user_data_t *ud, char *name, gint type, char *val)
{
- switch(type)
- {
- case X264_OPT_INT:
- x264_update_int(ud, name, val);
- break;
- case X264_OPT_DOUBLE:
- x264_update_double(ud, name, val);
- break;
- case X264_OPT_BOOL:
- x264_update_bool(ud, name, val);
- break;
- case X264_OPT_COMBO:
- x264_update_combo(ud, name, val);
- break;
- case X264_OPT_BOOL_NONE:
- x264_update_bool_setting(ud, name, val);
- break;
- case X264_OPT_INT_NONE:
- x264_update_int_setting(ud, name, val);
- break;
- }
+ switch(type)
+ {
+ case X264_OPT_INT:
+ x264_update_int(ud, name, val);
+ break;
+ case X264_OPT_DOUBLE:
+ x264_update_double(ud, name, val);
+ break;
+ case X264_OPT_BOOL:
+ x264_update_bool(ud, name, val);
+ break;
+ case X264_OPT_COMBO:
+ x264_update_combo(ud, name, val);
+ break;
+ case X264_OPT_BOOL_NONE:
+ x264_update_bool_setting(ud, name, val);
+ break;
+ case X264_OPT_INT_NONE:
+ x264_update_int_setting(ud, name, val);
+ break;
+ }
}
void
ghb_x264_parse_options(signal_user_data_t *ud, const gchar *options)
{
- gchar **split = g_strsplit(options, ":", -1);
- if (split == NULL) return;
-
- gint ii;
- gint jj;
-
- for (jj = 0; jj < X264_OPT_MAP_SIZE; jj++)
- x264_opt_map[jj].found = FALSE;
-
- for (ii = 0; split[ii] != NULL; ii++)
- {
- gchar *val = NULL;
- gchar *pos = strchr(split[ii], '=');
- if (pos != NULL)
- {
- val = pos + 1;
- *pos = 0;
- }
- for (jj = 0; jj < X264_OPT_MAP_SIZE; jj++)
- {
- if (find_syn_match(split[ii], x264_opt_map[jj].opt_syns) >= 0)
- {
- x264_opt_map[jj].found = TRUE;
- switch(x264_opt_map[jj].type)
- {
- case X264_OPT_INT:
- x264_update_int(ud, x264_opt_map[jj].name, val);
- break;
- case X264_OPT_DOUBLE:
- x264_update_double(ud, x264_opt_map[jj].name, val);
- break;
- case X264_OPT_BOOL:
- x264_update_bool(ud, x264_opt_map[jj].name, val);
- break;
- case X264_OPT_COMBO:
- x264_update_combo(ud, x264_opt_map[jj].name, val);
- break;
- case X264_OPT_DEBLOCK:
- // dirty little hack. mark deblock_beta found as well
- x264_opt_map[jj+1].found = TRUE;
- x264_update_deblock(ud, val);
- break;
- case X264_OPT_PSY:
- // dirty little hack. mark psy_trell found as well
- 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;
- case X264_OPT_TRANS:
- if (x264_opt_map[jj].translation == NULL)
- break;
- val = trans_x264_val(x264_opt_map[jj].translation, val);
- if (val != NULL)
- {
- do_update(ud, x264_opt_map[jj].name,
- x264_opt_map[jj].translation->ui_type, val);
- // TODO un-grey the ui control
- }
- else
- {
- // TODO grey out the ui control
- }
- break;
- }
- break;
- }
- }
- }
- // For any options not found in the option string, set ui to
- // default values
- for (jj = 0; jj < X264_OPT_MAP_SIZE; jj++)
- {
- if (!x264_opt_map[jj].found)
- {
- gchar *val = strdup(x264_opt_map[jj].def_val);
- switch(x264_opt_map[jj].type)
- {
- case X264_OPT_INT:
- x264_update_int(ud, x264_opt_map[jj].name, val);
- break;
- case X264_OPT_DOUBLE:
- x264_update_double(ud, x264_opt_map[jj].name, val);
- break;
- case X264_OPT_BOOL:
- x264_update_bool(ud, x264_opt_map[jj].name, val);
- break;
- case X264_OPT_COMBO:
- x264_update_combo(ud, x264_opt_map[jj].name, val);
- break;
- case X264_OPT_DEBLOCK:
- x264_update_deblock(ud, val);
- break;
- 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;
- case X264_OPT_TRANS:
- if (x264_opt_map[jj].translation == NULL)
- break;
- val = g_strdup(trans_x264_val(x264_opt_map[jj].translation, val));
- if (val != NULL)
- {
- do_update(ud, x264_opt_map[jj].name,
- x264_opt_map[jj].translation->ui_type, val);
- // TODO un-grey the ui control
- }
- else
- {
- // TODO grey out the ui control
- }
- break;
- }
- x264_opt_map[jj].found = TRUE;
- g_free(val);
- }
- }
- g_strfreev(split);
+ gchar **split = g_strsplit(options, ":", -1);
+ if (split == NULL) return;
+
+ gint ii;
+ gint jj;
+
+ for (jj = 0; jj < X264_OPT_MAP_SIZE; jj++)
+ x264_opt_map[jj].found = FALSE;
+
+ for (ii = 0; split[ii] != NULL; ii++)
+ {
+ gchar *val = NULL;
+ gchar *pos = strchr(split[ii], '=');
+ if (pos != NULL)
+ {
+ val = pos + 1;
+ *pos = 0;
+ }
+ for (jj = 0; jj < X264_OPT_MAP_SIZE; jj++)
+ {
+ if (find_syn_match(split[ii], x264_opt_map[jj].opt_syns) >= 0)
+ {
+ x264_opt_map[jj].found = TRUE;
+ switch(x264_opt_map[jj].type)
+ {
+ case X264_OPT_INT:
+ x264_update_int(ud, x264_opt_map[jj].name, val);
+ break;
+ case X264_OPT_DOUBLE:
+ x264_update_double(ud, x264_opt_map[jj].name, val);
+ break;
+ case X264_OPT_BOOL:
+ x264_update_bool(ud, x264_opt_map[jj].name, val);
+ break;
+ case X264_OPT_COMBO:
+ x264_update_combo(ud, x264_opt_map[jj].name, val);
+ break;
+ case X264_OPT_DEBLOCK:
+ // dirty little hack. mark deblock_beta found as well
+ x264_opt_map[jj+1].found = TRUE;
+ x264_update_deblock(ud, val);
+ break;
+ case X264_OPT_PSY:
+ // dirty little hack. mark psy_trell found as well
+ 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;
+ case X264_OPT_TRANS:
+ if (x264_opt_map[jj].translation == NULL)
+ break;
+ val = trans_x264_val(x264_opt_map[jj].translation, val);
+ if (val != NULL)
+ {
+ do_update(ud, x264_opt_map[jj].name,
+ x264_opt_map[jj].translation->ui_type, val);
+ // TODO un-grey the ui control
+ }
+ else
+ {
+ // TODO grey out the ui control
+ }
+ break;
+ }
+ break;
+ }
+ }
+ }
+ // For any options not found in the option string, set ui to
+ // default values
+ for (jj = 0; jj < X264_OPT_MAP_SIZE; jj++)
+ {
+ if (!x264_opt_map[jj].found)
+ {
+ gchar *val = strdup(x264_opt_map[jj].def_val);
+ switch(x264_opt_map[jj].type)
+ {
+ case X264_OPT_INT:
+ x264_update_int(ud, x264_opt_map[jj].name, val);
+ break;
+ case X264_OPT_DOUBLE:
+ x264_update_double(ud, x264_opt_map[jj].name, val);
+ break;
+ case X264_OPT_BOOL:
+ x264_update_bool(ud, x264_opt_map[jj].name, val);
+ break;
+ case X264_OPT_COMBO:
+ x264_update_combo(ud, x264_opt_map[jj].name, val);
+ break;
+ case X264_OPT_DEBLOCK:
+ x264_update_deblock(ud, val);
+ break;
+ 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;
+ case X264_OPT_TRANS:
+ if (x264_opt_map[jj].translation == NULL)
+ break;
+ val = g_strdup(trans_x264_val(x264_opt_map[jj].translation, val));
+ if (val != NULL)
+ {
+ do_update(ud, x264_opt_map[jj].name,
+ x264_opt_map[jj].translation->ui_type, val);
+ // TODO un-grey the ui control
+ }
+ else
+ {
+ // TODO grey out the ui control
+ }
+ break;
+ }
+ x264_opt_map[jj].found = TRUE;
+ g_free(val);
+ }
+ }
+ g_strfreev(split);
}
gchar*
get_deblock_val(signal_user_data_t *ud)
{
- gchar *alpha, *beta;
- gchar *result;
- alpha = ghb_settings_get_string(ud->settings, "x264_deblock_alpha");
- beta = ghb_settings_get_string(ud->settings, "x264_deblock_beta");
- result = g_strdup_printf("%s,%s", alpha, beta);
- g_free(alpha);
- g_free(beta);
- return result;
+ gchar *alpha, *beta;
+ gchar *result;
+ alpha = ghb_settings_get_string(ud->settings, "x264_deblock_alpha");
+ beta = ghb_settings_get_string(ud->settings, "x264_deblock_beta");
+ result = g_strdup_printf("%s,%s", alpha, beta);
+ g_free(alpha);
+ g_free(beta);
+ return result;
}
gchar*
get_psy_val(signal_user_data_t *ud)
{
- gdouble rd, trell;
- 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);
- return result;
+ gdouble rd, trell;
+ 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);
+ return result;
}
static void
x264_opt_update(signal_user_data_t *ud, GtkWidget *widget)
{
- gint jj;
- const gchar *name = ghb_get_setting_key(widget);
- gchar **opt_syns = NULL;
- const gchar *def_val = NULL;
- gint type;
- trans_table_t *trans;
-
- for (jj = 0; jj < X264_OPT_MAP_SIZE; jj++)
- {
- if (strcmp(name, x264_opt_map[jj].name) == 0)
- {
- // found the options that needs updating
- opt_syns = x264_opt_map[jj].opt_syns;
- def_val = x264_opt_map[jj].def_val;
- type = x264_opt_map[jj].type;
- trans = x264_opt_map[jj].translation;
- break;
- }
- }
- if (opt_syns != NULL)
- {
- GString *x264opts = g_string_new("");
- gchar *options;
- gchar **split = NULL;
- gint ii;
- gboolean foundit = FALSE;
-
- options = ghb_settings_get_string(ud->settings, "x264Option");
- if (options)
- {
- split = g_strsplit(options, ":", -1);
- g_free(options);
- }
- for (ii = 0; split && split[ii] != NULL; ii++)
- {
- gint syn;
- gchar *val = NULL;
- gchar *pos = strchr(split[ii], '=');
- if (pos != NULL)
- {
- val = pos + 1;
- *pos = 0;
- }
- syn = find_syn_match(split[ii], opt_syns);
- if (syn >= 0)
- { // Updating this option
- gchar *val;
- foundit = TRUE;
- if (type == X264_OPT_DEBLOCK)
- val = get_deblock_val(ud);
- else if (type == X264_OPT_PSY)
- val = get_psy_val(ud);
- else
- {
- GValue *gval;
- gval = ghb_widget_value(widget);
- if (G_VALUE_TYPE(gval) == G_TYPE_BOOLEAN)
- {
- if (ghb_value_boolean(gval))
- val = g_strdup("1");
- else
- val = g_strdup("0");
- }
- else
- {
- val = ghb_widget_string(widget);
- }
- ghb_value_free(gval);
- }
- if (type == X264_OPT_TRANS)
- {
- gchar *tmp;
- tmp = g_strdup(trans_ui_val(trans, val));
- if (tmp)
- {
- g_free(val);
- val = tmp;
- }
- }
- if (strcmp(def_val, val) != 0)
- {
- g_string_append_printf(x264opts, "%s=%s:", opt_syns[syn], val);
- }
- g_free(val);
- }
- else if (val != NULL)
- g_string_append_printf(x264opts, "%s=%s:", split[ii], val);
- else
- g_string_append_printf(x264opts, "%s:", split[ii]);
-
- }
- if (split) g_strfreev(split);
- if (!foundit)
- {
- gchar *val;
- if (type == X264_OPT_DEBLOCK)
- val = get_deblock_val(ud);
- else if (type == X264_OPT_PSY)
- val = get_psy_val(ud);
- else
- {
- GValue *gval;
- gval = ghb_widget_value(widget);
- if (G_VALUE_TYPE(gval) == G_TYPE_BOOLEAN)
- {
- if (ghb_value_boolean(gval))
- val = g_strdup("1");
- else
- val = g_strdup("0");
- }
- else
- {
- val = ghb_widget_string(widget);
- }
- ghb_value_free(gval);
- }
- if (type == X264_OPT_TRANS)
- {
- gchar *tmp;
- tmp = g_strdup(trans_ui_val(trans, val));
- if (tmp)
- {
- g_free(val);
- val = tmp;
- }
- }
- if (strcmp(def_val, val) != 0)
- {
- g_string_append_printf(x264opts, "%s=%s:", opt_syns[0], val);
- }
- g_free(val);
- }
- // Update the options value
- // strip the trailing ":"
- gchar *result;
- gint len;
- result = g_string_free(x264opts, FALSE);
- len = strlen(result);
- if (len > 0) result[len - 1] = 0;
- gchar *sopts;
- sopts = sanitize_x264opts(ud, result);
- ghb_ui_update(ud, "x264Option", ghb_string_value(sopts));
- ghb_x264_parse_options(ud, sopts);
- g_free(sopts);
- g_free(result);
- }
+ gint jj;
+ const gchar *name = ghb_get_setting_key(widget);
+ gchar **opt_syns = NULL;
+ const gchar *def_val = NULL;
+ gint type;
+ trans_table_t *trans;
+
+ for (jj = 0; jj < X264_OPT_MAP_SIZE; jj++)
+ {
+ if (strcmp(name, x264_opt_map[jj].name) == 0)
+ {
+ // found the options that needs updating
+ opt_syns = x264_opt_map[jj].opt_syns;
+ def_val = x264_opt_map[jj].def_val;
+ type = x264_opt_map[jj].type;
+ trans = x264_opt_map[jj].translation;
+ break;
+ }
+ }
+ if (opt_syns != NULL)
+ {
+ GString *x264opts = g_string_new("");
+ gchar *options;
+ gchar **split = NULL;
+ gint ii;
+ gboolean foundit = FALSE;
+
+ options = ghb_settings_get_string(ud->settings, "x264Option");
+ if (options)
+ {
+ split = g_strsplit(options, ":", -1);
+ g_free(options);
+ }
+ for (ii = 0; split && split[ii] != NULL; ii++)
+ {
+ gint syn;
+ gchar *val = NULL;
+ gchar *pos = strchr(split[ii], '=');
+ if (pos != NULL)
+ {
+ val = pos + 1;
+ *pos = 0;
+ }
+ syn = find_syn_match(split[ii], opt_syns);
+ if (syn >= 0)
+ { // Updating this option
+ gchar *val;
+ foundit = TRUE;
+ if (type == X264_OPT_DEBLOCK)
+ val = get_deblock_val(ud);
+ else if (type == X264_OPT_PSY)
+ val = get_psy_val(ud);
+ else
+ {
+ GValue *gval;
+ gval = ghb_widget_value(widget);
+ if (G_VALUE_TYPE(gval) == G_TYPE_BOOLEAN)
+ {
+ if (ghb_value_boolean(gval))
+ val = g_strdup("1");
+ else
+ val = g_strdup("0");
+ }
+ else
+ {
+ val = ghb_widget_string(widget);
+ }
+ ghb_value_free(gval);
+ }
+ if (type == X264_OPT_TRANS)
+ {
+ gchar *tmp;
+ tmp = g_strdup(trans_ui_val(trans, val));
+ if (tmp)
+ {
+ g_free(val);
+ val = tmp;
+ }
+ }
+ if (strcmp(def_val, val) != 0)
+ {
+ g_string_append_printf(x264opts, "%s=%s:", opt_syns[syn], val);
+ }
+ g_free(val);
+ }
+ else if (val != NULL)
+ g_string_append_printf(x264opts, "%s=%s:", split[ii], val);
+ else
+ g_string_append_printf(x264opts, "%s:", split[ii]);
+
+ }
+ if (split) g_strfreev(split);
+ if (!foundit)
+ {
+ gchar *val;
+ if (type == X264_OPT_DEBLOCK)
+ val = get_deblock_val(ud);
+ else if (type == X264_OPT_PSY)
+ val = get_psy_val(ud);
+ else
+ {
+ GValue *gval;
+ gval = ghb_widget_value(widget);
+ if (G_VALUE_TYPE(gval) == G_TYPE_BOOLEAN)
+ {
+ if (ghb_value_boolean(gval))
+ val = g_strdup("1");
+ else
+ val = g_strdup("0");
+ }
+ else
+ {
+ val = ghb_widget_string(widget);
+ }
+ ghb_value_free(gval);
+ }
+ if (type == X264_OPT_TRANS)
+ {
+ gchar *tmp;
+ tmp = g_strdup(trans_ui_val(trans, val));
+ if (tmp)
+ {
+ g_free(val);
+ val = tmp;
+ }
+ }
+ if (strcmp(def_val, val) != 0)
+ {
+ g_string_append_printf(x264opts, "%s=%s:", opt_syns[0], val);
+ }
+ g_free(val);
+ }
+ // Update the options value
+ // strip the trailing ":"
+ gchar *result;
+ gint len;
+ result = g_string_free(x264opts, FALSE);
+ len = strlen(result);
+ if (len > 0) result[len - 1] = 0;
+ gchar *sopts;
+ sopts = sanitize_x264opts(ud, result);
+ ghb_ui_update(ud, "x264Option", ghb_string_value(sopts));
+ ghb_x264_parse_options(ud, sopts);
+ g_free(sopts);
+ g_free(result);
+ }
}
static gint
x264_find_opt(gchar **opts, gchar **opt_syns)
{
- gint ii;
- for (ii = 0; opts[ii] != NULL; ii++)
- {
- gchar *opt;
- opt = g_strdup(opts[ii]);
- gchar *pos = strchr(opt, '=');
- if (pos != NULL)
- {
- *pos = 0;
- }
- if (find_syn_match(opt, opt_syns) >= 0)
- {
- g_free(opt);
- return ii;
- }
- g_free(opt);
- }
- return -1;
+ gint ii;
+ for (ii = 0; opts[ii] != NULL; ii++)
+ {
+ gchar *opt;
+ opt = g_strdup(opts[ii]);
+ gchar *pos = strchr(opt, '=');
+ if (pos != NULL)
+ {
+ *pos = 0;
+ }
+ if (find_syn_match(opt, opt_syns) >= 0)
+ {
+ g_free(opt);
+ return ii;
+ }
+ g_free(opt);
+ }
+ return -1;
}
static void
x264_remove_opt(gchar **opts, gchar **opt_syns)
{
- gint ii;
- for (ii = 0; opts[ii] != NULL; ii++)
- {
- gchar *opt;
- opt = g_strdup(opts[ii]);
- gchar *pos = strchr(opt, '=');
- if (pos != NULL)
- {
- *pos = 0;
- }
- if (find_syn_match(opt, opt_syns) >= 0)
- {
- // Mark as deleted
- opts[ii][0] = 0;
- }
- g_free(opt);
- }
+ gint ii;
+ for (ii = 0; opts[ii] != NULL; ii++)
+ {
+ gchar *opt;
+ opt = g_strdup(opts[ii]);
+ gchar *pos = strchr(opt, '=');
+ if (pos != NULL)
+ {
+ *pos = 0;
+ }
+ if (find_syn_match(opt, opt_syns) >= 0)
+ {
+ // Mark as deleted
+ opts[ii][0] = 0;
+ }
+ g_free(opt);
+ }
}
static gchar*
x264_lookup_value(gchar **opts, gchar **opt_syns)
{
- gchar *ret = NULL;
- gint pos;
-
- const gchar *def_val = x264_opt_get_default(opt_syns[0]);
-
- pos = x264_find_opt(opts, opt_syns);
- if (pos >= 0)
- {
- gchar *cpos = strchr(opts[pos], '=');
- if (cpos != NULL)
- {
- ret = g_strdup(cpos+1);
- }
- else
- {
- ret = g_strdup("");
- }
- }
- else if (def_val != NULL)
- {
- ret = g_strdup(def_val);
- }
- return ret;
+ gchar *ret = NULL;
+ gint pos;
+
+ const gchar *def_val = x264_opt_get_default(opt_syns[0]);
+
+ pos = x264_find_opt(opts, opt_syns);
+ if (pos >= 0)
+ {
+ gchar *cpos = strchr(opts[pos], '=');
+ if (cpos != NULL)
+ {
+ ret = g_strdup(cpos+1);
+ }
+ else
+ {
+ ret = g_strdup("");
+ }
+ }
+ else if (def_val != NULL)
+ {
+ ret = g_strdup(def_val);
+ }
+ return ret;
}
gint
ghb_lookup_badapt(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_badapt_syns);
- g_strfreev(split);
- if (result != NULL)
- {
- ret = g_strtod(result, NULL);
- g_free(result);
- }
- return ret;
+ gint ret = 0;
+ gchar *result;
+ gchar **split;
+
+ if (options == NULL)
+ options = "";
+
+ split = g_strsplit(options, ":", -1);
+
+ result = x264_lookup_value(split, x264_badapt_syns);
+ g_strfreev(split);
+ if (result != NULL)
+ {
+ ret = g_strtod(result, NULL);
+ g_free(result);
+ }
+ return ret;
}
gint
ghb_lookup_aqmode(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_aqmode_syns);
- g_strfreev(split);
- if (result != NULL)
- {
- ret = g_strtod(result, NULL);
- g_free(result);
- }
- return ret;
+ gint ret = 0;
+ gchar *result;
+ gchar **split;
+
+ if (options == NULL)
+ options = "";
+
+ split = g_strsplit(options, ":", -1);
+
+ result = x264_lookup_value(split, x264_aqmode_syns);
+ g_strfreev(split);
+ if (result != NULL)
+ {
+ ret = g_strtod(result, NULL);
+ g_free(result);
+ }
+ 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 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;
+ 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
@@ -1194,117 +1194,117 @@ ghb_lookup_mbtree(const gchar *options)
static gchar*
sanitize_x264opts(signal_user_data_t *ud, const gchar *options)
{
- GString *x264opts = g_string_new("");
- gchar **split = g_strsplit(options, ":", -1);
- gint ii;
-
- // Fix up option dependencies
- gint subme = ghb_settings_combo_int(ud->settings, "x264_subme");
- if (subme < 6)
- {
- x264_remove_opt(split, x264_psy_syns);
- }
- gint trell = ghb_settings_combo_int(ud->settings, "x264_trellis");
- if (subme >= 10)
- {
- gint aqmode = ghb_lookup_aqmode(options);
- if (trell != 2 || aqmode == 0)
- {
- gint pos = x264_find_opt(split, x264_subme_syns);
- g_free(split[pos]);
- split[pos] = g_strdup_printf("subme=9");
- }
- }
- if (trell < 1)
- {
- gint psy;
- gdouble psy_rd = 0., psy_trell;
-
- psy = x264_find_opt(split, x264_psy_syns);
- if (psy >= 0)
- {
- gchar *pos = strchr(split[psy], '=');
- if (pos != NULL)
- {
- x264_parse_psy(pos+1, &psy_rd, &psy_trell);
- }
- g_free(split[psy]);
- split[psy] = g_strdup_printf("psy-rd=%g|0", psy_rd);
- }
- }
- gint bframes = ghb_settings_get_int(ud->settings, "x264_bframes");
- if (bframes == 0)
- {
- x264_remove_opt(split, x264_direct_syns);
- x264_remove_opt(split, x264_badapt_syns);
- }
- if (bframes <= 1)
- {
- x264_remove_opt(split, x264_bpyramid_syns);
- }
- // Remove entries that match the defaults
- for (ii = 0; split[ii] != NULL; ii++)
- {
- gchar *val = NULL;
- gchar *opt = g_strdup(split[ii]);
- gchar *pos = strchr(opt, '=');
- if (pos != NULL)
- {
- val = pos + 1;
- *pos = 0;
- }
- else
- {
- val = "1";
- }
- const gchar *def_val;
- def_val = x264_opt_get_default(opt);
- if (strcmp(val, def_val) == 0)
- {
- // Matches the default, so remove it
- split[ii][0] = 0;
- }
- g_free(opt);
- }
- for (ii = 0; split[ii] != NULL; ii++)
- {
- if (split[ii][0] != 0)
- g_string_append_printf(x264opts, "%s:", split[ii]);
- }
- g_strfreev(split);
- // strip the trailing ":"
- gchar *result;
- gint len;
- result = g_string_free(x264opts, FALSE);
- len = strlen(result);
- if (len > 0) result[len - 1] = 0;
- return result;
+ GString *x264opts = g_string_new("");
+ gchar **split = g_strsplit(options, ":", -1);
+ gint ii;
+
+ // Fix up option dependencies
+ gint subme = ghb_settings_combo_int(ud->settings, "x264_subme");
+ if (subme < 6)
+ {
+ x264_remove_opt(split, x264_psy_syns);
+ }
+ gint trell = ghb_settings_combo_int(ud->settings, "x264_trellis");
+ if (subme >= 10)
+ {
+ gint aqmode = ghb_lookup_aqmode(options);
+ if (trell != 2 || aqmode == 0)
+ {
+ gint pos = x264_find_opt(split, x264_subme_syns);
+ g_free(split[pos]);
+ split[pos] = g_strdup_printf("subme=9");
+ }
+ }
+ if (trell < 1)
+ {
+ gint psy;
+ gdouble psy_rd = 0., psy_trell;
+
+ psy = x264_find_opt(split, x264_psy_syns);
+ if (psy >= 0)
+ {
+ gchar *pos = strchr(split[psy], '=');
+ if (pos != NULL)
+ {
+ x264_parse_psy(pos+1, &psy_rd, &psy_trell);
+ }
+ g_free(split[psy]);
+ split[psy] = g_strdup_printf("psy-rd=%g|0", psy_rd);
+ }
+ }
+ gint bframes = ghb_settings_get_int(ud->settings, "x264_bframes");
+ if (bframes == 0)
+ {
+ x264_remove_opt(split, x264_direct_syns);
+ x264_remove_opt(split, x264_badapt_syns);
+ }
+ if (bframes <= 1)
+ {
+ x264_remove_opt(split, x264_bpyramid_syns);
+ }
+ // Remove entries that match the defaults
+ for (ii = 0; split[ii] != NULL; ii++)
+ {
+ gchar *val = NULL;
+ gchar *opt = g_strdup(split[ii]);
+ gchar *pos = strchr(opt, '=');
+ if (pos != NULL)
+ {
+ val = pos + 1;
+ *pos = 0;
+ }
+ else
+ {
+ val = "1";
+ }
+ const gchar *def_val;
+ def_val = x264_opt_get_default(opt);
+ if (strcmp(val, def_val) == 0)
+ {
+ // Matches the default, so remove it
+ split[ii][0] = 0;
+ }
+ g_free(opt);
+ }
+ for (ii = 0; split[ii] != NULL; ii++)
+ {
+ if (split[ii][0] != 0)
+ g_string_append_printf(x264opts, "%s:", split[ii]);
+ }
+ g_strfreev(split);
+ // strip the trailing ":"
+ gchar *result;
+ gint len;
+ result = g_string_free(x264opts, FALSE);
+ len = strlen(result);
+ if (len > 0) result[len - 1] = 0;
+ return result;
}
G_MODULE_EXPORT gboolean
lavc_focus_out_cb(GtkWidget *widget, GdkEventFocus *event,
- signal_user_data_t *ud)
+ signal_user_data_t *ud)
{
- ghb_widget_to_setting(ud->settings, widget);
+ ghb_widget_to_setting(ud->settings, widget);
#if 0
- gchar *options, *sopts;
- ****************************************************************
- When there are lavc widget in the future, this will be populated
- ****************************************************************
- options = ghb_settings_get_string(ud->settings, "x264Option");
- sopts = sanitize_x264opts(ud, options);
- ignore_options_update = TRUE;
- if (sopts != NULL && strcmp(sopts, options) != 0)
- {
- ghb_ui_update(ud, "x264Option", ghb_string_value(sopts));
- ghb_x264_parse_options(ud, sopts);
- }
- g_free(options);
- g_free(sopts);
- ignore_options_update = FALSE;
+ gchar *options, *sopts;
+ ****************************************************************
+ When there are lavc widget in the future, this will be populated
+ ****************************************************************
+ options = ghb_settings_get_string(ud->settings, "x264Option");
+ sopts = sanitize_x264opts(ud, options);
+ ignore_options_update = TRUE;
+ if (sopts != NULL && strcmp(sopts, options) != 0)
+ {
+ ghb_ui_update(ud, "x264Option", ghb_string_value(sopts));
+ ghb_x264_parse_options(ud, sopts);
+ }
+ g_free(options);
+ g_free(sopts);
+ ignore_options_update = FALSE;
#endif
- return FALSE;
+ return FALSE;
}
G_MODULE_EXPORT gchar*