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; given that the documentation explicitly states that av_device_capabilities is not to be used by a user, it's options can already be removed (save for the sentinel). Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>tags/n4.4
@@ -15,6 +15,10 @@ libavutil: 2017-10-21 | |||||
API changes, most recent first: | API changes, most recent first: | ||||
2021-02-14 - xxxxxxxxxx - lavd 58.12.100 - avdevice.h | |||||
Deprecated avdevice_capabilities_create() and | |||||
avdevice_capabilities_free(). | |||||
2021-02-xx - xxxxxxxxxx - lavu 56.xx.100 - common.h | 2021-02-xx - xxxxxxxxxx - lavu 56.xx.100 - common.h | ||||
Add FFABS64U() | Add FFABS64U() | ||||
@@ -27,39 +27,11 @@ | |||||
#include "libavutil/ffversion.h" | #include "libavutil/ffversion.h" | ||||
const char av_device_ffversion[] = "FFmpeg version " FFMPEG_VERSION; | const char av_device_ffversion[] = "FFmpeg version " FFMPEG_VERSION; | ||||
#define E AV_OPT_FLAG_ENCODING_PARAM | |||||
#define D AV_OPT_FLAG_DECODING_PARAM | |||||
#define A AV_OPT_FLAG_AUDIO_PARAM | |||||
#define V AV_OPT_FLAG_VIDEO_PARAM | |||||
#define OFFSET(x) offsetof(AVDeviceCapabilitiesQuery, x) | |||||
#if FF_API_DEVICE_CAPABILITIES | |||||
const AVOption av_device_capabilities[] = { | const AVOption av_device_capabilities[] = { | ||||
{ "codec", "codec", OFFSET(codec), AV_OPT_TYPE_INT, | |||||
{.i64 = AV_CODEC_ID_NONE}, AV_CODEC_ID_NONE, INT_MAX, E|D|A|V }, | |||||
{ "sample_format", "sample format", OFFSET(sample_format), AV_OPT_TYPE_SAMPLE_FMT, | |||||
{.i64 = AV_SAMPLE_FMT_NONE}, AV_SAMPLE_FMT_NONE, INT_MAX, E|D|A }, | |||||
{ "sample_rate", "sample rate", OFFSET(sample_rate), AV_OPT_TYPE_INT, | |||||
{.i64 = -1}, -1, INT_MAX, E|D|A }, | |||||
{ "channels", "channels", OFFSET(channels), AV_OPT_TYPE_INT, | |||||
{.i64 = -1}, -1, INT_MAX, E|D|A }, | |||||
{ "channel_layout", "channel layout", OFFSET(channel_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, | |||||
{.i64 = -1}, -1, INT_MAX, E|D|A }, | |||||
{ "pixel_format", "pixel format", OFFSET(pixel_format), AV_OPT_TYPE_PIXEL_FMT, | |||||
{.i64 = AV_PIX_FMT_NONE}, AV_PIX_FMT_NONE, INT_MAX, E|D|V }, | |||||
{ "window_size", "window size", OFFSET(window_width), AV_OPT_TYPE_IMAGE_SIZE, | |||||
{.str = NULL}, -1, INT_MAX, E|D|V }, | |||||
{ "frame_size", "frame size", OFFSET(frame_width), AV_OPT_TYPE_IMAGE_SIZE, | |||||
{.str = NULL}, -1, INT_MAX, E|D|V }, | |||||
{ "fps", "fps", OFFSET(fps), AV_OPT_TYPE_RATIONAL, | |||||
{.dbl = -1}, -1, INT_MAX, E|D|V }, | |||||
{ NULL } | { NULL } | ||||
}; | }; | ||||
#undef E | |||||
#undef D | |||||
#undef A | |||||
#undef V | |||||
#undef OFFSET | |||||
#endif | |||||
unsigned avdevice_version(void) | unsigned avdevice_version(void) | ||||
{ | { | ||||
@@ -94,49 +66,18 @@ int avdevice_dev_to_app_control_message(struct AVFormatContext *s, enum AVDevToA | |||||
return s->control_message_cb(s, type, data, data_size); | return s->control_message_cb(s, type, data, data_size); | ||||
} | } | ||||
#if FF_API_DEVICE_CAPABILITIES | |||||
int avdevice_capabilities_create(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s, | int avdevice_capabilities_create(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s, | ||||
AVDictionary **device_options) | 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) | 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) | int avdevice_list_devices(AVFormatContext *s, AVDeviceInfoList **device_list) | ||||
{ | { | ||||
@@ -321,6 +321,7 @@ int avdevice_dev_to_app_control_message(struct AVFormatContext *s, | |||||
enum AVDevToAppMessageType type, | enum AVDevToAppMessageType type, | ||||
void *data, size_t data_size); | void *data, size_t data_size); | ||||
#if FF_API_DEVICE_CAPABILITIES | |||||
/** | /** | ||||
* Following API allows user to probe device capabilities (supported codecs, | * Following API allows user to probe device capabilities (supported codecs, | ||||
* pixel formats, sample formats, resolutions, channel counts, etc). | * 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. | * 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[]; | extern const AVOption av_device_capabilities[]; | ||||
/** | /** | ||||
@@ -435,6 +437,7 @@ extern const AVOption av_device_capabilities[]; | |||||
* | * | ||||
* @return >= 0 on success, negative otherwise. | * @return >= 0 on success, negative otherwise. | ||||
*/ | */ | ||||
attribute_deprecated | |||||
int avdevice_capabilities_create(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s, | int avdevice_capabilities_create(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s, | ||||
AVDictionary **device_options); | AVDictionary **device_options); | ||||
@@ -444,7 +447,9 @@ int avdevice_capabilities_create(AVDeviceCapabilitiesQuery **caps, AVFormatConte | |||||
* @param caps Device capabilities data to be freed. | * @param caps Device capabilities data to be freed. | ||||
* @param s Context of the device. | * @param s Context of the device. | ||||
*/ | */ | ||||
attribute_deprecated | |||||
void avdevice_capabilities_free(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s); | void avdevice_capabilities_free(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s); | ||||
#endif | |||||
/** | /** | ||||
* Structure describes basic parameters of the device. | * Structure describes basic parameters of the device. | ||||
@@ -28,8 +28,8 @@ | |||||
#include "libavutil/version.h" | #include "libavutil/version.h" | ||||
#define LIBAVDEVICE_VERSION_MAJOR 58 | #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, \ | #define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \ | ||||
LIBAVDEVICE_VERSION_MINOR, \ | LIBAVDEVICE_VERSION_MINOR, \ | ||||
@@ -46,5 +46,8 @@ | |||||
* dropped at a future version bump. The defines themselves are not part of | * 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. | * 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 */ | #endif /* AVDEVICE_VERSION_H */ |
@@ -590,6 +590,7 @@ typedef struct AVOutputFormat { | |||||
* @see avdevice_list_devices() for more details. | * @see avdevice_list_devices() for more details. | ||||
*/ | */ | ||||
int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list); | int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list); | ||||
#if LIBAVFORMAT_VERSION_MAJOR < 59 | |||||
/** | /** | ||||
* Initialize device capabilities submodule. | * Initialize device capabilities submodule. | ||||
* @see avdevice_capabilities_create() for more details. | * @see avdevice_capabilities_create() for more details. | ||||
@@ -600,6 +601,7 @@ typedef struct AVOutputFormat { | |||||
* @see avdevice_capabilities_free() for more details. | * @see avdevice_capabilities_free() for more details. | ||||
*/ | */ | ||||
int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); | int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); | ||||
#endif | |||||
enum AVCodecID data_codec; /**< default data codec */ | enum AVCodecID data_codec; /**< default data codec */ | ||||
/** | /** | ||||
* Initialize format. May allocate data here, and set any AVFormatContext or | * 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); | int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list); | ||||
#if LIBAVFORMAT_VERSION_MAJOR < 59 | |||||
/** | /** | ||||
* Initialize device capabilities submodule. | * Initialize device capabilities submodule. | ||||
* @see avdevice_capabilities_create() for more details. | * @see avdevice_capabilities_create() for more details. | ||||
@@ -780,6 +783,7 @@ typedef struct AVInputFormat { | |||||
* @see avdevice_capabilities_free() for more details. | * @see avdevice_capabilities_free() for more details. | ||||
*/ | */ | ||||
int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); | int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); | ||||
#endif | |||||
} AVInputFormat; | } AVInputFormat; | ||||
/** | /** | ||||
* @} | * @} | ||||