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 DA0E643083 for ; Thu, 13 Jan 2022 17:31:25 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D763B68B4EE; Thu, 13 Jan 2022 19:31:22 +0200 (EET) Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-oln040092070066.outbound.protection.outlook.com [40.92.70.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 752D768B1F8 for ; Thu, 13 Jan 2022 19:31:15 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kPz9KaXz86GAUVR6kCrD/5BkwEAXr1O1GL15gF2Kl32voeWqyOxu8DyDE1OxJCbbMayyzcaiiLf8Rl/Nd+8SIGC7rC141PYDydtKNWeRhFIiZir5KLaqF8mQazK0m5ZGYGw7Y6SKeV2t+Xe1R1MMt/bXCDx+9BMEUrOpO0iVzZ0KDkPvS5fK65qV4HJbVod+6KLkjonT7mRWBLG8Td4IFPBhqPCyYtmM91hHQzsX+1BZwZrLMozSUmBgKcCagRIXoo3WtsR0AA8Sm/JCtN0dLpEv6o/98yks3YZcOaH5S5FWBwlEMTfI/pTZgHqTxXwG67OoPsxawhg57+loinh9ZQ== 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=peXeOJPycxp0Sl5tPZY54V9edatDH2v5uIYsRS6MwWs=; b=JunHS5d1f31b42UXqDlxHQaY9I7y1aX9jFGcaWhNXvaf/Mv49VKTL69Xivzt2ouyQ9zRDebrWxyqewPXm8vph4OFB+3nsnQEGcc5anWc3sxezFx5YcGbjkPO3UzsDdeXw9jk6GoitLhdUQ0Ec64C+HEjQX6rvo+uExekENwZB7Y48PcccpLXKWKnXj1kDAcE3scd6uoFHEUkIy9DAKGlENFxuHP/uC1pngoL1uoLgbGw2UD14FmMVdNqeJImv1OXT/oo1ukCeD78TjvvsSNgxCp8rJ9naGbU7OZ1I6TwZ/EbsZs5nBuRQW6Yrv+IrdcyVbr8izoO4KeyfoAUUOxtqw== 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=peXeOJPycxp0Sl5tPZY54V9edatDH2v5uIYsRS6MwWs=; b=BcRcaTUrmboNdfoxbUYWRr1nQ2UKIKVN3gPet9FLPqRk/3xHzuCII7FnWEReeN7zbAuCpN+cRuSws7m2OzsYz3YyEymwlWT2/9iID1yrpZ1JvMP5AGbDSo5SEUjmladFJWtz6xESZWuSMbyOEOncY9O/imblRe2wPKAg7FQU4vRnQAHGuxFA7PXg5yjaAwf+ARQcjXFEff0yYakaXrzxCgVQWxDa7diDjBol2z8ZtvGEOgtsH+a3kVdYfFgVmc553SG7sfpnQkhAVhcTeDvyfVmB9COQQjQca+KWpI0+5KR8edLcMj15i8Gzru5/lAjap5koiKuUAZgPd+oDLEiRhQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM9PR03MB7801.eurprd03.prod.outlook.com (2603:10a6:20b:410::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.10; Thu, 13 Jan 2022 17:31:14 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::19fc:be9f:2c9c:53f5]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::19fc:be9f:2c9c:53f5%9]) with mapi id 15.20.4888.010; Thu, 13 Jan 2022 17:31:14 +0000 Message-ID: Date: Thu, 13 Jan 2022 18:31:12 +0100 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220111204610.14262-1-anton@khirnov.net> <20220111204610.14262-7-anton@khirnov.net> From: Andreas Rheinhardt In-Reply-To: <20220111204610.14262-7-anton@khirnov.net> X-TMN: [jduwtWm/8i35ghVG3H2D3xly6Hh05kOt] X-ClientProxiedBy: AS8PR04CA0073.eurprd04.prod.outlook.com (2603:10a6:20b:313::18) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <718111fa-b794-96fb-0bd9-5a4c71edc866@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1fd3e471-99e5-40da-fb1e-08d9d6ba7f51 X-MS-TrafficTypeDiagnostic: AM9PR03MB7801:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Eb21IVhbHb3qAX79WbXUdI99PpwCOkrEBe1rilKmQtXNX8BLI/sNLuvZ/j5zBD7zhuFLgLfu2nNUi+ZarAEuRz0znWlAVTjZM3Vijx17nMHuNeSqBbroyF6qgVvcszwJyZiJihTVT7duKshuGk8L7EpenStxP4xJZpJm1av4vfU/Vx3Om5/kivfHfba262Ae1+l7aU0aDL7GPajrDAsysFBBMrzbqdCHDjcErx6vCw+30St8T0GJQaAV4YPV080V1pfFIhqq1u5gqcW3TPytmD/riX3vxj1Ix9VlYFhkJ1vMLfcr6LZRW5Om3TOzKnUQoSTzh5QGswIjjbt7AHT7CpcAlKxScxc7qBtEZ3HiTt9VKEmkmRQfHVMIE4yC70Sg7np8p9vLwZI+PiHchkNhSLBLTB1t5W5Btt5WTkYUt+egQgmQXDR2NAdd2HCs/CGPqtYMCeoliDbg6B/nmsSpId3KPg6s1RaHjsn/axLCk4hubpCkz559tFsEpMTgSIpcOKWTLR6mO1LdTXVn6c1qgWX8tyDMNaH6DXy0oUGN2xmagkKPQ4AmiYahtoPcgjRyYwGbYhMo8moI4vh86XKfWQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MytVUnNuVU96TlIweTZHa3NTVVFNWTZ5K2ZvTFMvWUdoQ0tObVBwbHpmeDNI?= =?utf-8?B?Yzkxa25MS1JBOHhQRHg3dWt4OEdTNXJPM216ZjduSEk1Nk9FLytMTE9JQ2lC?= =?utf-8?B?SVJ2aXdWdVdMS3BjUFRZMTJWOWZjRkhORTEwMEtmdWVlSjlwQUZJa21tWWtm?= =?utf-8?B?amJkeFhWWEVFMXBqWGJuUjhGWWVnNUtNVm1XbUZSQ3VyeXFDdW94WnQ4R2tY?= =?utf-8?B?QU5vUnNTdVhadHRTYWcrUG5sTXFkR09XNFEvV1ovYUhnTVl5V0s4aHA5NkhR?= =?utf-8?B?N0VEZGRwTHVYMXFCTHlMSkREaDhJM1hGTE43amJMaHFNeXBlYlVwS0k5eEdn?= =?utf-8?B?Y2RxZlo5blV5eUpFN3U0SGxNSXBLUE05dG9abnVZUWxGbHVsR0ZVQW95YnZO?= =?utf-8?B?WG9WWEVuQ1AvSHpNUjhjSXRiQjE4VjlFQy8zd1J3S0g1TWxoNjZ3SG5kVzVI?= =?utf-8?B?dlM2ZkpnK3F1UGY4dFVNcHFsemM0YUp1eGw0b25vRDNlSzZSb2RQM05VL0F4?= =?utf-8?B?anBtbUpEZmpjam9EZGR0Y1M2dDlUTDBUWnFVTGtTQlRzL0FoM2lmNE1lMnpk?= =?utf-8?B?MHdqQUMzbkNacHdFRVROR2hhQUQ2dUF0Ukp4aUlpaE5rQWVKd09zd2hJL1VW?= =?utf-8?B?aHJWblZRRDZKbTFURzhhT0RXOFJYY2x6SnlkY3pEZWxHQ2ZUaE1JTERBbXFo?= =?utf-8?B?NXZja21SOEJNU0J4Qm9oYlR1ODZLbWZFem5MZVJxeWN2YWN0SXlrR2lhcU5S?= =?utf-8?B?OW5mZTB6R2VvUmgwaDdYMmVHM3hRSEFscCs3bE80QWVjRTN3UCtJbWhORmRU?= =?utf-8?B?VFN3VkdBWmhRWGJITTNsYitKd21rSnNjakpXbzQ5bFI4cTNmNFh6UTVRY2Js?= =?utf-8?B?Q0lsdVg4ZGF2WHB0N2hoYTVWa0NoaHpoTSs5Z0FMZ0FjNFZYNmZYWFFYc0NH?= =?utf-8?B?bFBBUHIrdEZYVVkyZ2ErWGVuZjFOdTBYaGlMbXJRQzJPNHZnMVlvYXdPYnpt?= =?utf-8?B?RjJFdVFsVEwraTVOWUZ2eDRVa01wdEdsQUR5Z2ZhVWMwL3NNdTJrZkNSNW0w?= =?utf-8?B?ZEJrQk1Tb3dOV0tzU3J0eVNHbXRrV3VyQ2IySUNxaEVTWVZlZnVwT3U2bmJM?= =?utf-8?B?WG5ua2F2UUNqcGNqZEdIVHU1clNzQXRqQXNQVzBUWlF3bXYzMXpnMXlRb1dp?= =?utf-8?B?d0tFTUFucFArWlZiRG9NZ3JXWUtuTCtkM1JobHRZMkxudU5mbUZaWCtkampz?= =?utf-8?B?ckdjQzNTaFZQdlZLVTM1NTI2OGNiT0FRUlNaTklOaW9zaE0rQT09?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1fd3e471-99e5-40da-fb1e-08d9d6ba7f51 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jan 2022 17:31:14.0319 (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: AM9PR03MB7801 Subject: Re: [FFmpeg-devel] [PATCH 07/35] lavu/fifo: add new FIFO writing functions 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: > Use separate functions for writing from a buffer and a callback, since > the overwhelming majority of callers use a buffer and should not be > forced to pass extra NULL parameters or use a longer name. > > Consistently use size_t for sizes. > --- > doc/APIchanges | 2 +- > libavutil/fifo.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++ > libavutil/fifo.h | 46 ++++++++++++++++++++++++++++++++++++++ > 3 files changed, 105 insertions(+), 1 deletion(-) > > diff --git a/doc/APIchanges b/doc/APIchanges > index f2769d4165..0b179c30e5 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -19,7 +19,7 @@ API changes, most recent first: > Operations on FIFOs created with this function on these elements > rather than bytes. > Add av_fifo_elem_size(), av_fifo_can_read(), av_fifo_can_write(), > - av_fifo_grow2(), av_fifo_drain2(). > + av_fifo_grow2(), av_fifo_drain2(), av_fifo_write(), av_fifo_write_from_cb(). > > 2022-01-xx - xxxxxxxxxx - lavu fifo.h > Access to all AVFifoBuffer members is deprecated. The struct will > diff --git a/libavutil/fifo.c b/libavutil/fifo.c > index e9f439e219..1d94fff457 100644 > --- a/libavutil/fifo.c > +++ b/libavutil/fifo.c > @@ -207,6 +207,64 @@ void av_fifo_drain2(AVFifoBuffer *f, size_t size) > #endif > } > > +static int fifo_write_common(AVFifoBuffer *f, const uint8_t *buf, size_t *nb_elems, > + AVFifoCB read_cb, void *opaque) Should be write_cb. > +{ > + FifoBuffer *fb = (FifoBuffer*)f; > + size_t to_write = *nb_elems; How about calling this "left"? > + size_t offset_w = fb->offset_w; > + int ret = 0; > +#if FF_API_FIFO_PUBLIC > + uint32_t wndx= f->wndx; > +#endif > + > + if (to_write > av_fifo_can_write(f)) > + return AVERROR(ENOSPC); > + > + do { > + size_t len = FFMIN(fb->nb_elems - offset_w, to_write); > + uint8_t *wptr = f->buffer + offset_w * fb->elem_size; > + > + if (read_cb) { > + ret = read_cb(opaque, wptr, &len); > + if (ret < 0 || len == 0) > + break; > + } else { > + memcpy(wptr, buf, len * fb->elem_size); > + buf += len * fb->elem_size; > + } > + offset_w += len; > + if (offset_w >= fb->nb_elems) > + offset_w = 0; > +#if FF_API_FIFO_PUBLIC > + wndx += len; > +#endif > + to_write -= len; > + } while (to_write > 0); > +#if FF_API_FIFO_PUBLIC > + f->wndx= wndx; > + f->wptr= f->buffer + offset_w * fb->elem_size; > +#endif > + fb->offset_w = offset_w; > + > + if (*nb_elems - to_write > 0) to_write < *nb_elems > + fb->is_empty = 0; > + *nb_elems -= to_write; > + > + return ret; > +} > + > +int av_fifo_write(AVFifoBuffer *f, const void *buf, size_t nb_elems) > +{ > + return fifo_write_common(f, buf, &nb_elems, NULL, NULL); > +} > + > +int av_fifo_write_from_cb(AVFifoBuffer *f, AVFifoCB read_cb, > + void *opaque, size_t *nb_elems) > +{ > + return fifo_write_common(f, NULL, nb_elems, read_cb, opaque); > +} > + > int av_fifo_realloc2(AVFifoBuffer *f, unsigned int new_size) > { > FifoBuffer *fb = (FifoBuffer*)f; > diff --git a/libavutil/fifo.h b/libavutil/fifo.h > index d593304edb..ac1245ff39 100644 > --- a/libavutil/fifo.h > +++ b/libavutil/fifo.h > @@ -44,6 +44,24 @@ typedef struct AVFifoBuffer > #endif > AVFifoBuffer; > > +/** > + * Callback for writing or reading from a FIFO, passed to (and invoked from) the > + * av_fifo_*_cb() functions. It may be invoked multiple times from a single > + * av_fifo_*_cb() call and may process less data than the maximum size indicated > + * by nb_elems. > + * > + * @param opaque the opaque pointer provided to the av_fifo_*_cb() function > + * @param buf the buffer for reading or writing the data, depending on which > + * av_fifo_*_cb function is called > + * @param nb_elems On entry contains the maximum number of elements that can be > + * read from / written into buf. On success, the callback should > + * update it to contain the number of elements actually written. The last sentence is write-only, although this callback is also used for reading. > + * > + * @return 0 on success, a negative error code on failure (will be returned from > + * the invoking av_fifo_*_cb() function) > + */ > +typedef int AVFifoCB(void *opaque, void *buf, size_t *nb_elems); > + > /** > * Initialize an AVFifoBuffer. > * @param size of FIFO > @@ -143,6 +161,34 @@ size_t av_fifo_can_write(const AVFifoBuffer *f); > */ > int av_fifo_grow2(AVFifoBuffer *f, size_t inc); > > +/** > + * Write data into a FIFO. > + * > + * @param f the FIFO buffer > + * @param buf Data to be written. nb_elems * av_fifo_elem_size(f) bytes will be > + * read from buf. > + * @param nb_elems number of elements to write into FIFO > + * > + * @return a non-negative number on success, a negative error code on failure > + */ > +int av_fifo_write(AVFifoBuffer *f, const void *buf, size_t nb_elems); > + > +/** > + * Write data from a user-provided callback into a FIFO. > + * > + * @param f the FIFO buffer > + * @param read_cb Callback supplying the data to the FIFO. May be called > + * multiple times. > + * @param opaque opaque user data to be provided to read_cb > + * @param nb_elems Should point to the maximum number of elements that can be > + * written. Will be updated to contain the number of elements > + * actually written. > + * > + * @return non-negative number on success, a negative error code on failure > + */ > +int av_fifo_write_from_cb(AVFifoBuffer *f, AVFifoCB read_cb, s/read_cb/write_cb/ (also above) > + void *opaque, size_t *nb_elems); > + > /** > * Discard the specified amount of data from an AVFifoBuffer. > * @param size number of elements to discard, MUST NOT be larger than > _______________________________________________ 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".