diff mbox series

[FFmpeg-devel,2/2] avcodec/vdpau: Deprecate redundandt allocators and getter/setter

Message ID AS8P250MB07441A4FFB25CA5DCFD3FEFB8F222@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM
State New
Headers show
Series [FFmpeg-devel,1/2] avcodec/vdpau: Remove outdated comment | expand

Checks

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

Commit Message

Andreas Rheinhardt March 5, 2024, 4:32 p.m. UTC
The allocators have been superseded by av_vdpau_bind_context().
The latter have only been added "to allow multiple forks to add
fields to the structure without breaking ABI" [1], but libav
is no more, so this is not needed any longer.

[1]: https://ffmpeg.org/pipermail/ffmpeg-devel/2013-August/146954.html

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 doc/APIchanges             |  6 ++++++
 libavcodec/vdpau.c         |  6 ++++++
 libavcodec/vdpau.h         | 24 +++++++++++++++++++-----
 libavcodec/version_major.h |  1 +
 4 files changed, 32 insertions(+), 5 deletions(-)

Comments

Andreas Rheinhardt March 5, 2024, 4:34 p.m. UTC | #1
Andreas Rheinhardt:
> The allocators have been superseded by av_vdpau_bind_context().
> The latter have only been added "to allow multiple forks to add
> fields to the structure without breaking ABI" [1], but libav
> is no more, so this is not needed any longer.
> 
> [1]: https://ffmpeg.org/pipermail/ffmpeg-devel/2013-August/146954.html
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
> ---
>  doc/APIchanges             |  6 ++++++
>  libavcodec/vdpau.c         |  6 ++++++
>  libavcodec/vdpau.h         | 24 +++++++++++++++++++-----
>  libavcodec/version_major.h |  1 +
>  4 files changed, 32 insertions(+), 5 deletions(-)
> 
> diff --git a/doc/APIchanges b/doc/APIchanges
> index 523945e511..16098fce90 100644
> --- a/doc/APIchanges
> +++ b/doc/APIchanges
> @@ -2,6 +2,12 @@ The last version increases of all libraries were on 2023-02-09
>  
>  API changes, most recent first:
>  
> +2024-03-05 - xxxxxxxxxx - lavc 60.xx.100 - vdpau.h
> +  Deprecate av_vdpau_alloc_context(), av_alloc_vdpaucontext(),
> +  av_vdpau_hwaccel_get_render2() and av_vdpau_hwaccel_set_render2().
> +  The former are superseded by av_vdpau_bind_context(), the latter
> +  are unneeded as the relevant field is public and can be accessed directly.
> +
>  2024-03-05 - xxxxxxxxxx - lavf 60.24.100 - avformat.h
>    Add avformat_stream_group_name().
>  
> diff --git a/libavcodec/vdpau.c b/libavcodec/vdpau.c
> index c56ee1f44c..538c57f9e8 100644
> --- a/libavcodec/vdpau.c
> +++ b/libavcodec/vdpau.c
> @@ -64,15 +64,19 @@ static int vdpau_error(VdpStatus status)
>      }
>  }
>  
> +#if FF_API_VDPAU_ALLOC_GET_SET
>  AVVDPAUContext *av_alloc_vdpaucontext(void)
>  {
> +FF_DISABLE_DEPRECATION_WARNINGS
>      return av_vdpau_alloc_context();
> +FF_ENABLE_DEPRECATION_WARNINGS
>  }
>  
>  #define MAKE_ACCESSORS(str, name, type, field) \
>      type av_##name##_get_##field(const str *s) { return s->field; } \
>      void av_##name##_set_##field(str *s, type v) { s->field = v; }
>  MAKE_ACCESSORS(AVVDPAUContext, vdpau_hwaccel, AVVDPAU_Render2, render2)
> +#endif
>  
>  int av_vdpau_get_surface_parameters(AVCodecContext *avctx,
>                                      VdpChromaType *type,
> @@ -400,10 +404,12 @@ int ff_vdpau_add_buffer(struct vdpau_picture_context *pic_ctx,
>      return 0;
>  }
>  
> +#if FF_API_VDPAU_ALLOC_GET_SET
>  AVVDPAUContext *av_vdpau_alloc_context(void)
>  {
>      return av_mallocz(sizeof(VDPAUHWContext));
>  }
> +#endif
>  
>  int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device,
>                            VdpGetProcAddress *get_proc, unsigned flags)
> diff --git a/libavcodec/vdpau.h b/libavcodec/vdpau.h
> index 35c4b1096b..8021c25761 100644
> --- a/libavcodec/vdpau.h
> +++ b/libavcodec/vdpau.h
> @@ -66,16 +66,14 @@ typedef int (*AVVDPAU_Render2)(struct AVCodecContext *, struct AVFrame *,
>  /**
>   * This structure is used to share data between the libavcodec library and
>   * the client video application.
> - * The user shall allocate the structure via the av_alloc_vdpau_hwaccel
> - * function and make it available as
> - * AVCodecContext.hwaccel_context. Members can be set by the user once
> + * This structure will be allocated and stored in AVCodecContext.hwaccel_context
> + * by av_vdpau_bind_context(). Members can be set by the user once
>   * during initialization or through each AVCodecContext.get_buffer()
>   * function call. In any case, they must be valid prior to calling
>   * decoding functions.
>   *
>   * The size of this structure is not a part of the public ABI and must not
> - * be used outside of libavcodec. Use av_vdpau_alloc_context() to allocate an
> - * AVVDPAUContext.
> + * be used outside of libavcodec.
>   */
>  typedef struct AVVDPAUContext {
>      /**
> @@ -95,15 +93,27 @@ typedef struct AVVDPAUContext {
>      AVVDPAU_Render2 render2;
>  } AVVDPAUContext;
>  
> +#if FF_API_VDPAU_ALLOC_GET_SET
>  /**
>   * @brief allocation function for AVVDPAUContext
>   *
>   * Allows extending the struct without breaking API/ABI
> + * @deprecated use av_vdpau_bind_context() instead
>   */
> +attribute_deprecated
>  AVVDPAUContext *av_alloc_vdpaucontext(void);
>  
> +/**
> + * @deprecated render2 is public and can be accessed directly
> + */
> +attribute_deprecated
>  AVVDPAU_Render2 av_vdpau_hwaccel_get_render2(const AVVDPAUContext *);
> +/**
> + * @deprecated render2 is public and can be accessed directly
> + */
> +attribute_deprecated
>  void av_vdpau_hwaccel_set_render2(AVVDPAUContext *, AVVDPAU_Render2);
> +#endif
>  
>  /**
>   * Associate a VDPAU device with a codec context for hardware acceleration.
> @@ -145,12 +155,16 @@ int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device,
>  int av_vdpau_get_surface_parameters(AVCodecContext *avctx, VdpChromaType *type,
>                                      uint32_t *width, uint32_t *height);
>  
> +#if FF_API_VDPAU_ALLOC_GET_SET
>  /**
>   * Allocate an AVVDPAUContext.
>   *
>   * @return Newly-allocated AVVDPAUContext or NULL on failure.
> + * @deprecated use av_vdpau_bind_context() instead
>   */
> +attribute_deprecated
>  AVVDPAUContext *av_vdpau_alloc_context(void);
> +#endif
>  
>  /** @} */
>  
> diff --git a/libavcodec/version_major.h b/libavcodec/version_major.h
> index 161442df95..9e75303ed6 100644
> --- a/libavcodec/version_major.h
> +++ b/libavcodec/version_major.h
> @@ -54,6 +54,7 @@
>  #define FF_API_FF_PROFILE_LEVEL    (LIBAVCODEC_VERSION_MAJOR < 62)
>  #define FF_API_AVCODEC_CLOSE       (LIBAVCODEC_VERSION_MAJOR < 62)
>  #define FF_API_BUFFER_MIN_SIZE     (LIBAVCODEC_VERSION_MAJOR < 62)
> +#define FF_API_VDPAU_ALLOC_GET_SET (LIBAVCODEC_VERSION_MAJOR < 62)
>  
>  // reminder to remove CrystalHD decoders on next major bump
>  #define FF_CODEC_CRYSTAL_HD        (LIBAVCODEC_VERSION_MAJOR < 61)

Fixed the typo in the commit title locally.

- Andreas
diff mbox series

Patch

diff --git a/doc/APIchanges b/doc/APIchanges
index 523945e511..16098fce90 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -2,6 +2,12 @@  The last version increases of all libraries were on 2023-02-09
 
 API changes, most recent first:
 
+2024-03-05 - xxxxxxxxxx - lavc 60.xx.100 - vdpau.h
+  Deprecate av_vdpau_alloc_context(), av_alloc_vdpaucontext(),
+  av_vdpau_hwaccel_get_render2() and av_vdpau_hwaccel_set_render2().
+  The former are superseded by av_vdpau_bind_context(), the latter
+  are unneeded as the relevant field is public and can be accessed directly.
+
 2024-03-05 - xxxxxxxxxx - lavf 60.24.100 - avformat.h
   Add avformat_stream_group_name().
 
diff --git a/libavcodec/vdpau.c b/libavcodec/vdpau.c
index c56ee1f44c..538c57f9e8 100644
--- a/libavcodec/vdpau.c
+++ b/libavcodec/vdpau.c
@@ -64,15 +64,19 @@  static int vdpau_error(VdpStatus status)
     }
 }
 
