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.rheinha...@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? _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".