From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 9A1924B229 for ; Thu, 1 Aug 2024 01:48:30 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 22CA768D7D1; Thu, 1 Aug 2024 04:48:28 +0300 (EEST) Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03olkn2078.outbound.protection.outlook.com [40.92.58.78]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2D2E968D26C for ; Thu, 1 Aug 2024 04:48:21 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BXaq0VqkEfzn1DNLxGGTSXd19/SJpaViSQ52w1eQHbQwKnqmd5lzOUsZhNj6vSKVQgEfJiUAl8edRaKNpiA6pZGUcSyxMZRRVGNIMPNW7MEvHo9eTLU2uQfmM0i54Qxw/UdjBy5J+AOuZiO/MD85xDAxWudlYmHxwQ/cQW5gUHFs/FKuUw9od1orRxoq26wChnr3reldbQUBA54cnrde7jwcaPqMB7vk54JV0H2Y5wWtvrX2nZhMhiLQndhbnNYsvdURF1XYyDX/KlgRK8OQUJfXYLNPAghhEmh6wr+alZFBwkzP8PLqVTJVTJt6zxyZpAmaXas+lCAHlRzHAyyMCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=zRr910Vm2NoW3zBsUwPeCrMjdoWaZsqprP2HFA+l898=; b=j6e1A9CXuQQi+xhwRsNq8kwVFqT4sjZkYf6Jv+vuTMBKXmza8SEvEpPTOG4qG8wsWc+vcGPNn2hAAMlfmIGy3lQj1rn68DAwgkDi4ezXtU6E2UN1w7p37iJ2KIdNwwM3J6Hpt4qFwxzclTLESNogiCZbtVD/QzRGjAQ+X315Zbd4HQb6FhNZHuc5E1wJBiBy/Dmocfp/oHaQWxg+q1hmfzk+QFa9T4s4unaxEBJnZIVR/qOI8rBxJUfpf6zwEqWjLmwBNZJQTbJagoqPl85p26AFSk1HMseJCJBad8IBM61p3BsVKmAWcKSuO1NLEybh3jNU5zmOEHkxk8yK1Em+nw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zRr910Vm2NoW3zBsUwPeCrMjdoWaZsqprP2HFA+l898=; b=PJjeSAqAoaWTbV5WbyMip7HnhqjqkWBT1cbQUj5hCnk0a4qlbTwQ8XNM68UxEdV8sUGyGxK6ib0jnDnO8ATg5tkBMtSniPowjxe0evW/ozS1Teo3N0x+aemB8Bsh6nRv4MkiFgA/DzP5h26WG47SpXH+2Y/IjSdiFZ/oVC8mirJcx7LeEis2Mj/ePtU3oEyiwW6FonmZo/IszBq82BOUosUPJEZNN1jInmS8SFk8sIKRgUDEDLkvWI6n2qxW8W4x5AxLDz0iPE/njxFgrxJNlgSEJv5PT3iMxe9o8DjNdOrF4MrGMnIJ0G6FvlN/3vv/56sEEbDHTh47wuZeZ9MbBQ== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by PR3P250MB0132.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:177::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7807.28; Thu, 1 Aug 2024 01:48:19 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::384d:40d4:ecb7:1c9]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::384d:40d4:ecb7:1c9%3]) with mapi id 15.20.7828.016; Thu, 1 Aug 2024 01:48:19 +0000 Message-ID: Date: Thu, 1 Aug 2024 03:48:17 +0200 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20240408125950.53472-1-ffmpeg@haasn.xyz> <20240408125950.53472-3-ffmpeg@haasn.xyz> Content-Language: en-US From: Andreas Rheinhardt In-Reply-To: <20240408125950.53472-3-ffmpeg@haasn.xyz> X-TMN: [YaaYjZ0QeptyyGxg/HtWaO/ORbvQ+DaD] X-ClientProxiedBy: ZR2P278CA0027.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:46::19) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <3a1b5aa1-8922-4a18-926f-c0111aa8f029@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|PR3P250MB0132:EE_ X-MS-Office365-Filtering-Correlation-Id: 21aeb207-3a55-4754-2f8b-08dcb1cc04a2 X-Microsoft-Antispam: BCL:0; ARA:14566002|19110799003|5072599009|8060799006|461199028|440099028|3412199025; X-Microsoft-Antispam-Message-Info: jdwoFUIqwUMVCiRvg6NDV4jXXdpfifzO5QxYZxsokgLwh7obZqET/39009BVkqQpZcj08iSdtbtr/ac7XBfEcZCpUxfwC3fHGAoHZAaZ3CwmY7Lq2btmLmjYsNvJqhLRr7zJBkLb+x5Ms6z4ot5v3yjT8WB0ZJn75dDhzTYJMlfnfX67BiUAd6WxaWqobu4K9VuXTGpuWilrokqyiNFPffM6B8xVizDN4/xiVCTynEdlE6slExsZu5IdgtApNTVwA21oa71qgFeeoUnGI5ozIxOZd1NazRCOgN+iMgwO9wTY6s5TifZx0iiJ13m9ZXiG1nGTUtU1feR8D13iwNc/T+RSbmkukFEarAiUl5TU0dMVLh9hIqEZYy+T+NBfK35apXGs8W2MUX3aOwfIHooQz1kxbhAcFdJfJqvuTMQz7Ijfts+BcuwPDEee0h5BSoSYY3MDNStf1vFoA2yUB1U96auGhf1O1dmMnYc18kLRqrxKVqDk8KhSMMVbjVERwudtm+u/KSkv3rKNpoq3YtjhIec2H+0OdbirEqtOoQlitNse5IMFZOHD0nIe2IuEsCbsf5r9LJS4fxEPQYz/u0O/a3teDOHXjccnbBFU+GgTKaUbVwTPM4gSoDCy5lg++1TiaPZW9OCLOpU4p4iSTYdT9JP2cR+2oa7I4kYAb1XbQO/S9t0uldrXUl9tqV5h08DG X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Z05BV0VwTDZCM2dlNDBaVW1tclFubzcrOWt2YVdGUUJCNjV4TkFEQVZ2NS85?= =?utf-8?B?WHYrWDR6UHM3YXVOR1hNNzBSRnpWREljRnI3MVZENkk4a3NyN1J0Mzlzcnlw?= =?utf-8?B?UkhtSUpYUlpWSTdGaVBKamcvZDVGd3VkeHRINFVFQlgvT1lVbTdlWTYzS3FX?= =?utf-8?B?TktOSnhZcUtjbm1PaHNoVXdob3ZCeVdpSU9YL1dwWXlLVUtzeFBDV3pJZzVl?= =?utf-8?B?MzVYZjBPZ1ZrbUhVUjFMay9HR2JqS0hZcHVocDh3TmhBUVhUR0tzWFNiTzVy?= =?utf-8?B?OVZRSk94aXUwUFhMQS9HVER0UkoreHhJeGRETWxUVFowTEhiM01rZmlzT3hX?= =?utf-8?B?OUJmekRCazZnS3ZXNmxWeUt3TUZWdm9hUldoTkhLSDJiZDVCa3BaUmZ2UjJh?= =?utf-8?B?dVZ5cEVxNUhoakRFYnpyQjVlQ3pyQjdXaGpJdHk2N3ErNDhTdWlmWlZvOFht?= =?utf-8?B?cEx3V3MzaFd5Ujg1K0phajY1cHlzNjJmZVg1c29BOVNqVU44WFNUUk1FSjhH?= =?utf-8?B?aXBjZGRzVDkrQ0VDUENBSjBXT1dsTnhTN3RRNmVVQmtCQXFucW9XQVZHNVBt?= =?utf-8?B?QU9FdkJ2SVZ4U1ZGYkdpcWhNd2txc1RVakZkbzZuS25NbDFJdXErYTJ1QU9M?= =?utf-8?B?UVoybUVMY1pjMEZUN0dVTHMvcktjVEdybzhIcTU3NjFoeWhOaGlZUlNiUGxS?= =?utf-8?B?ZVViUmdFeW5wNWJvMUlybjJwR054NTdUQ1JsS3ZIYS9MSjhOV0RoUWF4MUhU?= =?utf-8?B?SU42RlVIVzdxeEovQ0RoSjNMaDIxb1RlMTd2NmlkZnZRK0FLM2pvMitjRWFT?= =?utf-8?B?MDJodStRc0xscGc3N0h0WTRhdVcwSFIrNHlOZkdRcWUwbHVxM0tzQTRqM1Bm?= =?utf-8?B?L1lTREJ6U2x2VVZ3MVFYN0gva2pnN2VrYk5TY2xNamE1WjZtU0g4c0owdnkw?= =?utf-8?B?RzhZR2NDVHhlQUtpQkNoTFYvTjhDU2ZRVXFUYlI0Q1JNQmxtWTJsdVVqc2N6?= =?utf-8?B?TDh5ME9DV0ZCaXh2eUF4QmdnbDNFKzlzZkZZSnEwT0cyN2UyY2pyVlNnbHJt?= =?utf-8?B?Um5acC81Y3F6bkczZXBWY29jaXlKMmFITG9za3duUCtEZ0lubEVpUWJMZkF4?= =?utf-8?B?RUZ5L1loNmxhMWJ6clF4UTArQUd0YTd3Mk95Q0RSalkwazBHbnltYnFzaHFB?= =?utf-8?B?dnJYYUF6SHFHNVVnRHBwRjVxQlI4VXZtNHZQekdWUzBwakI2V0g1TGh6RmVh?= =?utf-8?B?NitERVBlRWcyZUlkRGtha2dXdXpXT0MxVkczS3VRbzFONzVIaWJQTERkUWFT?= =?utf-8?B?Wis0dEdJVlBENGRERk1Xc3FWcTBYSGFrTHliVGl5aUhxN0RwVlFscnM4Rmg2?= =?utf-8?B?US9LdlhQWkZxTDljRldnanZDL2V0OUJzc0VOOWd4N1V4L29qUW9UbVgydzZi?= =?utf-8?B?dmxrbkh3MWVGMm5FakxVSWNsaVdEa3R3a3E1SUpQN2dDamlEOFhSdS93c3Z5?= =?utf-8?B?Wm5YdEJiaDd0NGkvc3F6TldtbVBEdDVCVmgrVCtBbE9IZytBVEtyL091Yktq?= =?utf-8?B?cmY1YnVCb1UwZVlFenlXalo3eU1ZWGVJR1ljOW1xL3haWmNiTExIWmhjamZU?= =?utf-8?B?MGs4QUsvT1FZd1BBRHQzNE9pS01Ic3QvT21YcUJ0ekJYUnBPZit5YXVCVjhp?= =?utf-8?B?dkFRczhtbGhFanpOWG1Ka1NFVXVvV1ZmOW1qVExXMmZCZW1qc0tSVjRRPT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 21aeb207-3a55-4754-2f8b-08dcb1cc04a2 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Aug 2024 01:48:19.1601 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3P250MB0132 Subject: Re: [FFmpeg-devel] [PATCH v2 02/17] avcodec: add avcodec_get_supported_config() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Niklas Haas: > From: Niklas Haas > > This replaces the myriad of existing lists in AVCodec by a unified API > call, allowing us to (ultimately) trim down the sizeof(AVCodec) quite > substantially, while also making this more trivially extensible. > > In addition to the already covered lists, add two new entries for color > space and color range, mirroring the newly added negotiable fields in > libavfilter. > > I decided to drop the explicit length field from the API proposed by > Andreas Rheinhardt, because having it in place ended up complicating > both the codec side and the client side implementations, while also > being strictly less flexible (it's trivial to recover a length given > a terminator, but requires allocation to add a terminator given > a length). Using a terminator also presents less of a porting challenge > for existing users of the current API. > > Once the deprecation period passes for the existing public fields, the > rough plan is to move the commonly used fields (such as > pix_fmt/sample_fmt) into FFCodec, possibly as a union of audio and video > configuration types, and then implement the rarely used fields with > custom callbacks. > --- > doc/APIchanges | 5 +++ > libavcodec/avcodec.c | 75 +++++++++++++++++++++++++++++++++++++ > libavcodec/avcodec.h | 27 +++++++++++++ > libavcodec/codec.h | 19 ++++++++-- > libavcodec/codec_internal.h | 24 ++++++++++++ > libavcodec/version.h | 4 +- > 6 files changed, 148 insertions(+), 6 deletions(-) > > diff --git a/doc/APIchanges b/doc/APIchanges > index 0a39b6d7ab8..fdeae67159d 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -2,6 +2,11 @@ The last version increases of all libraries were on 2024-03-07 > > API changes, most recent first: > > +2024-04-xx - xxxxxxxxxx - lavc 59.6.100 - avcodec.h > + Add avcodec_get_supported_config() and enum AVCodecConfig; deprecate > + AVCodec.pix_fmts, AVCodec.sample_fmts, AVCodec.supported_framerates, > + AVCodec.supported_samplerates and AVCodec.ch_layouts. > + > 2024-04-03 - xxxxxxxxxx - lavu 59.13.100 - pixfmt.h > Add AVCOL_SPC_IPT_C2, AVCOL_SPC_YCGCO_RE and AVCOL_SPC_YCGCO_RO > to map new matrix coefficients defined by H.273 v3. > diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c > index 525fe516bd2..96728546d6c 100644 > --- a/libavcodec/avcodec.c > +++ b/libavcodec/avcodec.c > @@ -700,3 +700,78 @@ int attribute_align_arg avcodec_receive_frame(AVCodecContext *avctx, AVFrame *fr > return ff_decode_receive_frame(avctx, frame); > return ff_encode_receive_frame(avctx, frame); > } > + > +#define WRAP_CONFIG(allowed_type, field) \ > + do { \ > + if (codec->type != (allowed_type)) \ > + return AVERROR(EINVAL); \ > + *out_configs = (field); \ > + return 0; \ > + } while (0) > + > +static const enum AVColorRange color_range_jpeg[] = { > + AVCOL_RANGE_JPEG, AVCOL_RANGE_UNSPECIFIED > +}; > + > +static const enum AVColorRange color_range_mpeg[] = { > + AVCOL_RANGE_MPEG, AVCOL_RANGE_UNSPECIFIED > +}; > + > +static const enum AVColorRange color_range_all[] = { > + AVCOL_RANGE_MPEG, AVCOL_RANGE_JPEG, AVCOL_RANGE_UNSPECIFIED > +}; > + > +static const enum AVColorRange *color_range_table[] = { > + [AVCOL_RANGE_MPEG] = color_range_mpeg, > + [AVCOL_RANGE_JPEG] = color_range_jpeg, > + [AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG] = color_range_all, > +}; > + > +int ff_default_get_supported_config(const AVCodecContext *avctx, > + const AVCodec *codec, > + enum AVCodecConfig config, > + unsigned flags, > + const void **out_configs) > +{ > + switch (config) { > +FF_DISABLE_DEPRECATION_WARNINGS > + case AV_CODEC_CONFIG_PIX_FORMAT: > + WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, codec->pix_fmts); > + case AV_CODEC_CONFIG_FRAME_RATE: > + WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, codec->supported_framerates); > + case AV_CODEC_CONFIG_SAMPLE_RATE: > + WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->supported_samplerates); > + case AV_CODEC_CONFIG_SAMPLE_FORMAT: > + WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->sample_fmts); > + case AV_CODEC_CONFIG_CHANNEL_LAYOUT: > + WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->ch_layouts); > +FF_ENABLE_DEPRECATION_WARNINGS > + > + case AV_CODEC_CONFIG_COLOR_RANGE: > + if (codec->type != AVMEDIA_TYPE_VIDEO) > + return AVERROR(EINVAL); > + *out_configs = color_range_table[ffcodec(codec)->color_ranges]; > + return 0; > + > + case AV_CODEC_CONFIG_COLOR_SPACE: > + *out_configs = NULL; > + return 0; > + default: > + return AVERROR(EINVAL); > + } > +} > + > +int avcodec_get_supported_config(const AVCodecContext *avctx, const AVCodec *codec, > + enum AVCodecConfig config, unsigned flags, > + const void **out) > +{ > + const FFCodec *codec2; > + if (!codec) > + codec = avctx->codec; > + codec2 = ffcodec(codec); > + if (codec2->get_supported_config) { > + return codec2->get_supported_config(avctx, codec, config, flags, out); > + } else { > + return ff_default_get_supported_config(avctx, codec, config, flags, out); > + } > +} > diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h > index 83dc487251c..64f31375fc6 100644 > --- a/libavcodec/avcodec.h > +++ b/libavcodec/avcodec.h > @@ -2690,6 +2690,33 @@ int avcodec_get_hw_frames_parameters(AVCodecContext *avctx, > enum AVPixelFormat hw_pix_fmt, > AVBufferRef **out_frames_ref); > > +enum AVCodecConfig { > + AV_CODEC_CONFIG_PIX_FORMAT, ///< AVPixelFormat, terminated by AV_PIX_FMT_NONE > + AV_CODEC_CONFIG_FRAME_RATE, ///< AVRational, terminated by {0, 0} > + AV_CODEC_CONFIG_SAMPLE_RATE, ///< int, terminated by 0 > + AV_CODEC_CONFIG_SAMPLE_FORMAT, ///< AVSampleFormat, terminated by AV_SAMPLE_FMT_NONE > + AV_CODEC_CONFIG_CHANNEL_LAYOUT, ///< AVChannelLayout, terminated by {0} > + AV_CODEC_CONFIG_COLOR_RANGE, ///< AVColorRange, terminated by AVCOL_RANGE_UNSPECIFIED > + AV_CODEC_CONFIG_COLOR_SPACE, ///< AVColorSpace, terminated by AVCOL_SPC_UNSPECIFIED > +}; > + > +/** > + * Retrieve a list of all supported values for a given configuration type. > + * > + * @param avctx An optional context to use. Values such as > + * `strict_std_compliance` may affect the result. If NULL, > + * default values are used. > + * @param codec The codec to query, or NULL to use avctx->codec. > + * @param config The configuration to query. > + * @param flags Currently unused; should be set to zero. > + * @param out_configs On success, set to a list of configurations, terminated > + * by a config-specific terminator, or NULL if all > + * possible values are supported. > + */ > +int avcodec_get_supported_config(const AVCodecContext *avctx, > + const AVCodec *codec, enum AVCodecConfig config, > + unsigned flags, const void **out_configs); 1. This approach constrains us in several ways, most notably it forces us to always have static lists for every possible combination. E.g. take a look at the wavpack encoder: It accepts certain native channel layouts or certain unspecified channel counts within a range (the encoder accepts up to 255, the format allows up to 4096). It makes no sense to have a static list of 4096 unspecified channel layouts. Getting rid of this requirement seems good, even if it causes allocations. 2. A length field is not "strictly less flexible", to the contrary: It allows to keep our options open. The length field should be optional and for the convenience of the user (meaning the list would still be terminated by a sentinel). But it would allow to e.g. add a flag in the future that says that *out_configs is already set to some array whose length is given by the length field which would allow to avoid the allocation that I just proposed in 1. (e.g. the number of sample formats is very small and can be put into a stack array; the number of pixel formats is also small and can be queried at runtime, so that an array of maximum size can be allocated once to query multiple codecs). > + > > > /** > diff --git a/libavcodec/codec.h b/libavcodec/codec.h > index 6f9b42760d7..f7541ffc42b 100644 > --- a/libavcodec/codec.h > +++ b/libavcodec/codec.h > @@ -205,10 +205,19 @@ typedef struct AVCodec { > */ > int capabilities; > uint8_t max_lowres; ///< maximum value for lowres supported by the decoder > - const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0} > - const enum AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 > - const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 > - const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 > + > + /** > + * Deprecated codec capabilities. > + */ > + attribute_deprecated > + const AVRational *supported_framerates; ///< @deprecated use avcodec_get_supported_config() > + attribute_deprecated > + const enum AVPixelFormat *pix_fmts; ///< @deprecated use avcodec_get_supported_config() > + attribute_deprecated > + const int *supported_samplerates; ///< @deprecated use avcodec_get_supported_config() > + attribute_deprecated > + const enum AVSampleFormat *sample_fmts; ///< @deprecated use avcodec_get_supported_config() > + > const AVClass *priv_class; ///< AVClass for the private context > const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {AV_PROFILE_UNKNOWN} > > @@ -226,7 +235,9 @@ typedef struct AVCodec { > > /** > * Array of supported channel layouts, terminated with a zeroed layout. > + * @deprecated use avcodec_get_supported_config() > */ > + attribute_deprecated > const AVChannelLayout *ch_layouts; > } AVCodec; > > diff --git a/libavcodec/codec_internal.h b/libavcodec/codec_internal.h > index 2134f184094..bac3e30ba2c 100644 > --- a/libavcodec/codec_internal.h > +++ b/libavcodec/codec_internal.h > @@ -22,6 +22,7 @@ > #include > > #include "libavutil/attributes.h" > +#include "avcodec.h" > #include "codec.h" > #include "config.h" > > @@ -270,8 +271,31 @@ typedef struct FFCodec { > * List of supported codec_tags, terminated by FF_CODEC_TAGS_END. > */ > const uint32_t *codec_tags; > + > + /** > + * Custom callback for avcodec_get_supported_config(). If absent, > + * ff_default_get_supported_config() will be used. > + */ > + int (*get_supported_config)(const AVCodecContext *avctx, > + const AVCodec *codec, > + enum AVCodecConfig config, > + unsigned flags, > + const void **out_configs); > } FFCodec; > > +/** > + * Default implementation for avcodec_get_supported_config(). Will return the > + * relevant fields from AVCodec if present, or NULL otherwise. > + * > + * For AVCODEC_CONFIG_COLOR_RANGE, the output will depend on the bitmask in > + * FFCodec.color_ranges, with a value of 0 returning NULL. > + */ > +int ff_default_get_supported_config(const AVCodecContext *avctx, > + const AVCodec *codec, > + enum AVCodecConfig config, > + unsigned flags, > + const void **out_configs); > + > #if CONFIG_SMALL > #define CODEC_LONG_NAME(str) .p.long_name = NULL > #else > diff --git a/libavcodec/version.h b/libavcodec/version.h > index 84a1c02ce4a..da54f878874 100644 > --- a/libavcodec/version.h > +++ b/libavcodec/version.h > @@ -29,8 +29,8 @@ > > #include "version_major.h" > > -#define LIBAVCODEC_VERSION_MINOR 5 > -#define LIBAVCODEC_VERSION_MICRO 101 > +#define LIBAVCODEC_VERSION_MINOR 6 > +#define LIBAVCODEC_VERSION_MICRO 100 > > #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ > LIBAVCODEC_VERSION_MINOR, \ _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".