projects
/
libav.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
4936a48
)
qsvdec: Allow use of hw_device_ctx to make the internal session
author
Mark Thompson
<sw@jkqxz.net>
Sat, 4 Mar 2017 23:57:36 +0000
(23:57 +0000)
committer
Mark Thompson
<sw@jkqxz.net>
Sun, 2 Apr 2017 18:06:33 +0000
(19:06 +0100)
libavcodec/qsvdec.c
patch
|
blob
|
blame
|
history
diff --git
a/libavcodec/qsvdec.c
b/libavcodec/qsvdec.c
index
96526a1
..
2c90436
100644
(file)
--- a/
libavcodec/qsvdec.c
+++ b/
libavcodec/qsvdec.c
@@
-42,7
+42,7
@@
#include "qsvdec.h"
static int qsv_init_session(AVCodecContext *avctx, QSVContext *q, mfxSession session,
#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;
{
int ret;
@@
-68,6
+68,18
@@
static int qsv_init_session(AVCodecContext *avctx, QSVContext *q, mfxSession ses
}
q->session = q->internal_session;
}
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) {
ret = ff_qsv_init_internal_session(avctx, &q->internal_session,
} else {
if (!q->internal_session) {
ret = ff_qsv_init_internal_session(avctx, &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;
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;
if (ret < 0) {
av_log(avctx, AV_LOG_ERROR, "Error initializing an MFX session\n");
return ret;