On 19-01-2020 01:41 pm, Andriy Gelman wrote:
From: Andriy Gelman <andriy.gel...@gmail.com>
Hard coded parameters for qmin/qmax are currently used to initialize
v4l2_m2m device. This commit uses values from avctx->{qmin,qmax} if they
are set.
Signed-off-by: Andriy Gelman <andriy.gel...@gmail.com>
---
libavcodec/v4l2_m2m_enc.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/libavcodec/v4l2_m2m_enc.c b/libavcodec/v4l2_m2m_enc.c
index 8059e3bb48f..b61d48316ee 100644
--- a/libavcodec/v4l2_m2m_enc.c
+++ b/libavcodec/v4l2_m2m_enc.c
@@ -31,6 +31,7 @@
#include "v4l2_context.h"
#include "v4l2_m2m.h"
#include "v4l2_fmt.h"
+#include "internal.h"
#define MPEG_CID(x) V4L2_CID_MPEG_VIDEO_##x
#define MPEG_VIDEO(x) V4L2_MPEG_VIDEO_##x
@@ -232,8 +233,11 @@ static int v4l2_prepare_encoder(V4L2m2mContext *s)
return 0;
}
- if (qmin != avctx->qmin || qmax != avctx->qmax)
- av_log(avctx, AV_LOG_WARNING, "Encoder adjusted: qmin (%d), qmax
(%d)\n", qmin, qmax);
+ if (avctx->qmin >= 0)
+ qmin = avctx->qmin;
+
+ if (avctx->qmax >= 0)
+ qmax = avctx->qmax;
Each encoder has its own range and thus scale. You should clip as per
the range and document the ranges per codec.
One possible complication is that avctx qmin can go upto 69 but VP8/9's
range extends beyond that. If qmin > 69 is
legal for VP8/9, then the user won't be able to set it. We can either
extend the range in avctx or add a private option here.
v4l2_set_ext_ctrl(s, qmin_cid, qmin, "minimum video quantizer scale");
v4l2_set_ext_ctrl(s, qmax_cid, qmax, "maximum video quantizer scale");
@@ -349,6 +353,12 @@ static const AVOption options[] = {
{ NULL },
};
+static const AVCodecDefault v4l2_m2m_defaults[] = {
+ { "qmin", "-1" },
+ { "qmax", "-1" },
+ { NULL },
+};
+
#define M2MENC_CLASS(NAME) \
static const AVClass v4l2_m2m_ ## NAME ## _enc_class = { \
.class_name = #NAME "_v4l2m2m_encoder", \
@@ -370,6 +380,7 @@ static const AVOption options[] = {
.send_frame = v4l2_send_frame, \
.receive_packet = v4l2_receive_packet, \
.close = v4l2_encode_close, \
+ .defaults = v4l2_m2m_defaults, \
.capabilities = AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DELAY, \
.wrapper_name = "v4l2m2m", \
};
On a related note, I see that anĀ encoder is defined for hevc and not
for VP9. However, prepare_encoder has a case for vp9 and not for hevc.
What am I missing here?
Gyan
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".