diff options
author | James Almer <jamrial@gmail.com> | 2018-04-13 20:34:23 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2018-04-13 20:34:23 -0300 |
commit | f790410b6baa4ee53e8a5796e986de0cae78b073 (patch) | |
tree | dc092d2c1bf35c8eb9888f7b3f77c4720bacf423 /libavfilter | |
parent | ae7e66fb4b1a256fb79a016b9c585de84ac77339 (diff) | |
parent | cca5e4f040971db6de0bfe6968f00c021d8a9c42 (diff) | |
download | ffmpeg-f790410b6baa4ee53e8a5796e986de0cae78b073.tar.gz |
Merge commit 'cca5e4f040971db6de0bfe6968f00c021d8a9c42'
* commit 'cca5e4f040971db6de0bfe6968f00c021d8a9c42':
qsv: adding Multi Frame Encode support
Merged-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavfilter')
-rw-r--r-- | libavfilter/qsvvpp.c | 9 | ||||
-rw-r--r-- | libavfilter/qsvvpp.h | 8 | ||||
-rw-r--r-- | libavfilter/vf_deinterlace_qsv.c | 7 | ||||
-rw-r--r-- | libavfilter/vf_scale_qsv.c | 7 |
4 files changed, 28 insertions, 3 deletions
diff --git a/libavfilter/qsvvpp.c b/libavfilter/qsvvpp.c index f32b46dcc0..732cf56a6a 100644 --- a/libavfilter/qsvvpp.c +++ b/libavfilter/qsvvpp.c @@ -515,9 +515,12 @@ static int init_vpp_session(AVFilterContext *avctx, QSVVPPContext *s) if (ret != MFX_ERR_NONE) return AVERROR_UNKNOWN; } - ret = MFXJoinSession(device_hwctx->session, s->session); - if (ret != MFX_ERR_NONE) - return AVERROR_UNKNOWN; + + if (QSV_RUNTIME_VERSION_ATLEAST(ver, 1, 25)) { + ret = MFXJoinSession(device_hwctx->session, s->session); + if (ret != MFX_ERR_NONE) + return AVERROR_UNKNOWN; + } if (IS_OPAQUE_MEMORY(s->in_mem_mode) || IS_OPAQUE_MEMORY(s->out_mem_mode)) { s->opaque_alloc.In.Surfaces = s->surface_ptrs_in; diff --git a/libavfilter/qsvvpp.h b/libavfilter/qsvvpp.h index d720c9ba42..ff02b64c41 100644 --- a/libavfilter/qsvvpp.h +++ b/libavfilter/qsvvpp.h @@ -31,6 +31,14 @@ #define FF_INLINK_IDX(link) ((int)((link)->dstpad - (link)->dst->input_pads)) #define FF_OUTLINK_IDX(link) ((int)((link)->srcpad - (link)->src->output_pads)) +#define QSV_VERSION_ATLEAST(MAJOR, MINOR) \ + (MFX_VERSION_MAJOR > (MAJOR) || \ + 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)) + typedef struct QSVVPPContext QSVVPPContext; typedef struct QSVVPPCrop { diff --git a/libavfilter/vf_deinterlace_qsv.c b/libavfilter/vf_deinterlace_qsv.c index 897e6bd622..c9e76c6056 100644 --- a/libavfilter/vf_deinterlace_qsv.c +++ b/libavfilter/vf_deinterlace_qsv.c @@ -35,6 +35,7 @@ #include "libavutil/opt.h" #include "libavutil/pixdesc.h" #include "libavutil/time.h" +#include "libavfilter/qsvvpp.h" #include "avfilter.h" #include "formats.h" @@ -215,6 +216,12 @@ static int init_out_session(AVFilterContext *ctx) return AVERROR_UNKNOWN; } + if (QSV_RUNTIME_VERSION_ATLEAST(ver, 1, 25)) { + err = MFXJoinSession(device_hwctx->session, s->session); + if (err != MFX_ERR_NONE) + return AVERROR_UNKNOWN; + } + memset(&par, 0, sizeof(par)); s->deint_conf.Header.BufferId = MFX_EXTBUFF_VPP_DEINTERLACING; diff --git a/libavfilter/vf_scale_qsv.c b/libavfilter/vf_scale_qsv.c index c6f683e6fa..d1189942d1 100644 --- a/libavfilter/vf_scale_qsv.c +++ b/libavfilter/vf_scale_qsv.c @@ -36,6 +36,7 @@ #include "libavutil/opt.h" #include "libavutil/pixdesc.h" #include "libavutil/time.h" +#include "libavfilter/qsvvpp.h" #include "avfilter.h" #include "formats.h" @@ -315,6 +316,12 @@ static int init_out_session(AVFilterContext *ctx) return AVERROR_UNKNOWN; } + if (QSV_RUNTIME_VERSION_ATLEAST(ver, 1, 25)) { + err = MFXJoinSession(device_hwctx->session, s->session); + if (err != MFX_ERR_NONE) + return AVERROR_UNKNOWN; + } + memset(&par, 0, sizeof(par)); if (opaque) { |