From patchwork Fri Dec 15 18:11:34 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Dekker X-Patchwork-Id: 6795 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp821694jah; Fri, 15 Dec 2017 10:11:47 -0800 (PST) X-Google-Smtp-Source: ACJfBotu0+lenHUdjBabdMrTqjkIrUnhOKuKaKe/O6dOuA9io0v2ptE/P+ONQ6nRNxGOmrodVfBH X-Received: by 10.28.238.221 with SMTP id j90mr5803924wmi.44.1513361507123; Fri, 15 Dec 2017 10:11:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1513361507; cv=none; d=google.com; s=arc-20160816; b=fpP7NxqQnAXHUeBpvpLTBcDZhteXfnvSNsws9QAX1vCe+uhZgiPEQjxyzzE066x9Y1 +xQrLOyeQzdJgze1uox9RiYDca+K++CBcnJ1HfoFnDxSPREtaCwAEoK8CZCuvwoMC4uk +MpDqto1H2gMTN1OXvYCuHrc7chZPbWDd+slIkJggLrm8EZOsTrgypN3JjuaxmEAa3jB 3qgKBr0iOmwpfY6z9MO7FsFiVY1zpcaqsKGnYOQip3/bAvd16Suqlx1ilhkyhmStY0k3 t1XZHYK/oaS+ygzhHDyFC3yKH9nqUUyPW12AdJBGX8xNvFNXt+OfkRstPgBCkGLiZpWZ 48mQ== 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 :mime-version:references:in-reply-to:message-id:to:from:date :dkim-signature:dkim-signature:delivered-to :arc-authentication-results; bh=vs/xAUFtSZowzJjAUyZVwIRyIZ/5ywM+cikR7yvFYW8=; b=ukgFJm3B3CHLlm7zcfDT7Fpd6UHx5HYAP7OdEbvQ5WGSHpKTWPFI3uoxWYbyrKqtbb Y5DG5XDA04kSAQNSmRN3RlAw4MZoHyPln0Q3C/6LSyy8OvZZ9QfJDSHu28Qn7NzDEjSE FAgBM9+X1dFiMYT040xPIs67EV+jyh0v1bd3APWY+YwLMO+kpoQSc0yh1ZRDNE5Od5Ca UyUp+oz5k1NZ6stDvVoZILgRNSOEqR6tZS0re4xLDe+0pX3J2dzpIpTJYrZeZrRHiAbu P1rcVDx8c23hZXCU4QXQXl/V5cLNkRPCMlWW1j8s+qt+/Eb3YSUW8LVaQ8rbCoJBP3Qh U7Ow== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@itanimul.li header.s=mesmtp header.b=rcguNqMd; dkim=neutral (body hash did not verify) header.i=@messagingengine.com header.s=fm1 header.b=R49nYFMp; 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 x70si5048861wmf.213.2017.12.15.10.11.46; Fri, 15 Dec 2017 10:11:47 -0800 (PST) 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=@itanimul.li header.s=mesmtp header.b=rcguNqMd; dkim=neutral (body hash did not verify) header.i=@messagingengine.com header.s=fm1 header.b=R49nYFMp; 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 A39FB689959; Fri, 15 Dec 2017 20:11:36 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4165F680AF2 for ; Fri, 15 Dec 2017 20:11:30 +0200 (EET) Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id AE46720D3B for ; Fri, 15 Dec 2017 13:11:38 -0500 (EST) Received: from frontend2 ([10.202.2.161]) by compute4.internal (MEProxy); Fri, 15 Dec 2017 13:11:38 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=itanimul.li; h= content-type:date:from:in-reply-to:message-id:mime-version :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= mesmtp; bh=VDs5XyqFHKLibZAl+UNc7VPQGfai3tLELQU+rIgWXKg=; b=rcguN qMdSHc6/JoE69sI/wwj4ZVHzfqkrOKeo+nyRIReZCSrj0GV7jSOfoWdZzfliUUKc PLOp2kLYGCGdJkAFnPO5oxozAxzG4WCWJrNbFWl5IncuEen3hp/zs+WjRQGIuCM8 LXG3QZ+jKB6tRwyLW+xmKcOA8Vsvzr/fQKtLuI= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-sender :x-me-sender:x-sasl-enc; s=fm1; bh=VDs5XyqFHKLibZAl+UNc7VPQGfai3 tLELQU+rIgWXKg=; b=R49nYFMpxYW9Hnhi2qKCtQndRQIO4M3pb8CFClRtw7Ba9 HmugctAxSEDesxOQFFYbUVG8yA4f5HoEtA/lNmaSJwVfm5C0PTFdW3tIyGRQZdlZ 0hhg7mE/8/9aRmb2DG0sWebu6OiQ8A8DXjkXY5H4IgRNnpO+yMZYCg4JVXjzDmc9 m0SB9FrcfwZtJBRc9LSEK8F/cebxxA2QHg9z54loygoQslbWXE3dHqka96gNsIOh 1SU7WJgyo/wAnSUVQ/zWlhqiVVH8/7TD2Gi/iMfXQgeZIksuse9cyKMpC2o1lhcl 3KoFm2WKDRSlPFtCNJJAm7nIPsr6qz7s0fU/ZN5YA== X-ME-Sender: Received: from DESKTOP-AFAL1BE (cpc75394-sotn16-2-0-cust168.15-1.cable.virginm.net [82.22.8.169]) by mail.messagingengine.com (Postfix) with ESMTPA id 1F58624522 for ; Fri, 15 Dec 2017 13:11:38 -0500 (EST) Date: Fri, 15 Dec 2017 18:11:34 +0000 From: Josh de Kock To: ffmpeg-devel@ffmpeg.org Message-Id: <20171215181134.149bd1765eeabe2ac7f62957@itanimul.li> In-Reply-To: <20171215180802.2f6571109a0b51027722ce02@itanimul.li> References: <20171215180802.2f6571109a0b51027722ce02@itanimul.li> X-Mailer: Sylpheed 3.5.1 (GTK+ 2.24.23; i686-pc-mingw32) Mime-Version: 1.0 Subject: Re: [FFmpeg-devel] [PATCH] avutil/atomics: replace avpriv atomics with stdatomics 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 Fri, 15 Dec 2017 18:08:02 +0000 Josh de Kock wrote: > [...] Attached again with the correct mime... diff --git a/libavcodec/error_resilience.c b/libavcodec/error_resilience.c index 8f172be..55f7796 100644 --- a/libavcodec/error_resilience.c +++ b/libavcodec/error_resilience.c @@ -27,7 +27,6 @@ #include -#include "libavutil/atomic.h" #include "libavutil/internal.h" #include "avcodec.h" #include "error_resilience.h" diff --git a/libavcodec/parser.c b/libavcodec/parser.c index 670680e..0866eef 100644 --- a/libavcodec/parser.c +++ b/libavcodec/parser.c @@ -23,9 +23,9 @@ #include #include #include +#include #include "libavutil/avassert.h" -#include "libavutil/atomic.h" #include "libavutil/internal.h" #include "libavutil/mem.h" @@ -46,7 +46,7 @@ void av_register_codec_parser(AVCodecParser *parser) { do { parser->next = av_first_parser; - } while (parser->next != avpriv_atomic_ptr_cas((void * volatile *)&av_first_parser, parser->next, parser)); + } while (!atomic_compare_exchange_weak((AVCodecParser * _Atomic *)&av_first_parser, &parser->next, parser)); } AVCodecParserContext *av_parser_init(int codec_id) diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 873f39f..ad3d79e 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -25,8 +25,9 @@ * utils. */ +#include + #include "config.h" -#include "libavutil/atomic.h" #include "libavutil/attributes.h" #include "libavutil/avassert.h" #include "libavutil/avstring.h" @@ -70,7 +71,8 @@ const char av_codec_ffversion[] = "FFmpeg version " FFMPEG_VERSION; #if HAVE_PTHREADS || HAVE_W32THREADS || HAVE_OS2THREADS static int default_lockmgr_cb(void **arg, enum AVLockOp op) { - void * volatile * mutex = arg; + void * _Atomic * mutex = (void * _Atomic *)arg; + void *null_mutex = NULL; int err; switch (op) { @@ -85,7 +87,7 @@ static int default_lockmgr_cb(void **arg, enum AVLockOp op) av_free(tmp); return AVERROR(err); } - if (avpriv_atomic_ptr_cas(mutex, NULL, tmp)) { + if (!atomic_compare_exchange_weak(mutex, &null_mutex, tmp)) { pthread_mutex_destroy(tmp); av_free(tmp); } @@ -104,7 +106,7 @@ static int default_lockmgr_cb(void **arg, enum AVLockOp op) if (*mutex) pthread_mutex_destroy(*mutex); av_free(*mutex); - avpriv_atomic_ptr_cas(mutex, *mutex, NULL); + atomic_compare_exchange_weak(mutex, mutex, NULL); return 0; } return 1; @@ -185,8 +187,9 @@ av_cold void avcodec_register(AVCodec *codec) p = last_avcodec; codec->next = NULL; - while(*p || avpriv_atomic_ptr_cas((void * volatile *)p, NULL, codec)) + while(*p || !atomic_compare_exchange_weak((AVCodec *_Atomic *)p, &codec->next, codec)) p = &(*p)->next; + last_avcodec = &codec->next; if (codec->init_static_data) diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index b98b32b..c0dc054 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -19,7 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "libavutil/atomic.h" +#include + #include "libavutil/avassert.h" #include "libavutil/avstring.h" #include "libavutil/buffer.h" @@ -599,7 +600,7 @@ int avfilter_register(AVFilter *filter) filter->next = NULL; - while(*f || avpriv_atomic_ptr_cas((void * volatile *)f, NULL, filter)) + while(*f || !atomic_compare_exchange_weak((AVFilter* _Atomic*) f, &filter->next, filter)) f = &(*f)->next; last_filter = &filter->next; diff --git a/libavformat/format.c b/libavformat/format.c index 38ca2a3..9acfecd 100644 --- a/libavformat/format.c +++ b/libavformat/format.c @@ -19,7 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "libavutil/atomic.h" +#include + #include "libavutil/avstring.h" #include "libavutil/bprint.h" #include "libavutil/opt.h" @@ -62,8 +63,7 @@ void av_register_input_format(AVInputFormat *format) { AVInputFormat **p = last_iformat; - // Note, format could be added after the first 2 checks but that implies that *p is no longer NULL - while(p != &format->next && !format->next && avpriv_atomic_ptr_cas((void * volatile *)p, NULL, format)) + while(*p || !atomic_compare_exchange_weak((AVInputFormat *_Atomic *)p, &format->next, format)) p = &(*p)->next; if (!format->next) @@ -74,8 +74,7 @@ void av_register_output_format(AVOutputFormat *format) { AVOutputFormat **p = last_oformat; - // Note, format could be added after the first 2 checks but that implies that *p is no longer NULL - while(p != &format->next && !format->next && avpriv_atomic_ptr_cas((void * volatile *)p, NULL, format)) + while(*p || !atomic_compare_exchange_weak((AVOutputFormat *_Atomic *)p, &format->next, format)) p = &(*p)->next; if (!format->next) diff --git a/libavutil/Makefile b/libavutil/Makefile index 7217840..231b863 100644 --- a/libavutil/Makefile +++ b/libavutil/Makefile @@ -154,8 +154,6 @@ OBJS = adler32.o \ xtea.o \ tea.o \ -OBJS-$(!HAVE_ATOMICS_NATIVE) += atomic.o \ - OBJS-$(CONFIG_CUDA) += hwcontext_cuda.o OBJS-$(CONFIG_D3D11VA) += hwcontext_d3d11va.o OBJS-$(CONFIG_DXVA2) += hwcontext_dxva2.o @@ -181,14 +179,10 @@ SKIPHEADERS-$(CONFIG_OPENCL) += hwcontext_opencl.h SKIPHEADERS-$(CONFIG_VAAPI) += hwcontext_vaapi.h SKIPHEADERS-$(CONFIG_VIDEOTOOLBOX) += hwcontext_videotoolbox.h SKIPHEADERS-$(CONFIG_VDPAU) += hwcontext_vdpau.h -SKIPHEADERS-$(HAVE_ATOMICS_GCC) += atomic_gcc.h -SKIPHEADERS-$(HAVE_ATOMICS_SUNCC) += atomic_suncc.h -SKIPHEADERS-$(HAVE_ATOMICS_WIN32) += atomic_win32.h TESTPROGS = adler32 \ aes \ aes_ctr \ - atomic \ audio_fifo \ avstring \ base64 \ diff --git a/libavutil/atomic.c b/libavutil/atomic.c deleted file mode 100644 index 64cff25..0000000 --- a/libavutil/atomic.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) 2012 Ronald S. Bultje - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "config.h" -#include "atomic.h" - -#if !HAVE_ATOMICS_NATIVE - -#if HAVE_PTHREADS - -#include - -static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER; - -int avpriv_atomic_int_get(volatile int *ptr) -{ - int res; - - pthread_mutex_lock(&atomic_lock); - res = *ptr; - pthread_mutex_unlock(&atomic_lock); - - return res; -} - -void avpriv_atomic_int_set(volatile int *ptr, int val) -{ - pthread_mutex_lock(&atomic_lock); - *ptr = val; - pthread_mutex_unlock(&atomic_lock); -} - -int avpriv_atomic_int_add_and_fetch(volatile int *ptr, int inc) -{ - int res; - - pthread_mutex_lock(&atomic_lock); - *ptr += inc; - res = *ptr; - pthread_mutex_unlock(&atomic_lock); - - return res; -} - -void *avpriv_atomic_ptr_cas(void * volatile *ptr, void *oldval, void *newval) -{ - void *ret; - pthread_mutex_lock(&atomic_lock); - ret = *ptr; - if (ret == oldval) - *ptr = newval; - pthread_mutex_unlock(&atomic_lock); - return ret; -} - -#elif !HAVE_THREADS - -int avpriv_atomic_int_get(volatile int *ptr) -{ - return *ptr; -} - -void avpriv_atomic_int_set(volatile int *ptr, int val) -{ - *ptr = val; -} - -int avpriv_atomic_int_add_and_fetch(volatile int *ptr, int inc) -{ - *ptr += inc; - return *ptr; -} - -void *avpriv_atomic_ptr_cas(void * volatile *ptr, void *oldval, void *newval) -{ - if (*ptr == oldval) { - *ptr = newval; - return oldval; - } - return *ptr; -} - -#else /* HAVE_THREADS */ - -/* This should never trigger, unless a new threading implementation - * without correct atomics dependencies in configure or a corresponding - * atomics implementation is added. */ -#error "Threading is enabled, but there is no implementation of atomic operations available" - -#endif /* HAVE_PTHREADS */ - -#endif /* !HAVE_ATOMICS_NATIVE */ diff --git a/libavutil/atomic.h b/libavutil/atomic.h deleted file mode 100644 index 15906d2..0000000 --- a/libavutil/atomic.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2012 Ronald S. Bultje - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_ATOMIC_H -#define AVUTIL_ATOMIC_H - -#include "config.h" - -#if HAVE_ATOMICS_NATIVE - -#if HAVE_ATOMICS_GCC -#include "atomic_gcc.h" -#elif HAVE_ATOMICS_WIN32 -#include "atomic_win32.h" -#elif HAVE_ATOMICS_SUNCC -#include "atomic_suncc.h" -#endif - -#else - -/** - * Load the current value stored in an atomic integer. - * - * @param ptr atomic integer - * @return the current value of the atomic integer - * @note This acts as a memory barrier. - */ -int avpriv_atomic_int_get(volatile int *ptr); - -/** - * Store a new value in an atomic integer. - * - * @param ptr atomic integer - * @param val the value to store in the atomic integer - * @note This acts as a memory barrier. - */ -void avpriv_atomic_int_set(volatile int *ptr, int val); - -/** - * Add a value to an atomic integer. - * - * @param ptr atomic integer - * @param inc the value to add to the atomic integer (may be negative) - * @return the new value of the atomic integer. - * @note This does NOT act as a memory barrier. This is primarily - * intended for reference counting. - */ -int avpriv_atomic_int_add_and_fetch(volatile int *ptr, int inc); - -/** - * Atomic pointer compare and swap. - * - * @param ptr pointer to the pointer to operate on - * @param oldval do the swap if the current value of *ptr equals to oldval - * @param newval value to replace *ptr with - * @return the value of *ptr before comparison - */ -void *avpriv_atomic_ptr_cas(void * volatile *ptr, void *oldval, void *newval); - -#endif /* HAVE_ATOMICS_NATIVE */ - -#endif /* AVUTIL_ATOMIC_H */ diff --git a/libavutil/atomic_gcc.h b/libavutil/atomic_gcc.h deleted file mode 100644 index 2bb43c3..0000000 --- a/libavutil/atomic_gcc.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2012 Ronald S. Bultje - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_ATOMIC_GCC_H -#define AVUTIL_ATOMIC_GCC_H - -#include - -#include "atomic.h" - -#define avpriv_atomic_int_get atomic_int_get_gcc -static inline int atomic_int_get_gcc(volatile int *ptr) -{ - __sync_synchronize(); - return *ptr; -} - -#define avpriv_atomic_int_set atomic_int_set_gcc -static inline void atomic_int_set_gcc(volatile int *ptr, int val) -{ - *ptr = val; - __sync_synchronize(); -} - -#define avpriv_atomic_int_add_and_fetch atomic_int_add_and_fetch_gcc -static inline int atomic_int_add_and_fetch_gcc(volatile int *ptr, int inc) -{ - return __sync_add_and_fetch(ptr, inc); -} - -#define avpriv_atomic_ptr_cas atomic_ptr_cas_gcc -static inline void *atomic_ptr_cas_gcc(void * volatile *ptr, - void *oldval, void *newval) -{ -#ifdef __ARMCC_VERSION - // armcc will throw an error if ptr is not an integer type - volatile uintptr_t *tmp = (volatile uintptr_t*)ptr; - return (void*)__sync_val_compare_and_swap(tmp, oldval, newval); -#else - return __sync_val_compare_and_swap(ptr, oldval, newval); -#endif -} - -#endif /* AVUTIL_ATOMIC_GCC_H */ diff --git a/libavutil/atomic_suncc.h b/libavutil/atomic_suncc.h deleted file mode 100644 index a75a37b..0000000 --- a/libavutil/atomic_suncc.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_ATOMIC_SUNCC_H -#define AVUTIL_ATOMIC_SUNCC_H - -#include -#include - -#include "atomic.h" - -#define avpriv_atomic_int_get atomic_int_get_suncc -static inline int atomic_int_get_suncc(volatile int *ptr) -{ - __machine_rw_barrier(); - return *ptr; -} - -#define avpriv_atomic_int_set atomic_int_set_suncc -static inline void atomic_int_set_suncc(volatile int *ptr, int val) -{ - *ptr = val; - __machine_rw_barrier(); -} - -#define avpriv_atomic_int_add_and_fetch atomic_int_add_and_fetch_suncc -static inline int atomic_int_add_and_fetch_suncc(volatile int *ptr, int inc) -{ - return atomic_add_int_nv(ptr, inc); -} - -#define avpriv_atomic_ptr_cas atomic_ptr_cas_suncc -static inline void *atomic_ptr_cas_suncc(void * volatile *ptr, - void *oldval, void *newval) -{ - return atomic_cas_ptr(ptr, oldval, newval); -} - -#endif /* AVUTIL_ATOMIC_SUNCC_H */ diff --git a/libavutil/atomic_win32.h b/libavutil/atomic_win32.h deleted file mode 100644 index f729933..0000000 --- a/libavutil/atomic_win32.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2012 Ronald S. Bultje - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_ATOMIC_WIN32_H -#define AVUTIL_ATOMIC_WIN32_H - -#define WIN32_LEAN_AND_MEAN -#include - -#define avpriv_atomic_int_get atomic_int_get_win32 -static inline int atomic_int_get_win32(volatile int *ptr) -{ - MemoryBarrier(); - return *ptr; -} - -#define avpriv_atomic_int_set atomic_int_set_win32 -static inline void atomic_int_set_win32(volatile int *ptr, int val) -{ - *ptr = val; - MemoryBarrier(); -} - -#define avpriv_atomic_int_add_and_fetch atomic_int_add_and_fetch_win32 -static inline int atomic_int_add_and_fetch_win32(volatile int *ptr, int inc) -{ - return inc + InterlockedExchangeAdd(ptr, inc); -} - -#define avpriv_atomic_ptr_cas atomic_ptr_cas_win32 -static inline void *atomic_ptr_cas_win32(void * volatile *ptr, - void *oldval, void *newval) -{ - return InterlockedCompareExchangePointer(ptr, newval, oldval); -} - -#endif /* AVUTIL_ATOMIC_WIN32_H */ diff --git a/libavutil/tests/atomic.c b/libavutil/tests/atomic.c deleted file mode 100644 index e41bf5a..0000000 --- a/libavutil/tests/atomic.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "libavutil/atomic.h" -#include "libavutil/avassert.h" - -int main(void) -{ - volatile int val = 1; - void *tmp1 = (int *)&val; - void * volatile *tmp2 = &tmp1; - int res; - - res = avpriv_atomic_int_add_and_fetch(&val, 1); - av_assert0(res == 2); - avpriv_atomic_int_set(&val, 3); - res = avpriv_atomic_int_get(&val); - av_assert0(res == 3); - avpriv_atomic_ptr_cas(tmp2, tmp1, &res); - av_assert0(*tmp2 == &res); - - return 0; -} diff --git a/tests/fate/libavutil.mak b/tests/fate/libavutil.mak index 591cab9..2ec5650 100644 --- a/tests/fate/libavutil.mak +++ b/tests/fate/libavutil.mak @@ -23,11 +23,6 @@ fate-cast5: libavutil/tests/cast5$(EXESUF) fate-cast5: CMD = run libavutil/tests/cast5 fate-cast5: CMP = null -FATE_LIBAVUTIL += fate-atomic -fate-atomic: libavutil/tests/atomic$(EXESUF) -fate-atomic: CMD = run libavutil/tests/atomic -fate-atomic: CMP = null - FATE_LIBAVUTIL += fate-audio_fifo fate-audio_fifo: libavutil/tests/audio_fifo$(EXESUF) fate-audio_fifo: CMD = run libavutil/tests/audio_fifo