Re: [FFmpeg-devel] [PATCH 2/2] lavc/dxva: properly namespace public symbols
On Thu, Feb 17, 2022 at 10:13:15AM +0100, Anton Khirnov wrote: > --- > doc/APIchanges | 6 ++ > libavcodec/dxva2.c | 4 ++-- > libavcodec/dxva2.h | 18 ++ > libavcodec/dxva2_h264.c | 8 > libavcodec/dxva2_internal.h | 4 ++-- > libavcodec/version.h| 3 ++- > 6 files changed, 30 insertions(+), 13 deletions(-) This doesnt build CC libavcodec/dxva2.o In file included from src/libavcodec/dxva2_internal.h:34:0, from src/libavcodec/dxva2.c:33: src/libavcodec/dxva2.h:23:0: error: unterminated #ifndef #ifndef AVCODEC_DXVA2_H In file included from src/libavcodec/dxva2_internal.h:35:0, from src/libavcodec/dxva2.c:33: src/libavutil/hwcontext_dxva2.h:39:1: error: duplicate ‘typedef’ typedef struct AVDXVA2DeviceContext { ^~~ src/libavutil/hwcontext_dxva2.h:39:9: error: two or more data types in declaration specifiers typedef struct AVDXVA2DeviceContext { ^~ In file included from src/libavcodec/dxva2_internal.h:38:0, from src/libavcodec/dxva2.c:33: src/libavcodec/d3d11va.h:48:0: warning: "FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG" redefined #define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for Direct3D11 and old UVD/UVD+ ATI video cards In file included from src/libavcodec/dxva2_internal.h:34:0, from src/libavcodec/dxva2.c:33: src/libavcodec/dxva2.h:52:0: note: this is the location of the previous definition #define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG AV_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG In file included from src/libavcodec/dxva2_internal.h:38:0, from src/libavcodec/dxva2.c:33: src/libavcodec/d3d11va.h:49:0: warning: "FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO" redefined #define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO2 ///< Work around for Direct3D11 and old Intel GPUs with ClearVideo interface In file included from src/libavcodec/dxva2_internal.h:34:0, from src/libavcodec/dxva2.c:33: src/libavcodec/dxva2.h:53:0: note: this is the location of the previous definition #define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO AV_DXVA2_WORKAROUND_INTEL_CLEARVIDEO In file included from src/libavcodec/dxva2.c:33:0: src/libavcodec/dxva2_internal.h:63:5: error: unknown type name ‘AVDXVA2DecodeContext’ AVDXVA2DecodeContext dxva2; ^~~~ In file included from src/libavcodec/dxva2.h:39:0, from src/libavcodec/dxva2_internal.h:34, from src/libavcodec/dxva2.c:33: src/libavcodec/dxva2.c: In function ‘dxva2_create_decoder’: src/libavcodec/dxva2.c:359:63: error: dereferencing pointer to incomplete type ‘AVDXVA2DeviceContext {aka struct dxva_context}’ hr = IDirect3DDeviceManager9_OpenDeviceHandle(device_hwctx->devmgr, ^ src/libavcodec/dxva2.c: In function ‘ff_dxva2_decode_init’: src/libavcodec/dxva2.c:707:9: error: unknown type name ‘AVDXVA2DecodeContext’; did you mean ‘AVDXVA2DeviceContext’? AVDXVA2DecodeContext *dxva_ctx = >ctx.dxva2; ^~~~ AVDXVA2DeviceContext src/libavcodec/dxva2.c:715:17: error: request for member ‘decoder’ in something not a structure or union dxva_ctx->decoder = sctx->dxva2_decoder; ^~ src/libavcodec/dxva2.c:716:17: error: request for member ‘cfg’ in something not a structure or union dxva_ctx->cfg = >dxva2_config; ^~ src/libavcodec/dxva2.c:717:17: error: request for member ‘surface’ in something not a structure or union dxva_ctx->surface = frames_hwctx->surfaces; ^~ src/libavcodec/dxva2.c:718:17: error: request for member ‘surface_count’ in something not a structure or union dxva_ctx->surface_count = frames_hwctx->nb_surfaces; ^~ src/libavcodec/dxva2.c:719:17: error: request for member ‘workaround’ in something not a structure or union dxva_ctx->workaround= sctx->workaround; ^~ In file included from src/libavcodec/dxva2.c:33:0: src/libavcodec/dxva2.c: In function ‘ff_dxva2_get_surface_index’: src/libavcodec/dxva2_internal.h:106:116: error: request for member ‘surface_count’ in something not a structure or union #define DXVA_CONTEXT_COUNT(avctx, ctx) (ff_dxva2_is_d3d11(avctx) ? ctx->d3d11va.surface_count : ctx->dxva2.surface_count) ^ src/libavcodec/dxva2.c:787:21: note: in expansion of macro ‘DXVA_CONTEXT_COUNT’ for (i = 0; i < DXVA_CONTEXT_COUNT(avctx, ctx); i++) { ^ src/libavcodec/dxva2.c:788:65: error: request for member ‘surface’ in something not a structure or union if (avctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD && ctx->dxva2.surface[i] == surface)
Re: [FFmpeg-devel] [PATCH 2/2] lavc/dxva: properly namespace public symbols
On Thu, Feb 17, 2022 at 10:13 AM Anton Khirnov wrote: > > --- > doc/APIchanges | 6 ++ > libavcodec/dxva2.c | 4 ++-- > libavcodec/dxva2.h | 18 ++ > libavcodec/dxva2_h264.c | 8 > libavcodec/dxva2_internal.h | 4 ++-- > libavcodec/version.h| 3 ++- > 6 files changed, 30 insertions(+), 13 deletions(-) > > diff --git a/doc/APIchanges b/doc/APIchanges > index ea402f6118..3447872752 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -14,6 +14,12 @@ libavutil: 2021-04-27 > > API changes, most recent first: > > +2022-02-xx - xx - lavc 59.22.100 - dxva2.h > + Rename struct dxva_context to (typedeffed) AVDXVA2DecodeContext. > + Rename FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG and > FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO > + to AV_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG and > AV_DXVA2_WORKAROUND_INTEL_CLEARVIDEO, > + respectively. The previous names are now deprecated. > + > 2022-02-07 - xx - lavu 57.21.100 - fifo.h >Deprecate AVFifoBuffer and the API around it, namely av_fifo_alloc(), >av_fifo_alloc_array(), av_fifo_free(), av_fifo_freep(), av_fifo_reset(), > diff --git a/libavcodec/dxva2.c b/libavcodec/dxva2.c > index c31a71ba3b..ab6995940b 100644 > --- a/libavcodec/dxva2.c > +++ b/libavcodec/dxva2.c > @@ -299,7 +299,7 @@ static int dxva_get_decoder_guid(AVCodecContext *avctx, > void *service, void *sur > } > > if (IsEqualGUID(decoder_guid, _DXVADDI_Intel_ModeH264_E)) > -sctx->workaround |= FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO; > +sctx->workaround |= AV_DXVA2_WORKAROUND_INTEL_CLEARVIDEO; > > return 0; > } > @@ -704,7 +704,7 @@ int ff_dxva2_decode_init(AVCodecContext *avctx) > #if CONFIG_DXVA2 > if (sctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD) { > AVDXVA2FramesContext *frames_hwctx = frames_ctx->hwctx; > -struct dxva_context *dxva_ctx = >ctx.dxva2; > +AVDXVA2DecodeContext *dxva_ctx = >ctx.dxva2; > > ff_dxva2_lock(avctx); > ret = dxva2_create_decoder(avctx); > diff --git a/libavcodec/dxva2.h b/libavcodec/dxva2.h > index 22c93992f2..7892da693c 100644 > --- a/libavcodec/dxva2.h > +++ b/libavcodec/dxva2.h > @@ -45,8 +45,13 @@ > * @{ > */ > > -#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for DXVA2 > and old UVD/UVD+ ATI video cards > -#define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO2 ///< Work around for DXVA2 > and old Intel GPUs with ClearVideo interface > +#define AV_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for DXVA2 > and old UVD/UVD+ ATI video cards > +#define AV_DXVA2_WORKAROUND_INTEL_CLEARVIDEO2 ///< Work around for DXVA2 > and old Intel GPUs with ClearVideo interface > + > +#if FF_API_DXVA_NAMING > +#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG > AV_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG > +#define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO > AV_DXVA2_WORKAROUND_INTEL_CLEARVIDEO > +#endif Why not rename the constants in d3d11va.h at the same time? they are the same afterall. This header likely needs to include version.h now to ensure the FF_API_ macros are available. > > /** > * This structure is used to provides the necessary configurations and data > @@ -54,7 +59,12 @@ > * > * The application must make it available as AVCodecContext.hwaccel_context. > */ > -struct dxva_context { > +typedef struct > +#if FF_API_DXVA_NAMING > +dxva_context > +#else > +AVDXVA2DecodeContext #endif missing here > +{ > /** > * DXVA2 decoder object > */ > @@ -84,7 +94,7 @@ struct dxva_context { > * Private to the FFmpeg AVHWAccel implementation > */ > unsigned report_id; > -}; > +} AVDXVA2DecodeContext; > > /** > * @} > diff --git a/libavcodec/dxva2_h264.c b/libavcodec/dxva2_h264.c > index 489b9bb0f5..f4d6098e0e 100644 > --- a/libavcodec/dxva2_h264.c > +++ b/libavcodec/dxva2_h264.c > @@ -119,9 +119,9 @@ static void fill_picture_parameters(const AVCodecContext > *avctx, DXVAContext *ct > > pp->bit_depth_luma_minus8 = sps->bit_depth_luma - 8; > pp->bit_depth_chroma_minus8 = sps->bit_depth_chroma - 8; > -if (DXVA_CONTEXT_WORKAROUND(avctx, ctx) & > FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG) > +if (DXVA_CONTEXT_WORKAROUND(avctx, ctx) & > AV_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG) > pp->Reserved16Bits= 0; > -else if (DXVA_CONTEXT_WORKAROUND(avctx, ctx) & > FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO) > +else if (DXVA_CONTEXT_WORKAROUND(avctx, ctx) & > AV_DXVA2_WORKAROUND_INTEL_CLEARVIDEO) > pp->Reserved16Bits= 0x34c; > else > pp->Reserved16Bits= 3; /* FIXME is there a way to detect > the right mode ? */ > @@ -166,7 +166,7 @@ static void fill_scaling_lists(const AVCodecContext > *avctx, DXVAContext *ctx, co > const PPS *pps = h->ps.pps; > unsigned i, j; > memset(qm, 0, sizeof(*qm)); > -if (DXVA_CONTEXT_WORKAROUND(avctx, ctx) & >
[FFmpeg-devel] [PATCH 2/2] lavc/dxva: properly namespace public symbols
--- doc/APIchanges | 6 ++ libavcodec/dxva2.c | 4 ++-- libavcodec/dxva2.h | 18 ++ libavcodec/dxva2_h264.c | 8 libavcodec/dxva2_internal.h | 4 ++-- libavcodec/version.h| 3 ++- 6 files changed, 30 insertions(+), 13 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index ea402f6118..3447872752 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,12 @@ libavutil: 2021-04-27 API changes, most recent first: +2022-02-xx - xx - lavc 59.22.100 - dxva2.h + Rename struct dxva_context to (typedeffed) AVDXVA2DecodeContext. + Rename FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG and FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO + to AV_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG and AV_DXVA2_WORKAROUND_INTEL_CLEARVIDEO, + respectively. The previous names are now deprecated. + 2022-02-07 - xx - lavu 57.21.100 - fifo.h Deprecate AVFifoBuffer and the API around it, namely av_fifo_alloc(), av_fifo_alloc_array(), av_fifo_free(), av_fifo_freep(), av_fifo_reset(), diff --git a/libavcodec/dxva2.c b/libavcodec/dxva2.c index c31a71ba3b..ab6995940b 100644 --- a/libavcodec/dxva2.c +++ b/libavcodec/dxva2.c @@ -299,7 +299,7 @@ static int dxva_get_decoder_guid(AVCodecContext *avctx, void *service, void *sur } if (IsEqualGUID(decoder_guid, _DXVADDI_Intel_ModeH264_E)) -sctx->workaround |= FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO; +sctx->workaround |= AV_DXVA2_WORKAROUND_INTEL_CLEARVIDEO; return 0; } @@ -704,7 +704,7 @@ int ff_dxva2_decode_init(AVCodecContext *avctx) #if CONFIG_DXVA2 if (sctx->pix_fmt == AV_PIX_FMT_DXVA2_VLD) { AVDXVA2FramesContext *frames_hwctx = frames_ctx->hwctx; -struct dxva_context *dxva_ctx = >ctx.dxva2; +AVDXVA2DecodeContext *dxva_ctx = >ctx.dxva2; ff_dxva2_lock(avctx); ret = dxva2_create_decoder(avctx); diff --git a/libavcodec/dxva2.h b/libavcodec/dxva2.h index 22c93992f2..7892da693c 100644 --- a/libavcodec/dxva2.h +++ b/libavcodec/dxva2.h @@ -45,8 +45,13 @@ * @{ */ -#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for DXVA2 and old UVD/UVD+ ATI video cards -#define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO2 ///< Work around for DXVA2 and old Intel GPUs with ClearVideo interface +#define AV_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for DXVA2 and old UVD/UVD+ ATI video cards +#define AV_DXVA2_WORKAROUND_INTEL_CLEARVIDEO2 ///< Work around for DXVA2 and old Intel GPUs with ClearVideo interface + +#if FF_API_DXVA_NAMING +#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG AV_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG +#define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO AV_DXVA2_WORKAROUND_INTEL_CLEARVIDEO +#endif /** * This structure is used to provides the necessary configurations and data @@ -54,7 +59,12 @@ * * The application must make it available as AVCodecContext.hwaccel_context. */ -struct dxva_context { +typedef struct +#if FF_API_DXVA_NAMING +dxva_context +#else +AVDXVA2DecodeContext +{ /** * DXVA2 decoder object */ @@ -84,7 +94,7 @@ struct dxva_context { * Private to the FFmpeg AVHWAccel implementation */ unsigned report_id; -}; +} AVDXVA2DecodeContext; /** * @} diff --git a/libavcodec/dxva2_h264.c b/libavcodec/dxva2_h264.c index 489b9bb0f5..f4d6098e0e 100644 --- a/libavcodec/dxva2_h264.c +++ b/libavcodec/dxva2_h264.c @@ -119,9 +119,9 @@ static void fill_picture_parameters(const AVCodecContext *avctx, DXVAContext *ct pp->bit_depth_luma_minus8 = sps->bit_depth_luma - 8; pp->bit_depth_chroma_minus8 = sps->bit_depth_chroma - 8; -if (DXVA_CONTEXT_WORKAROUND(avctx, ctx) & FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG) +if (DXVA_CONTEXT_WORKAROUND(avctx, ctx) & AV_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG) pp->Reserved16Bits= 0; -else if (DXVA_CONTEXT_WORKAROUND(avctx, ctx) & FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO) +else if (DXVA_CONTEXT_WORKAROUND(avctx, ctx) & AV_DXVA2_WORKAROUND_INTEL_CLEARVIDEO) pp->Reserved16Bits= 0x34c; else pp->Reserved16Bits= 3; /* FIXME is there a way to detect the right mode ? */ @@ -166,7 +166,7 @@ static void fill_scaling_lists(const AVCodecContext *avctx, DXVAContext *ctx, co const PPS *pps = h->ps.pps; unsigned i, j; memset(qm, 0, sizeof(*qm)); -if (DXVA_CONTEXT_WORKAROUND(avctx, ctx) & FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG) { +if (DXVA_CONTEXT_WORKAROUND(avctx, ctx) & AV_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG) { for (i = 0; i < 6; i++) for (j = 0; j < 16; j++) qm->bScalingLists4x4[i][j] = pps->scaling_matrix4[i][j]; @@ -249,7 +249,7 @@ static void fill_slice_long(AVCodecContext *avctx, DXVA_Slice_H264_Long *slice, const H264Picture *r = sl->ref_list[list][i].parent; unsigned plane;