]> git.sesse.net Git - ffmpeg/commitdiff
lavc/qsvenc: make the queried libmfx version easily reused
authorZhong Li <zhong.li@intel.com>
Mon, 25 Mar 2019 23:40:54 +0000 (07:40 +0800)
committerZhong Li <zhong.li@intel.com>
Thu, 28 Mar 2019 13:48:09 +0000 (21:48 +0800)
Signed-off-by: Zhong Li <zhong.li@intel.com>
libavcodec/qsvenc.c
libavcodec/qsvenc.h

index 5aa020d47b3c16594a4dbddc5642d54c8e6dcd00..9091772687d15ebb3ee05fd6a15cfa24c7b6cb96 100644 (file)
@@ -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:
index 00afbd80aafd6c579d439b8f56910c31416b3aae..fcd01f4a615e6ec4f6f153039a961dd07e3462bb 100644 (file)
@@ -131,6 +131,8 @@ typedef struct QSVEncContext {
 
     QSVFramesContext frames_ctx;
 
+    mfxVersion          ver;
+
     // options set by the caller
     int async_depth;
     int idr_interval;