From b47446cc39d9dbdd314b391d256447bc697de848 Mon Sep 17 00:00:00 2001 From: Zhong Li Date: Tue, 26 Mar 2019 07:40:54 +0800 Subject: lavc/qsvenc: make the queried libmfx version easily reused Signed-off-by: Zhong Li --- libavcodec/qsvenc.c | 17 ++++++++--------- libavcodec/qsvenc.h | 2 ++ 2 files changed, 10 insertions(+), 9 deletions(-) (limited to 'libavcodec') diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index 5aa020d47b..9091772687 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -468,13 +468,6 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q) int target_bitrate_kbps, max_bitrate_kbps, brc_param_multiplier; int buffer_size_in_kilobytes, initial_delay_in_kilobytes; int ret; - mfxVersion ver; - - ret = MFXQueryVersion(q->session,&ver); - if (ret != MFX_ERR_NONE) { - av_log(avctx, AV_LOG_ERROR, "Error getting the session handle\n"); - return AVERROR_UNKNOWN; - } ret = ff_qsv_codec_id_to_mfx(avctx->codec_id); if (ret < 0) @@ -530,7 +523,7 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q) // If the minor version is greater than or equal to 19, // then can use the same alignment settings as H.264 for HEVC q->width_align = (avctx->codec_id != AV_CODEC_ID_HEVC || - QSV_RUNTIME_VERSION_ATLEAST(ver, 1, 19)) ? 16 : 32; + QSV_RUNTIME_VERSION_ATLEAST(q->ver, 1, 19)) ? 16 : 32; q->param.mfx.FrameInfo.Width = FFALIGN(avctx->width, q->width_align); if (avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT) { @@ -729,7 +722,7 @@ FF_ENABLE_DEPRECATION_WARNINGS #endif #if QSV_HAVE_MF - if (QSV_RUNTIME_VERSION_ATLEAST(ver, 1, 25)) { + if (QSV_RUNTIME_VERSION_ATLEAST(q->ver, 1, 25)) { q->extmfp.Header.BufferId = MFX_EXTBUFF_MULTI_FRAME_PARAM; q->extmfp.Header.BufferSz = sizeof(q->extmfp); @@ -985,6 +978,12 @@ int ff_qsv_enc_init(AVCodecContext *avctx, QSVEncContext *q) if (ret < 0) return ret; + ret = MFXQueryVersion(q->session,&q->ver); + if (ret < 0) { + return ff_qsv_print_error(avctx, ret, + "Error querying mfx version"); + } + // in the mfxInfoMFX struct, JPEG is different from other codecs switch (avctx->codec_id) { case AV_CODEC_ID_MJPEG: diff --git a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h index 00afbd80aa..fcd01f4a61 100644 --- a/libavcodec/qsvenc.h +++ b/libavcodec/qsvenc.h @@ -131,6 +131,8 @@ typedef struct QSVEncContext { QSVFramesContext frames_ctx; + mfxVersion ver; + // options set by the caller int async_depth; int idr_interval; -- cgit v1.2.3