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 DADD743F7A for ; Thu, 22 Sep 2022 11:42:02 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 542BA68BB8A; Thu, 22 Sep 2022 14:33:28 +0300 (EEST) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2099.outbound.protection.outlook.com [40.92.90.99]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9796368BA85 for ; Thu, 22 Sep 2022 14:33:21 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FWESIfqLKGtGXL18j8OV7JuDJd9xW/CggJmIqFL0nm9JpLSs/h93Xp2vn1OZ/Hns+IrYOxAEuFcnNUJNn8XFM66LrggtGNq8ZVjeXzz9tzN+FHU/rVYCBJCkGv8yt5RA7+FaD6TnvyTNTbCswQuwtxwqbYm2+xyI0VnOmmR7s7Kb7qL+5cOAX0+hb8hLylhVDKVsu2qqvqZP/k1GyIFbO1hWzaDkQXEYUaZRNTuPShSugD57iKqOb6pmPNpkzjmorbfTD43FlZKuOLwU7jGiGsOT5ZVnyGDQACdy5DPJrt4hcZ/2vgbDwufOSaNCLYZFkrWrENAAQsgS+pB78iDHgQ== 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=lZ1l3diN8mXJSer/x7QpwL0FyK+pJY9cooi72uwd8Cc=; b=JyP6N8n8xwfKDE62BF/aQGdoef6z/r4sqx40sO6v4DGv+dOPyGfYhF/zuXv/TFyP1NkSKYqi4i2+IcRhQKgK3jN/Le81M7pIu/vLuuzdD/UPkXBjjMe1h2+/9//SnXrJrRwNtUYnV9d6FYVPiS1dDmRhMegSGd29nr9ph33KKuVsRhN6jSemISnd9X2cTHF9G/rQpgmI3Meve7ySIMoq1aKW+AjHuMKHWL5yQWX7GqmZI1j02jchxRInYbUK8aPDlcgA1d9JfxTGDAsoXF4uxPtaWWGq7m3wFHmSBZxCEKcm+s0SnQ2GtO2yOz8/J+W3Lyoa+q58kvK9vIgGFPG7zA== 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=lZ1l3diN8mXJSer/x7QpwL0FyK+pJY9cooi72uwd8Cc=; b=iI7Khyy0x4p27mLUsFOuwoaetC9CJ9hMKZL1ZXCqKgtElZuDhnAnh0dYeQGkVpsjzzM6hAHpVqA+mt1MgmJ5+jqkFbLRIcyDqtwP96u/Yqp3+YEI1WJys7RZVQd+9kiHjnbKlkZKWlVvH5VxVEHwnAKX0uy+zE6xCyHfF9gIooxa1i1ucCEaX6Dt/QTIJnOQFDBroXtZkDJtOQ+3GUUIUICJuPrcc3lvzB5gTZvmH958YPVQnILBvCHGUJtDmL59ykzsoyCDbffQZW/WG+1srkiMiF0gQgWtMwV5UeFFCzwR4JXc4hHq9oVZLQ0P5o+Yo7/jGPolRQ350lbJgpeJkw== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by PAXP250MB0422.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:285::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.16; Thu, 22 Sep 2022 11:33:19 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::6642:4266:f792:33e6]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::6642:4266:f792:33e6%5]) with mapi id 15.20.5654.018; Thu, 22 Sep 2022 11:33:19 +0000 Message-ID: Date: Thu, 22 Sep 2022 13:33:23 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220922020216.46589-1-epirat07@gmail.com> From: Andreas Rheinhardt In-Reply-To: <20220922020216.46589-1-epirat07@gmail.com> X-TMN: [TDsOwZ/dA0H55BjnqIJQg//RORgpy+Y6XOICLk8gnUo=] X-ClientProxiedBy: ZR2P278CA0023.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:46::18) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|PAXP250MB0422:EE_ X-MS-Office365-Filtering-Correlation-Id: d4f7de0d-329a-41f4-dc00-08da9c8e3f91 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Ymeo5OvuC9/xrdcw8UgLU8UFOdSPG7PDVf8FvDlf9HIaEAhrDS4P0j9h9UM6C0on0hYNB3nviW97+GN1CIfAheGm+7zEXGba/HjX8V001mfc0qZEPiY18Uv8TvaDSTavddT80unj8W9cjpo2HE8+esEA/ESBYQzdoQ0DnDhah9EO8SluahMyIe5x3nDR+EUq0bB5eb8/ImSFU0JwZxZ7Guq0Q5W79An3EEA+qhjPWgD6ymaG4gYGVWFPENl5OorkDcLp0XDDz03VR6Kp8c8BBsiu8+wyGeXjNl0Iwc6RdDtPdftzEUpupYrHOmuXezWQ+Z6f1w21eFn/IDfI8/tctRaFWQMANt42Q5m03JVut3UbH4UvQlpRZW1jnOoC9ShKfKWW2OGkgFfxbSk7W2498THD3GtIlO3as53Lud3+z+8tvjXWqeuFBMTZtKgeIVsKg1Y87AmZ66PY5E73WlVaESLbBxbfIy2dUOSPaUaKxuA7WpuF/NRTcG0tLCCKBxSXxLPdCX67Jlm09V87xK6BGvc9JTtp54vOg3AJjUb5Hk3JLB9DZvBFbI4waUAWsOtMw8anPb7WZpNLKRfDIb8XMJo0dm9xywZK+zmobmNrHrOfuj9PuYcOvgpQvvHJ/4x+PtEuegjfUPbNYoYyo9Ix4NVqRGluyt1SLdOngWXAm5cdoQPmRedDoU91w5k06aWu X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ekgyeU5HUnRQdVlRakhqWkZVQnI5RHcvZVgrdjhkTFpWSm9Hd0NMaURpWmk4?= =?utf-8?B?b3pSc0RWWnJEZWtjVU1wZ1g1bnBRei9wM2I4NDllR3lHQldnNFh2LzZBNVdq?= =?utf-8?B?ZnNRN3l2bFlNMDBqWnVsM1NDdGVXMlZTelU5NjRHc2FzN0MwclNxWXNiL1JB?= =?utf-8?B?K1YzVjRBZjIrODA3RXpMemU2ZmlOYmY3Ui9jVHNqWC9DcEpIa1JTTU0wNnRp?= =?utf-8?B?SWhoRWVOUlhFdlJ4MnlMcVFhYXBVUEZ1cnhUK2x3ODdpSkVIT3Jid2x5dWVV?= =?utf-8?B?Ump5QWNGdjNvQ2ZNaFZIUU5hYy9Ub014ZkxXK3E0d2N4SEZuUTBBT0lCVFB1?= =?utf-8?B?UHl6UXVBUzMrc2FqR0pjRGxreTg4M0JDZm9KTDlBWEJFc0VxS0tJbEtweFZj?= =?utf-8?B?aUxGRHFZazVYbVA5SVFIZ1hZU1QyQ3BYT1FndlRrL3RSaXJOcW1td3R2SHRE?= =?utf-8?B?MlVZOE1BbjJYRm9MQ0k2SGxTQ3dSU0hyTTF5bm1uSHdtbDhUY2d0Yjd5cjQ5?= =?utf-8?B?UjlWcVppY2cvOWNLRXRGbXpTMVhRc05nMUMwbFVPdlAvdDRiRTE3NnRIRUVa?= =?utf-8?B?ditmd28xOHBUN0ZjKy8vdUFzdXJLUHcxR1NPcXozL094aklIZFg0TWkvNTdD?= =?utf-8?B?MjkvWkErVkZWYXdocllQbnRrekJLenJTK3liVUtZSEVXZkt3MTlNTlBGSmNP?= =?utf-8?B?TnNDbGRhbjNHNjl6bDBabGdBVWRrSlJLU3QvSE5NQW15b204WXJGRGswTmlo?= =?utf-8?B?WFFROXVUbFBrcko2RmVmQzA3NkdmQ0EwSlhRNnZKRXFrRHJzWjBIQjlOK0Zw?= =?utf-8?B?ek9lVCtQRUZ6aHJrYzNjRFFDazFkbHNxMldYZzdxZ1ZuZ291N1RwdkFOWWxB?= =?utf-8?B?b2J5SWhNeUlVWVRzakZJT3d5eityQk9UUHpOdzdIaDRUL1RiT29JNlVXbHA3?= =?utf-8?B?amVrTTBVOXBsOXRQOUlGQmF4NzJpcUpIVCtBYnNUcUlhaGZYa2gzS2liYVQy?= =?utf-8?B?QTJ1eGpGVE9OeEhlQkdteDBaTUpGOUp5d1dkMGpBTS84S0FPZ1hHenZ2NVVs?= =?utf-8?B?b1YvTlhlMUdleTduaUdrM3pjMVVBMTljY1lQMjhFanFWMTQ3V2RFdm92MktH?= =?utf-8?B?eEl6QzJRQmdjTmM0Unova3dDWGRCQ2NuQzc0b04rVXlTVis5eE5BdjdZR09m?= =?utf-8?B?Mmhudk55cUs1UDhsWXVPRTlQNEZnMExjaEJ6UnlaeXlWSm9FQ1lDREkzb3JI?= =?utf-8?B?MEVGQzgzS0JYV296OWxNcFVSejBCL2VoZThZNEZDNG1nc1ErTTFBd1pTNXRp?= =?utf-8?B?NDk5elIwaGU2eXFMV3pQK1o1QUlmaGlBalA0TGxvZ3pueHhIcjNISWV3Nmp6?= =?utf-8?B?MGM1YytxeFkxZWR6endSMmRsMHVnY0RRL3poMUp1SUo2OG05MUN4RzNjZWFQ?= =?utf-8?B?c1p5T04xNWQrNXlRdnhSS1Vsa3NlODJYRVlueFFRTHFuSEZOTmxGWGdhdWtN?= =?utf-8?B?YU83NzR1MVpGcW5hTVlETHdLbk0xQ1FEWHVSS2tyUGhiWjVScTlsVnpGRFR4?= =?utf-8?B?V2pPL2NSL3llYWtpL0FJVzZiM3lpUHljMnlQRzRHek9mNkdBSGNFdGZLcFFx?= =?utf-8?B?T3drODlKOEZwc3hLVlBYSW9nbnc3TmtlSUE2MDZ1R1U0dFdvdUtxc3lWRldu?= =?utf-8?B?K2VHQ1BTM0ZvWXdSbUR2cWthVlZOU29zRGZON0ZxQ0dQV0lWdlcxMWdXMHdD?= =?utf-8?Q?Mk/XcqVeO4gKeeln7z580H2kPWhIKv/QWIl66HM?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d4f7de0d-329a-41f4-dc00-08da9c8e3f91 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2022 11:33:19.5596 (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: PAXP250MB0422 Subject: Re: [FFmpeg-devel] [PATCH 1/2] avutil/dict: Add av_dict_iterate 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: Marvin Scholz: > This is a more explicit iteration API rather than using the "magic" > av_dict_get(d, "", t, AV_DICT_IGNORE_SUFFIX) which is not really > trivial to grasp what it does when casually reading through code. > --- > libavutil/dict.c | 19 +++++++++++++++++++ > libavutil/dict.h | 27 +++++++++++++++++++++++++++ > libavutil/version.h | 2 +- > 3 files changed, 47 insertions(+), 1 deletion(-) > > diff --git a/libavutil/dict.c b/libavutil/dict.c > index 14ad780a79..2f690a5b8e 100644 > --- a/libavutil/dict.c > +++ b/libavutil/dict.c > @@ -20,6 +20,7 @@ > > #include > > +#include "avassert.h" > #include "avstring.h" > #include "dict.h" > #include "dict_internal.h" > @@ -38,6 +39,24 @@ int av_dict_count(const AVDictionary *m) > return m ? m->count : 0; > } > > +AVDictionaryEntry *av_dict_iterate(const AVDictionary *m, > + const AVDictionaryEntry *prev) > +{ > + int i = 0; > + > + if (!m) > + return NULL; > + > + if (prev) > + i = prev - m->elems + 1; > + > + av_assert2(i >= 0); > + if (i >= m->count) > + return NULL; > + > + return &m->elems[i]; > +} > + > AVDictionaryEntry *av_dict_get(const AVDictionary *m, const char *key, > const AVDictionaryEntry *prev, int flags) > { > diff --git a/libavutil/dict.h b/libavutil/dict.h > index 0d1afc6c64..b42b3f07fd 100644 > --- a/libavutil/dict.h > +++ b/libavutil/dict.h > @@ -32,6 +32,8 @@ > > #include > > +#include "attributes.h" > + > /** > * @addtogroup lavu_dict AVDictionary > * @ingroup lavu_data > @@ -101,6 +103,31 @@ typedef struct AVDictionary AVDictionary; > AVDictionaryEntry *av_dict_get(const AVDictionary *m, const char *key, > const AVDictionaryEntry *prev, int flags); > > +/** > + * Iterate over a dictionary > + * > + * Iterates through all entries in the dictionary. > + * > + * @warning The returned AVDictionaryEntry key/value must not be changed. > + * > + * @param m The dictionary to iterate over > + * @param prev Pointer to the previous AVDictionaryEntry, NULL initially > + * > + * @retval AVDictionaryEntry* The next element in the dictionary > + * @retval NULL No more elements in the dictionary > + * > + * Typical usage: > + * @code > + * AVDictionaryEntry *e = NULL; > + * while (e = av_dict_iterate(m, e)) { > + * // ... > + * } > + * @endcode > + */ > +av_warn_unused_result > +AVDictionaryEntry *av_dict_iterate(const AVDictionary *m, > + const AVDictionaryEntry *prev); The user is not allowed to modify the returned AVDictionaryEntries, so you should return a const AVDictionaryEntry here. And there is no reason to use av_warn_unused_result at all; nothing bad happens if you ignore the result (except that you called av_dict_iterate unnecessarily). Furthermore, av_dict_set's documentation contains "Adding a new entry to a dictionary invalidates all existing entries previously returned with av_dict_get." This needs to be updated, too. > + > /** > * Get number of entries in dictionary. > * > diff --git a/libavutil/version.h b/libavutil/version.h > index 0585fa7b80..6fd07ed2a4 100644 > --- a/libavutil/version.h > +++ b/libavutil/version.h > @@ -80,7 +80,7 @@ > > #define LIBAVUTIL_VERSION_MAJOR 57 > #define LIBAVUTIL_VERSION_MINOR 36 > -#define LIBAVUTIL_VERSION_MICRO 102 > +#define LIBAVUTIL_VERSION_MICRO 103 New API additions need a minor bump (and need to reset micro). > > #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ > LIBAVUTIL_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".