Re: [FFmpeg-devel] [PATCH] avutil/atomics: replace avpriv atomics with stdatomics

2017-12-15 Thread Hendrik Leppkes
On Sat, Dec 16, 2017 at 12:04 AM, Michael Niedermayer
 wrote:
> On Fri, Dec 15, 2017 at 06:11:34PM +, Josh de Kock wrote:
>> On Fri, 15 Dec 2017 18:08:02 +
>> Josh de Kock  wrote:
>>
>> > [...]
>>
>> Attached again with the correct mime...
>>
>> --
>> Josh de Kock 
>
>>  b/libavcodec/error_resilience.c |1
>>  b/libavcodec/parser.c   |4 -
>>  b/libavcodec/utils.c|   13 ++--
>>  b/libavfilter/avfilter.c|5 +
>>  b/libavformat/format.c  |9 +--
>>  b/libavutil/Makefile|6 --
>>  b/tests/fate/libavutil.mak  |5 -
>>  libavutil/atomic.c  |  109 
>> 
>>  libavutil/atomic.h  |   79 
>>  libavutil/atomic_gcc.h  |   61 --
>>  libavutil/atomic_suncc.h|   54 ---
>>  libavutil/atomic_win32.h|   54 ---
>>  libavutil/tests/atomic.c|   38 -
>>  13 files changed, 17 insertions(+), 421 deletions(-)
>> 6c235f1bdd516f693810c7edaa8eded3e01f1405  
>> 0001-avutil-atomics-replace-avpriv-atomics-with-stdatomics.patch
>> From 2c4771a24510adfb3f6346c3fbed0554034eab3b Mon Sep 17 00:00:00 2001
>> From: Josh de Kock 
>> Date: Fri, 15 Dec 2017 09:29:55 -0800
>> Subject: [PATCH] avutil/atomics: replace avpriv atomics with stdatomics
>
> This fails to build with gcc (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
>
> make
> CC  libavfilter/avfilter.o
> libavfilter/avfilter.c: In function ‘avfilter_register’:
> libavfilter/avfilter.c:603:43: error: expected ‘)’ before ‘_Atomic’
>  while(*f || !atomic_compare_exchange_weak((AVFilter* _Atomic*) f, 
> >next, filter))
>^
> libavfilter/avfilter.c:603:63: warning: initialization from incompatible 
> pointer type [enabled by default]
>  while(*f || !atomic_compare_exchange_weak((AVFilter* _Atomic*) f, 
> >next, filter))
>^
> libavfilter/avfilter.c:603:103: error: expected ‘)’ before ‘_Atomic’
>  while(*f || !atomic_compare_exchange_weak((AVFilter* _Atomic*) f, 
> >next, filter))
>   
>  ^
> libavfilter/avfilter.c:603:178: error: expected ‘)’ before ‘_Atomic’
>  while(*f || !atomic_compare_exchange_weak((AVFilter* _Atomic*) f, 
> >next, filter))
>   
>   
>   ^
> libavfilter/avfilter.c:603:178: error: incompatible type for argument 1 of 
> ‘__sync_val_compare_and_swap’
> libavfilter/avfilter.c:603:215: error: invalid operands to binary == (have 
> ‘AVFilter’ and ‘AVFilter’)
>  while(*f || !atomic_compare_exchange_weak((AVFilter* _Atomic*) f, 
> >next, filter))
>   
>   
>^
> make: *** [libavfilter/avfilter.o] Error 1
>

_Atomic should probably be defined to "volatile" in both the gcc and
the msvc fallback. Still not sure the casting is really "safe" though.

- Hendrik
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] avutil/atomics: replace avpriv atomics with stdatomics

2017-12-15 Thread Michael Niedermayer
On Fri, Dec 15, 2017 at 06:11:34PM +, Josh de Kock wrote:
> On Fri, 15 Dec 2017 18:08:02 +
> Josh de Kock  wrote:
> 
> > [...]
> 
> Attached again with the correct mime...
> 
> -- 
> Josh de Kock 

>  b/libavcodec/error_resilience.c |1 
>  b/libavcodec/parser.c   |4 -
>  b/libavcodec/utils.c|   13 ++--
>  b/libavfilter/avfilter.c|5 +
>  b/libavformat/format.c  |9 +--
>  b/libavutil/Makefile|6 --
>  b/tests/fate/libavutil.mak  |5 -
>  libavutil/atomic.c  |  109 
> 
>  libavutil/atomic.h  |   79 
>  libavutil/atomic_gcc.h  |   61 --
>  libavutil/atomic_suncc.h|   54 ---
>  libavutil/atomic_win32.h|   54 ---
>  libavutil/tests/atomic.c|   38 -
>  13 files changed, 17 insertions(+), 421 deletions(-)
> 6c235f1bdd516f693810c7edaa8eded3e01f1405  
> 0001-avutil-atomics-replace-avpriv-atomics-with-stdatomics.patch
> From 2c4771a24510adfb3f6346c3fbed0554034eab3b Mon Sep 17 00:00:00 2001
> From: Josh de Kock 
> Date: Fri, 15 Dec 2017 09:29:55 -0800
> Subject: [PATCH] avutil/atomics: replace avpriv atomics with stdatomics

