From 8e098f8e53de9801f2c1b382992736ffbc1e74a6 Mon Sep 17 00:00:00 2001 From: Fiona Glaser Date: Sat, 10 Apr 2010 13:15:30 -0700 Subject: [PATCH] Make keyint_min auto by default Gives more reasonable default settings when using short GOPs. --- common/common.c | 2 +- encoder/encoder.c | 2 ++ x264.c | 2 +- x264.h | 3 ++- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/common/common.c b/common/common.c index 2d166af9..d6c29913 100644 --- a/common/common.c +++ b/common/common.c @@ -70,7 +70,7 @@ void x264_param_default( x264_param_t *param ) /* Encoder parameters */ param->i_frame_reference = 3; param->i_keyint_max = 250; - param->i_keyint_min = 25; + param->i_keyint_min = X264_KEYINT_MIN_AUTO; param->i_bframe = 3; param->i_scenecut_threshold = 40; param->i_bframe_adaptive = X264_B_ADAPT_FAST; diff --git a/encoder/encoder.c b/encoder/encoder.c index 10c5e3ab..e47f7787 100644 --- a/encoder/encoder.c +++ b/encoder/encoder.c @@ -577,6 +577,8 @@ static int x264_validate_parameters( x264_t *h ) x264_log( h, X264_LOG_WARNING, "ref > 1 + intra-refresh is not supported\n" ); h->param.i_frame_reference = 1; } + if( h->param.i_keyint_min == X264_KEYINT_MIN_AUTO ) + h->param.i_keyint_min = h->param.i_keyint_max / 10; h->param.i_keyint_min = x264_clip3( h->param.i_keyint_min, 1, h->param.i_keyint_max/2+1 ); h->param.rc.i_lookahead = x264_clip3( h->param.rc.i_lookahead, 0, X264_LOOKAHEAD_MAX ); { diff --git a/x264.c b/x264.c index 76ff85db..add23b3b 100644 --- a/x264.c +++ b/x264.c @@ -363,7 +363,7 @@ static void Help( x264_param_t *defaults, int longhelp ) H0( "Frame-type options:\n" ); H0( "\n" ); H0( " -I, --keyint Maximum GOP size [%d]\n", defaults->i_keyint_max ); - H2( " -i, --min-keyint Minimum GOP size [%d]\n", defaults->i_keyint_min ); + H2( " -i, --min-keyint Minimum GOP size [auto]\n" ); H2( " --no-scenecut Disable adaptive I-frame decision\n" ); H2( " --scenecut How aggressively to insert extra I-frames [%d]\n", defaults->i_scenecut_threshold ); H2( " --intra-refresh Use Periodic Intra Refresh instead of IDR frames\n" ); diff --git a/x264.h b/x264.h index 9157d76e..d30effef 100644 --- a/x264.h +++ b/x264.h @@ -35,7 +35,7 @@ #include -#define X264_BUILD 92 +#define X264_BUILD 93 /* x264_t: * opaque handler for encoder */ @@ -101,6 +101,7 @@ typedef struct x264_t x264_t; #define X264_B_PYRAMID_NONE 0 #define X264_B_PYRAMID_STRICT 1 #define X264_B_PYRAMID_NORMAL 2 +#define X264_KEYINT_MIN_AUTO 0 static const char * const x264_direct_pred_names[] = { "none", "spatial", "temporal", "auto", 0 }; static const char * const x264_motion_est_names[] = { "dia", "hex", "umh", "esa", "tesa", 0 }; -- 2.22.0