summaryrefslogtreecommitdiff
path: root/libavcodec/qsvenc.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/qsvenc.c')
-rw-r--r--libavcodec/qsvenc.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c
index 4f103b9ff6..9e416500e9 100644
--- a/libavcodec/qsvenc.c
+++ b/libavcodec/qsvenc.c
@@ -139,6 +139,9 @@ static void dump_video_param(AVCodecContext *avctx, QSVEncContext *q,
#if QSV_HAVE_CO3
mfxExtCodingOption3 *co3 = (mfxExtCodingOption3*)coding_opts[2];
#endif
+#if QSV_HAVE_EXT_HEVC_TILES
+ mfxExtHEVCTiles *exthevctiles = (mfxExtHEVCTiles *)coding_opts[3 + QSV_HAVE_CO_VPS];
+#endif
av_log(avctx, AV_LOG_VERBOSE, "profile: %s; level: %"PRIu16"\n",
print_profile(info->CodecProfile), info->CodecLevel);
@@ -204,6 +207,12 @@ static void dump_video_param(AVCodecContext *avctx, QSVEncContext *q,
av_log(avctx, AV_LOG_VERBOSE, "RateDistortionOpt: %s\n",
print_threestate(co->RateDistortionOpt));
+#if QSV_HAVE_EXT_HEVC_TILES
+ if (avctx->codec_id == AV_CODEC_ID_HEVC)
+ av_log(avctx, AV_LOG_VERBOSE, "NumTileColumns: %"PRIu16"; NumTileRows: %"PRIu16"\n",
+ exthevctiles->NumTileColumns, exthevctiles->NumTileRows);
+#endif
+
#if QSV_HAVE_CO2
av_log(avctx, AV_LOG_VERBOSE,
"RecoveryPointSEI: %s IntRefType: %"PRIu16"; IntRefCycleSize: %"PRIu16"; IntRefQPDelta: %"PRId16"\n",
@@ -771,6 +780,16 @@ FF_ENABLE_DEPRECATION_WARNINGS
}
#endif
+#if QSV_HAVE_EXT_HEVC_TILES
+ if (avctx->codec_id == AV_CODEC_ID_HEVC) {
+ q->exthevctiles.Header.BufferId = MFX_EXTBUFF_HEVC_TILES;
+ q->exthevctiles.Header.BufferSz = sizeof(q->exthevctiles);
+ q->exthevctiles.NumTileColumns = q->tile_cols;
+ q->exthevctiles.NumTileRows = q->tile_rows;
+ q->extparam_internal[q->nb_extparam_internal++] = (mfxExtBuffer *)&q->exthevctiles;
+ }
+#endif
+
if (!check_enc_param(avctx,q)) {
av_log(avctx, AV_LOG_ERROR,
"some encoding parameters are not supported by the QSV "
@@ -889,7 +908,14 @@ static int qsv_retrieve_enc_params(AVCodecContext *avctx, QSVEncContext *q)
};
#endif
- mfxExtBuffer *ext_buffers[2 + QSV_HAVE_CO2 + QSV_HAVE_CO3 + QSV_HAVE_CO_VPS];
+#if QSV_HAVE_EXT_HEVC_TILES
+ mfxExtHEVCTiles hevc_tile_buf = {
+ .Header.BufferId = MFX_EXTBUFF_HEVC_TILES,
+ .Header.BufferSz = sizeof(hevc_tile_buf),
+ };
+#endif
+
+ mfxExtBuffer *ext_buffers[2 + QSV_HAVE_CO2 + QSV_HAVE_CO3 + QSV_HAVE_CO_VPS + QSV_HAVE_EXT_HEVC_TILES];
int need_pps = avctx->codec_id != AV_CODEC_ID_MPEG2VIDEO;
int ret, ext_buf_num = 0, extradata_offset = 0;
@@ -907,6 +933,10 @@ static int qsv_retrieve_enc_params(AVCodecContext *avctx, QSVEncContext *q)
if (q->hevc_vps)
ext_buffers[ext_buf_num++] = (mfxExtBuffer*)&extradata_vps;
#endif
+#if QSV_HAVE_EXT_HEVC_TILES
+ if (avctx->codec_id == AV_CODEC_ID_HEVC)
+ ext_buffers[ext_buf_num++] = (mfxExtBuffer*)&hevc_tile_buf;
+#endif
q->param.ExtParam = ext_buffers;
q->param.NumExtParam = ext_buf_num;