From df93f14938fa1201d69036b65945dcd64c739cce Mon Sep 17 00:00:00 2001 From: Antoine Cellerier Date: Sat, 26 Nov 2005 00:07:02 +0000 Subject: [PATCH] backport [13275] --- THANKS | 1 + modules/codec/x264.c | 93 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 93 insertions(+), 1 deletion(-) diff --git a/THANKS b/THANKS index f20a173594..7b1c0daabe 100644 --- a/THANKS +++ b/THANKS @@ -8,6 +8,7 @@ Michel Lespinasse - AC3 decoder, MPEG audio and video decode The VideoLAN team would like to thank the following contributors: +Alex Izvorski - some more x264 options André de Barros Martins Ribeiro - Brazilian portuguese localization Andre Pang - Annodex support Andres Krapf - FreeBSD port and tests, KDE interface diff --git a/modules/codec/x264.c b/modules/codec/x264.c index 1a82a6eacb..ad6625c74e 100644 --- a/modules/codec/x264.c +++ b/modules/codec/x264.c @@ -118,6 +118,37 @@ static void Close( vlc_object_t * ); "tradeoffs involved in the motion estimation decision process " \ "(lower = quicker and higher = better quality)." ) +#define ME_TEXT N_("Motion estimation algorithm.") +#define ME_LONGTEXT N_( "Selects the motion estimation algorithm: "\ + " dia - diamond (fastest) \n" \ + " hex - hexagon (default setting) \n" \ + " umh - uneven multi-hexagon (better but slower) \n" \ + " esa - exhaustive search (extremely slow, primarily for testing) " ) + +#define MERANGE_TEXT N_("Motion estimation search range.") +#define MERANGE_LONGTEXT N_( "Maximum distance to search for motion estimation, "\ + "measured from predicted position(s). Default of 16 is good for most footage, "\ + "high motion sequences may benefit from settings between 24-32." ) + +#define NO_PSNR_TEXT N_("Disable PSNR calculation.") +#define NO_PSNR_LONGTEXT N_( "This has no effect on actual encoding quality, "\ + "it just prevents the stats from being calculated (for speed)." ) + +#define NO_B_ADAPT_TEXT N_("Disable adaptive B-frames.") +#define NO_B_ADAPT_LONGTEXT N_( "If this is on, the specified number of consequtive B-frames "\ + "will always be used, except possibly before an I-frame. " ) + +#define B_BIAS_TEXT N_("Bias the choice to use B-frames.") +#define B_BIAS_LONGTEXT N_( "Positive values cause more= B-frames, negative values cause less B-frames. " ) + + +#if X264_BUILD >= 23 +static char *enc_me_list[] = + { "", "dia", "hex", "umh", "esa" }; +static char *enc_me_list_text[] = + { N_("default"), N_("dia"), N_("hex"), N_("umh"), N_("esa") }; +#endif + static char *enc_analyse_list[] = { "", "all", "normal", "fast", "none" }; static char *enc_analyse_list_text[] = @@ -196,6 +227,29 @@ vlc_module_begin(); change_integer_range( 1, 5 ); #endif +#if X264_BUILD >= 23 +/* r221 */ add_string( SOUT_CFG_PREFIX "me", "hex", NULL, ME_TEXT, + ME_LONGTEXT, VLC_FALSE ); + change_string_list( enc_me_list, enc_me_list_text, 0 ); + +/* r221 */ add_integer( SOUT_CFG_PREFIX "merange", 16, NULL, MERANGE_TEXT, + MERANGE_LONGTEXT, VLC_FALSE ); + change_integer_range( 1, 64 ); +#endif + +/* r44 */ add_bool( SOUT_CFG_PREFIX "no-psnr", 0, NULL, NO_PSNR_TEXT, + NO_PSNR_LONGTEXT, VLC_FALSE ); + +#if X264_BUILD >= 0x0013 +/* r137 */ add_bool( SOUT_CFG_PREFIX "no-b-adapt", 0, NULL, NO_B_ADAPT_TEXT, + NO_B_ADAPT_LONGTEXT, VLC_FALSE ); + +/* r137 */ add_integer( SOUT_CFG_PREFIX "b-bias", 0, NULL, B_BIAS_TEXT, + B_BIAS_LONGTEXT, VLC_FALSE ); + change_integer_range( -100, 100 ); +#endif + + vlc_module_end(); /***************************************************************************** @@ -204,7 +258,8 @@ vlc_module_end(); static const char *ppsz_sout_options[] = { "qp", "qp-min", "qp-max", "cabac", "loopfilter", "analyse", "keyint", "keyint-min", "bframes", "bpyramid", "frameref", "scenecut", - "subpel", "tolerance", "vbv-maxrate", "vbv-bufsize", "vbv-init", NULL + "subpel", "me", "merange", "no-psnr", "no-b-adapt", "b-bias", "tolerance", + "vbv-maxrate", "vbv-bufsize", "vbv-init", NULL }; static block_t *Encode( encoder_t *, picture_t * ); @@ -370,6 +425,42 @@ static int Open ( vlc_object_t *p_this ) p_sys->param.analyse.i_subpel_refine = val.i_int; #endif +#if X264_BUILD >= 23 + var_Get( p_enc, SOUT_CFG_PREFIX "me", &val ); + if( !strcmp( val.psz_string, "dia" ) ) + { + p_sys->param.analyse.i_me_method = X264_ME_DIA; + } + else if( !strcmp( val.psz_string, "hex" ) ) + { + p_sys->param.analyse.i_me_method = X264_ME_HEX; + } + else if( !strcmp( val.psz_string, "umh" ) ) + { + p_sys->param.analyse.i_me_method = X264_ME_UMH; + } + else if( !strcmp( val.psz_string, "esa" ) ) + { + p_sys->param.analyse.i_me_method = X264_ME_ESA; + } + if( val.psz_string ) free( val.psz_string ); + + var_Get( p_enc, SOUT_CFG_PREFIX "merange", &val ); + if( val.i_int >= 1 && val.i_int <= 64 ) p_sys->param.analyse.i_me_range = val.i_int; +#endif + + var_Get( p_enc, SOUT_CFG_PREFIX "no-psnr", &val ); + p_sys->param.analyse.b_psnr = ! val.b_bool; + +#if X264_BUILD >= 0x0013 + var_Get( p_enc, SOUT_CFG_PREFIX "no-b-adapt", &val ); + p_sys->param.b_bframe_adaptive = ! val.b_bool; + + var_Get( p_enc, SOUT_CFG_PREFIX "b-bias", &val ); + if( val.i_int >= -100 && val.i_int <= 100 ) + p_sys->param.i_bframe_bias = val.i_int; +#endif + #ifndef X264_ANALYSE_BSUB16x16 # define X264_ANALYSE_BSUB16x16 0 #endif -- 2.39.2