summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorZhong Li <zhong.li@intel.com>2019-03-26 07:40:54 +0800
committerZhong Li <zhong.li@intel.com>2019-03-28 21:48:09 +0800
commitb47446cc39d9dbdd314b391d256447bc697de848 (patch)
tree3f8c822cb0a9b9036f87a4088bd46f0ac5161e2a /libavcodec
parent81ae387a265de856b63dc953c4195904360b7e98 (diff)
lavc/qsvenc: make the queried libmfx version easily reused
Signed-off-by: Zhong Li <zhong.li@intel.com>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/qsvenc.c17
-rw-r--r--libavcodec/qsvenc.h2
2 files changed, 10 insertions, 9 deletions
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;