[FFmpeg-devel] [PATCH 0/7] convert most of the remaining files to stdatomic

James Almer jamrial at gmail.com
Thu Mar 23 04:01:16 EET 2017


On 3/22/2017 10:01 PM, Michael Niedermayer wrote:
> On Wed, Mar 22, 2017 at 08:34:05PM -0300, James Almer wrote:
>> This set deals with most of the remaining cases of libavutil/atomic.h usage.
>> "make fate THREADS=4" passes here on mingw-w64, but I'm not 100% sure fate
>> has proper coverage of some of these functions.
>>
>> Only ones remaining are Decklink (It's C++98 and I'm not sure how wise would
>> it be to include a C11 header in there, so i'm leaving that to someone else),
>> and error_resilience.
>>
>> James Almer (7):
>>   avcodec/mediacodec: convert to stdatomic
>>   avcodec/utils: convert to stdatomic
>>   avcodec/parser: convert to stdatomic
>>   avformat/format: convert to stdatomic
>>   avfilter/avfilter: convert to stdatomic
>>   avutil/opencl: convert to stdatomic
>>   avcodec/videotoolboxenc: remove unused atomic header
>>
>>  libavcodec/mediacodec.c           |  5 ++---
>>  libavcodec/mediacodecdec.c        |  1 -
>>  libavcodec/mediacodecdec_common.c | 14 ++++++--------
>>  libavcodec/mediacodecdec_common.h |  5 +++--
>>  libavcodec/parser.c               | 14 ++++++++++----
>>  libavcodec/utils.c                | 19 +++++++++++--------
>>  libavcodec/videotoolboxenc.c      |  1 -
>>  libavfilter/avfilter.c            |  6 ++++--
>>  libavformat/format.c              |  9 ++++++---
>>  libavutil/opencl.c                |  5 +++--
>>  10 files changed, 45 insertions(+), 34 deletions(-)
> 
> This breaks building with clang
> 
> CC      libavfilter/avfilter.o
> CC      libavformat/format.o
> CC      libavcodec/parser.o
> CC      libavcodec/utils.o
> src/libavformat/format.c:68:51: error: address argument to atomic operation must be a pointer to _Atomic type ('AVInputFormat **' (aka 'struct AVInputFormat **') invalid)
>     while(p != &format->next && !format->next && !__c11_atomic_compare_exchange_strong(p, &cmp, format, 5, 5))
>                                                   ^                                    ~
> src/libavformat/format.c:81:51: error: address argument to atomic operation must be a pointer to _Atomic type ('AVOutputFormat **' (aka 'struct AVOutputFormat **') invalid)
>     while(p != &format->next && !format->next && !__c11_atomic_compare_exchange_strong(p, &cmp, format, 5, 5))
>                                                   ^                                    ~
> 2 errors generated.
> make: *** [libavformat/format.o] Error 1

Casting the first argument to (atomic_intptr_t *) on GCC 6 gives me a warning
about making integer from pointer, but still works nonetheless.

I'm not sure how to fix this. Got any idea?



More information about the ffmpeg-devel mailing list