[FFmpeg-cvslog] libvpxenc: use libvpx's own defaults for some parameters

Luca Barbato git at videolan.org
Sun Oct 2 04:56:27 CEST 2011


ffmpeg | branch: master | Luca Barbato <lu_zero at gentoo.org> | Fri Sep 30 12:15:59 2011 +0200| [6450f26c9ac90bda7c7e58ff75020d0dd2ed0aa2] | committer: Anton Khirnov

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 <anton at khirnov.net>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6450f26c9ac90bda7c7e58ff75020d0dd2ed0aa2
---

 libavcodec/libvpxenc.c |   21 ++++++++++++++++-----
 1 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c
index 1ff997e..524c53d 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,
 };



More information about the ffmpeg-cvslog mailing list