Message ID | 20231220071050.3175819-1-haihao.xiang@intel.com |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel,v2,01/12] lavu/hwcontext_qsv: update AVQSVFramesContext to support dynamic frame pools | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
On Wo, 2023-12-20 at 15:10 +0800, Xiang, Haihao wrote: > From: Haihao Xiang <haihao.xiang@intel.com> > > Add AVQSVFramesContext.info and update the description > > Signed-off-by: Haihao Xiang <haihao.xiang@intel.com> > --- > Rebased https://patchwork.ffmpeg.org/project/ffmpeg/list/?series=9639 > against the latest master with a few changes. > > doc/APIchanges | 3 +++ > libavutil/hwcontext_qsv.c | 4 ++-- > libavutil/hwcontext_qsv.h | 31 +++++++++++++++++++++++++++---- > libavutil/version.h | 2 +- > 4 files changed, 33 insertions(+), 7 deletions(-) > > diff --git a/doc/APIchanges b/doc/APIchanges > index a3e4ebbccd..b68156ee94 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2023-02-09 > > API changes, most recent first: > > +2023-12-xx - xxxxxxxxxx - lavu 58.36.100 - hwcontext_qsv.h > + Add AVQSVFramesContext.info > + > 2023-12-18 - 74279227dd2 - lavc 60.36.100 - packet.h > Add AV_PKT_DATA_IAMF_MIX_GAIN_PARAM, AV_PKT_DATA_IAMF_DEMIXING_INFO_PARAM > and AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM. > diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c > index a67552b5ac..071489f070 100644 > --- a/libavutil/hwcontext_qsv.c > +++ b/libavutil/hwcontext_qsv.c > @@ -613,7 +613,7 @@ static mfxStatus frame_alloc(mfxHDL pthis, > mfxFrameAllocRequest *req, > QSVFramesContext *s = ctx->internal->priv; > AVQSVFramesContext *hwctx = ctx->hwctx; > mfxFrameInfo *i = &req->Info; > - mfxFrameInfo *i1 = &hwctx->surfaces[0].Info; > + mfxFrameInfo *i1 = hwctx->nb_surfaces ? &hwctx->surfaces[0].Info : hwctx- > >info; > > if (!(req->Type & MFX_MEMTYPE_VIDEO_MEMORY_PROCESSOR_TARGET) || > !(req->Type & (MFX_MEMTYPE_FROM_VPPIN | MFX_MEMTYPE_FROM_VPPOUT)) || > @@ -1173,7 +1173,7 @@ static int qsv_init_internal_session(AVHWFramesContext > *ctx, > MFX_IOPATTERN_OUT_SYSTEM_MEMORY; > par.AsyncDepth = 1; > > - par.vpp.In = frames_hwctx->surfaces[0].Info; > + par.vpp.In = frames_hwctx->nb_surfaces ? frames_hwctx->surfaces[0].Info : > *frames_hwctx->info; > > /* Apparently VPP requires the frame rate to be set to some value, > otherwise > * init will fail (probably for the framerate conversion filter). Since > we > diff --git a/libavutil/hwcontext_qsv.h b/libavutil/hwcontext_qsv.h > index e2dba8ad83..5950e38500 100644 > --- a/libavutil/hwcontext_qsv.h > +++ b/libavutil/hwcontext_qsv.h > @@ -25,8 +25,8 @@ > * @file > * An API-specific header for AV_HWDEVICE_TYPE_QSV. > * > - * This API does not support dynamic frame pools. AVHWFramesContext.pool must > - * contain AVBufferRefs whose data pointer points to an mfxFrameSurface1 > struct. > + * AVHWFramesContext.pool must contain AVBufferRefs whose data pointer points > + * to a mfxFrameSurface1 struct. > */ > > /** > @@ -51,11 +51,34 @@ typedef struct AVQSVDeviceContext { > * This struct is allocated as AVHWFramesContext.hwctx > */ > typedef struct AVQSVFramesContext { > - mfxFrameSurface1 *surfaces; > + /** > + * A pointer to a mfxFrameSurface1 or mfxFrameInfo struct > + * > + * When nb_surfaces is non-zero, it is a pointer to a mfxFrameSurface1 > + * struct. > + * > + * When nb_surfaces is 0, it is a pointer to a mfxFrameInfo struct, all > + * buffers allocated from the pool have the same mfxFrameInfo. > + */ > + union { > + mfxFrameSurface1 *surfaces; > + mfxFrameInfo *info; > + }; > + > + /** > + * Number of frames in the pool > + * > + * It is 0 for dynamic frame pools or AVHWFramesContext.initial_pool_size > + * for fixed frame pools. > + * > + * Note only oneVPL GPU runtime 2.9+ can support dynamic frame pools > + * on d3d11va or vaapi > + */ > int nb_surfaces; > > /** > - * A combination of MFX_MEMTYPE_* describing the frame pool. > + * Set by user. It is a combination of MFX_MEMTYPE_* describing the frame > + * pool. > */ > int frame_type; > } AVQSVFramesContext; > diff --git a/libavutil/version.h b/libavutil/version.h > index 7664cd97bd..3b4c50e9a9 100644 > --- a/libavutil/version.h > +++ b/libavutil/version.h > @@ -79,7 +79,7 @@ > */ > > #define LIBAVUTIL_VERSION_MAJOR 58 > -#define LIBAVUTIL_VERSION_MINOR 35 > +#define LIBAVUTIL_VERSION_MINOR 36 > #define LIBAVUTIL_VERSION_MICRO 100 > > #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ Hi, Any comment for this patchset ? Thanks Haihao
diff --git a/doc/APIchanges b/doc/APIchanges index a3e4ebbccd..b68156ee94 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2023-02-09 API changes, most recent first: +2023-12-xx - xxxxxxxxxx - lavu 58.36.100 - hwcontext_qsv.h + Add AVQSVFramesContext.info + 2023-12-18 - 74279227dd2 - lavc 60.36.100 - packet.h Add AV_PKT_DATA_IAMF_MIX_GAIN_PARAM, AV_PKT_DATA_IAMF_DEMIXING_INFO_PARAM and AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM. diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c index a67552b5ac..071489f070 100644 --- a/libavutil/hwcontext_qsv.c +++ b/libavutil/hwcontext_qsv.c @@ -613,7 +613,7 @@ static mfxStatus frame_alloc(mfxHDL pthis, mfxFrameAllocRequest *req, QSVFramesContext *s = ctx->internal->priv; AVQSVFramesContext *hwctx = ctx->hwctx; mfxFrameInfo *i = &req->Info; - mfxFrameInfo *i1 = &hwctx->surfaces[0].Info; + mfxFrameInfo *i1 = hwctx->nb_surfaces ? &hwctx->surfaces[0].Info : hwctx->info; if (!(req->Type & MFX_MEMTYPE_VIDEO_MEMORY_PROCESSOR_TARGET) || !(req->Type & (MFX_MEMTYPE_FROM_VPPIN | MFX_MEMTYPE_FROM_VPPOUT)) || @@ -1173,7 +1173,7 @@ static int qsv_init_internal_session(AVHWFramesContext *ctx, MFX_IOPATTERN_OUT_SYSTEM_MEMORY; par.AsyncDepth = 1; - par.vpp.In = frames_hwctx->surfaces[0].Info; + par.vpp.In = frames_hwctx->nb_surfaces ? frames_hwctx->surfaces[0].Info : *frames_hwctx->info; /* Apparently VPP requires the frame rate to be set to some value, otherwise * init will fail (probably for the framerate conversion filter). Since we diff --git a/libavutil/hwcontext_qsv.h b/libavutil/hwcontext_qsv.h index e2dba8ad83..5950e38500 100644 --- a/libavutil/hwcontext_qsv.h +++ b/libavutil/hwcontext_qsv.h @@ -25,8 +25,8 @@ * @file * An API-specific header for AV_HWDEVICE_TYPE_QSV. * - * This API does not support dynamic frame pools. AVHWFramesContext.pool must - * contain AVBufferRefs whose data pointer points to an mfxFrameSurface1 struct. + * AVHWFramesContext.pool must contain AVBufferRefs whose data pointer points + * to a mfxFrameSurface1 struct. */ /** @@ -51,11 +51,34 @@ typedef struct AVQSVDeviceContext { * This struct is allocated as AVHWFramesContext.hwctx */ typedef struct AVQSVFramesContext { - mfxFrameSurface1 *surfaces; + /** + * A pointer to a mfxFrameSurface1 or mfxFrameInfo struct + * + * When nb_surfaces is non-zero, it is a pointer to a mfxFrameSurface1 + * struct. + * + * When nb_surfaces is 0, it is a pointer to a mfxFrameInfo struct, all + * buffers allocated from the pool have the same mfxFrameInfo. + */ + union { + mfxFrameSurface1 *surfaces; + mfxFrameInfo *info; + }; + + /** + * Number of frames in the pool + * + * It is 0 for dynamic frame pools or AVHWFramesContext.initial_pool_size + * for fixed frame pools. + * + * Note only oneVPL GPU runtime 2.9+ can support dynamic frame pools + * on d3d11va or vaapi + */ int nb_surfaces; /** - * A combination of MFX_MEMTYPE_* describing the frame pool. + * Set by user. It is a combination of MFX_MEMTYPE_* describing the frame + * pool. */ int frame_type; } AVQSVFramesContext; diff --git a/libavutil/version.h b/libavutil/version.h index 7664cd97bd..3b4c50e9a9 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 58 -#define LIBAVUTIL_VERSION_MINOR 35 +#define LIBAVUTIL_VERSION_MINOR 36 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \