mirror of https://git.ffmpeg.org/ffmpeg.git
qsvdec: Allow use of hw_device_ctx to make the internal session
(cherry picked from commit 8848ba0bd6
)
This commit is contained in:
parent
91c3b50d74
commit
8aa3c2df1a
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue