aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/qsvenc.h
diff options
context:
space:
mode:
authorYue Heng <yue.heng@intel.com>2022-05-25 21:13:41 +0800
committerHaihao Xiang <haihao.xiang@intel.com>2022-06-06 13:56:10 +0800
commit11912f65ef5ad12db938e404eafc855af1bc3859 (patch)
treed178b8c9e6559ad9f4c2f4316f0a30a0b5fec09d /libavcodec/qsvenc.h
parente8381691813a4f10a280169a782a716568e57614 (diff)
downloadffmpeg-11912f65ef5ad12db938e404eafc855af1bc3859.tar.gz
libavcodec/qsvenc: Add min/max QP control options for I/P/B frame
To do more accurate QP control, add min/max QP control on I/P/B frame separately to qsv encoder. qmax and qmin still work but newly-added options have higher priority. Signed-off-by: Yue Heng <yue.heng@intel.com> Signed-off-by: Wenbin Chen <wenbin.chen@intel.com>
Diffstat (limited to 'libavcodec/qsvenc.h')
-rw-r--r--libavcodec/qsvenc.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h
index fec5e584db..b754ac4b56 100644
--- a/libavcodec/qsvenc.h
+++ b/libavcodec/qsvenc.h
@@ -100,6 +100,14 @@
#define QSV_OPTION_LOW_DELAY_BRC \
{ "low_delay_brc", "Allow to strictly obey avg frame size", OFFSET(qsv.low_delay_brc), AV_OPT_TYPE_BOOL,{ .i64 = -1 }, -1, 1, VE },
+#define QSV_OPTION_MAX_MIN_QP \
+{ "max_qp_i", "Maximum video quantizer scale for I frame", OFFSET(qsv.max_qp_i), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE}, \
+{ "min_qp_i", "Minimum video quantizer scale for I frame", OFFSET(qsv.min_qp_i), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE}, \
+{ "max_qp_p", "Maximum video quantizer scale for P frame", OFFSET(qsv.max_qp_p), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE}, \
+{ "min_qp_p", "Minimum video quantizer scale for P frame", OFFSET(qsv.min_qp_p), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE}, \
+{ "max_qp_b", "Maximum video quantizer scale for B frame", OFFSET(qsv.max_qp_b), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE}, \
+{ "min_qp_b", "Minimum video quantizer scale for B frame", OFFSET(qsv.min_qp_b), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE},
+
extern const AVCodecHWConfigInternal *const ff_qsv_enc_hw_configs[];
typedef int SetEncodeCtrlCB (AVCodecContext *avctx,
@@ -209,6 +217,13 @@ typedef struct QSVEncContext {
int co3_idx;
int exthevctiles_idx;
int vp9_idx;
+
+ int max_qp_i;
+ int min_qp_i;
+ int max_qp_p;
+ int min_qp_p;
+ int max_qp_b;
+ int min_qp_b;
} QSVEncContext;
int ff_qsv_enc_init(AVCodecContext *avctx, QSVEncContext *q);