[FFmpeg-devel] [PATCH v3 1/9] lavc/libopenh264enc: Add default qmin/qmax support
Linjie Fu
linjie.fu at intel.com
Sat Apr 11 13:03:31 EEST 2020
Set default QP range to (1, 51) instead of (2, 32).
QP = 0 is not well supported currently in libopenh264. If iMaxQp/iMinQp
equals 0, the QP range would be changed unexpectedly inside libopenh264
with a warning:
Warning:Change QP Range from(0,51) to (12,42)
[1] <https://github.com/cisco/openh264/blob/master/codec/encoder/core/src/encoder_ext.cpp#L375>
[2] <https://github.com/cisco/openh264/issues/3259>
Signed-off-by: Linjie Fu <linjie.fu at intel.com>
---
libavcodec/libopenh264enc.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c
index dd5d4ee..c7ae5b1 100644
--- a/libavcodec/libopenh264enc.c
+++ b/libavcodec/libopenh264enc.c
@@ -135,6 +135,9 @@ FF_ENABLE_DEPRECATION_WARNINGS
param.iTargetBitrate = avctx->bit_rate;
param.iMaxBitrate = FFMAX(avctx->rc_max_rate, avctx->bit_rate);
param.iRCMode = RC_QUALITY_MODE;
+ // QP = 0 is not well supported, so default to (1, 51)
+ param.iMaxQp = avctx->qmax >= 0 ? av_clip(avctx->qmax, 1, 51) : 51;
+ param.iMinQp = avctx->qmin >= 0 ? av_clip(avctx->qmin, 1, param.iMaxQp) : 1;
param.iTemporalLayerNum = 1;
param.iSpatialLayerNum = 1;
param.bEnableDenoise = 0;
@@ -331,6 +334,12 @@ static int svc_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
return 0;
}
+static const AVCodecDefault svc_enc_defaults[] = {
+ { "qmin", "-1" },
+ { "qmax", "-1" },
+ { NULL },
+};
+
AVCodec ff_libopenh264_encoder = {
.name = "libopenh264",
.long_name = NULL_IF_CONFIG_SMALL("OpenH264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
@@ -344,6 +353,7 @@ AVCodec ff_libopenh264_encoder = {
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP,
.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P,
AV_PIX_FMT_NONE },
+ .defaults = svc_enc_defaults,
.priv_class = &class,
.wrapper_name = "libopenh264",
};
--
2.7.4
More information about the ffmpeg-devel
mailing list