summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorHaihao Xiang <haihao.xiang@intel.com>2020-11-05 15:20:10 +0800
committerZhong Li <zhongli_dev@126.com>2021-07-02 23:38:36 +0800
commit9583e66ea0232043353bec7bda5f82554e04232c (patch)
tree9a243b13514a3b688f56647d33c9034943235abd /libavcodec
parent8c2c0135e5f497a5ecbbcd237620002f791f37c3 (diff)
qsvenc_hevc: allow user set more coding options
The SDK supports NalHrdConformance, RecoveryPointSEI and AUDelimiter for hevc encoder, so we may allow user to set these coding options like as what we did for h264_qsv encoder. Signed-off-by: Haihao Xiang <haihao.xiang@intel.com> Signed-off-by: Zhong Li <zhongli_dev@126.com>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/qsvenc.c13
-rw-r--r--libavcodec/qsvenc_hevc.c2
2 files changed, 15 insertions, 0 deletions
diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c
index 0ec8e0e597..ca2b42cafd 100644
--- a/libavcodec/qsvenc.c
+++ b/libavcodec/qsvenc.c
@@ -290,6 +290,10 @@ static void dump_video_param(AVCodecContext *avctx, QSVEncContext *q,
"NalHrdConformance: %s; SingleSeiNalUnit: %s; VuiVclHrdParameters: %s VuiNalHrdParameters: %s\n",
print_threestate(co->NalHrdConformance), print_threestate(co->SingleSeiNalUnit),
print_threestate(co->VuiVclHrdParameters), print_threestate(co->VuiNalHrdParameters));
+ } else if ((avctx->codec_id == AV_CODEC_ID_HEVC) && QSV_RUNTIME_VERSION_ATLEAST(q->ver, 1, 28)) {
+ av_log(avctx, AV_LOG_VERBOSE,
+ "NalHrdConformance: %s; VuiNalHrdParameters: %s\n",
+ print_threestate(co->NalHrdConformance), print_threestate(co->VuiNalHrdParameters));
}
av_log(avctx, AV_LOG_VERBOSE, "FrameRateExtD: %"PRIu32"; FrameRateExtN: %"PRIu32" \n",
@@ -680,6 +684,15 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q)
q->extco.RecoveryPointSEI = q->recovery_point_sei ? MFX_CODINGOPTION_ON : MFX_CODINGOPTION_OFF;
q->extco.MaxDecFrameBuffering = q->max_dec_frame_buffering;
q->extco.AUDelimiter = q->aud ? MFX_CODINGOPTION_ON : MFX_CODINGOPTION_OFF;
+ } else if (avctx->codec_id == AV_CODEC_ID_HEVC) {
+ if (avctx->strict_std_compliance != FF_COMPLIANCE_NORMAL)
+ q->extco.NalHrdConformance = avctx->strict_std_compliance > FF_COMPLIANCE_NORMAL ?
+ MFX_CODINGOPTION_ON : MFX_CODINGOPTION_OFF;
+
+ if (q->recovery_point_sei >= 0)
+ q->extco.RecoveryPointSEI = q->recovery_point_sei ? MFX_CODINGOPTION_ON : MFX_CODINGOPTION_OFF;
+
+ q->extco.AUDelimiter = q->aud ? MFX_CODINGOPTION_ON : MFX_CODINGOPTION_OFF;
}
q->extparam_internal[q->nb_extparam_internal++] = (mfxExtBuffer *)&q->extco;
diff --git a/libavcodec/qsvenc_hevc.c b/libavcodec/qsvenc_hevc.c
index a5671ebbca..b7b2f5633e 100644
--- a/libavcodec/qsvenc_hevc.c
+++ b/libavcodec/qsvenc_hevc.c
@@ -246,6 +246,8 @@ static const AVOption options[] = {
{ "tile_cols", "Number of columns for tiled encoding", OFFSET(qsv.tile_cols), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, UINT16_MAX, VE },
{ "tile_rows", "Number of rows for tiled encoding", OFFSET(qsv.tile_rows), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, UINT16_MAX, VE },
+ { "recovery_point_sei", "Insert recovery point SEI messages", OFFSET(qsv.recovery_point_sei), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
+ { "aud", "Insert the Access Unit Delimiter NAL", OFFSET(qsv.aud), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE},
{ NULL },
};