From patchwork Sat Jun 27 15:16:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas George X-Patchwork-Id: 20649 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 2698E44B923 for ; Sat, 27 Jun 2020 18:16:58 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 10FED68B67A; Sat, 27 Jun 2020 18:16:58 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from nef.ens.fr (nef2.ens.fr [129.199.96.40]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A480468B667 for ; Sat, 27 Jun 2020 18:16:49 +0300 (EEST) X-ENS-nef-client: 129.199.129.80 Received: from phare.normalesup.org (phare.normalesup.org [129.199.129.80]) by nef.ens.fr (8.14.4/1.01.28121999) with ESMTP id 05RFGmLC018917 for ; Sat, 27 Jun 2020 17:16:49 +0200 Received: by phare.normalesup.org (Postfix, from userid 1001) id C1172E96BC; Sat, 27 Jun 2020 17:16:48 +0200 (CEST) From: Nicolas George To: ffmpeg-devel@ffmpeg.org Date: Sat, 27 Jun 2020 17:16:46 +0200 Message-Id: <20200627151646.2593306-3-george@nsup.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200627151646.2593306-1-george@nsup.org> References: <20200627151646.2593306-1-george@nsup.org> MIME-Version: 1.0 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.4.3 (nef.ens.fr [129.199.96.32]); Sat, 27 Jun 2020 17:16:49 +0200 (CEST) Subject: [FFmpeg-devel] [PATCH 3/3] lavu/buffer: use avrefcount_template.h for AVBufferPool. 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" Signed-off-by: Nicolas George --- libavutil/buffer.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/libavutil/buffer.c b/libavutil/buffer.c index 7b4d0a867a..a30e289087 100644 --- a/libavutil/buffer.c +++ b/libavutil/buffer.c @@ -225,6 +225,14 @@ int av_buffer_realloc(AVBufferRef **pbuf, int size) return 0; } +#define AVRC_TYPE AVBufferPool +#define AVRC_PREFIX buffer_pool_ +#define AVRC_FIELD refcount + +static void buffer_pool_free(AVBufferPool *pool); + +#include "avrefcount_template.h" + AVBufferPool *av_buffer_pool_init2(int size, void *opaque, AVBufferRef* (*alloc)(void *opaque, int size), void (*pool_free)(void *opaque)) @@ -241,7 +249,7 @@ AVBufferPool *av_buffer_pool_init2(int size, void *opaque, pool->alloc = av_buffer_alloc; // fallback pool->pool_free = pool_free; - atomic_init(&pool->refcount, 1); + buffer_pool_init_ref_count(pool); return pool; } @@ -257,7 +265,7 @@ AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size)) pool->size = size; pool->alloc = alloc ? alloc : av_buffer_alloc; - atomic_init(&pool->refcount, 1); + buffer_pool_init_ref_count(pool); return pool; } @@ -292,8 +300,7 @@ void av_buffer_pool_uninit(AVBufferPool **ppool) pool = *ppool; *ppool = NULL; - if (atomic_fetch_sub_explicit(&pool->refcount, 1, memory_order_acq_rel) == 1) - buffer_pool_free(pool); + buffer_pool_unrefp(&pool); } static void pool_release_buffer(void *opaque, uint8_t *data) @@ -309,8 +316,7 @@ static void pool_release_buffer(void *opaque, uint8_t *data) pool->pool = buf; ff_mutex_unlock(&pool->mutex); - if (atomic_fetch_sub_explicit(&pool->refcount, 1, memory_order_acq_rel) == 1) - buffer_pool_free(pool); + buffer_pool_unrefp(&pool); } /* allocate a new buffer and override its free() callback so that @@ -364,7 +370,7 @@ AVBufferRef *av_buffer_pool_get(AVBufferPool *pool) ff_mutex_unlock(&pool->mutex); if (ret) - atomic_fetch_add_explicit(&pool->refcount, 1, memory_order_relaxed); + buffer_pool_ref(pool); return ret; }