|
|
|
@@ -25,6 +25,7 @@ |
|
|
|
#include <sys/ioctl.h> |
|
|
|
#include <search.h> |
|
|
|
#include "libavcodec/avcodec.h" |
|
|
|
#include "libavcodec/internal.h" |
|
|
|
#include "libavutil/pixdesc.h" |
|
|
|
#include "libavutil/pixfmt.h" |
|
|
|
#include "libavutil/opt.h" |
|
|
|
@@ -252,11 +253,18 @@ 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 && avctx->qmax >= 0 && avctx->qmin > avctx->qmax) { |
|
|
|
av_log(avctx, AV_LOG_WARNING, "Invalid qmin:%d qmax:%d. qmin should not " |
|
|
|
"exceed qmax\n", avctx->qmin, avctx->qmax); |
|
|
|
} else { |
|
|
|
qmin = avctx->qmin >= 0 ? avctx->qmin : qmin; |
|
|
|
qmax = avctx->qmax >= 0 ? avctx->qmax : qmax; |
|
|
|
} |
|
|
|
|
|
|
|
v4l2_set_ext_ctrl(s, qmin_cid, qmin, "minimum video quantizer scale", 0); |
|
|
|
v4l2_set_ext_ctrl(s, qmax_cid, qmax, "maximum video quantizer scale", 0); |
|
|
|
v4l2_set_ext_ctrl(s, qmin_cid, qmin, "minimum video quantizer scale", |
|
|
|
avctx->qmin >= 0); |
|
|
|
v4l2_set_ext_ctrl(s, qmax_cid, qmax, "maximum video quantizer scale", |
|
|
|
avctx->qmax >= 0); |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
@@ -369,6 +377,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", \ |
|
|
|
@@ -390,6 +404,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", \ |
|
|
|
}; |
|
|
|
|