From patchwork Sun Jan 24 20:16:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 25149 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 542F544BDC0 for ; Sun, 24 Jan 2021 22:16:34 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 27FEB680903; Sun, 24 Jan 2021 22:16:34 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F26FC6800BF for ; Sun, 24 Jan 2021 22:16:26 +0200 (EET) Received: by mail-wm1-f53.google.com with SMTP id c124so8814551wma.5 for ; Sun, 24 Jan 2021 12:16:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=aUMfrSw7S/m3TB8nyW2NmEonzJBAJMRhmphZzYBpqXU=; b=nGnqYKv20w0ZIPwXBuDotYRG9J1XL9gbSI+Sbxat5j4E7OhpkWTKtqmULhQ342tOB+ lo/2fAcW5PQQHJOAppkIp3iFlgExUb+wCN47wp2+kNlvP3rNkt545Q5G/JiHhHC9B1SS NI7ks+EVMj+UKI3FMFlA8GVfdKgqaDtsPxl35LYoJ+E4jdw2D6b3Xtqo9xLY7mK+acxo eWshiEbDE59hT3h2zu1L62b5aN2xKb6JKUNGCkApuyrWgWd2rVD9BZ7kGJR/TTY+yFef F4Ods3P7GIyTzYMBEqCY8Chgx5Mpb/5fh4b1JnpYHFe7nrXuVF78KjGtxkt+ZCkgZM7L 6lMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=aUMfrSw7S/m3TB8nyW2NmEonzJBAJMRhmphZzYBpqXU=; b=H/VpeSEp4bEO32dygaO3oIfnVUYnUq+lgKbM64PWSkQ11fPhiCXdNV1S6e59o3c+mT AlEBjwjWgrr3+F7LnlK1lRGoTln9CMbsTmz9cqCC3GunfHs/wsXPEvffW/TkXMfJfnC2 HgRiJ5wT6oz4RtzwSbs8zzfapebUggd2sa9t8q/J3jGEtjaVgDMyt6SyBIG6ajcpyErj XxFk1lLEmToImgNqKQz69C/hW7/ooss/o3vIYbsYQm9nzkGGdr6U7T+m7qOnDASBn/e/ 1+mUCTMJJXdDsSrxAPfrJ2V8IuXu7e/3dfyn1evXtgAAS1vPvrCUpVpXUGI3Oy6gWr+n 1elg== X-Gm-Message-State: AOAM531tEB914efECwFQ3ErwwvT4M6Qf+oFDlefi2IhYBxkxVIKVYeSn HBTig1Io7JxCLkmKMX8li75jjC/FmWg= X-Google-Smtp-Source: ABdhPJxrzY19SyowGLb1LmgmLnjHX4rIkbMxzXLhT+fvtkgckpjGgmZgnT9KQZo9/CsqCdsjh3LQDQ== X-Received: by 2002:a1c:5456:: with SMTP id p22mr3082056wmi.81.1611519385999; Sun, 24 Jan 2021 12:16:25 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id g12sm19210751wmh.14.2021.01.24.12.16.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 12:16:25 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 24 Jan 2021 21:16:19 +0100 Message-Id: <20210124201619.1307560-1-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avdevice/avdevice: Deprecate AVDevice Capabilities API X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" 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 Signed-off-by: Andreas Rheinhardt --- 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; /** * @}