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 3EC7E49BBF for ; Mon, 4 Mar 2024 13:28:14 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D9FB668D43F; Mon, 4 Mar 2024 15:28:11 +0200 (EET) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01olkn2056.outbound.protection.outlook.com [40.92.65.56]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4F9B568D2DA for ; Mon, 4 Mar 2024 15:28:05 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DdDZ49/+GqAjQ0pwZQeVghlLROCtwy+WHv6Qm4TXMfJSiy+i2GUVpUetxuO+ab+OwXnQ84xmKUNhJMEbNyDwBmQyZQI7AH1oQm29OAxm0iuD4z0cbtuLKSxBeYTTnwPD9U2p0z7QCDi7V1dcmbm2Dhb3ZGR7XTgN7LmltfVLD5X9RjohCWov3htEJnCFsnhlDKh8bugKXnLfdWnQjleFEnCIuD3p1FWEtfyQUKJ+b2lhiHe5FiKAYdzKOUQie6Nsvk6ivPLPHheNVsyIHs689xguvOsNTIUo9K0deDc0h3VIwHCyhA+zURsdcJ0lhWR/i5iKr7f/l67cfIXuB82c6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=624bzFNhZVt6dPy2xODJOUkhqqoHKO+uYfKe9l9nOro=; b=A+9H99WnkFevfJdmmh/IrpR2GyVJFpscfGnMJ3X8eh7qYSPHejzZFXpqdlleTmIb1kEtBDp0RcVxHoogmFb49ZDKc8S2KVuwzu/JEbPXyzs0l2snpJDAgmZ4Y7egE3xiKcxdCSdFjmfp0mqJma+1DNfOTqiRktUwHXMqugoj3iKOSzHzgnlkc3Vp/viQyFqXekPdIfCO4BA2X153KibeQhfi/tAjg4WLwHFjj9IjeF0IwDzp/qXSFAGXiTgD9WUTzGV1hSKmXICNQwtnsJYfgDJKZ08KPgqm17IfJ1sStofcM+o8Ln664LwQjpizzpdznLaS0hGs0x1gFV5Bc5Aheg== 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=624bzFNhZVt6dPy2xODJOUkhqqoHKO+uYfKe9l9nOro=; b=HFIVPMEXUoSX4573yM//VdiG3CSSMATUO0fP048dfTv5FIMEsSAo/TnoRNlCJV5btA1xSmc0Baus5Ch/mi6xOyLlp7roNOEV/LjsYqNW9RaCmwo/j54oelnpxIeMBKX8d/qv3RrL94nbHzVlxScGse/S52W8LKXPLRQKybdDvx1YR6G38kq2QJVElriLIFuIxBxZoOStlu+4hx4TA1GtJCnn7WfJte7U6M0sZdfyW6ffdfNVX8+W4+eshJRp94LAC/Ajj54KCKvPnguXgrL4Ac/Gnd0i050ICLjpKnQaOEpckKDpL0+W9eWQtb04OKe3+Qq2/yvgWQ2FhQf74gbZJQ== Received: from DU0P250MB0747.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:3cb::16) by AM8P250MB0391.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:32a::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7339.38; Mon, 4 Mar 2024 13:28:03 +0000 Received: from DU0P250MB0747.EURP250.PROD.OUTLOOK.COM ([fe80::db07:87f6:7c75:38cc]) by DU0P250MB0747.EURP250.PROD.OUTLOOK.COM ([fe80::db07:87f6:7c75:38cc%3]) with mapi id 15.20.7292.036; Mon, 4 Mar 2024 13:28:03 +0000 Message-ID: Date: Mon, 4 Mar 2024 14:29:59 +0100 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20240304130657.30631-1-anton@khirnov.net> <20240304130657.30631-6-anton@khirnov.net> Content-Language: en-US From: Andreas Rheinhardt In-Reply-To: <20240304130657.30631-6-anton@khirnov.net> X-TMN: [OjxV02BWHm/pwR0yGzk7UJ5FvvO7XdRAeg0zMsLkPH0=] X-ClientProxiedBy: FR2P281CA0157.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:99::18) To DU0P250MB0747.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:3cb::16) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU0P250MB0747:EE_|AM8P250MB0391:EE_ X-MS-Office365-Filtering-Correlation-Id: 2fbd773d-363f-4c6b-705a-08dc3c4eeb68 X-MS-Exchange-SLBlob-MailProps: 9IecXKUgicDYHq6/rJ//LnXDfKYFBMQIw2mNHDLIS0egVzW9b1uU/zxd9fZJk+P03kfWwCb1E3sbDx/XtCTdREXrAruB53tRiV5vXlDs+vMl/Ua4d00tBTceycVapXckgxPd2OmNh7SO4biDsEbYXewdDs2sUiyx2G/ECtmReosvLR/Uvh84iUzIpt2MYS2koHdD8CxLFXokV7oI3NtfmPLVkY+31SPk4sM/uaSTPQpRf6hEWMIDoOyinWn/mLG1C+/2RzEkL9a/FEN6cO70KSvqUAGM9u8Vt9UIcC/YYlA6GeiEVRnVsX0X20gFY34BFVGT4xCkIsq0oexjhQ/bms7GlmpTqDUS5Cafmugb7CsaZi+Cx0EC/u0LNq3iyGT0+w5/6ZsgibuyF26qeL8EEQHPHR2FzB9SJZ9lnj+oWuXzMIqxLQxIW37IMQZ5HnjNBuHYjanXcqkuN4G87h3TA8I6zLlqyd97ZaehIVWoWkStxm7mLpRUoSpTLCCeVdcOPTIFtvBYE7FThLpVTuDITFB/4MISTWAB7pTwBd3YgY1KJXBGEe7EicCtqTJ6C2Ws4SeULuHUXGZIkTdzgKb7OI4avrsMzm/6O8sU0McgYdYZ2L8mnGRyGb3e0T4D0urH2rnpGr9WZpWe25Wbr8v4E7tiddxYGmt0yEGhc42SUGRmMzcpBvd5N9K1KgBHujgXsDly/bVMfkmGpQwASlySjmTRZbK240eqFvRbuT0vBgl6ssDzYDVVeg== X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: c069L4VGUaTSKQy1QayGDCCUUaiO+zJ9qI5Ip+XAI2x62z7IAFq97nmsHcpjxKj/H83JInn28RgNlqrUwnHdIUGOlNuZKLX+uAOebw7L9ywBKznyxpHaFMlIBbPBukVtNycB13WJzQZjVX2o5wvjXVrRWGQKlf9B8+lcA7ts5etf1Corh8kwzLpJMU1ZdqjFJf1++6aay/rvt2zAjrS+1sarlDVSCY/nzNBL5N8piH53R6iQ9vTvWlw4/QIRCUotEhbVi3A+wwvAk1bH7EhczopuYaWiMmZ7qcCTvfP5D1rT7aNu0Er05mClzwpzBGj4Jqtf6wQS+LJkVcV+p5V+Imr4D12Nh2Lswe9fd+jkQqusBe24JHTd8bTSJs5THbSJPmE/4HRS5HG/HfwIveK5XFlG+b3dRn8z409Ddh/CkI1KRe29hpQr1DVLEnRGIV4fnyYn5p1AXie7rpC3vSojFCrlE+9JW0L4W7mbWTaQLv/opc4EhyMaiNW7NcwVzmYMJzAhdoYG4rHmbsRFmAbb5pbZiRfpD3Q6am0vaMe0B6XfSE983vvf9gpIBbJa/k5D X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?b2Z4bXBmUU5WMVhBc0RKWVV2VmpIM2s0dEpyZVBtN0pGYUs0RnVYdnYwdTZu?= =?utf-8?B?alVmL2pCVmxiTHZGdkxGQ093QXZYUTVudytSaGxqRlYxbnk1REUvbytzcnFT?= =?utf-8?B?cWdmeG5sK3owNXBMV0VrSThwSFpsSmYzQko4M3RPbVAzOWVYa0ttZVJ3Ymt1?= =?utf-8?B?cFpJbXh1OGdkZnlzSTlZOHRoalJ1Zm53TE5mOFRDN0M3THhkUzBVQlQ2TjhT?= =?utf-8?B?Z01OTGcxeCtUZzNCQkVVOUpVOVh1b2toeTJjZ3l0RlpNSnB1Q2ZxbkdmTXBJ?= =?utf-8?B?eWU5U2JCU1VIY013OUtvak9EUkNkZ3ZDcDVkbVpnTlhjVExrMFdRNkErNmdx?= =?utf-8?B?R3l4NngvRUpUbG0wYzFBOGVFVlJmbElVVkFZNGxpRHpKSy9NVmVHNCt1TjNt?= =?utf-8?B?N1pWc3MzbnNLZWFFeHhiV3I2ZzlLYzdZQTZxdkR3TnRWK0M4ZUV2SlpFTE1U?= =?utf-8?B?TVV2T0FWd3d2cGo2VlpGV3BrNTBQR1VXd1FEeEY3bUhnREFnRFVwaGJnRXFU?= =?utf-8?B?OS94c2NTU1NMcXBRc0FnTGtDK0d3dmZydGR5QWlGQ0VZY29FMlF5bUZVQU9S?= =?utf-8?B?RUdCSHhaUzduZnllT1Z5Z1lQTXlZaENlWHVuRzlXK3BteUp5MVRyQkhoN3g2?= =?utf-8?B?ME1hZGhWT0lFZUI2MzdlNWljMURPM0R0R1BxdWcrbUpRK2IvWkVuLzdVT0Ji?= =?utf-8?B?OFJnU1phaTBaQXBLNWJEZU9JTnRiT3V3WFNyWXpLVjcvRHlJTTdWbE04WGJy?= =?utf-8?B?UTh2OGgyRkh1bHpkR3QvTGNmYXlaWkNlR0pscXFlcTRpM3owdXoyTGRsalNi?= =?utf-8?B?eTU5UVZzbm43eDVZNzR0Q3JueTdIL0ZnMUxXVDB1STU4RkpGdGphYmkrZDVW?= =?utf-8?B?ak5CZm94Um9obGpqREJRRXZKSFRkRU54Z3ltV1kwem1aRFdZMkQ3K1NzUDQ1?= =?utf-8?B?R3VISmhSaFRCWFBtU2RxNGxqbUdoUTFqU3BNSUtiMG9xUzlHaWlGc25XUlUr?= =?utf-8?B?RGpxbmFmTmYyVUtWeHkrZWxnRXY1dUx1UHlvUHdET29nZ0tGOGxQL3AxbWN4?= =?utf-8?B?aGFBSUdMSnJzWkhrM2o2dE01RWZ0OVdKQythbTBURlhFTldTZzYwOXo2YUlv?= =?utf-8?B?eDBQNUxYVnRyRWV5RDluM2k1aEMvOHdEZVNTUzBQdVdPNHh4QzE4YXc0V0FW?= =?utf-8?B?YzkzN3o3bEs3TER5TzVVRUZDWWxwQXEwRmV2cWtsdWdxSmNuaGtYaGcrVXlm?= =?utf-8?B?MktFUGNuaXRib0kxaC93UjBwL29NKzBsRUlNbDM3cFczT1laZHAvc0wzM1N5?= =?utf-8?B?RmN0d1V2SUl5bHVJWHhQOGdQdktpVnV4WmF2MnhTZDQ2bzVkK1lmYWUrbkxE?= =?utf-8?B?OFZ6TnphQ2l4c01vbG9od3NLeU5FOUNSTVJPemd5cW5meUV3MVRtVlNnVE5Z?= =?utf-8?B?b2FKdkVPZGl3NHNTLzZkWUJlSUp3VjE4ZlV1OXdHUzlVdzdBQmhzNXVaQjZq?= =?utf-8?B?VUh1VU81SGpEd2RwUHFtUVJ3R3h3UjRDRVFCVTNUbnp4cHl4UE1YeHJXSDhF?= =?utf-8?B?c0dnQXJPMksydXpGRm51RUlOSGhwMDc5eXdRQ2ZKNUxnVFprUlhhUXFhMmxv?= =?utf-8?B?RFZUMnQzM1lta3pqU1VxZXFnVXZCQU5WUWNOSy82NUJuU2NZTEo5SkhqUFBk?= =?utf-8?B?S3c2ck90ZjJSUmtmb3VBeW9mN2RRbks0WkdaM2MyWHp4YU9qSEt4eFRBPT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2fbd773d-363f-4c6b-705a-08dc3c4eeb68 X-MS-Exchange-CrossTenant-AuthSource: DU0P250MB0747.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2024 13:28:03.5971 (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: AM8P250MB0391 Subject: Re: [FFmpeg-devel] [PATCH 06/29] lavu/opt: add array options 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: Anton Khirnov: > --- > doc/APIchanges | 3 + > libavutil/opt.c | 362 +++++++++++++++++++++++++++++++++++++----- > libavutil/opt.h | 62 +++++++- > libavutil/tests/opt.c | 51 ++++++ > tests/ref/fate/opt | 35 +++- > 5 files changed, 468 insertions(+), 45 deletions(-) > > diff --git a/doc/APIchanges b/doc/APIchanges > index 7d46ebb006..3209614ed6 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2023-02-09 > > API changes, most recent first: > > +2024-02-xx - xxxxxxxxxx - lavu 58.xx.100 - opt.h > + Add AV_OPT_TYPE_FLAG_ARRAY and AVOptionArrayDef. > + > 2024-02-28 - xxxxxxxxxx - swr 4.14.100 - swresample.h > swr_convert() now accepts arrays of const pointers (to input and output). > > diff --git a/libavutil/opt.h b/libavutil/opt.h > index e402f6a0a0..77797b3fbe 100644 > --- a/libavutil/opt.h > +++ b/libavutil/opt.h > @@ -253,6 +253,17 @@ enum AVOptionType{ > #endif > AV_OPT_TYPE_BOOL, > AV_OPT_TYPE_CHLAYOUT, > + > + /** > + * May be combined with another regular option type to declare an array > + * option. > + * > + * For array options, @ref AVOption.offset should refer to a pointer > + * corresponding to the option type. The pointer should be immediately > + * followed by an unsigned int that will store the number of elements in the > + * array. How about we make this actually type-safe and use an actual struct for this instead of relying on the compiler not adding padding between a pointer and an unsigned int? > + */ > + AV_OPT_TYPE_FLAG_ARRAY = (1 << 16), > }; > > /** > @@ -298,6 +309,46 @@ enum AVOptionType{ > */ > #define AV_OPT_FLAG_CHILD_CONSTS (1 << 18) > > +/** > + * Must be set as default_val for AV_OPT_TYPE_FLAG_ARRAY options. > + */ > +typedef struct AVOptionArrayDef { > + /** > + * Must be set to sizeof(AVOptionArrayDef), in order to allow extending this > + * struct without breaking ABI. > + */ > + size_t sizeof_self; I do not really get the point of this field: It is not sufficient for detecting whether a user used a version that set a certain field due to trailing padding (i.e. an additional field need not increase sizeof(AVOptionArrayDef); this is actually relevant for this structure, because on x64 at least a new int/unsigned would fit into trailing padding). Luckily we already have a way to know the user's lavu version, as it is contained in the AVClass. > + > + /** > + * Native access only. > + * > + * Default value of the option, as would be serialized by av_opt_get() (i.e. > + * using the value of sep as the separator). > + */ > + const char *def; > + > + /** > + * Minimum number of elements in the array. When this field is non-zero, def > + * must be non-NULL and contain at least this number of elements. > + */ > + unsigned size_min; > + /** > + * Maximum number of elements in the array, 0 when unlimited. > + */ > + unsigned size_max; > + > + /** > + * Separator between array elements in string representations of this > + * option, used by av_opt_set() and av_opt_get(). It must be a printable > + * ASCII character, excluding alphanumeric and the backslash. A comma is > + * used when sep=0. > + * > + * The separator and the backslash must be backslash-escaped in order to > + * appear in string representations of the option value. > + */ > + uint8_t sep; If this is a printable ASCII character, then it should be a char. > +} AVOptionArrayDef; > + > /** > * AVOption > */ > @@ -320,8 +371,7 @@ typedef struct AVOption { > enum AVOptionType type; > > /** > - * Native access only. > - * > + * Native access only, except when documented otherwise. > * the default value for scalar options > */ > union { > @@ -330,6 +380,14 @@ typedef struct AVOption { > const char *str; > /* TODO those are unused now */ > AVRational q; > + > + /** > + * Used for AV_OPT_TYPE_FLAG_ARRAY options. May be NULL. > + * > + * Foreign access to some members allowed, as noted in AVOptionArrayDef > + * documentation. > + */ > + const AVOptionArrayDef *arr; > } default_val; > double min; ///< minimum valid value for the option > double max; ///< maximum valid value for the option _______________________________________________ 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".