This fails to build with gcc (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5

make
CC  libavfilter/avfilter.o
libavfilter/avfilter.c: In function ‘avfilter_register’:
libavfilter/avfilter.c:603:43: error: expected ‘)’ before ‘_Atomic’
 while(*f || !atomic_compare_exchange_weak((AVFilter* _Atomic*) f, 
>next, filter))
   ^
libavfilter/avfilter.c:603:63: warning: initialization from incompatible 
pointer type [enabled by default]
 while(*f || !atomic_compare_exchange_weak((AVFilter* _Atomic*) f, 
>next, filter))
   ^
libavfilter/avfilter.c:603:103: error: expected ‘)’ before ‘_Atomic’
 while(*f || !atomic_compare_exchange_weak((AVFilter* _Atomic*) f, 
>next, filter))

   ^
libavfilter/avfilter.c:603:178: error: expected ‘)’ before ‘_Atomic’
 while(*f || !atomic_compare_exchange_weak((AVFilter* _Atomic*) f, 
>next, filter))


  ^
libavfilter/avfilter.c:603:178: error: incompatible type for argument 1 of 
‘__sync_val_compare_and_swap’
libavfilter/avfilter.c:603:215: error: invalid operands to binary == (have 
‘AVFilter’ and ‘AVFilter’)
 while(*f || !atomic_compare_exchange_weak((AVFilter* _Atomic*) f, 
>next, filter))


   ^
make: *** [libavfilter/avfilter.o] Error 1

[...]
-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

I know you won't believe me, but the highest form of Human Excellence is
to question oneself and others. -- Socrates


signature.asc
Description: PGP signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] avutil/atomics: replace avpriv atomics with stdatomics

2017-12-15 Thread Josh de Kock
On Fri, 15 Dec 2017 18:08:02 +
Josh de Kock  wrote:

> [...]

Attached again with the correct mime...

-- 
Josh de Kock 
>From 2c4771a24510adfb3f6346c3fbed0554034eab3b Mon Sep 17 00:00:00 2001
From: Josh de Kock 
Date: Fri, 15 Dec 2017 09:29:55 -0800
Subject: [PATCH] avutil/atomics: replace avpriv atomics with stdatomics

---
 libavcodec/error_resilience.c |   1 -
 libavcodec/parser.c   |   4 +-
 libavcodec/utils.c|  13 +++--
 libavfilter/avfilter.c|   5 +-
 libavformat/format.c  |   9 ++--
 libavutil/Makefile|   6 ---
 libavutil/atomic.c| 109 --
 libavutil/atomic.h|  79 --
 libavutil/atomic_gcc.h|  61 ---
 libavutil/atomic_suncc.h  |  54 -
 libavutil/atomic_win32.h  |  54 -
 libavutil/tests/atomic.c  |  38 ---
 tests/fate/libavutil.mak  |   5 --
 13 files changed, 17 insertions(+), 421 deletions(-)
 delete mode 100644 libavutil/atomic.c
 delete mode 100644 libavutil/atomic.h
 delete mode 100644 libavutil/atomic_gcc.h
 delete mode 100644 libavutil/atomic_suncc.h
 delete mode 100644 libavutil/atomic_win32.h
 delete mode 100644 libavutil/tests/atomic.c

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 
*)_first_parser, parser->next, parser));
+} while (!atomic_compare_exchange_weak((AVCodecParser * _Atomic 
*)_first_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, _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, 
>next, codec))
 p = &(*p)->next;
+
 last_avcodec = >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, 
>next, filter))
 f = &(*f)->next;
 last_filter = >next;
 
diff --git a/libavformat/format.c b/libavformat/format.c
index 38ca2a3..9acfecd 100644
--- 

[FFmpeg-devel] [PATCH] avutil/atomics: replace avpriv atomics with stdatomics

2017-12-15 Thread Josh de Kock
Hi,

Sorry for sending this patch as an attachment, struggling to get email working 
properly on new setup.

This patch replaces the current avpriv atomics with stdatomics. It passes fate 
on the latest macOS and the lastest LTS Ubuntu Linux. I haven't tested it on 
Windows as I don't know too much about development on the platform, but I've 
been told that _Atomic may not be available on it.

-- 
Josh de Kock 


0001-avutil-atomics-replace-avpriv-atomics-with-stdatomics.patch
Description: plain/text
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel