qsvdec: Allow use of hw_device_ctx to make the internal session

(cherry picked from commit 8848ba0bd6)
This commit is contained in:
Mark Thompson 2017-03-04 23:57:36 +00:00
parent 91c3b50d74
commit 8aa3c2df1a
1 changed files with 14 additions and 2 deletions

View File

@ -42,7 +42,7 @@
#include "qsvdec.h"
static int qsv_init_session(AVCodecContext *avctx, QSVContext *q, mfxSession session,
AVBufferRef *hw_frames_ref)
AVBufferRef *hw_frames_ref, AVBufferRef *hw_device_ref)
{
int ret;
@ -67,6 +67,18 @@ static int qsv_init_session(AVCodecContext *avctx, QSVContext *q, mfxSession ses
return ret;
}
q->session = q->internal_session;
} else if (hw_device_ref) {
if (q->internal_session) {
MFXClose(q->internal_session);
q->internal_session = NULL;
}
ret = ff_qsv_init_session_device(avctx, &q->internal_session,
hw_device_ref, q->load_plugins);
if (ret < 0)
return ret;
q->session = q->internal_session;
} else {
if (!q->internal_session) {
@ -133,7 +145,7 @@ static int qsv_decode_init(AVCodecContext *avctx, QSVContext *q)
iopattern = MFX_IOPATTERN_OUT_SYSTEM_MEMORY;
q->iopattern = iopattern;
ret = qsv_init_session(avctx, q, session, avctx->hw_frames_ctx);
ret = qsv_init_session(avctx, q, session, avctx->hw_frames_ctx, avctx->hw_device_ctx);
if (ret < 0) {
av_log(avctx, AV_LOG_ERROR, "Error initializing an MFX session\n");
return ret;