X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fcodec%2Fx264.c;h=dad242d5628d7a776c612ebb2601f84ef5efa3c6;hb=1b2b3551a6981a0a41fa575d3677a944c37c9e50;hp=b82dadd46504ec89b059e29711b7ce92b8c977ac;hpb=9543a6abc6b57f5b1f9f49755daf8ed711836b29;p=vlc diff --git a/modules/codec/x264.c b/modules/codec/x264.c index b82dadd465..dad242d562 100644 --- a/modules/codec/x264.c +++ b/modules/codec/x264.c @@ -128,6 +128,10 @@ static void Close( vlc_object_t * ); "a level compatible with the rest of the encoding options. Range 1 to 5.1 " \ "(10 to 51 is also allowed).") +#define PROFILE_TEXT N_("H.264 profile") +#define PROFILE_LONGTEXT N_("Specify H.264 profile which limits are enforced over" \ + "other settings" ) + /* In order to play an interlaced output stream encoded by x264, a decoder needs mbaff support. r570 is using the 'mb' part and not 'aff' yet; so it's really 'pure-interlaced' mode */ @@ -173,10 +177,10 @@ static void Close( vlc_object_t * ); #if X264_BUILD >= 59 #define AQ_MODE_TEXT N_("How AQ distributes bits") -#define AQ_MODE_LONGTEXT N_("Defines bitdistribution mode for AQ, default 2\n" \ +#define AQ_MODE_LONGTEXT N_("Defines bitdistribution mode for AQ, default 1\n" \ " - 0: Disabled\n"\ - " - 1: Avoid moving bits between frames\n"\ - " - 2: Move bits between frames") + " - 1: Current x264 default mode\n"\ + " - 2: uses log(var)^2 instead of log(var) and attempts to adapt strength per frame") #define AQ_STRENGTH_TEXT N_("Strength of AQ") #define AQ_STRENGTH_LONGTEXT N_("Strength to reduce blocking and blurring in flat\n"\ @@ -403,6 +407,9 @@ static const char *const enc_me_list_text[] = { N_("dia"), N_("hex"), N_("umh"), N_("esa"), N_("tesa") }; #endif +static const char *const profile_list[] = + { "baseline", "main", "high" }; + static const char *const enc_analyse_list[] = { "none", "fast", "normal", "slow", "all" }; static const char *const enc_analyse_list_text[] = @@ -442,7 +449,7 @@ vlc_module_begin () #if X264_BUILD >= 55 /* r607 */ # if X264_BUILD < 67 /* r1117 */ - add_bool( SOUT_CFG_PREFIX "pre-scenecut", 0, NULL, PRESCENE_TEXT, + add_bool( SOUT_CFG_PREFIX "pre-scenecut", false, NULL, PRESCENE_TEXT, PRESCENE_LONGTEXT, false ) # else add_obsolete_bool( SOUT_CFG_PREFIX "pre-scenecut" ) @@ -458,7 +465,7 @@ vlc_module_begin () B_ADAPT_LONGTEXT, false ) change_integer_range( 0, 2 ) #elif X264_BUILD >= 0x0013 /* r137 */ - add_bool( SOUT_CFG_PREFIX "b-adapt", 1, NULL, B_ADAPT_TEXT, + add_bool( SOUT_CFG_PREFIX "b-adapt", true, NULL, B_ADAPT_TEXT, B_ADAPT_LONGTEXT, false ) #endif @@ -468,10 +475,10 @@ vlc_module_begin () change_integer_range( -100, 100 ) #endif - add_bool( SOUT_CFG_PREFIX "bpyramid", 0, NULL, BPYRAMID_TEXT, + add_bool( SOUT_CFG_PREFIX "bpyramid", false, NULL, BPYRAMID_TEXT, BPYRAMID_LONGTEXT, false ) - add_bool( SOUT_CFG_PREFIX "cabac", 1, NULL, CABAC_TEXT, CABAC_LONGTEXT, + add_bool( SOUT_CFG_PREFIX "cabac", true, NULL, CABAC_TEXT, CABAC_LONGTEXT, false ) add_integer( SOUT_CFG_PREFIX "ref", 3, NULL, REF_TEXT, @@ -479,7 +486,7 @@ vlc_module_begin () change_integer_range( 1, 16 ) add_deprecated_alias( SOUT_CFG_PREFIX "frameref" ) /* Deprecated since 0.8.5 */ - add_bool( SOUT_CFG_PREFIX "nf", 0, NULL, NF_TEXT, + add_bool( SOUT_CFG_PREFIX "nf", false, NULL, NF_TEXT, NF_LONGTEXT, false ) add_deprecated_alias( SOUT_CFG_PREFIX "loopfilter" ) /* Deprecated since 0.8.5 */ @@ -495,8 +502,12 @@ vlc_module_begin () add_string( SOUT_CFG_PREFIX "level", "5.1", NULL, LEVEL_TEXT, LEVEL_LONGTEXT, false ) + add_string( SOUT_CFG_PREFIX "profile", "high", NULL, PROFILE_TEXT, + PROFILE_LONGTEXT, false ) + change_string_list( profile_list, profile_list, 0 ); + #if X264_BUILD >= 51 /* r570 */ - add_bool( SOUT_CFG_PREFIX "interlaced", 0, NULL, INTERLACED_TEXT, INTERLACED_LONGTEXT, + add_bool( SOUT_CFG_PREFIX "interlaced", false, NULL, INTERLACED_TEXT, INTERLACED_LONGTEXT, false ) #endif @@ -568,7 +579,7 @@ vlc_module_begin () add_float( SOUT_CFG_PREFIX "qblur", 0.5, NULL, QBLUR_TEXT, QBLUR_LONGTEXT, false ) #if X264_BUILD >= 59 - add_integer( SOUT_CFG_PREFIX "aq-mode", 2, NULL, AQ_MODE_TEXT, + add_integer( SOUT_CFG_PREFIX "aq-mode", X264_AQ_VARIANCE, NULL, AQ_MODE_TEXT, AQ_MODE_LONGTEXT, false ) change_integer_range( 0, 2 ) add_float( SOUT_CFG_PREFIX "aq-strength", 1.0, NULL, AQ_STRENGTH_TEXT, @@ -594,7 +605,7 @@ vlc_module_begin () #endif #if X264_BUILD >= 0x0012 /* r134 */ - add_bool( SOUT_CFG_PREFIX "weightb", 1, NULL, WEIGHTB_TEXT, + add_bool( SOUT_CFG_PREFIX "weightb", true, NULL, WEIGHTB_TEXT, WEIGHTB_LONGTEXT, false ) #endif @@ -623,7 +634,7 @@ vlc_module_begin () #if X264_BUILD >= 41 # if X264_BUILD < 65 /* r368 */ - add_bool( SOUT_CFG_PREFIX "b-rdo", 0, NULL, B_RDO_TEXT, + add_bool( SOUT_CFG_PREFIX "b-rdo", false, NULL, B_RDO_TEXT, B_RDO_LONGTEXT, false ) # else add_obsolete_bool( SOUT_CFG_PREFIX "b-rdo" ) @@ -631,18 +642,18 @@ vlc_module_begin () #endif #if X264_BUILD >= 36 /* r318 */ - add_bool( SOUT_CFG_PREFIX "mixed-refs", 1, NULL, MIXED_REFS_TEXT, + add_bool( SOUT_CFG_PREFIX "mixed-refs", true, NULL, MIXED_REFS_TEXT, MIXED_REFS_LONGTEXT, false ) #endif #if X264_BUILD >= 23 /* r171 */ - add_bool( SOUT_CFG_PREFIX "chroma-me", 1, NULL, CHROMA_ME_TEXT, + add_bool( SOUT_CFG_PREFIX "chroma-me", true, NULL, CHROMA_ME_TEXT, CHROMA_ME_LONGTEXT, false ) #endif #if X264_BUILD >= 43 # if X264_BUILD < 65 /* r390 */ - add_bool( SOUT_CFG_PREFIX "bime", 0, NULL, BIME_TEXT, + add_bool( SOUT_CFG_PREFIX "bime", false, NULL, BIME_TEXT, BIME_LONGTEXT, false ) # else add_obsolete_bool( SOUT_CFG_PREFIX "bime" ) @@ -650,7 +661,7 @@ vlc_module_begin () #endif #if X264_BUILD >= 30 /* r251 */ - add_bool( SOUT_CFG_PREFIX "8x8dct", 0, NULL, TRANSFORM_8X8DCT_TEXT, + add_bool( SOUT_CFG_PREFIX "8x8dct", false, NULL, TRANSFORM_8X8DCT_TEXT, TRANSFORM_8X8DCT_LONGTEXT, false ) #endif @@ -661,12 +672,12 @@ vlc_module_begin () #endif #if X264_BUILD >= 42 /* r384 */ - add_bool( SOUT_CFG_PREFIX "fast-pskip", 1, NULL, FAST_PSKIP_TEXT, + add_bool( SOUT_CFG_PREFIX "fast-pskip", true, NULL, FAST_PSKIP_TEXT, FAST_PSKIP_LONGTEXT, false ) #endif #if X264_BUILD >= 46 /* r503 */ - add_bool( SOUT_CFG_PREFIX "dct-decimate", 1, NULL, DCT_DECIMATE_TEXT, + add_bool( SOUT_CFG_PREFIX "dct-decimate", true, NULL, DCT_DECIMATE_TEXT, DCT_DECIMATE_LONGTEXT, false ) #endif @@ -689,24 +700,24 @@ vlc_module_begin () /* Input/Output */ #if X264_BUILD >= 55 /* r607 */ - add_bool( SOUT_CFG_PREFIX "non-deterministic", 0, NULL, NON_DETERMINISTIC_TEXT, + add_bool( SOUT_CFG_PREFIX "non-deterministic", false, NULL, NON_DETERMINISTIC_TEXT, NON_DETERMINISTIC_LONGTEXT, false ) #endif - add_bool( SOUT_CFG_PREFIX "asm", 1, NULL, ASM_TEXT, + add_bool( SOUT_CFG_PREFIX "asm", true, NULL, ASM_TEXT, ASM_LONGTEXT, false ) /* x264 psnr = 1 (default). disable PSNR computation for speed. */ - add_bool( SOUT_CFG_PREFIX "psnr", 0, NULL, PSNR_TEXT, + add_bool( SOUT_CFG_PREFIX "psnr", false, NULL, PSNR_TEXT, PSNR_LONGTEXT, false ) #if X264_BUILD >= 50 /* r554 */ /* x264 ssim = 1 (default). disable SSIM computation for speed. */ - add_bool( SOUT_CFG_PREFIX "ssim", 0, NULL, SSIM_TEXT, + add_bool( SOUT_CFG_PREFIX "ssim", false, NULL, SSIM_TEXT, SSIM_LONGTEXT, false ) #endif - add_bool( SOUT_CFG_PREFIX "quiet", 0, NULL, QUIET_TEXT, + add_bool( SOUT_CFG_PREFIX "quiet", false, NULL, QUIET_TEXT, QUIET_LONGTEXT, false ) #if X264_BUILD >= 47 /* r518 */ @@ -714,11 +725,11 @@ vlc_module_begin () SPS_ID_LONGTEXT, false ) #endif - add_bool( SOUT_CFG_PREFIX "aud", 0, NULL, AUD_TEXT, + add_bool( SOUT_CFG_PREFIX "aud", false, NULL, AUD_TEXT, AUD_LONGTEXT, false ) #if X264_BUILD >= 0x000e /* r81 */ - add_bool( SOUT_CFG_PREFIX "verbose", 0, NULL, VERBOSE_TEXT, + add_bool( SOUT_CFG_PREFIX "verbose", false, NULL, VERBOSE_TEXT, VERBOSE_LONGTEXT, false ) #endif @@ -742,7 +753,7 @@ static const char *const ppsz_sout_options[] = { "qpmin", "qp-max", "qp-min", "quiet", "ratetol", "ref", "scenecut", "sps-id", "ssim", "stats", "subme", "subpel", "tolerance", "trellis", "verbose", "vbv-bufsize", "vbv-init", "vbv-maxrate", "weightb", "aq-mode", - "aq-strength", "psy-rd", NULL + "aq-strength", "psy-rd", "profile", NULL }; static block_t *Encode( encoder_t *, picture_t * ); @@ -1225,14 +1236,7 @@ static int Open ( vlc_object_t *p_this ) } else if( !strcmp( val.psz_string, "all" ) ) { - p_sys->param.analyse.inter = - X264_ANALYSE_I4x4 | - X264_ANALYSE_PSUB16x16 | - X264_ANALYSE_BSUB16x16 | - X264_ANALYSE_PSUB8x8; -#ifdef X264_ANALYSE_I8x8 - p_sys->param.analyse.inter |= X264_ANALYSE_I8x8; -#endif + p_sys->param.analyse.inter = ~0; } free( val.psz_string ); @@ -1279,6 +1283,27 @@ static int Open ( vlc_object_t *p_this ) p_sys->param.rc.i_vbv_buffer_size /= p_sys->param.i_fps_num; } + /* Check if user has given some profile (baseline,main,high) to limit + * settings, and apply those*/ + var_Get( p_enc, SOUT_CFG_PREFIX "profile", &val ); + if( val.psz_string ) + { + if( !strcasecmp( val.psz_string, "baseline" ) ) + { + msg_Dbg( p_enc, "Limiting to baseline profile"); + p_sys->param.analyse.b_transform_8x8 = 0; + p_sys->param.b_cabac = 0; + p_sys->param.i_bframe = 0; + } + else if (!strcasecmp( val.psz_string, "main" ) ) + { + msg_Dbg( p_enc, "Limiting to main-profile"); + p_sys->param.analyse.b_transform_8x8 = 0; + } + /* high profile don't restrict stuff*/ + } + free( val.psz_string ); + unsigned i_cpu = vlc_CPU(); if( !(i_cpu & CPU_CAPABILITY_MMX) )