[FFmpeg-devel] [PATCH] avdevice/avdevice: Deprecate AVDevice Capabilities API
Andreas Rheinhardt
andreas.rheinhardt at gmail.com
Tue Feb 9 10:04:23 EET 2021
Andreas Rheinhardt:
> It has been added in 6db42a2b6b22e6f1928fafcf3faa67ed78201004,
> yet since then none of the necessary create/free_device_capabilities
> functions has been implemented, making this API completely useless.
>
> Because of this one can already simplify
> avdevice_capabilities_free/create and can already remove the function
> pointers at the next major bump.
>
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> ---
> doc/APIchanges | 4 ++++
> libavdevice/avdevice.c | 41 ++++++-----------------------------------
> libavdevice/avdevice.h | 5 +++++
> libavdevice/version.h | 7 +++++--
> libavformat/avformat.h | 4 ++++
> 5 files changed, 24 insertions(+), 37 deletions(-)
>
> diff --git a/doc/APIchanges b/doc/APIchanges
> index bbf56a5385..8eeb6ba70f 100644
> --- a/doc/APIchanges
> +++ b/doc/APIchanges
> @@ -15,6 +15,10 @@ libavutil: 2017-10-21
>
> API changes, most recent first:
>
> +2021-01-24 - xxxxxxxxxx - lavd 58.12.100 - avdevice.h
> + Deprecated avdevice_capabilities_create() and
> + Add avdevice_capabilities_free(). They
> +
> 2021-01-11 - xxxxxxxxxx - lavc 58.116.100 - avcodec.h
> Add FF_PROFILE_VVC_MAIN_10 and FF_PROFILE_VVC_MAIN_10_444.
>
> diff --git a/libavdevice/avdevice.c b/libavdevice/avdevice.c
> index ec84d3b990..fbcf4a4ab2 100644
> --- a/libavdevice/avdevice.c
> +++ b/libavdevice/avdevice.c
> @@ -27,6 +27,7 @@
> #include "libavutil/ffversion.h"
> const char av_device_ffversion[] = "FFmpeg version " FFMPEG_VERSION;
>
> +#if FF_API_DEVICE_CAPABILITIES
> #define E AV_OPT_FLAG_ENCODING_PARAM
> #define D AV_OPT_FLAG_DECODING_PARAM
> #define A AV_OPT_FLAG_AUDIO_PARAM
> @@ -60,6 +61,7 @@ const AVOption av_device_capabilities[] = {
> #undef A
> #undef V
> #undef OFFSET
> +#endif
>
> unsigned avdevice_version(void)
> {
> @@ -94,49 +96,18 @@ int avdevice_dev_to_app_control_message(struct AVFormatContext *s, enum AVDevToA
> return s->control_message_cb(s, type, data, data_size);
> }
>
> +#if FF_API_DEVICE_CAPABILITIES
> int avdevice_capabilities_create(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s,
> AVDictionary **device_options)
> {
> - int ret;
> - av_assert0(s && caps);
> - av_assert0(s->iformat || s->oformat);
> - if ((s->oformat && !s->oformat->create_device_capabilities) ||
> - (s->iformat && !s->iformat->create_device_capabilities))
> - return AVERROR(ENOSYS);
> - *caps = av_mallocz(sizeof(**caps));
> - if (!(*caps))
> - return AVERROR(ENOMEM);
> - (*caps)->device_context = s;
> - if (((ret = av_opt_set_dict(s->priv_data, device_options)) < 0))
> - goto fail;
> - if (s->iformat) {
> - if ((ret = s->iformat->create_device_capabilities(s, *caps)) < 0)
> - goto fail;
> - } else {
> - if ((ret = s->oformat->create_device_capabilities(s, *caps)) < 0)
> - goto fail;
> - }
> - av_opt_set_defaults(*caps);
> - return 0;
> - fail:
> - av_freep(caps);
> - return ret;
> + return AVERROR(ENOSYS);
> }
>
> void avdevice_capabilities_free(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s)
> {
> - if (!s || !caps || !(*caps))
> - return;
> - av_assert0(s->iformat || s->oformat);
> - if (s->iformat) {
> - if (s->iformat->free_device_capabilities)
> - s->iformat->free_device_capabilities(s, *caps);
> - } else {
> - if (s->oformat->free_device_capabilities)
> - s->oformat->free_device_capabilities(s, *caps);
> - }
> - av_freep(caps);
> + return;
> }
> +#endif
>
> int avdevice_list_devices(AVFormatContext *s, AVDeviceInfoList **device_list)
> {
> diff --git a/libavdevice/avdevice.h b/libavdevice/avdevice.h
> index ee9462480e..85a4dcc6df 100644
> --- a/libavdevice/avdevice.h
> +++ b/libavdevice/avdevice.h
> @@ -321,6 +321,7 @@ int avdevice_dev_to_app_control_message(struct AVFormatContext *s,
> enum AVDevToAppMessageType type,
> void *data, size_t data_size);
>
> +#if FF_API_DEVICE_CAPABILITIES
> /**
> * Following API allows user to probe device capabilities (supported codecs,
> * pixel formats, sample formats, resolutions, channel counts, etc).
> @@ -416,6 +417,7 @@ typedef struct AVDeviceCapabilitiesQuery {
> /**
> * AVOption table used by devices to implement device capabilities API. Should not be used by a user.
> */
> +attribute_deprecated
> extern const AVOption av_device_capabilities[];
>
> /**
> @@ -435,6 +437,7 @@ extern const AVOption av_device_capabilities[];
> *
> * @return >= 0 on success, negative otherwise.
> */
> +attribute_deprecated
> int avdevice_capabilities_create(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s,
> AVDictionary **device_options);
>
> @@ -444,7 +447,9 @@ int avdevice_capabilities_create(AVDeviceCapabilitiesQuery **caps, AVFormatConte
> * @param caps Device capabilities data to be freed.
> * @param s Context of the device.
> */
> +attribute_deprecated
> void avdevice_capabilities_free(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s);
> +#endif
>
> /**
> * Structure describes basic parameters of the device.
> diff --git a/libavdevice/version.h b/libavdevice/version.h
> index 7022fdbf2a..f5aaa168af 100644
> --- a/libavdevice/version.h
> +++ b/libavdevice/version.h
> @@ -28,8 +28,8 @@
> #include "libavutil/version.h"
>
> #define LIBAVDEVICE_VERSION_MAJOR 58
> -#define LIBAVDEVICE_VERSION_MINOR 11
> -#define LIBAVDEVICE_VERSION_MICRO 103
> +#define LIBAVDEVICE_VERSION_MINOR 12
> +#define LIBAVDEVICE_VERSION_MICRO 100
>
> #define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \
> LIBAVDEVICE_VERSION_MINOR, \
> @@ -46,5 +46,8 @@
> * dropped at a future version bump. The defines themselves are not part of
> * the public API and may change, break or disappear at any time.
> */
> +#ifndef FF_API_DEVICE_CAPABILITIES
> +#define FF_API_DEVICE_CAPABILITIES (LIBAVDEVICE_VERSION_MAJOR < 60)
> +#endif
>
> #endif /* AVDEVICE_VERSION_H */
> diff --git a/libavformat/avformat.h b/libavformat/avformat.h
> index 523cf34d55..41482328f6 100644
> --- a/libavformat/avformat.h
> +++ b/libavformat/avformat.h
> @@ -590,6 +590,7 @@ typedef struct AVOutputFormat {
> * @see avdevice_list_devices() for more details.
> */
> int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list);
> +#if LIBAVFORMAT_VERSION_MAJOR < 59
> /**
> * Initialize device capabilities submodule.
> * @see avdevice_capabilities_create() for more details.
> @@ -600,6 +601,7 @@ typedef struct AVOutputFormat {
> * @see avdevice_capabilities_free() for more details.
> */
> int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps);
> +#endif
> enum AVCodecID data_codec; /**< default data codec */
> /**
> * Initialize format. May allocate data here, and set any AVFormatContext or
> @@ -769,6 +771,7 @@ typedef struct AVInputFormat {
> */
> int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list);
>
> +#if LIBAVFORMAT_VERSION_MAJOR < 59
> /**
> * Initialize device capabilities submodule.
> * @see avdevice_capabilities_create() for more details.
> @@ -780,6 +783,7 @@ typedef struct AVInputFormat {
> * @see avdevice_capabilities_free() for more details.
> */
> int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps);
> +#endif
> } AVInputFormat;
> /**
> * @}
>
Can I get an update on how to proceed with this patch?
- Andreas
PS: I could already remove all the av_device_capabilities options
(except the sentinel) at the next major bump, couldn't I?
More information about the ffmpeg-devel
mailing list