Re: [FFmpeg-devel] [PATCH 2/2] lavc/dxva: properly namespace public symbols

2022-02-17 Thread Michael Niedermayer
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

2022-02-17 Thread Hendrik Leppkes
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

2022-02-17 Thread Anton Khirnov
---
 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;