From 6450f26c9ac90bda7c7e58ff75020d0dd2ed0aa2 Mon Sep 17 00:00:00 2001 From: Luca Barbato Date: Fri, 30 Sep 2011 12:15:59 +0200 Subject: [PATCH] libvpxenc: use libvpx's own defaults for some parameters Specifically, qmin/qmax, gop_size and keyint_min. Fixes bug 47. Signed-off-by: Anton Khirnov --- libavcodec/libvpxenc.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index 1ff997eff6..524c53d533 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -249,9 +249,10 @@ static av_cold int vp8_init(AVCodecContext *avctx) enccfg.rc_end_usage = VPX_CBR; enccfg.rc_target_bitrate = av_rescale_rnd(avctx->bit_rate, 1, 1000, AV_ROUND_NEAR_INF); - - enccfg.rc_min_quantizer = avctx->qmin; - enccfg.rc_max_quantizer = avctx->qmax; + if (avctx->qmin > 0) + enccfg.rc_min_quantizer = avctx->qmin; + if (avctx->qmax > 0) + enccfg.rc_max_quantizer = avctx->qmax; enccfg.rc_dropframe_thresh = avctx->frame_skip_threshold; //0-100 (0 => CBR, 100 => VBR) @@ -271,9 +272,10 @@ static av_cold int vp8_init(AVCodecContext *avctx) enccfg.rc_buf_optimal_sz = enccfg.rc_buf_sz * 5 / 6; //_enc_init() will balk if kf_min_dist differs from max w/VPX_KF_AUTO - if (avctx->keyint_min == avctx->gop_size) + if (avctx->keyint_min >= 0 && avctx->keyint_min == avctx->gop_size) enccfg.kf_min_dist = avctx->keyint_min; - enccfg.kf_max_dist = avctx->gop_size; + if (avctx->gop_size >= 0) + enccfg.kf_max_dist = avctx->gop_size; if (enccfg.g_pass == VPX_RC_FIRST_PASS) enccfg.g_lag_in_frames = 0; @@ -552,6 +554,14 @@ static const AVClass class = { .version = LIBAVUTIL_VERSION_INT, }; +static const AVCodecDefault defaults[] = { + { "qmin", "-1" }, + { "qmax", "-1" }, + { "g", "-1" }, + { "keyint_min", "-1" }, + { NULL }, +}; + AVCodec ff_libvpx_encoder = { .name = "libvpx", .type = AVMEDIA_TYPE_VIDEO, @@ -564,4 +574,5 @@ AVCodec ff_libvpx_encoder = { .pix_fmts = (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE}, .long_name = NULL_IF_CONFIG_SMALL("libvpx VP8"), .priv_class = &class, + .defaults = defaults, };