+#if FF_API_VDPAU_ALLOC_GET_SET
 AVVDPAUContext *av_alloc_vdpaucontext(void)
 {
+FF_DISABLE_DEPRECATION_WARNINGS
     return av_vdpau_alloc_context();
+FF_ENABLE_DEPRECATION_WARNINGS
 }
 
 #define MAKE_ACCESSORS(str, name, type, field) \
     type av_##name##_get_##field(const str *s) { return s->field; } \
     void av_##name##_set_##field(str *s, type v) { s->field = v; }
 MAKE_ACCESSORS(AVVDPAUContext, vdpau_hwaccel, AVVDPAU_Render2, render2)
+#endif
 
 int av_vdpau_get_surface_parameters(AVCodecContext *avctx,
                                     VdpChromaType *type,
@@ -400,10 +404,12 @@  int ff_vdpau_add_buffer(struct vdpau_picture_context *pic_ctx,
     return 0;
 }
 
+#if FF_API_VDPAU_ALLOC_GET_SET
 AVVDPAUContext *av_vdpau_alloc_context(void)
 {
     return av_mallocz(sizeof(VDPAUHWContext));
 }
+#endif
 
 int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device,
                           VdpGetProcAddress *get_proc, unsigned flags)
diff --git a/libavcodec/vdpau.h b/libavcodec/vdpau.h
index 35c4b1096b..8021c25761 100644
--- a/libavcodec/vdpau.h
+++ b/libavcodec/vdpau.h
@@ -66,16 +66,14 @@  typedef int (*AVVDPAU_Render2)(struct AVCodecContext *, struct AVFrame *,
 /**
  * This structure is used to share data between the libavcodec library and
  * the client video application.
- * The user shall allocate the structure via the av_alloc_vdpau_hwaccel
- * function and make it available as
- * AVCodecContext.hwaccel_context. Members can be set by the user once
+ * This structure will be allocated and stored in AVCodecContext.hwaccel_context
+ * by av_vdpau_bind_context(). Members can be set by the user once
  * during initialization or through each AVCodecContext.get_buffer()
  * function call. In any case, they must be valid prior to calling
  * decoding functions.
  *
  * The size of this structure is not a part of the public ABI and must not
- * be used outside of libavcodec. Use av_vdpau_alloc_context() to allocate an
- * AVVDPAUContext.
+ * be used outside of libavcodec.
  */
 typedef struct AVVDPAUContext {
     /**
@@ -95,15 +93,27 @@  typedef struct AVVDPAUContext {
     AVVDPAU_Render2 render2;
 } AVVDPAUContext;
 
+#if FF_API_VDPAU_ALLOC_GET_SET
 /**
  * @brief allocation function for AVVDPAUContext
  *
  * Allows extending the struct without breaking API/ABI
+ * @deprecated use av_vdpau_bind_context() instead
  */
+attribute_deprecated
 AVVDPAUContext *av_alloc_vdpaucontext(void);
 
+/**
+ * @deprecated render2 is public and can be accessed directly
+ */
+attribute_deprecated
 AVVDPAU_Render2 av_vdpau_hwaccel_get_render2(const AVVDPAUContext *);
+/**
+ * @deprecated render2 is public and can be accessed directly
+ */
+attribute_deprecated
 void av_vdpau_hwaccel_set_render2(AVVDPAUContext *, AVVDPAU_Render2);
+#endif
 
 /**
  * Associate a VDPAU device with a codec context for hardware acceleration.
@@ -145,12 +155,16 @@  int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device,
 int av_vdpau_get_surface_parameters(AVCodecContext *avctx, VdpChromaType *type,
                                     uint32_t *width, uint32_t *height);
 
+#if FF_API_VDPAU_ALLOC_GET_SET
 /**
  * Allocate an AVVDPAUContext.
  *
  * @return Newly-allocated AVVDPAUContext or NULL on failure.
+ * @deprecated use av_vdpau_bind_context() instead
  */
+attribute_deprecated
 AVVDPAUContext *av_vdpau_alloc_context(void);
+#endif
 
 /** @} */
 
diff --git a/libavcodec/version_major.h b/libavcodec/version_major.h
index 161442df95..9e75303ed6 100644
--- a/libavcodec/version_major.h
+++ b/libavcodec/version_major.h
@@ -54,6 +54,7 @@ 
 #define FF_API_FF_PROFILE_LEVEL    (LIBAVCODEC_VERSION_MAJOR < 62)
 #define FF_API_AVCODEC_CLOSE       (LIBAVCODEC_VERSION_MAJOR < 62)
 #define FF_API_BUFFER_MIN_SIZE     (LIBAVCODEC_VERSION_MAJOR < 62)
+#define FF_API_VDPAU_ALLOC_GET_SET (LIBAVCODEC_VERSION_MAJOR < 62)
 
 // reminder to remove CrystalHD decoders on next major bump
 #define FF_CODEC_CRYSTAL_HD        (LIBAVCODEC_VERSION_MAJOR < 61)