From patchwork Sun Apr 22 07:33:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgQsWTc2No?= X-Patchwork-Id: 8553 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:155:0:0:0:0:0 with SMTP id c82-v6csp2472056jad; Sun, 22 Apr 2018 00:33:16 -0700 (PDT) X-Google-Smtp-Source: AIpwx48PrkR7yRz7fyK78PXJDhD6yvlo7OVK71VyOk5HS8z99osqNWeiBpgY6GYTQY1EwQ6c5r+0 X-Received: by 10.28.168.201 with SMTP id r192mr6797120wme.134.1524382395932; Sun, 22 Apr 2018 00:33:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524382395; cv=none; d=google.com; s=arc-20160816; b=ICEtOSvWjK+BxdzMa7ufDj4GysTZNGn0zCnNqMbxy6rUBXkLW/ldgcqG12RagWvCx4 eld7cvZ3MAdGcihA1xl6v51comJDRYl4eChbh/FWndXhrDn0u0vO/MrAiNXnY86a/YkX AYB8kUoEcwu3HxC6v7kQdKAPqzW+z+LzUaZifxJE709nHzOhzdQ/1wUjLYarG4q2rEpk 01nHjz1zT+JzIgZWF/rddBeJwnX7+pBoYu3ZUacgFqA8G9ubweraZqHdFwB875hcx+JN rN6RG/Ac4VQLGBiCfCFSvOMue6y/54COYjE8zApUkhtTWBq6v2gd2EogaPvfYLGZX1bh Jq1w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject:user-agent :in-reply-to:mime-version:references:mail-followup-to:message-id:to :from:date:domainkey-signature:dkim-signature:delivered-to :arc-authentication-results; bh=0UM5/hize4cSY8wN36kD5y+VmdRJiUefirJhwq1Rx6o=; b=ozpWpo/xNk+dsjzB2jlLIBzvchwmzGSibdpYmR/JGIhqIi5+YgpB6dINYMtE0/3ypP wgyq1J3QhXBK5RWe/xeBTSdwsYLwpU4AsPKOlPdu/mHYg0IScJJYGlStcbB4n07jEGn/ xQMJvwNBrq8Y+Pa4vlbGQQ/OohQ1mphtdluqC99ssrZd75j84TBYGGGSRYTiZbT7YrVO ny/YgGQlwhQuD1tFhHh7XYfR/1eQtgTK0QmgKJj4tQzn7zarX+zqo4yybRYCBGmrg1Xe DuQsuX+xhQ6SFT5z0RIAqHSXcVfTcX3QpfxypXOd2vZe7gMcCfns5SxxKeO8sP8MPTRF 4q+w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@pkh.me header.s=selector1 header.b=o8Zx7LMp; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id u32-v6si7972878wrf.52.2018.04.22.00.33.14; Sun, 22 Apr 2018 00:33:15 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@pkh.me header.s=selector1 header.b=o8Zx7LMp; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4757B68A10A; Sun, 22 Apr 2018 10:32:44 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from golem.pkh.me (LStLambert-657-1-117-164.w92-154.abo.wanadoo.fr [92.154.28.164]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9B9D5689A61 for ; Sun, 22 Apr 2018 10:32:37 +0300 (EEST) Received: from golem.pkh.me (localhost.localdomain [127.0.0.1]) by golem.pkh.me (OpenSMTPD) with ESMTP id 478cbe08 for ; Sun, 22 Apr 2018 07:33:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pkh.me; h=date:from:to :subject:message-id:references:mime-version:content-type :in-reply-to; s=selector1; bh=wXahYGGh7fZlgyITyGdZiPY+IYk=; b=o8 Zx7LMpeF/tH/8Po2uNhEjfUDX8GryNKxhI6nAFdN2R+MH5Ln4xknlDQ+WpFILoLh LiAJyhNcRa7bDnqExKrAw0CY3TZ9iNjYeiyMCKMFpy9d2aL9IyToz+23Nj59Clkq hhwhIDj+7N7XxKGliqZrmEIb/8o3cmH5h45AK2v9zaRw4QLCMZlh5lHpPMM+FA4/ I8CtpBGsWpbG5SRc4Nvp0draaDnY4U6dPsTnkHFBsliEnvgydcQ0/YEnYYklCU2p MJiHgkQ3ZxQl5U5QTrP1s3D81TxJ7r4+TuHyuCZSYIRThhW+DkEp6reblIqA/UNj xubdHXEoCZvEo1SZhZLw== DomainKey-Signature: a=rsa-sha1; c=nofws; d=pkh.me; h=date:from:to :subject:message-id:references:mime-version:content-type :in-reply-to; q=dns; s=selector1; b=hoH3Npk7LdFhOS++46Omz6qIrKVI dFyjab6xzIdyXvtDnKK2YaJQcuO3XNfuyNJ4czWWzrr6l7F9QB3szC8d84mufXnl pKx7hBZUIfvHybsbA+seriIyqSFGYLbGAlNbR0qR5cKN8I3kUIaaZlAdqjWQ5t64 c1my0oS75RX7nm9MXCy5U6dKi4KMoAI0MkdygPBWHIA4j6xQrkWcy5RE7Ks6MAfT 7cdTfIVZJufrM9T4EAy8l/OHAETrbVaac4735m3l/+dIxcokxEOxvAQBkr7Ombvy f2CH6I8sajVHGJJPm+VOv+Sl4Bh05SUOhRqF2DJDv0i89BrTe2WtTlQfWg== Received: from golem.pkh.me (localhost.localdomain [127.0.0.1]) by golem.pkh.me (OpenSMTPD) with ESMTPSA id 5a547846 (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256:NO) for ; Sun, 22 Apr 2018 07:33:05 +0000 (UTC) Date: Sun, 22 Apr 2018 09:33:04 +0200 From: =?utf-8?B?Q2zDqW1lbnQgQsWTc2No?= To: FFmpeg development discussions and patches Message-ID: <20180422073303.GC28540@golem.pkh.me> Mail-Followup-To: FFmpeg development discussions and patches References: <20180421195137.13583-1-u@pkh.me> MIME-Version: 1.0 In-Reply-To: User-Agent: Mutt/1.9.4 (2018-02-28) Subject: Re: [FFmpeg-devel] [PATCH] lavu/threadmessage: add av_thread_message_queue_nelem() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" On Sun, Apr 22, 2018 at 02:51:16AM +0100, Rostislav Pehlivanov wrote: [...] > I think av_thread_message_queue_elems would be a better name, had to think > for a good period of time what "nelem" meant. I'm afraid of "queue_elems" implying "queuing elements" so I went for the more explicit av_thread_message_queue_nb_elems() instead. Also fixed the problem raised by Michael. diff --git a/doc/APIchanges b/doc/APIchanges index 4f6ac2a031..8d305d5867 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,9 @@ libavutil: 2017-10-21 API changes, most recent first: +2018-04-xx - xxxxxxxxxx - lavu 56.16.100 - threadmessage.h + Add av_thread_message_queue_nb_elems(). + -------- 8< --------- FFmpeg 4.0 was cut here -------- 8< --------- 2018-04-03 - d6fc031caf - lavu 56.13.100 - pixdesc.h diff --git a/libavutil/threadmessage.c b/libavutil/threadmessage.c index 872e9392b1..764b7fb813 100644 --- a/libavutil/threadmessage.c +++ b/libavutil/threadmessage.c @@ -102,6 +102,19 @@ void av_thread_message_queue_free(AVThreadMessageQueue **mq) #endif } +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); + pthread_mutex_unlock(&mq->lock); + return ret / mq->elsize; +#else + return AVERROR(ENOSYS); +#endif +} + #if HAVE_THREADS static int av_thread_message_queue_send_locked(AVThreadMessageQueue *mq, diff --git a/libavutil/threadmessage.h b/libavutil/threadmessage.h index 8480a0a3db..7ebf03a8ac 100644 --- a/libavutil/threadmessage.h +++ b/libavutil/threadmessage.h @@ -95,6 +95,11 @@ void av_thread_message_queue_set_err_recv(AVThreadMessageQueue *mq, void av_thread_message_queue_set_free_func(AVThreadMessageQueue *mq, void (*free_func)(void *msg)); +/** + * Return the current number of messages in the queue. + */ +int av_thread_message_queue_nb_elems(AVThreadMessageQueue *mq); + /** * Flush the message queue * diff --git a/libavutil/version.h b/libavutil/version.h index 387421775f..23567000a3 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 56 -#define LIBAVUTIL_VERSION_MINOR 15 +#define LIBAVUTIL_VERSION_MINOR 16 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ diff --git a/tests/api/api-threadmessage-test.c b/tests/api/api-threadmessage-test.c index 05a8062b8c..3c693a70d1 100644 --- a/tests/api/api-threadmessage-test.c +++ b/tests/api/api-threadmessage-test.c @@ -130,7 +130,9 @@ static void *receiver_thread(void *arg) for (i = 0; i < rd->workload; i++) { if (rand() % rd->workload < rd->workload / 10) { - av_log(NULL, AV_LOG_INFO, "receiver #%d: flushing the queue\n", rd->id); + av_log(NULL, AV_LOG_INFO, "receiver #%d: flushing the queue, " + "discarding %d message(s)\n", rd->id, + av_thread_message_queue_nb_elems(rd->queue)); av_thread_message_flush(rd->queue); } else { struct message msg;