summaryrefslogtreecommitdiff
path: root/libavcodec/qsv_internal.h
diff options
context:
space:
mode:
authorZhong Li <zhong.li@intel.com>2019-09-20 04:45:26 +0800
committerZhong Li <zhong.li@intel.com>2019-09-26 13:44:02 +0800
commit74007dd86a87289a075926704fae5bd8ef313bb5 (patch)
treea54016ed4d1874245c468d89bb92594477bd7206 /libavcodec/qsv_internal.h
parentb6be2be765b3f9104ca5bc9f608a934db0fc012a (diff)
downloadffmpeg-74007dd86a87289a075926704fae5bd8ef313bb5.tar.gz
lavc/qsv: Fix MSDK initialization failure in system memory mode
MSDK does not create internal acceleration device on Linux, So MFXVideoCORE_SetHandle() is necessary. It has been added for ff_qsv_init_session_device(). But missed for ff_qsv_init_internal_session() due to commit 1f26a23 overwrited commit db89f45 Fix #7030 Signed-off-by: Zhong Li <zhong.li@intel.com>
Diffstat (limited to 'libavcodec/qsv_internal.h')
-rw-r--r--libavcodec/qsv_internal.h28
1 files changed, 27 insertions, 1 deletions
diff --git a/libavcodec/qsv_internal.h b/libavcodec/qsv_internal.h
index c50e9c792c..62885134b1 100644
--- a/libavcodec/qsv_internal.h
+++ b/libavcodec/qsv_internal.h
@@ -21,6 +21,22 @@
#ifndef AVCODEC_QSV_INTERNAL_H
#define AVCODEC_QSV_INTERNAL_H
+#if CONFIG_VAAPI
+#define AVCODEC_QSV_LINUX_SESSION_HANDLE
+#endif //CONFIG_VAAPI
+
+#ifdef AVCODEC_QSV_LINUX_SESSION_HANDLE
+#include <stdio.h>
+#include <string.h>
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <fcntl.h>
+#include <va/va.h>
+#include <va/va_drm.h>
+#include "libavutil/hwcontext_vaapi.h"
+#endif
+
#include <mfx/mfxvideo.h>
#include "libavutil/frame.h"
@@ -64,6 +80,14 @@ typedef struct QSVFrame {
struct QSVFrame *next;
} QSVFrame;
+typedef struct QSVSession {
+ mfxSession session;
+#ifdef AVCODEC_QSV_LINUX_SESSION_HANDLE
+ AVBufferRef *va_device_ref;
+ AVHWDeviceContext *va_device_ctx;
+#endif
+} QSVSession;
+
typedef struct QSVFramesContext {
AVBufferRef *hw_frames_ctx;
void *logctx;
@@ -99,9 +123,11 @@ enum AVPictureType ff_qsv_map_pictype(int mfx_pic_type);
enum AVFieldOrder ff_qsv_map_picstruct(int mfx_pic_struct);
-int ff_qsv_init_internal_session(AVCodecContext *avctx, mfxSession *session,
+int ff_qsv_init_internal_session(AVCodecContext *avctx, QSVSession *qs,
const char *load_plugins);
+int ff_qsv_close_internal_session(QSVSession *qs);
+
int ff_qsv_init_session_device(AVCodecContext *avctx, mfxSession *psession,
AVBufferRef *device_ref, const char *load_plugins);