X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=gtk%2Fsrc%2Fx264handler.c;h=96a834a2ddc201f285db3cffbed750d3d1be6e22;hb=44946a6f8be82a70e65ca534541183a26fdb804b;hp=ff2338f1978df2b2a3c75f2475a33e9d07b7b60c;hpb=546645566708444b0da1942315c42f77d07d6d7f;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/gtk/src/x264handler.c b/gtk/src/x264handler.c index ff2338f1..96a834a2 100644 --- a/gtk/src/x264handler.c +++ b/gtk/src/x264handler.c @@ -119,6 +119,7 @@ x264_focus_out_cb(GtkWidget *widget, GdkEventFocus *event, enum { + X264_OPT_NONE, X264_OPT_DEBLOCK, X264_OPT_PSY, X264_OPT_INT, @@ -146,6 +147,7 @@ static gchar *x264_bpyramid_syns[] = {"b-pyramid", "b_pyramid", NULL}; static gchar *x264_me_syns[] = {"me", NULL}; static gchar *x264_merange_syns[] = {"merange", "me-range", "me_range", NULL}; static gchar *x264_subme_syns[] = {"subme", "subq", NULL}; +static gchar *x264_aqmode_syns[] = {"aq-mode", NULL}; static gchar *x264_analyse_syns[] = {"analyse", "partitions", NULL}; static gchar *x264_8x8dct_syns[] = {"8x8dct", NULL}; static gchar *x264_deblock_syns[] = {"deblock", "filter", NULL}; @@ -170,21 +172,22 @@ find_syn_match(const gchar *opt, gchar **syns) struct x264_opt_map_s x264_opt_map[] = { - {x264_ref_syns, "x264_refs", "1", X264_OPT_INT}, - {x264_mixed_syns, "x264_mixed_refs", "0", X264_OPT_BOOL}, - {x264_bframes_syns, "x264_bframes", "0", X264_OPT_INT}, + {x264_ref_syns, "x264_refs", "3", X264_OPT_INT}, + {x264_mixed_syns, "x264_mixed_refs", "1", X264_OPT_BOOL}, + {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_weightb_syns, "x264_weighted_bframes", "0", X264_OPT_BOOL}, + {x264_weightb_syns, "x264_weighted_bframes", "1", X264_OPT_BOOL}, {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", "6", X264_OPT_COMBO}, + {x264_subme_syns, "x264_subme", "7", X264_OPT_COMBO}, + {x264_aqmode_syns, "x264_aqmode", "1", X264_OPT_NONE}, {x264_analyse_syns, "x264_analyse", "some", X264_OPT_COMBO}, - {x264_8x8dct_syns, "x264_8x8dct", "0", X264_OPT_BOOL}, + {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", "0", X264_OPT_COMBO}, + {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}, @@ -651,6 +654,78 @@ x264_remove_opt(gchar **opts, gchar **opt_syns) } } +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; +} + +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 +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; +} + // Construct the x264 options string // The result is allocated, so someone must free it at some point. static gchar* @@ -667,6 +742,16 @@ sanitize_x264opts(signal_user_data_t *ud, const gchar *options) 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;