summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorelliottk <elliottk-at-google.com@ffmpeg.org>2019-09-24 16:24:13 -0700
committerJames Zern <jzern@google.com>2019-10-07 22:32:32 -0700
commit14941d386acd90b92aaaf75fbdac2c07d33f167a (patch)
tree80e48bc3feaf30507e110f8bde836f32bba7f7c7 /libavcodec
parent8df91de9aa263df77bd3f59a65355a1ccca83f0c (diff)
Change libvpxenc default to crf=32.
Current default is 200kbps, which produces inconsistent results (too high for low-res, too low for hi-res). Use CRF instead, which will adapt. Affects VP9. Also have VP8 use a default bitrate of 256kbps. Signed-off-by: James Zern <jzern@google.com>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/libvpxenc.c74
-rw-r--r--libavcodec/version.h2
2 files changed, 64 insertions, 12 deletions
diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c
index 95100b5516..286baa14a7 100644
--- a/libavcodec/libvpxenc.c
+++ b/libavcodec/libvpxenc.c
@@ -515,6 +515,66 @@ static void set_color_range(AVCodecContext *avctx)
#endif
#endif
+/**
+ * Set the target bitrate to VPX library default. Also set CRF to 32 if needed.
+ */
+static void set_vp8_defaults(AVCodecContext *avctx,
+ struct vpx_codec_enc_cfg *enccfg)
+{
+ VPxContext *ctx = avctx->priv_data;
+ av_assert0(!avctx->bit_rate);
+ avctx->bit_rate = enccfg->rc_target_bitrate * 1000;
+ if (enccfg->rc_end_usage == VPX_CQ) {
+ av_log(avctx, AV_LOG_WARNING,
+ "Bitrate not specified for constrained quality mode, using default of %dkbit/sec\n",
+ enccfg->rc_target_bitrate);
+ } else {
+ enccfg->rc_end_usage = VPX_CQ;
+ ctx->crf = 32;
+ av_log(avctx, AV_LOG_WARNING,
+ "Neither bitrate nor constrained quality specified, using default CRF of %d and bitrate of %dkbit/sec\n",
+ ctx->crf, enccfg->rc_target_bitrate);
+ }
+}
+
+
+#if CONFIG_LIBVPX_VP9_ENCODER
+/**
+ * Keep the target bitrate at 0 to engage constant quality mode. If CRF is not
+ * set, use 32.
+ */
+static void set_vp9_defaults(AVCodecContext *avctx,
+ struct vpx_codec_enc_cfg *enccfg)
+{
+ VPxContext *ctx = avctx->priv_data;
+ av_assert0(!avctx->bit_rate);
+ if (enccfg->rc_end_usage != VPX_Q && ctx->lossless < 0) {
+ enccfg->rc_end_usage = VPX_Q;
+ ctx->crf = 32;
+ av_log(avctx, AV_LOG_WARNING,
+ "Neither bitrate nor constrained quality specified, using default CRF of %d\n",
+ ctx->crf);
+ }
+}
+#endif
+
+/**
+ * Called when the bitrate is not set. It sets appropriate default values for
+ * bitrate and CRF.
+ */
+static void set_vpx_defaults(AVCodecContext *avctx,
+ struct vpx_codec_enc_cfg *enccfg)
+{
+ av_assert0(!avctx->bit_rate);
+#if CONFIG_LIBVPX_VP9_ENCODER
+ if (avctx->codec_id == AV_CODEC_ID_VP9) {
+ set_vp9_defaults(avctx, enccfg);
+ return;
+ }
+#endif
+ set_vp8_defaults(avctx, enccfg);
+}
+
static av_cold int vpx_init(AVCodecContext *avctx,
const struct vpx_codec_iface *iface)
{
@@ -585,18 +645,9 @@ static av_cold int vpx_init(AVCodecContext *avctx,
if (avctx->bit_rate) {
enccfg.rc_target_bitrate = av_rescale_rnd(avctx->bit_rate, 1, 1000,
AV_ROUND_NEAR_INF);
-#if CONFIG_LIBVPX_VP9_ENCODER
- } else if (enccfg.rc_end_usage == VPX_Q) {
-#endif
} 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);
- }
+ // Set bitrate to default value. Also sets CRF to default if needed.
+ set_vpx_defaults(avctx, &enccfg);
}
if (avctx->codec_id == AV_CODEC_ID_VP9 && ctx->lossless == 1) {
@@ -1459,6 +1510,7 @@ static const AVOption vp9_options[] = {
#undef LEGACY_OPTIONS
static const AVCodecDefault defaults[] = {
+ { "b", "0" },
{ "qmin", "-1" },
{ "qmax", "-1" },
{ "g", "-1" },
diff --git a/libavcodec/version.h b/libavcodec/version.h
index 04b210371e..2e047a6f51 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -29,7 +29,7 @@
#define LIBAVCODEC_VERSION_MAJOR 58
#define LIBAVCODEC_VERSION_MINOR 59
-#define LIBAVCODEC_VERSION_MICRO 101
+#define LIBAVCODEC_VERSION_MICRO 102
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \