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 3724940455 for ; Mon, 24 Jan 2022 14:51:01 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C733E68B070; Mon, 24 Jan 2022 16:48:47 +0200 (EET) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2059.outbound.protection.outlook.com [40.92.89.59]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4005668AF37 for ; Mon, 24 Jan 2022 16:48:45 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XX2E0XPyrJHkLCd+sm539N1rWMuYFwvcYiPz226+uTPZwHCOqnv+UP3/w8LACJ4ksYvBob9oT8OCyHnXesyRtQsPnZ0j+O+Lv0eyy2evpXii4rLM5jpnZ5TRTx26AdVXCQ5qrKhJlTvG3HL9373CjcSviHYYuvBHQVBavNiVsVjU+ilO336eES2nV2YjglfR5gcPShfpxBI3X6nfcypq/3K3DnUZUVCGy4Hq7uMfRO0FSLYp0hDT4hkXF6O9RaiqW+CDi6sGFjdbY6Xsl7QRx6UXhOOciX8t7EtwifNwx/UVkCN+drCR4bQ16N4teL0rJWlx9vU65iiC1aEowY4oJg== 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=JXIOxM/iaBXevLPojidYqlrRPQJTWhyhpVDNTZVfRvg=; b=jCzNu2QmnaMBEaQXjxdgUedXiayXCX4HHAoqS4j3mOgYOpPxfpApP5m0XLGcQ+GIJzZOl5Cq5zEpRKSgqzeDO6ao9ITCpQTWmtFcvBppasxIHXCASVYCR7pxCrO69dJIVopC43/dHpH9c++b+dGHXlBfW/DY9cmjOMd7VIPnJL3CbZJB7/gz6tjEpMg5Kc+IHNC7lynhdJOxQ0NpPJg6T0nWr00UREh3nyYt56bgcKwgk3QnFKES04Mqqb+DSg+fOKHhZi7F803n5UmTaHYC9S/02dpzG6vh69skny9sopmJm4zowPaH1Bs7HCDe9Y5WNpXAXcEkYo/I8e63usd2WQ== 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=JXIOxM/iaBXevLPojidYqlrRPQJTWhyhpVDNTZVfRvg=; b=Kyyd06hSQ0b7znuokqAZwx6XB18LKX11d5L2ER/X06z7eg3hOOyl+nicQnWlfks43J3ND6uWrXxjIkYSj5NXvl9lultjtzKXYHIofCR5fQZ60FWsQy0xEHNoLOkF/GEWhpAsLGMAEH0DbmJJLv8Ja/PMHc21XmH27XVm21xZfa2ocMJibyepFEzmNOx3DO09l6nq/0OR0jJDTzGWEQNC2NEE3i7rSO4vI4UTEHGcRCPdGbULhvonbc3HHLO239LwPMQkBxt+/xfe9Y5QdnnXEbGcSEqCEVVprnTgMTZJRsGFvJT6ra5jK2NDqzD/aKcTmn69QgeTHmqUhrsb6STOPQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB4397.eurprd03.prod.outlook.com (2603:10a6:803:51::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:48:44 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:48:44 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:46:11 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [YRKOvju9r7r5Mm3FNMJSbTNeLG8UB3eF] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-26-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a7ee8867-fca9-4c49-74f4-08d9df489ecd X-MS-TrafficTypeDiagnostic: VI1PR03MB4397:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DrBn62Hi6iPf2LYjtkdK4KrsRkphIW2SKjWnPh2MNce7cMwa3NNuK63jdb1EAhHklYoNhlEaQzwACgtS/6az4aQR2W1TiThdh0z80PK1tqEKWlkE79+n0Sou3Ur1eA0ZJoRN/VMEBCisc3i2ebOIvhBR3yqZ44Epk+GgxwhA4+amqhWSSkyMCxd1tFfpknLrdVqivWYFVzGg/4pVvIBnZPrjRAKtzGuyDZbynZT2x3AOuS1PjZoxDDqzHQLeWfaD9St0ZOAHW3sMZFNiYhaSkBRWEV/fT0qVWJ/jenJo9NinO3A7ShjWnU6yARtoayLogKtoNNRFjjr/23j+zi7qzz27VdFJ1FAIBUsQ/C1YLnxkhi9fpludcBtlIT7RdC7KOrgIu8GGuyx9d6+ddDPcHM8FhJvqoexqAZLbXtI8BuE6fRFbnee+bY6G7PgWhBdJ13omvkJ1nq+BLUAmHIUub8oiZVtxB/hod6Jgx8cWXi/XBBQlZI7aF1QB+gYtm8mLm4MpIEOyc8OzgFH5hiFLG4iNHoQNWJBnnic1Jo8pRuvOIn3qA0fUC1QI7jKK3GtEENyuT3Wxw2PETGbcphsqBA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?q7OGIfLuzI1gObANmz8kEM6pxWd3X8r0UEzwysHCG7xDwJrHVok7EsksraP3?= =?us-ascii?Q?lBEQdLgMWPStNqzO+kTve8qlJfJKyQ9FJOsay26vL+pUEuITXTaWcFw7pbUK?= =?us-ascii?Q?POgAPDLsEmtf8IQH2+OvNJxNXIKJPue7G97aZ7pp5i4zizogovJUx28P0LW/?= =?us-ascii?Q?d4A4w+RVkfEzuWifO1ZSHeeQTiHIyTcoVbJ7xGQgHlXzjujKUYGpePr3NZEO?= =?us-ascii?Q?g40ZrX9soZWADnSXXRA69HXLYC5n40TTPXraDOSYDgboWDZawMxiAffUKhqt?= =?us-ascii?Q?UDV+8nqwxYT+5eC3I8vCG3D9rz//7r6FSpHIPZYlVm5EVOXuCq1+a+LMFsim?= =?us-ascii?Q?qDh8FZ/uxheqLNQh3u3DuyArd7L1WoaUskH3NXou75BNqfOCrxap8kt9Ie4m?= =?us-ascii?Q?sjJtB4Vp6i6CtaLcXGFjgCdhMI8G+x5eQq10rkzbAHjRMVjhzif+sEv3Ieu/?= =?us-ascii?Q?aObHctoBdJ66NqotW6X7l6S0UlbBkrUy6C5s7EtWeRYk0N8alT82PI1pbmBb?= =?us-ascii?Q?akmS+6xnq4G1Wn/AE2cJPND4ukM6F+smxHtU90autdXiJRs9+ilk1nyK1UYX?= =?us-ascii?Q?Uf8nT3599FPaNGBjKkODEQlKISn4ZL9HgT6n4iKQFDf2LkKwdOEmORrJQ+kE?= =?us-ascii?Q?p2j+r2qvgoVPPJZGmR9zqxVk6hKb/DvxheAmzXGjBy+mLNaBmfOvOiCsBz2J?= =?us-ascii?Q?/aqJggLj2OAupz9ymEAFeQX5+CH3E2qib8EhatMh0JyKgaiyFroTKPf7L3Hd?= =?us-ascii?Q?caNgDLAZ9NLm5SMHN+g2sigPEfKvSRj+XueUMlkkzC+dV7oBO9olF1pNcsCZ?= =?us-ascii?Q?WIr3vWm7SNzzQjnvcUzbXRnAsZjGFcKgxQiB4AcShbfp1TIQ0Gn6sMUmHOXO?= =?us-ascii?Q?wVdaENLzpB+eDFqD7cVorFLXECjAdyWvBXZXXXhpFkdQhNRYWRf6nciwf1HC?= =?us-ascii?Q?KwIK30HtlEMj3EG3NSY3Yw=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a7ee8867-fca9-4c49-74f4-08d9df489ecd X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:48:44.7211 (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: VI1PR03MB4397 Subject: [FFmpeg-devel] [PATCH v2 26/31] lavu/threadmessage: switch to new FIFO API 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 Cc: Anton Khirnov 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: From: Anton Khirnov --- libavutil/threadmessage.c | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/libavutil/threadmessage.c b/libavutil/threadmessage.c index 764b7fb813..6f25da76d7 100644 --- a/libavutil/threadmessage.c +++ b/libavutil/threadmessage.c @@ -24,7 +24,7 @@ struct AVThreadMessageQueue { #if HAVE_THREADS - AVFifoBuffer *fifo; + AVFifo *fifo; pthread_mutex_t lock; pthread_cond_t cond_recv; pthread_cond_t cond_send; @@ -64,7 +64,7 @@ int av_thread_message_queue_alloc(AVThreadMessageQueue **mq, av_free(rmq); return AVERROR(ret); } - if (!(rmq->fifo = av_fifo_alloc(elsize * nelem))) { + if (!(rmq->fifo = av_fifo_alloc2(nelem, elsize, 0))) { pthread_cond_destroy(&rmq->cond_send); pthread_cond_destroy(&rmq->cond_recv); pthread_mutex_destroy(&rmq->lock); @@ -93,7 +93,7 @@ void av_thread_message_queue_free(AVThreadMessageQueue **mq) #if HAVE_THREADS if (*mq) { av_thread_message_flush(*mq); - av_fifo_freep(&(*mq)->fifo); + av_fifo_freep2(&(*mq)->fifo); pthread_cond_destroy(&(*mq)->cond_send); pthread_cond_destroy(&(*mq)->cond_recv); pthread_mutex_destroy(&(*mq)->lock); @@ -107,9 +107,9 @@ int av_thread_message_queue_nb_elems(AVThreadMessageQueue *mq) #if HAVE_THREADS int ret; pthread_mutex_lock(&mq->lock); - ret = av_fifo_size(mq->fifo); + ret = av_fifo_can_read(mq->fifo); pthread_mutex_unlock(&mq->lock); - return ret / mq->elsize; + return ret; #else return AVERROR(ENOSYS); #endif @@ -121,14 +121,14 @@ static int av_thread_message_queue_send_locked(AVThreadMessageQueue *mq, void *msg, unsigned flags) { - while (!mq->err_send && av_fifo_space(mq->fifo) < mq->elsize) { + while (!mq->err_send && !av_fifo_can_write(mq->fifo)) { if ((flags & AV_THREAD_MESSAGE_NONBLOCK)) return AVERROR(EAGAIN); pthread_cond_wait(&mq->cond_send, &mq->lock); } if (mq->err_send) return mq->err_send; - av_fifo_generic_write(mq->fifo, msg, mq->elsize, NULL); + av_fifo_write(mq->fifo, msg, 1); /* one message is sent, signal one receiver */ pthread_cond_signal(&mq->cond_recv); return 0; @@ -138,14 +138,14 @@ static int av_thread_message_queue_recv_locked(AVThreadMessageQueue *mq, void *msg, unsigned flags) { - while (!mq->err_recv && av_fifo_size(mq->fifo) < mq->elsize) { + while (!mq->err_recv && !av_fifo_can_read(mq->fifo)) { if ((flags & AV_THREAD_MESSAGE_NONBLOCK)) return AVERROR(EAGAIN); pthread_cond_wait(&mq->cond_recv, &mq->lock); } - if (av_fifo_size(mq->fifo) < mq->elsize) + if (!av_fifo_can_read(mq->fifo)) return mq->err_recv; - av_fifo_generic_read(mq->fifo, msg, mq->elsize, NULL); + av_fifo_read(mq->fifo, msg, 1); /* one message space appeared, signal one sender */ pthread_cond_signal(&mq->cond_send); return 0; @@ -208,25 +208,25 @@ void av_thread_message_queue_set_err_recv(AVThreadMessageQueue *mq, } #if HAVE_THREADS -static void free_func_wrap(void *arg, void *msg, int size) +static int free_func_wrap(void *arg, void *buf, size_t *nb_elems) { AVThreadMessageQueue *mq = arg; - mq->free_func(msg); + uint8_t *msg = buf; + for (size_t i = 0; i < *nb_elems; i++) + mq->free_func(msg + i * mq->elsize); + return 0; } #endif void av_thread_message_flush(AVThreadMessageQueue *mq) { #if HAVE_THREADS - int used, off; - void *free_func = mq->free_func; + size_t used; pthread_mutex_lock(&mq->lock); - used = av_fifo_size(mq->fifo); - if (free_func) - for (off = 0; off < used; off += mq->elsize) - av_fifo_generic_peek_at(mq->fifo, mq, off, mq->elsize, free_func_wrap); - av_fifo_drain(mq->fifo, used); + used = av_fifo_can_read(mq->fifo); + if (mq->free_func) + av_fifo_read_to_cb(mq->fifo, free_func_wrap, mq, &used); /* only the senders need to be notified since the queue is empty and there * is nothing to read */ pthread_cond_broadcast(&mq->cond_send); -- 2.32.0 _______________________________________________ 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".