From 14828e756f92175c1a3c097c1048c01bbfba43a9 Mon Sep 17 00:00:00 2001 From: James Zern Date: Wed, 24 Feb 2016 20:24:51 -0800 Subject: [PATCH] vp9: set kf_max_dist to a reasonable default (128) the same as vp8, with the same reasoning from: 2a0d7b1 Reduce the default kf_max_dist to 128. see also: https://trac.ffmpeg.org/ticket/4904 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=815673 + restore vpxenc behavior of taking the library default rather than forcing 5s This change also exposes an issue with one-pass svc in cbr mode, keep the old default in datarate_test.cc for now. Change-Id: Id6d1244f42490b06fefc1a7b4e12a423a1f83e88 --- CHANGELOG | 4 ++++ test/datarate_test.cc | 3 +++ vp9/vp9_cx_iface.c | 2 +- vpxenc.c | 17 ----------------- 4 files changed, 8 insertions(+), 18 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 7746cc6c4f9..7db420e705a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,7 @@ +Next Release + - Incompatible changes: + The VP9 encoder's default keyframe interval changed to 128 from 9999. + 2015-11-09 v1.5.0 "Javan Whistling Duck" This release improves upon the VP9 encoder and speeds up the encoding and decoding processes. diff --git a/test/datarate_test.cc b/test/datarate_test.cc index 9d5074e303a..e94df20f8c4 100644 --- a/test/datarate_test.cc +++ b/test/datarate_test.cc @@ -905,6 +905,9 @@ TEST_P(DatarateOnePassCbrSvc, OnePassCbrSvc) { svc_params_.scaling_factor_num[1] = 288; svc_params_.scaling_factor_den[1] = 288; cfg_.rc_dropframe_thresh = 10; + // TODO(marpan): another test should be added for default/small kf_max_dist + // once https://bugs.chromium.org/p/webm/issues/detail?id=1150 is fixed. + cfg_.kf_max_dist = 9999; ::libvpx_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288, 30, 1, 0, 200); // TODO(wonkap/marpan): Check that effective_datarate for each layer hits the diff --git a/vp9/vp9_cx_iface.c b/vp9/vp9_cx_iface.c index 11df1e4f67e..624d5c9fcd7 100644 --- a/vp9/vp9_cx_iface.c +++ b/vp9/vp9_cx_iface.c @@ -1566,7 +1566,7 @@ static vpx_codec_enc_cfg_map_t encoder_usage_cfg_map[] = { // keyframing settings (kf) VPX_KF_AUTO, // g_kfmode 0, // kf_min_dist - 9999, // kf_max_dist + 128, // kf_max_dist VPX_SS_DEFAULT_LAYERS, // ss_number_layers {0}, diff --git a/vpxenc.c b/vpxenc.c index f14470a6f2e..f24b1805bf5 100644 --- a/vpxenc.c +++ b/vpxenc.c @@ -804,7 +804,6 @@ struct stream_config { int arg_ctrls[ARG_CTRL_CNT_MAX][2]; int arg_ctrl_cnt; int write_webm; - int have_kf_max_dist; #if CONFIG_VP9_HIGHBITDEPTH // whether to use 16bit internal buffers int use_16bit_internal; @@ -1224,7 +1223,6 @@ static int parse_stream_params(struct VpxEncoderConfig *global, config->cfg.kf_min_dist = arg_parse_uint(&arg); } else if (arg_match(&arg, &kf_max_dist, argi)) { config->cfg.kf_max_dist = arg_parse_uint(&arg); - config->have_kf_max_dist = 1; } else if (arg_match(&arg, &kf_disabled, argi)) { config->cfg.kf_mode = VPX_KF_DISABLED; #if CONFIG_VP9_HIGHBITDEPTH @@ -1352,19 +1350,6 @@ static void set_stream_dimensions(struct stream_state *stream, } } - -static void set_default_kf_interval(struct stream_state *stream, - struct VpxEncoderConfig *global) { - /* Use a max keyframe interval of 5 seconds, if none was - * specified on the command line. - */ - if (!stream->config.have_kf_max_dist) { - double framerate = (double)global->framerate.num / global->framerate.den; - if (framerate > 0.0) - stream->config.cfg.kf_max_dist = (unsigned int)(5.0 * framerate); - } -} - static const char* file_type_to_string(enum VideoFileType t) { switch (t) { case FILE_TYPE_RAW: return "RAW"; @@ -2086,8 +2071,6 @@ int main(int argc, const char **argv_) { stream->config.cfg.g_timebase.num = global.framerate.den); } - FOREACH_STREAM(set_default_kf_interval(stream, &global)); - /* Show configuration */ if (global.verbose && pass == 0) FOREACH_STREAM(show_stream_config(stream, &global, &input));