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: | |||
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 | |||
Add FFABS64U() | |||
@@ -27,39 +27,11 @@ | |||
#include "libavutil/ffversion.h" | |||
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[] = { | |||
{ "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 } | |||
}; | |||
#undef E | |||
#undef D | |||
#undef A | |||
#undef V | |||
#undef OFFSET | |||
#endif | |||
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); | |||
} | |||
#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) | |||
{ | |||
@@ -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. | |||
@@ -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 */ |
@@ -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; | |||
/** | |||
* @} | |||