mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-04-11 03:32:39 +00:00
lavu/hwcontext_qsv: Join the download/upload session to the main session
This may reduce the number of internal threads when using hwupload or hwdownload filter. Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
This commit is contained in:
parent
697251bb0c
commit
74a8e080d0
@ -55,6 +55,10 @@
|
|||||||
(MFX_VERSION_MAJOR > (MAJOR) || \
|
(MFX_VERSION_MAJOR > (MAJOR) || \
|
||||||
MFX_VERSION_MAJOR == (MAJOR) && MFX_VERSION_MINOR >= (MINOR))
|
MFX_VERSION_MAJOR == (MAJOR) && MFX_VERSION_MINOR >= (MINOR))
|
||||||
|
|
||||||
|
#define QSV_RUNTIME_VERSION_ATLEAST(MFX_VERSION, MAJOR, MINOR) \
|
||||||
|
((MFX_VERSION.Major > (MAJOR)) || \
|
||||||
|
(MFX_VERSION.Major == (MAJOR) && MFX_VERSION.Minor >= (MINOR)))
|
||||||
|
|
||||||
#define MFX_IMPL_VIA_MASK(impl) (0x0f00 & (impl))
|
#define MFX_IMPL_VIA_MASK(impl) (0x0f00 & (impl))
|
||||||
#define QSV_ONEVPL QSV_VERSION_ATLEAST(2, 0)
|
#define QSV_ONEVPL QSV_VERSION_ATLEAST(2, 0)
|
||||||
#define QSV_HAVE_OPAQUE !QSV_ONEVPL
|
#define QSV_HAVE_OPAQUE !QSV_ONEVPL
|
||||||
@ -1136,6 +1140,17 @@ static int qsv_init_internal_session(AVHWFramesContext *ctx,
|
|||||||
int ret = AVERROR_UNKNOWN;
|
int ret = AVERROR_UNKNOWN;
|
||||||
/* hwctx->loader is non-NULL for oneVPL user and NULL for non-oneVPL user */
|
/* hwctx->loader is non-NULL for oneVPL user and NULL for non-oneVPL user */
|
||||||
void **loader = &hwctx->loader;
|
void **loader = &hwctx->loader;
|
||||||
|
mfxSession parent_session = hwctx->session;
|
||||||
|
mfxIMPL impl;
|
||||||
|
mfxVersion ver;
|
||||||
|
|
||||||
|
err = MFXQueryIMPL(parent_session, &impl);
|
||||||
|
if (err == MFX_ERR_NONE)
|
||||||
|
err = MFXQueryVersion(parent_session, &ver);
|
||||||
|
if (err != MFX_ERR_NONE) {
|
||||||
|
av_log(ctx, AV_LOG_ERROR, "Error querying the session attributes.\n");
|
||||||
|
return AVERROR_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
#if QSV_HAVE_OPAQUE
|
#if QSV_HAVE_OPAQUE
|
||||||
QSVFramesContext *s = ctx->hwctx;
|
QSVFramesContext *s = ctx->hwctx;
|
||||||
@ -1156,6 +1171,15 @@ static int qsv_init_internal_session(AVHWFramesContext *ctx,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (QSV_RUNTIME_VERSION_ATLEAST(ver, 1, 25)) {
|
||||||
|
err = MFXJoinSession(parent_session, *session);
|
||||||
|
if (err != MFX_ERR_NONE) {
|
||||||
|
av_log(ctx, AV_LOG_ERROR, "Error joining session.\n");
|
||||||
|
ret = AVERROR_UNKNOWN;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!opaque) {
|
if (!opaque) {
|
||||||
err = MFXVideoCORE_SetFrameAllocator(*session, &frame_allocator);
|
err = MFXVideoCORE_SetFrameAllocator(*session, &frame_allocator);
|
||||||
if (err != MFX_ERR_NONE) {
|
if (err != MFX_ERR_NONE) {
|
||||||
|
Loading…
Reference in New Issue
Block a user