libvpxenc: Fix CQ encoding without a specified bitrate
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 17 Aug 2012 15:34:30 +0000 (17:34 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 17 Aug 2012 20:03:02 +0000 (22:03 +0200)
Also print a warning if neither quality nor bitrate is specified
and use the libvpx default bitrate in this case.

The idea of using the default bitrate is from Luca Barbato
Reviewed-by: James Zern <jzern@google.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/libvpxenc.c

index b438301..38d1d65 100644 (file)
@@ -270,8 +270,21 @@ static av_cold int vp8_init(AVCodecContext *avctx)
         enccfg.rc_end_usage = VPX_CBR;
     else if (ctx->crf)
         enccfg.rc_end_usage = VPX_CQ;
-    enccfg.rc_target_bitrate = av_rescale_rnd(avctx->bit_rate, 1, 1000,
-                                              AV_ROUND_NEAR_INF);
+
+    if (avctx->bit_rate) {
+        enccfg.rc_target_bitrate = av_rescale_rnd(avctx->bit_rate, 1, 1000,
+                                                AV_ROUND_NEAR_INF);
+    } else {
+        if (enccfg.rc_end_usage == VPX_CQ) {
+            enccfg.rc_target_bitrate = 1000000;
+        } else {
+            avctx->bit_rate = enccfg.rc_target_bitrate * 1000;
+            av_log(avctx, AV_LOG_WARNING,
+                   "Neither bitrate nor constrained quality specified, using default bitrate of %dkbit/sec\n",
+                   enccfg.rc_target_bitrate);
+        }
+    }
+
     if (avctx->qmin > 0)
         enccfg.rc_min_quantizer = avctx->qmin;
     if (avctx->qmax > 0)