From patchwork Sat Jun 27 15:16:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas George X-Patchwork-Id: 20648 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 4F8DF44B923 for ; Sat, 27 Jun 2020 18:16:57 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 372C868B673; Sat, 27 Jun 2020 18:16:57 +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 7487B68B661 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 05RFGmug018915 for ; Sat, 27 Jun 2020 17:16:48 +0200 Received: by phare.normalesup.org (Postfix, from userid 1001) id 87F57E8C4D; Sat, 27 Jun 2020 17:16:48 +0200 (CEST) From: Nicolas George To: ffmpeg-devel@ffmpeg.org Date: Sat, 27 Jun 2020 17:16:45 +0200 Message-Id: <20200627151646.2593306-2-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 2/3] lavu/buffer: use avrefcount_template.h for AVBuffer. 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 | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/libavutil/buffer.c b/libavutil/buffer.c index 38a554208a..7b4d0a867a 100644 --- a/libavutil/buffer.c +++ b/libavutil/buffer.c @@ -26,6 +26,19 @@ #include "mem.h" #include "thread.h" +#define AVRC_TYPE AVBuffer +#define AVRC_PREFIX buffer_ +#define AVRC_FIELD refcount + +static inline void +buffer_free(AVBuffer *b) +{ + b->free(b->opaque, b->data); + av_free(b); +} + +#include "avrefcount_template.h" + AVBufferRef *av_buffer_create(uint8_t *data, int size, void (*free)(void *opaque, uint8_t *data), void *opaque, int flags) @@ -42,7 +55,7 @@ AVBufferRef *av_buffer_create(uint8_t *data, int size, buf->free = free ? free : av_buffer_default_free; buf->opaque = opaque; - atomic_init(&buf->refcount, 1); + buffer_init_ref_count(buf); buf->flags = flags; @@ -99,7 +112,7 @@ AVBufferRef *av_buffer_ref(AVBufferRef *buf) *ret = *buf; - atomic_fetch_add_explicit(&buf->buffer->refcount, 1, memory_order_relaxed); + buffer_ref(buf->buffer); return ret; } @@ -116,10 +129,7 @@ static void buffer_replace(AVBufferRef **dst, AVBufferRef **src) } else av_freep(dst); - if (atomic_fetch_sub_explicit(&b->refcount, 1, memory_order_acq_rel) == 1) { - b->free(b->opaque, b->data); - av_freep(&b); - } + buffer_unrefp(&b); } void av_buffer_unref(AVBufferRef **buf) @@ -135,7 +145,7 @@ int av_buffer_is_writable(const AVBufferRef *buf) if (buf->buffer->flags & AV_BUFFER_FLAG_READONLY) return 0; - return atomic_load(&buf->buffer->refcount) == 1; + return buffer_get_ref_count(buf->buffer) == 1; } void *av_buffer_get_opaque(const AVBufferRef *buf) @@ -145,7 +155,7 @@ void *av_buffer_get_opaque(const AVBufferRef *buf) int av_buffer_get_ref_count(const AVBufferRef *buf) { - return atomic_load(&buf->buffer->refcount); + return buffer_get_ref_count(buf->buffer); } int av_buffer_make_writable(AVBufferRef **pbuf)