Message ID | 20171207010246.6292-1-mateuszb@poczta.onet.pl |
---|---|
State | Superseded |
Headers | show |
On Thu, Dec 7, 2017 at 2:02 AM, Mateusz <mateuszb@poczta.onet.pl> wrote: > After commit 3701d49 'error_resilience: remove avpriv_atomic usage' > we have included windows.h in much more files and we should > avoid conflicts with defines/function declarations. > > We should declare compatible variables for atomic compat wrappers > that expect fixed size variables in atomic_compare_exchange* macro. > > Signed-off-by: Mateusz Brzostek <mateuszb@poczta.onet.pl> > --- > libavcodec/jpegls.h | 2 ++ > libavcodec/mjpegdec.h | 2 ++ > libavcodec/mss2.c | 6 +++--- > libavcodec/utils.c | 12 ++++++++++++ > libavformat/mxfenc.c | 2 +- > 5 files changed, 20 insertions(+), 4 deletions(-) > > diff --git a/libavcodec/jpegls.h b/libavcodec/jpegls.h > index c8997c7861..6b89b2afa3 100644 > --- a/libavcodec/jpegls.h > +++ b/libavcodec/jpegls.h > @@ -32,6 +32,8 @@ > #include "avcodec.h" > #include "internal.h" > > +#undef near /* This file uses struct member 'near' which in windows.h is defined as empty. */ > + > typedef struct JpeglsContext { > AVCodecContext *avctx; > } JpeglsContext; > diff --git a/libavcodec/mjpegdec.h b/libavcodec/mjpegdec.h > index c84a40aa6e..c36fba5f22 100644 > --- a/libavcodec/mjpegdec.h > +++ b/libavcodec/mjpegdec.h > @@ -39,6 +39,8 @@ > #include "hpeldsp.h" > #include "idctdsp.h" > > +#undef near /* This file uses struct member 'near' which in windows.h is defined as empty. */ > + > #define MAX_COMPONENTS 4 > > typedef struct MJpegDecodeContext { > diff --git a/libavcodec/mss2.c b/libavcodec/mss2.c > index 9e7cc466de..3180af1d60 100644 > --- a/libavcodec/mss2.c > +++ b/libavcodec/mss2.c > @@ -464,9 +464,9 @@ static int decode_wmv9(AVCodecContext *avctx, const uint8_t *buf, int buf_size, > return 0; > } > > -typedef struct Rectangle { > +struct Rectangle { > int coded, x, y, w, h; > -} Rectangle; > +}; > > #define MAX_WMV9_RECTANGLES 20 > #define ARITH2_PADDING 2 > @@ -485,7 +485,7 @@ static int mss2_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, > > int keyframe, has_wmv9, has_mv, is_rle, is_555, ret; > > - Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; > + struct Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; > int used_rects = 0, i, implicit_rect = 0, av_uninit(wmv9_mask); > > if ((ret = init_get_bits8(&gb, buf, buf_size)) < 0) > diff --git a/libavcodec/utils.c b/libavcodec/utils.c > index baf09119fe..70a0764714 100644 > --- a/libavcodec/utils.c > +++ b/libavcodec/utils.c > @@ -1943,7 +1943,13 @@ int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)) > > int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec) > { > +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ > + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) > _Bool exp = 0; > +#else > + atomic_bool exp = 0; > +#endif > + > if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || !codec->init) > return 0; > > @@ -1969,7 +1975,13 @@ int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec) > > int ff_unlock_avcodec(const AVCodec *codec) > { > +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ > + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) > _Bool exp = 1; > +#else > + atomic_bool exp = 1; > +#endif > + > if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || !codec->init) > return 0; > These ifdefs here are very ugly, and as mentioned in another mail, the atomics in those two functions arent even required - all access to those variables is supposed to be protected by the lockmgr anyway. So it would be easier to just remove any atomic nature of those variables (or at the very lease replace the compare_exchange with a store to solve this problem at hand). - Hendrik
W dniu 07.12.2017 o 10:42, Hendrik Leppkes pisze: > On Thu, Dec 7, 2017 at 2:02 AM, Mateusz <mateuszb@poczta.onet.pl> wrote: >> After commit 3701d49 'error_resilience: remove avpriv_atomic usage' >> we have included windows.h in much more files and we should >> avoid conflicts with defines/function declarations. >> >> We should declare compatible variables for atomic compat wrappers >> that expect fixed size variables in atomic_compare_exchange* macro. >> >> Signed-off-by: Mateusz Brzostek <mateuszb@poczta.onet.pl> >> --- >> libavcodec/jpegls.h | 2 ++ >> libavcodec/mjpegdec.h | 2 ++ >> libavcodec/mss2.c | 6 +++--- >> libavcodec/utils.c | 12 ++++++++++++ >> libavformat/mxfenc.c | 2 +- >> 5 files changed, 20 insertions(+), 4 deletions(-) >> >> diff --git a/libavcodec/jpegls.h b/libavcodec/jpegls.h >> index c8997c7861..6b89b2afa3 100644 >> --- a/libavcodec/jpegls.h >> +++ b/libavcodec/jpegls.h >> @@ -32,6 +32,8 @@ >> #include "avcodec.h" >> #include "internal.h" >> >> +#undef near /* This file uses struct member 'near' which in windows.h is defined as empty. */ >> + >> typedef struct JpeglsContext { >> AVCodecContext *avctx; >> } JpeglsContext; >> diff --git a/libavcodec/mjpegdec.h b/libavcodec/mjpegdec.h >> index c84a40aa6e..c36fba5f22 100644 >> --- a/libavcodec/mjpegdec.h >> +++ b/libavcodec/mjpegdec.h >> @@ -39,6 +39,8 @@ >> #include "hpeldsp.h" >> #include "idctdsp.h" >> >> +#undef near /* This file uses struct member 'near' which in windows.h is defined as empty. */ >> + >> #define MAX_COMPONENTS 4 >> >> typedef struct MJpegDecodeContext { >> diff --git a/libavcodec/mss2.c b/libavcodec/mss2.c >> index 9e7cc466de..3180af1d60 100644 >> --- a/libavcodec/mss2.c >> +++ b/libavcodec/mss2.c >> @@ -464,9 +464,9 @@ static int decode_wmv9(AVCodecContext *avctx, const uint8_t *buf, int buf_size, >> return 0; >> } >> >> -typedef struct Rectangle { >> +struct Rectangle { >> int coded, x, y, w, h; >> -} Rectangle; >> +}; >> >> #define MAX_WMV9_RECTANGLES 20 >> #define ARITH2_PADDING 2 >> @@ -485,7 +485,7 @@ static int mss2_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, >> >> int keyframe, has_wmv9, has_mv, is_rle, is_555, ret; >> >> - Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; >> + struct Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; >> int used_rects = 0, i, implicit_rect = 0, av_uninit(wmv9_mask); >> >> if ((ret = init_get_bits8(&gb, buf, buf_size)) < 0) >> diff --git a/libavcodec/utils.c b/libavcodec/utils.c >> index baf09119fe..70a0764714 100644 >> --- a/libavcodec/utils.c >> +++ b/libavcodec/utils.c >> @@ -1943,7 +1943,13 @@ int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)) >> >> int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec) >> { >> +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ >> + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) >> _Bool exp = 0; >> +#else >> + atomic_bool exp = 0; >> +#endif >> + >> if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || !codec->init) >> return 0; >> >> @@ -1969,7 +1975,13 @@ int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec) >> >> int ff_unlock_avcodec(const AVCodec *codec) >> { >> +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ >> + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) >> _Bool exp = 1; >> +#else >> + atomic_bool exp = 1; >> +#endif >> + >> if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || !codec->init) >> return 0; >> > > These ifdefs here are very ugly, and as mentioned in another mail, the > atomics in those two functions arent even required - all access to > those variables is supposed to be protected by the lockmgr anyway. > So it would be easier to just remove any atomic nature of those > variables (or at the very lease replace the compare_exchange with a > store to solve this problem at hand). I'm not sure but are you proposed to revert commit https://github.com/FFmpeg/FFmpeg/commit/590136e78da3d091ea99ab5432543d47a559a461 ? If commit 590136e should stay we could use atomic_intptr_t/intptr_t for ff_avcodec_locked/exp -- it will be working with all wrappers without ugly ifdefs. Mateusz
Am 07.12.2017 20:40 schrieb "Mateusz" <mateuszb@poczta.onet.pl>: W dniu 07.12.2017 o 10:42, Hendrik Leppkes pisze: > On Thu, Dec 7, 2017 at 2:02 AM, Mateusz <mateuszb@poczta.onet.pl> wrote: >> After commit 3701d49 'error_resilience: remove avpriv_atomic usage' >> we have included windows.h in much more files and we should >> avoid conflicts with defines/function declarations. >> >> We should declare compatible variables for atomic compat wrappers >> that expect fixed size variables in atomic_compare_exchange* macro. >> >> Signed-off-by: Mateusz Brzostek <mateuszb@poczta.onet.pl> >> --- >> libavcodec/jpegls.h | 2 ++ >> libavcodec/mjpegdec.h | 2 ++ >> libavcodec/mss2.c | 6 +++--- >> libavcodec/utils.c | 12 ++++++++++++ >> libavformat/mxfenc.c | 2 +- >> 5 files changed, 20 insertions(+), 4 deletions(-) >> >> diff --git a/libavcodec/jpegls.h b/libavcodec/jpegls.h >> index c8997c7861..6b89b2afa3 100644 >> --- a/libavcodec/jpegls.h >> +++ b/libavcodec/jpegls.h >> @@ -32,6 +32,8 @@ >> #include "avcodec.h" >> #include "internal.h" >> >> +#undef near /* This file uses struct member 'near' which in windows.h is defined as empty. */ >> + >> typedef struct JpeglsContext { >> AVCodecContext *avctx; >> } JpeglsContext; >> diff --git a/libavcodec/mjpegdec.h b/libavcodec/mjpegdec.h >> index c84a40aa6e..c36fba5f22 100644 >> --- a/libavcodec/mjpegdec.h >> +++ b/libavcodec/mjpegdec.h >> @@ -39,6 +39,8 @@ >> #include "hpeldsp.h" >> #include "idctdsp.h" >> >> +#undef near /* This file uses struct member 'near' which in windows.h is defined as empty. */ >> + >> #define MAX_COMPONENTS 4 >> >> typedef struct MJpegDecodeContext { >> diff --git a/libavcodec/mss2.c b/libavcodec/mss2.c >> index 9e7cc466de..3180af1d60 100644 >> --- a/libavcodec/mss2.c >> +++ b/libavcodec/mss2.c >> @@ -464,9 +464,9 @@ static int decode_wmv9(AVCodecContext *avctx, const uint8_t *buf, int buf_size, >> return 0; >> } >> >> -typedef struct Rectangle { >> +struct Rectangle { >> int coded, x, y, w, h; >> -} Rectangle; >> +}; >> >> #define MAX_WMV9_RECTANGLES 20 >> #define ARITH2_PADDING 2 >> @@ -485,7 +485,7 @@ static int mss2_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, >> >> int keyframe, has_wmv9, has_mv, is_rle, is_555, ret; >> >> - Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; >> + struct Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; >> int used_rects = 0, i, implicit_rect = 0, av_uninit(wmv9_mask); >> >> if ((ret = init_get_bits8(&gb, buf, buf_size)) < 0) >> diff --git a/libavcodec/utils.c b/libavcodec/utils.c >> index baf09119fe..70a0764714 100644 >> --- a/libavcodec/utils.c >> +++ b/libavcodec/utils.c >> @@ -1943,7 +1943,13 @@ int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)) >> >> int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec) >> { >> +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ >> + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) >> _Bool exp = 0; >> +#else >> + atomic_bool exp = 0; >> +#endif >> + >> if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || !codec->init) >> return 0; >> >> @@ -1969,7 +1975,13 @@ int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec) >> >> int ff_unlock_avcodec(const AVCodec *codec) >> { >> +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ >> + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) >> _Bool exp = 1; >> +#else >> + atomic_bool exp = 1; >> +#endif >> + >> if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || !codec->init) >> return 0; >> > > These ifdefs here are very ugly, and as mentioned in another mail, the > atomics in those two functions arent even required - all access to > those variables is supposed to be protected by the lockmgr anyway. > So it would be easier to just remove any atomic nature of those > variables (or at the very lease replace the compare_exchange with a > store to solve this problem at hand). I'm not sure but are you proposed to revert commit https://github.com/FFmpeg/FFmpeg/commit/590136e78da3d091ea99ab5432543d 47a559a461 Basically, yes. Atomics are not needed for this variable, as access to it should be serialized anyways.
W dniu 07.12.2017 o 22:58, Hendrik Leppkes pisze: > Am 07.12.2017 20:40 schrieb "Mateusz" <mateuszb@poczta.onet.pl>: > > W dniu 07.12.2017 o 10:42, Hendrik Leppkes pisze: >> On Thu, Dec 7, 2017 at 2:02 AM, Mateusz <mateuszb@poczta.onet.pl> wrote: >>> After commit 3701d49 'error_resilience: remove avpriv_atomic usage' >>> we have included windows.h in much more files and we should >>> avoid conflicts with defines/function declarations. >>> >>> We should declare compatible variables for atomic compat wrappers >>> that expect fixed size variables in atomic_compare_exchange* macro. >>> >>> Signed-off-by: Mateusz Brzostek <mateuszb@poczta.onet.pl> >>> --- >>> libavcodec/jpegls.h | 2 ++ >>> libavcodec/mjpegdec.h | 2 ++ >>> libavcodec/mss2.c | 6 +++--- >>> libavcodec/utils.c | 12 ++++++++++++ >>> libavformat/mxfenc.c | 2 +- >>> 5 files changed, 20 insertions(+), 4 deletions(-) >>> >>> diff --git a/libavcodec/jpegls.h b/libavcodec/jpegls.h >>> index c8997c7861..6b89b2afa3 100644 >>> --- a/libavcodec/jpegls.h >>> +++ b/libavcodec/jpegls.h >>> @@ -32,6 +32,8 @@ >>> #include "avcodec.h" >>> #include "internal.h" >>> >>> +#undef near /* This file uses struct member 'near' which in windows.h > is defined as empty. */ >>> + >>> typedef struct JpeglsContext { >>> AVCodecContext *avctx; >>> } JpeglsContext; >>> diff --git a/libavcodec/mjpegdec.h b/libavcodec/mjpegdec.h >>> index c84a40aa6e..c36fba5f22 100644 >>> --- a/libavcodec/mjpegdec.h >>> +++ b/libavcodec/mjpegdec.h >>> @@ -39,6 +39,8 @@ >>> #include "hpeldsp.h" >>> #include "idctdsp.h" >>> >>> +#undef near /* This file uses struct member 'near' which in windows.h > is defined as empty. */ >>> + >>> #define MAX_COMPONENTS 4 >>> >>> typedef struct MJpegDecodeContext { >>> diff --git a/libavcodec/mss2.c b/libavcodec/mss2.c >>> index 9e7cc466de..3180af1d60 100644 >>> --- a/libavcodec/mss2.c >>> +++ b/libavcodec/mss2.c >>> @@ -464,9 +464,9 @@ static int decode_wmv9(AVCodecContext *avctx, const > uint8_t *buf, int buf_size, >>> return 0; >>> } >>> >>> -typedef struct Rectangle { >>> +struct Rectangle { >>> int coded, x, y, w, h; >>> -} Rectangle; >>> +}; >>> >>> #define MAX_WMV9_RECTANGLES 20 >>> #define ARITH2_PADDING 2 >>> @@ -485,7 +485,7 @@ static int mss2_decode_frame(AVCodecContext *avctx, > void *data, int *got_frame, >>> >>> int keyframe, has_wmv9, has_mv, is_rle, is_555, ret; >>> >>> - Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; >>> + struct Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; >>> int used_rects = 0, i, implicit_rect = 0, av_uninit(wmv9_mask); >>> >>> if ((ret = init_get_bits8(&gb, buf, buf_size)) < 0) >>> diff --git a/libavcodec/utils.c b/libavcodec/utils.c >>> index baf09119fe..70a0764714 100644 >>> --- a/libavcodec/utils.c >>> +++ b/libavcodec/utils.c >>> @@ -1943,7 +1943,13 @@ int av_lockmgr_register(int (*cb)(void **mutex, > enum AVLockOp op)) >>> >>> int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec) >>> { >>> +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && > !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ >>> + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && > !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) >>> _Bool exp = 0; >>> +#else >>> + atomic_bool exp = 0; >>> +#endif >>> + >>> if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || > !codec->init) >>> return 0; >>> >>> @@ -1969,7 +1975,13 @@ int ff_lock_avcodec(AVCodecContext *log_ctx, > const AVCodec *codec) >>> >>> int ff_unlock_avcodec(const AVCodec *codec) >>> { >>> +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && > !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ >>> + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && > !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) >>> _Bool exp = 1; >>> +#else >>> + atomic_bool exp = 1; >>> +#endif >>> + >>> if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || > !codec->init) >>> return 0; >>> >> >> These ifdefs here are very ugly, and as mentioned in another mail, the >> atomics in those two functions arent even required - all access to >> those variables is supposed to be protected by the lockmgr anyway. >> So it would be easier to just remove any atomic nature of those >> variables (or at the very lease replace the compare_exchange with a >> store to solve this problem at hand). > > I'm not sure but are you proposed to revert commit > https://github.com/FFmpeg/FFmpeg/commit/590136e78da3d091ea99ab5432543d > 47a559a461 > > > Basically, yes. Atomics are not needed for this variable, as access to it > should be serialized anyways. OK for me. I've sent smaller patch (only near/Rectangle stuff). Mateusz
On Fri, Dec 8, 2017 at 8:49 AM, Mateusz <mateuszb@poczta.onet.pl> wrote: > W dniu 07.12.2017 o 22:58, Hendrik Leppkes pisze: >> Am 07.12.2017 20:40 schrieb "Mateusz" <mateuszb@poczta.onet.pl>: >> >> W dniu 07.12.2017 o 10:42, Hendrik Leppkes pisze: >>> On Thu, Dec 7, 2017 at 2:02 AM, Mateusz <mateuszb@poczta.onet.pl> wrote: >>>> After commit 3701d49 'error_resilience: remove avpriv_atomic usage' >>>> we have included windows.h in much more files and we should >>>> avoid conflicts with defines/function declarations. >>>> >>>> We should declare compatible variables for atomic compat wrappers >>>> that expect fixed size variables in atomic_compare_exchange* macro. >>>> >>>> Signed-off-by: Mateusz Brzostek <mateuszb@poczta.onet.pl> >>>> --- >>>> libavcodec/jpegls.h | 2 ++ >>>> libavcodec/mjpegdec.h | 2 ++ >>>> libavcodec/mss2.c | 6 +++--- >>>> libavcodec/utils.c | 12 ++++++++++++ >>>> libavformat/mxfenc.c | 2 +- >>>> 5 files changed, 20 insertions(+), 4 deletions(-) >>>> >>>> diff --git a/libavcodec/jpegls.h b/libavcodec/jpegls.h >>>> index c8997c7861..6b89b2afa3 100644 >>>> --- a/libavcodec/jpegls.h >>>> +++ b/libavcodec/jpegls.h >>>> @@ -32,6 +32,8 @@ >>>> #include "avcodec.h" >>>> #include "internal.h" >>>> >>>> +#undef near /* This file uses struct member 'near' which in windows.h >> is defined as empty. */ >>>> + >>>> typedef struct JpeglsContext { >>>> AVCodecContext *avctx; >>>> } JpeglsContext; >>>> diff --git a/libavcodec/mjpegdec.h b/libavcodec/mjpegdec.h >>>> index c84a40aa6e..c36fba5f22 100644 >>>> --- a/libavcodec/mjpegdec.h >>>> +++ b/libavcodec/mjpegdec.h >>>> @@ -39,6 +39,8 @@ >>>> #include "hpeldsp.h" >>>> #include "idctdsp.h" >>>> >>>> +#undef near /* This file uses struct member 'near' which in windows.h >> is defined as empty. */ >>>> + >>>> #define MAX_COMPONENTS 4 >>>> >>>> typedef struct MJpegDecodeContext { >>>> diff --git a/libavcodec/mss2.c b/libavcodec/mss2.c >>>> index 9e7cc466de..3180af1d60 100644 >>>> --- a/libavcodec/mss2.c >>>> +++ b/libavcodec/mss2.c >>>> @@ -464,9 +464,9 @@ static int decode_wmv9(AVCodecContext *avctx, const >> uint8_t *buf, int buf_size, >>>> return 0; >>>> } >>>> >>>> -typedef struct Rectangle { >>>> +struct Rectangle { >>>> int coded, x, y, w, h; >>>> -} Rectangle; >>>> +}; >>>> >>>> #define MAX_WMV9_RECTANGLES 20 >>>> #define ARITH2_PADDING 2 >>>> @@ -485,7 +485,7 @@ static int mss2_decode_frame(AVCodecContext *avctx, >> void *data, int *got_frame, >>>> >>>> int keyframe, has_wmv9, has_mv, is_rle, is_555, ret; >>>> >>>> - Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; >>>> + struct Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; >>>> int used_rects = 0, i, implicit_rect = 0, av_uninit(wmv9_mask); >>>> >>>> if ((ret = init_get_bits8(&gb, buf, buf_size)) < 0) >>>> diff --git a/libavcodec/utils.c b/libavcodec/utils.c >>>> index baf09119fe..70a0764714 100644 >>>> --- a/libavcodec/utils.c >>>> +++ b/libavcodec/utils.c >>>> @@ -1943,7 +1943,13 @@ int av_lockmgr_register(int (*cb)(void **mutex, >> enum AVLockOp op)) >>>> >>>> int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec) >>>> { >>>> +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && >> !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ >>>> + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && >> !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) >>>> _Bool exp = 0; >>>> +#else >>>> + atomic_bool exp = 0; >>>> +#endif >>>> + >>>> if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || >> !codec->init) >>>> return 0; >>>> >>>> @@ -1969,7 +1975,13 @@ int ff_lock_avcodec(AVCodecContext *log_ctx, >> const AVCodec *codec) >>>> >>>> int ff_unlock_avcodec(const AVCodec *codec) >>>> { >>>> +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && >> !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ >>>> + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && >> !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) >>>> _Bool exp = 1; >>>> +#else >>>> + atomic_bool exp = 1; >>>> +#endif >>>> + >>>> if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || >> !codec->init) >>>> return 0; >>>> >>> >>> These ifdefs here are very ugly, and as mentioned in another mail, the >>> atomics in those two functions arent even required - all access to >>> those variables is supposed to be protected by the lockmgr anyway. >>> So it would be easier to just remove any atomic nature of those >>> variables (or at the very lease replace the compare_exchange with a >>> store to solve this problem at hand). >> >> I'm not sure but are you proposed to revert commit >> https://github.com/FFmpeg/FFmpeg/commit/590136e78da3d091ea99ab5432543d >> 47a559a461 >> >> >> Basically, yes. Atomics are not needed for this variable, as access to it >> should be serialized anyways. > > OK for me. I've sent smaller patch (only near/Rectangle stuff). > LGTM.
On 12/9/2017 1:18 AM, Hendrik Leppkes wrote: > On Fri, Dec 8, 2017 at 8:49 AM, Mateusz <mateuszb@poczta.onet.pl> wrote: >> W dniu 07.12.2017 o 22:58, Hendrik Leppkes pisze: >>> Am 07.12.2017 20:40 schrieb "Mateusz" <mateuszb@poczta.onet.pl>: >>> >>> W dniu 07.12.2017 o 10:42, Hendrik Leppkes pisze: >>>> On Thu, Dec 7, 2017 at 2:02 AM, Mateusz <mateuszb@poczta.onet.pl> wrote: >>>>> After commit 3701d49 'error_resilience: remove avpriv_atomic usage' >>>>> we have included windows.h in much more files and we should >>>>> avoid conflicts with defines/function declarations. >>>>> >>>>> We should declare compatible variables for atomic compat wrappers >>>>> that expect fixed size variables in atomic_compare_exchange* macro. >>>>> >>>>> Signed-off-by: Mateusz Brzostek <mateuszb@poczta.onet.pl> >>>>> --- >>>>> libavcodec/jpegls.h | 2 ++ >>>>> libavcodec/mjpegdec.h | 2 ++ >>>>> libavcodec/mss2.c | 6 +++--- >>>>> libavcodec/utils.c | 12 ++++++++++++ >>>>> libavformat/mxfenc.c | 2 +- >>>>> 5 files changed, 20 insertions(+), 4 deletions(-) >>>>> >>>>> diff --git a/libavcodec/jpegls.h b/libavcodec/jpegls.h >>>>> index c8997c7861..6b89b2afa3 100644 >>>>> --- a/libavcodec/jpegls.h >>>>> +++ b/libavcodec/jpegls.h >>>>> @@ -32,6 +32,8 @@ >>>>> #include "avcodec.h" >>>>> #include "internal.h" >>>>> >>>>> +#undef near /* This file uses struct member 'near' which in windows.h >>> is defined as empty. */ >>>>> + >>>>> typedef struct JpeglsContext { >>>>> AVCodecContext *avctx; >>>>> } JpeglsContext; >>>>> diff --git a/libavcodec/mjpegdec.h b/libavcodec/mjpegdec.h >>>>> index c84a40aa6e..c36fba5f22 100644 >>>>> --- a/libavcodec/mjpegdec.h >>>>> +++ b/libavcodec/mjpegdec.h >>>>> @@ -39,6 +39,8 @@ >>>>> #include "hpeldsp.h" >>>>> #include "idctdsp.h" >>>>> >>>>> +#undef near /* This file uses struct member 'near' which in windows.h >>> is defined as empty. */ >>>>> + >>>>> #define MAX_COMPONENTS 4 >>>>> >>>>> typedef struct MJpegDecodeContext { >>>>> diff --git a/libavcodec/mss2.c b/libavcodec/mss2.c >>>>> index 9e7cc466de..3180af1d60 100644 >>>>> --- a/libavcodec/mss2.c >>>>> +++ b/libavcodec/mss2.c >>>>> @@ -464,9 +464,9 @@ static int decode_wmv9(AVCodecContext *avctx, const >>> uint8_t *buf, int buf_size, >>>>> return 0; >>>>> } >>>>> >>>>> -typedef struct Rectangle { >>>>> +struct Rectangle { >>>>> int coded, x, y, w, h; >>>>> -} Rectangle; >>>>> +}; >>>>> >>>>> #define MAX_WMV9_RECTANGLES 20 >>>>> #define ARITH2_PADDING 2 >>>>> @@ -485,7 +485,7 @@ static int mss2_decode_frame(AVCodecContext *avctx, >>> void *data, int *got_frame, >>>>> >>>>> int keyframe, has_wmv9, has_mv, is_rle, is_555, ret; >>>>> >>>>> - Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; >>>>> + struct Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; >>>>> int used_rects = 0, i, implicit_rect = 0, av_uninit(wmv9_mask); >>>>> >>>>> if ((ret = init_get_bits8(&gb, buf, buf_size)) < 0) >>>>> diff --git a/libavcodec/utils.c b/libavcodec/utils.c >>>>> index baf09119fe..70a0764714 100644 >>>>> --- a/libavcodec/utils.c >>>>> +++ b/libavcodec/utils.c >>>>> @@ -1943,7 +1943,13 @@ int av_lockmgr_register(int (*cb)(void **mutex, >>> enum AVLockOp op)) >>>>> >>>>> int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec) >>>>> { >>>>> +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && >>> !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ >>>>> + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && >>> !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) >>>>> _Bool exp = 0; >>>>> +#else >>>>> + atomic_bool exp = 0; >>>>> +#endif >>>>> + >>>>> if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || >>> !codec->init) >>>>> return 0; >>>>> >>>>> @@ -1969,7 +1975,13 @@ int ff_lock_avcodec(AVCodecContext *log_ctx, >>> const AVCodec *codec) >>>>> >>>>> int ff_unlock_avcodec(const AVCodec *codec) >>>>> { >>>>> +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && >>> !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ >>>>> + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && >>> !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) >>>>> _Bool exp = 1; >>>>> +#else >>>>> + atomic_bool exp = 1; >>>>> +#endif >>>>> + >>>>> if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || >>> !codec->init) >>>>> return 0; >>>>> >>>> >>>> These ifdefs here are very ugly, and as mentioned in another mail, the >>>> atomics in those two functions arent even required - all access to >>>> those variables is supposed to be protected by the lockmgr anyway. >>>> So it would be easier to just remove any atomic nature of those >>>> variables (or at the very lease replace the compare_exchange with a >>>> store to solve this problem at hand). >>> >>> I'm not sure but are you proposed to revert commit >>> https://github.com/FFmpeg/FFmpeg/commit/590136e78da3d091ea99ab5432543d >>> 47a559a461 >>> >>> >>> Basically, yes. Atomics are not needed for this variable, as access to it >>> should be serialized anyways. >> >> OK for me. I've sent smaller patch (only near/Rectangle stuff). >> > > LGTM. This patch doesn't apply anymore to the latest code base due to changes to mxfenc.c.
On 12/9/2017 6:15 PM, Aaron Levinson wrote: > On 12/9/2017 1:18 AM, Hendrik Leppkes wrote: >> On Fri, Dec 8, 2017 at 8:49 AM, Mateusz <mateuszb@poczta.onet.pl> wrote: >>> W dniu 07.12.2017 o 22:58, Hendrik Leppkes pisze: >>>> Am 07.12.2017 20:40 schrieb "Mateusz" <mateuszb@poczta.onet.pl>: >>>> >>>> W dniu 07.12.2017 o 10:42, Hendrik Leppkes pisze: >>>>> On Thu, Dec 7, 2017 at 2:02 AM, Mateusz <mateuszb@poczta.onet.pl> >>>>> wrote: >>>>>> After commit 3701d49 'error_resilience: remove avpriv_atomic usage' >>>>>> we have included windows.h in much more files and we should >>>>>> avoid conflicts with defines/function declarations. >>>>>> >>>>>> We should declare compatible variables for atomic compat wrappers >>>>>> that expect fixed size variables in atomic_compare_exchange* macro. >>>>>> >>>>>> Signed-off-by: Mateusz Brzostek <mateuszb@poczta.onet.pl> >>>>>> --- >>>>>> libavcodec/jpegls.h | 2 ++ >>>>>> libavcodec/mjpegdec.h | 2 ++ >>>>>> libavcodec/mss2.c | 6 +++--- >>>>>> libavcodec/utils.c | 12 ++++++++++++ >>>>>> libavformat/mxfenc.c | 2 +- >>>>>> 5 files changed, 20 insertions(+), 4 deletions(-) >>>>>> >>>>>> diff --git a/libavcodec/jpegls.h b/libavcodec/jpegls.h >>>>>> index c8997c7861..6b89b2afa3 100644 >>>>>> --- a/libavcodec/jpegls.h >>>>>> +++ b/libavcodec/jpegls.h >>>>>> @@ -32,6 +32,8 @@ >>>>>> #include "avcodec.h" >>>>>> #include "internal.h" >>>>>> >>>>>> +#undef near /* This file uses struct member 'near' which in >>>>>> windows.h >>>> is defined as empty. */ >>>>>> + >>>>>> typedef struct JpeglsContext { >>>>>> AVCodecContext *avctx; >>>>>> } JpeglsContext; >>>>>> diff --git a/libavcodec/mjpegdec.h b/libavcodec/mjpegdec.h >>>>>> index c84a40aa6e..c36fba5f22 100644 >>>>>> --- a/libavcodec/mjpegdec.h >>>>>> +++ b/libavcodec/mjpegdec.h >>>>>> @@ -39,6 +39,8 @@ >>>>>> #include "hpeldsp.h" >>>>>> #include "idctdsp.h" >>>>>> >>>>>> +#undef near /* This file uses struct member 'near' which in >>>>>> windows.h >>>> is defined as empty. */ >>>>>> + >>>>>> #define MAX_COMPONENTS 4 >>>>>> >>>>>> typedef struct MJpegDecodeContext { >>>>>> diff --git a/libavcodec/mss2.c b/libavcodec/mss2.c >>>>>> index 9e7cc466de..3180af1d60 100644 >>>>>> --- a/libavcodec/mss2.c >>>>>> +++ b/libavcodec/mss2.c >>>>>> @@ -464,9 +464,9 @@ static int decode_wmv9(AVCodecContext *avctx, >>>>>> const >>>> uint8_t *buf, int buf_size, >>>>>> return 0; >>>>>> } >>>>>> >>>>>> -typedef struct Rectangle { >>>>>> +struct Rectangle { >>>>>> int coded, x, y, w, h; >>>>>> -} Rectangle; >>>>>> +}; >>>>>> >>>>>> #define MAX_WMV9_RECTANGLES 20 >>>>>> #define ARITH2_PADDING 2 >>>>>> @@ -485,7 +485,7 @@ static int mss2_decode_frame(AVCodecContext >>>>>> *avctx, >>>> void *data, int *got_frame, >>>>>> >>>>>> int keyframe, has_wmv9, has_mv, is_rle, is_555, ret; >>>>>> >>>>>> - Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; >>>>>> + struct Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; >>>>>> int used_rects = 0, i, implicit_rect = 0, av_uninit(wmv9_mask); >>>>>> >>>>>> if ((ret = init_get_bits8(&gb, buf, buf_size)) < 0) >>>>>> diff --git a/libavcodec/utils.c b/libavcodec/utils.c >>>>>> index baf09119fe..70a0764714 100644 >>>>>> --- a/libavcodec/utils.c >>>>>> +++ b/libavcodec/utils.c >>>>>> @@ -1943,7 +1943,13 @@ int av_lockmgr_register(int (*cb)(void >>>>>> **mutex, >>>> enum AVLockOp op)) >>>>>> >>>>>> int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec) >>>>>> { >>>>>> +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && >>>> !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ >>>>>> + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && >>>> !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) >>>>>> _Bool exp = 0; >>>>>> +#else >>>>>> + atomic_bool exp = 0; >>>>>> +#endif >>>>>> + >>>>>> if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || >>>> !codec->init) >>>>>> return 0; >>>>>> >>>>>> @@ -1969,7 +1975,13 @@ int ff_lock_avcodec(AVCodecContext *log_ctx, >>>> const AVCodec *codec) >>>>>> >>>>>> int ff_unlock_avcodec(const AVCodec *codec) >>>>>> { >>>>>> +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && >>>> !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ >>>>>> + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && >>>> !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) >>>>>> _Bool exp = 1; >>>>>> +#else >>>>>> + atomic_bool exp = 1; >>>>>> +#endif >>>>>> + >>>>>> if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || >>>> !codec->init) >>>>>> return 0; >>>>>> >>>>> >>>>> These ifdefs here are very ugly, and as mentioned in another mail, the >>>>> atomics in those two functions arent even required - all access to >>>>> those variables is supposed to be protected by the lockmgr anyway. >>>>> So it would be easier to just remove any atomic nature of those >>>>> variables (or at the very lease replace the compare_exchange with a >>>>> store to solve this problem at hand). >>>> >>>> I'm not sure but are you proposed to revert commit >>>> https://github.com/FFmpeg/FFmpeg/commit/590136e78da3d091ea99ab5432543d >>>> 47a559a461 >>>> >>>> >>>> Basically, yes. Atomics are not needed for this variable, as access >>>> to it >>>> should be serialized anyways. >>> >>> OK for me. I've sent smaller patch (only near/Rectangle stuff). >>> >> >> LGTM. > > This patch doesn't apply anymore to the latest code base due to changes > to mxfenc.c. I should add that the changes to mxfenc.c aren't needed any longer. With the subpatch to mxfenc.c removed, the remain patch applies cleanly, and I can confirm that it fixes MSVC build issues as well. Aaron Levinson
On 12/9/2017 6:24 PM, Aaron Levinson wrote: > On 12/9/2017 6:15 PM, Aaron Levinson wrote: >> On 12/9/2017 1:18 AM, Hendrik Leppkes wrote: >>> On Fri, Dec 8, 2017 at 8:49 AM, Mateusz <mateuszb@poczta.onet.pl> wrote: >>>> W dniu 07.12.2017 o 22:58, Hendrik Leppkes pisze: >>>>> Am 07.12.2017 20:40 schrieb "Mateusz" <mateuszb@poczta.onet.pl>: >>>>> >>>>> W dniu 07.12.2017 o 10:42, Hendrik Leppkes pisze: >>>>>> On Thu, Dec 7, 2017 at 2:02 AM, Mateusz <mateuszb@poczta.onet.pl> >>>>>> wrote: >>>>>>> After commit 3701d49 'error_resilience: remove avpriv_atomic usage' >>>>>>> we have included windows.h in much more files and we should >>>>>>> avoid conflicts with defines/function declarations. >>>>>>> >>>>>>> We should declare compatible variables for atomic compat wrappers >>>>>>> that expect fixed size variables in atomic_compare_exchange* macro. >>>>>>> >>>>>>> Signed-off-by: Mateusz Brzostek <mateuszb@poczta.onet.pl> >>>>>>> --- >>>>>>> libavcodec/jpegls.h | 2 ++ >>>>>>> libavcodec/mjpegdec.h | 2 ++ >>>>>>> libavcodec/mss2.c | 6 +++--- >>>>>>> libavcodec/utils.c | 12 ++++++++++++ >>>>>>> libavformat/mxfenc.c | 2 +- >>>>>>> 5 files changed, 20 insertions(+), 4 deletions(-) >>>>>>> >>>>>>> diff --git a/libavcodec/jpegls.h b/libavcodec/jpegls.h >>>>>>> index c8997c7861..6b89b2afa3 100644 >>>>>>> --- a/libavcodec/jpegls.h >>>>>>> +++ b/libavcodec/jpegls.h >>>>>>> @@ -32,6 +32,8 @@ >>>>>>> #include "avcodec.h" >>>>>>> #include "internal.h" >>>>>>> >>>>>>> +#undef near /* This file uses struct member 'near' which in >>>>>>> windows.h >>>>> is defined as empty. */ >>>>>>> + >>>>>>> typedef struct JpeglsContext { >>>>>>> AVCodecContext *avctx; >>>>>>> } JpeglsContext; >>>>>>> diff --git a/libavcodec/mjpegdec.h b/libavcodec/mjpegdec.h >>>>>>> index c84a40aa6e..c36fba5f22 100644 >>>>>>> --- a/libavcodec/mjpegdec.h >>>>>>> +++ b/libavcodec/mjpegdec.h >>>>>>> @@ -39,6 +39,8 @@ >>>>>>> #include "hpeldsp.h" >>>>>>> #include "idctdsp.h" >>>>>>> >>>>>>> +#undef near /* This file uses struct member 'near' which in >>>>>>> windows.h >>>>> is defined as empty. */ >>>>>>> + >>>>>>> #define MAX_COMPONENTS 4 >>>>>>> >>>>>>> typedef struct MJpegDecodeContext { >>>>>>> diff --git a/libavcodec/mss2.c b/libavcodec/mss2.c >>>>>>> index 9e7cc466de..3180af1d60 100644 >>>>>>> --- a/libavcodec/mss2.c >>>>>>> +++ b/libavcodec/mss2.c >>>>>>> @@ -464,9 +464,9 @@ static int decode_wmv9(AVCodecContext *avctx, >>>>>>> const >>>>> uint8_t *buf, int buf_size, >>>>>>> return 0; >>>>>>> } >>>>>>> >>>>>>> -typedef struct Rectangle { >>>>>>> +struct Rectangle { >>>>>>> int coded, x, y, w, h; >>>>>>> -} Rectangle; >>>>>>> +}; >>>>>>> >>>>>>> #define MAX_WMV9_RECTANGLES 20 >>>>>>> #define ARITH2_PADDING 2 >>>>>>> @@ -485,7 +485,7 @@ static int mss2_decode_frame(AVCodecContext >>>>>>> *avctx, >>>>> void *data, int *got_frame, >>>>>>> >>>>>>> int keyframe, has_wmv9, has_mv, is_rle, is_555, ret; >>>>>>> >>>>>>> - Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; >>>>>>> + struct Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; >>>>>>> int used_rects = 0, i, implicit_rect = 0, >>>>>>> av_uninit(wmv9_mask); >>>>>>> >>>>>>> if ((ret = init_get_bits8(&gb, buf, buf_size)) < 0) >>>>>>> diff --git a/libavcodec/utils.c b/libavcodec/utils.c >>>>>>> index baf09119fe..70a0764714 100644 >>>>>>> --- a/libavcodec/utils.c >>>>>>> +++ b/libavcodec/utils.c >>>>>>> @@ -1943,7 +1943,13 @@ int av_lockmgr_register(int (*cb)(void >>>>>>> **mutex, >>>>> enum AVLockOp op)) >>>>>>> >>>>>>> int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec) >>>>>>> { >>>>>>> +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && >>>>> !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ >>>>>>> + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && >>>>> !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) >>>>>>> _Bool exp = 0; >>>>>>> +#else >>>>>>> + atomic_bool exp = 0; >>>>>>> +#endif >>>>>>> + >>>>>>> if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || >>>>> !codec->init) >>>>>>> return 0; >>>>>>> >>>>>>> @@ -1969,7 +1975,13 @@ int ff_lock_avcodec(AVCodecContext *log_ctx, >>>>> const AVCodec *codec) >>>>>>> >>>>>>> int ff_unlock_avcodec(const AVCodec *codec) >>>>>>> { >>>>>>> +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && >>>>> !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ >>>>>>> + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && >>>>> !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) >>>>>>> _Bool exp = 1; >>>>>>> +#else >>>>>>> + atomic_bool exp = 1; >>>>>>> +#endif >>>>>>> + >>>>>>> if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || >>>>> !codec->init) >>>>>>> return 0; >>>>>>> >>>>>> >>>>>> These ifdefs here are very ugly, and as mentioned in another mail, >>>>>> the >>>>>> atomics in those two functions arent even required - all access to >>>>>> those variables is supposed to be protected by the lockmgr anyway. >>>>>> So it would be easier to just remove any atomic nature of those >>>>>> variables (or at the very lease replace the compare_exchange with a >>>>>> store to solve this problem at hand). >>>>> >>>>> I'm not sure but are you proposed to revert commit >>>>> https://github.com/FFmpeg/FFmpeg/commit/590136e78da3d091ea99ab5432543d >>>>> 47a559a461 >>>>> >>>>> >>>>> Basically, yes. Atomics are not needed for this variable, as access >>>>> to it >>>>> should be serialized anyways. >>>> >>>> OK for me. I've sent smaller patch (only near/Rectangle stuff). >>>> >>> >>> LGTM. >> >> This patch doesn't apply anymore to the latest code base due to >> changes to mxfenc.c. > > I should add that the changes to mxfenc.c aren't needed any longer. With > the subpatch to mxfenc.c removed, the remain patch applies cleanly, and > I can confirm that it fixes MSVC build issues as well. > > Aaron Levinson One more detail--while it builds with the patch altered as described above, it doesn't work at run-time with MSVC builds without reverting patch https://github.com/FFmpeg/FFmpeg/commit/590136e78da3d091ea99ab5432543d47a559a461 as described in earlier comments. So, when the patch is finally committed, it would be helpful to revert the atomics patch as well. Aaron Levinson
On 10 December 2017 at 02:41, Aaron Levinson <alevinsn_dev@levland.net> wrote: > On 12/9/2017 6:24 PM, Aaron Levinson wrote: > >> On 12/9/2017 6:15 PM, Aaron Levinson wrote: >> >>> On 12/9/2017 1:18 AM, Hendrik Leppkes wrote: >>> >>>> On Fri, Dec 8, 2017 at 8:49 AM, Mateusz <mateuszb@poczta.onet.pl> >>>> wrote: >>>> >>>>> W dniu 07.12.2017 o 22:58, Hendrik Leppkes pisze: >>>>> >>>>>> Am 07.12.2017 20:40 schrieb "Mateusz" <mateuszb@poczta.onet.pl>: >>>>>> >>>>>> W dniu 07.12.2017 o 10:42, Hendrik Leppkes pisze: >>>>>> >>>>>>> On Thu, Dec 7, 2017 at 2:02 AM, Mateusz <mateuszb@poczta.onet.pl> >>>>>>> wrote: >>>>>>> >>>>>>>> After commit 3701d49 'error_resilience: remove avpriv_atomic usage' >>>>>>>> we have included windows.h in much more files and we should >>>>>>>> avoid conflicts with defines/function declarations. >>>>>>>> >>>>>>>> We should declare compatible variables for atomic compat wrappers >>>>>>>> that expect fixed size variables in atomic_compare_exchange* macro. >>>>>>>> >>>>>>>> Signed-off-by: Mateusz Brzostek <mateuszb@poczta.onet.pl> >>>>>>>> --- >>>>>>>> libavcodec/jpegls.h | 2 ++ >>>>>>>> libavcodec/mjpegdec.h | 2 ++ >>>>>>>> libavcodec/mss2.c | 6 +++--- >>>>>>>> libavcodec/utils.c | 12 ++++++++++++ >>>>>>>> libavformat/mxfenc.c | 2 +- >>>>>>>> 5 files changed, 20 insertions(+), 4 deletions(-) >>>>>>>> >>>>>>>> diff --git a/libavcodec/jpegls.h b/libavcodec/jpegls.h >>>>>>>> index c8997c7861..6b89b2afa3 100644 >>>>>>>> --- a/libavcodec/jpegls.h >>>>>>>> +++ b/libavcodec/jpegls.h >>>>>>>> @@ -32,6 +32,8 @@ >>>>>>>> #include "avcodec.h" >>>>>>>> #include "internal.h" >>>>>>>> >>>>>>>> +#undef near /* This file uses struct member 'near' which in >>>>>>>> windows.h >>>>>>>> >>>>>>> is defined as empty. */ >>>>>> >>>>>>> + >>>>>>>> typedef struct JpeglsContext { >>>>>>>> AVCodecContext *avctx; >>>>>>>> } JpeglsContext; >>>>>>>> diff --git a/libavcodec/mjpegdec.h b/libavcodec/mjpegdec.h >>>>>>>> index c84a40aa6e..c36fba5f22 100644 >>>>>>>> --- a/libavcodec/mjpegdec.h >>>>>>>> +++ b/libavcodec/mjpegdec.h >>>>>>>> @@ -39,6 +39,8 @@ >>>>>>>> #include "hpeldsp.h" >>>>>>>> #include "idctdsp.h" >>>>>>>> >>>>>>>> +#undef near /* This file uses struct member 'near' which in >>>>>>>> windows.h >>>>>>>> >>>>>>> is defined as empty. */ >>>>>> >>>>>>> + >>>>>>>> #define MAX_COMPONENTS 4 >>>>>>>> >>>>>>>> typedef struct MJpegDecodeContext { >>>>>>>> diff --git a/libavcodec/mss2.c b/libavcodec/mss2.c >>>>>>>> index 9e7cc466de..3180af1d60 100644 >>>>>>>> --- a/libavcodec/mss2.c >>>>>>>> +++ b/libavcodec/mss2.c >>>>>>>> @@ -464,9 +464,9 @@ static int decode_wmv9(AVCodecContext *avctx, >>>>>>>> const >>>>>>>> >>>>>>> uint8_t *buf, int buf_size, >>>>>> >>>>>>> return 0; >>>>>>>> } >>>>>>>> >>>>>>>> -typedef struct Rectangle { >>>>>>>> +struct Rectangle { >>>>>>>> int coded, x, y, w, h; >>>>>>>> -} Rectangle; >>>>>>>> +}; >>>>>>>> >>>>>>>> #define MAX_WMV9_RECTANGLES 20 >>>>>>>> #define ARITH2_PADDING 2 >>>>>>>> @@ -485,7 +485,7 @@ static int mss2_decode_frame(AVCodecContext >>>>>>>> *avctx, >>>>>>>> >>>>>>> void *data, int *got_frame, >>>>>> >>>>>>> >>>>>>>> int keyframe, has_wmv9, has_mv, is_rle, is_555, ret; >>>>>>>> >>>>>>>> - Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; >>>>>>>> + struct Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; >>>>>>>> int used_rects = 0, i, implicit_rect = 0, >>>>>>>> av_uninit(wmv9_mask); >>>>>>>> >>>>>>>> if ((ret = init_get_bits8(&gb, buf, buf_size)) < 0) >>>>>>>> diff --git a/libavcodec/utils.c b/libavcodec/utils.c >>>>>>>> index baf09119fe..70a0764714 100644 >>>>>>>> --- a/libavcodec/utils.c >>>>>>>> +++ b/libavcodec/utils.c >>>>>>>> @@ -1943,7 +1943,13 @@ int av_lockmgr_register(int (*cb)(void >>>>>>>> **mutex, >>>>>>>> >>>>>>> enum AVLockOp op)) >>>>>> >>>>>>> >>>>>>>> int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec) >>>>>>>> { >>>>>>>> +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && >>>>>>>> >>>>>>> !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ >>>>>> >>>>>>> + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && >>>>>>>> >>>>>>> !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) >>>>>> >>>>>>> _Bool exp = 0; >>>>>>>> +#else >>>>>>>> + atomic_bool exp = 0; >>>>>>>> +#endif >>>>>>>> + >>>>>>>> if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || >>>>>>>> >>>>>>> !codec->init) >>>>>> >>>>>>> return 0; >>>>>>>> >>>>>>>> @@ -1969,7 +1975,13 @@ int ff_lock_avcodec(AVCodecContext *log_ctx, >>>>>>>> >>>>>>> const AVCodec *codec) >>>>>> >>>>>>> >>>>>>>> int ff_unlock_avcodec(const AVCodec *codec) >>>>>>>> { >>>>>>>> +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && >>>>>>>> >>>>>>> !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ >>>>>> >>>>>>> + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && >>>>>>>> >>>>>>> !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) >>>>>> >>>>>>> _Bool exp = 1; >>>>>>>> +#else >>>>>>>> + atomic_bool exp = 1; >>>>>>>> +#endif >>>>>>>> + >>>>>>>> if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || >>>>>>>> >>>>>>> !codec->init) >>>>>> >>>>>>> return 0; >>>>>>>> >>>>>>>> >>>>>>> These ifdefs here are very ugly, and as mentioned in another mail, >>>>>>> the >>>>>>> atomics in those two functions arent even required - all access to >>>>>>> those variables is supposed to be protected by the lockmgr anyway. >>>>>>> So it would be easier to just remove any atomic nature of those >>>>>>> variables (or at the very lease replace the compare_exchange with a >>>>>>> store to solve this problem at hand). >>>>>>> >>>>>> >>>>>> I'm not sure but are you proposed to revert commit >>>>>> https://github.com/FFmpeg/FFmpeg/commit/590136e78da3d091ea99 >>>>>> ab5432543d >>>>>> 47a559a461 >>>>>> >>>>>> >>>>>> Basically, yes. Atomics are not needed for this variable, as access >>>>>> to it >>>>>> should be serialized anyways. >>>>>> >>>>> >>>>> OK for me. I've sent smaller patch (only near/Rectangle stuff). >>>>> >>>>> >>>> LGTM. >>>> >>> >>> This patch doesn't apply anymore to the latest code base due to changes >>> to mxfenc.c. >>> >> >> I should add that the changes to mxfenc.c aren't needed any longer. With >> the subpatch to mxfenc.c removed, the remain patch applies cleanly, and I >> can confirm that it fixes MSVC build issues as well. >> >> Aaron Levinson >> > > One more detail--while it builds with the patch altered as described > above, it doesn't work at run-time with MSVC builds without reverting patch > https://github.com/FFmpeg/FFmpeg/commit/590136e78da3d091ea99 > ab5432543d47a559a461 as described in earlier comments. So, when the > patch is finally committed, it would be helpful to revert the atomics patch > as well. > > > Aaron Levinson > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > I submitted a patch to deal with this yet no one has reviewed it - http://ffmpeg.org/pipermail/ffmpeg-devel/2017-December/221898.html
On 12/9/2017 11:25 PM, Rostislav Pehlivanov wrote: > On 10 December 2017 at 02:41, Aaron Levinson <alevinsn_dev@levland.net> > wrote: > >> On 12/9/2017 6:24 PM, Aaron Levinson wrote: >> >>> On 12/9/2017 6:15 PM, Aaron Levinson wrote: >>> >>>> On 12/9/2017 1:18 AM, Hendrik Leppkes wrote: >>>> >>>>> On Fri, Dec 8, 2017 at 8:49 AM, Mateusz <mateuszb@poczta.onet.pl> >>>>> wrote: >>>>> >>>>>> W dniu 07.12.2017 o 22:58, Hendrik Leppkes pisze: >>>>>> >>>>>>> Am 07.12.2017 20:40 schrieb "Mateusz" <mateuszb@poczta.onet.pl>: >>>>>>> >>>>>>> W dniu 07.12.2017 o 10:42, Hendrik Leppkes pisze: >>>>>>> >>>>>>>> On Thu, Dec 7, 2017 at 2:02 AM, Mateusz <mateuszb@poczta.onet.pl> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> After commit 3701d49 'error_resilience: remove avpriv_atomic usage' >>>>>>>>> we have included windows.h in much more files and we should >>>>>>>>> avoid conflicts with defines/function declarations. >>>>>>>>> >>>>>>>>> We should declare compatible variables for atomic compat wrappers >>>>>>>>> that expect fixed size variables in atomic_compare_exchange* macro. >>>>>>>>> >>>>>>>>> Signed-off-by: Mateusz Brzostek <mateuszb@poczta.onet.pl> >>>>>>>>> --- >>>>>>>>> libavcodec/jpegls.h | 2 ++ >>>>>>>>> libavcodec/mjpegdec.h | 2 ++ >>>>>>>>> libavcodec/mss2.c | 6 +++--- >>>>>>>>> libavcodec/utils.c | 12 ++++++++++++ >>>>>>>>> libavformat/mxfenc.c | 2 +- >>>>>>>>> 5 files changed, 20 insertions(+), 4 deletions(-) >>>>>>>>> >>>>>>>>> diff --git a/libavcodec/jpegls.h b/libavcodec/jpegls.h >>>>>>>>> index c8997c7861..6b89b2afa3 100644 >>>>>>>>> --- a/libavcodec/jpegls.h >>>>>>>>> +++ b/libavcodec/jpegls.h >>>>>>>>> @@ -32,6 +32,8 @@ >>>>>>>>> #include "avcodec.h" >>>>>>>>> #include "internal.h" >>>>>>>>> >>>>>>>>> +#undef near /* This file uses struct member 'near' which in >>>>>>>>> windows.h >>>>>>>>> >>>>>>>> is defined as empty. */ >>>>>>> >>>>>>>> + >>>>>>>>> typedef struct JpeglsContext { >>>>>>>>> AVCodecContext *avctx; >>>>>>>>> } JpeglsContext; >>>>>>>>> diff --git a/libavcodec/mjpegdec.h b/libavcodec/mjpegdec.h >>>>>>>>> index c84a40aa6e..c36fba5f22 100644 >>>>>>>>> --- a/libavcodec/mjpegdec.h >>>>>>>>> +++ b/libavcodec/mjpegdec.h >>>>>>>>> @@ -39,6 +39,8 @@ >>>>>>>>> #include "hpeldsp.h" >>>>>>>>> #include "idctdsp.h" >>>>>>>>> >>>>>>>>> +#undef near /* This file uses struct member 'near' which in >>>>>>>>> windows.h >>>>>>>>> >>>>>>>> is defined as empty. */ >>>>>>> >>>>>>>> + >>>>>>>>> #define MAX_COMPONENTS 4 >>>>>>>>> >>>>>>>>> typedef struct MJpegDecodeContext { >>>>>>>>> diff --git a/libavcodec/mss2.c b/libavcodec/mss2.c >>>>>>>>> index 9e7cc466de..3180af1d60 100644 >>>>>>>>> --- a/libavcodec/mss2.c >>>>>>>>> +++ b/libavcodec/mss2.c >>>>>>>>> @@ -464,9 +464,9 @@ static int decode_wmv9(AVCodecContext *avctx, >>>>>>>>> const >>>>>>>>> >>>>>>>> uint8_t *buf, int buf_size, >>>>>>> >>>>>>>> return 0; >>>>>>>>> } >>>>>>>>> >>>>>>>>> -typedef struct Rectangle { >>>>>>>>> +struct Rectangle { >>>>>>>>> int coded, x, y, w, h; >>>>>>>>> -} Rectangle; >>>>>>>>> +}; >>>>>>>>> >>>>>>>>> #define MAX_WMV9_RECTANGLES 20 >>>>>>>>> #define ARITH2_PADDING 2 >>>>>>>>> @@ -485,7 +485,7 @@ static int mss2_decode_frame(AVCodecContext >>>>>>>>> *avctx, >>>>>>>>> >>>>>>>> void *data, int *got_frame, >>>>>>> >>>>>>>> >>>>>>>>> int keyframe, has_wmv9, has_mv, is_rle, is_555, ret; >>>>>>>>> >>>>>>>>> - Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; >>>>>>>>> + struct Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; >>>>>>>>> int used_rects = 0, i, implicit_rect = 0, >>>>>>>>> av_uninit(wmv9_mask); >>>>>>>>> >>>>>>>>> if ((ret = init_get_bits8(&gb, buf, buf_size)) < 0) >>>>>>>>> diff --git a/libavcodec/utils.c b/libavcodec/utils.c >>>>>>>>> index baf09119fe..70a0764714 100644 >>>>>>>>> --- a/libavcodec/utils.c >>>>>>>>> +++ b/libavcodec/utils.c >>>>>>>>> @@ -1943,7 +1943,13 @@ int av_lockmgr_register(int (*cb)(void >>>>>>>>> **mutex, >>>>>>>>> >>>>>>>> enum AVLockOp op)) >>>>>>> >>>>>>>> >>>>>>>>> int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec) >>>>>>>>> { >>>>>>>>> +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && >>>>>>>>> >>>>>>>> !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ >>>>>>> >>>>>>>> + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && >>>>>>>>> >>>>>>>> !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) >>>>>>> >>>>>>>> _Bool exp = 0; >>>>>>>>> +#else >>>>>>>>> + atomic_bool exp = 0; >>>>>>>>> +#endif >>>>>>>>> + >>>>>>>>> if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || >>>>>>>>> >>>>>>>> !codec->init) >>>>>>> >>>>>>>> return 0; >>>>>>>>> >>>>>>>>> @@ -1969,7 +1975,13 @@ int ff_lock_avcodec(AVCodecContext *log_ctx, >>>>>>>>> >>>>>>>> const AVCodec *codec) >>>>>>> >>>>>>>> >>>>>>>>> int ff_unlock_avcodec(const AVCodec *codec) >>>>>>>>> { >>>>>>>>> +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && >>>>>>>>> >>>>>>>> !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ >>>>>>> >>>>>>>> + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && >>>>>>>>> >>>>>>>> !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) >>>>>>> >>>>>>>> _Bool exp = 1; >>>>>>>>> +#else >>>>>>>>> + atomic_bool exp = 1; >>>>>>>>> +#endif >>>>>>>>> + >>>>>>>>> if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || >>>>>>>>> >>>>>>>> !codec->init) >>>>>>> >>>>>>>> return 0; >>>>>>>>> >>>>>>>>> >>>>>>>> These ifdefs here are very ugly, and as mentioned in another mail, >>>>>>>> the >>>>>>>> atomics in those two functions arent even required - all access to >>>>>>>> those variables is supposed to be protected by the lockmgr anyway. >>>>>>>> So it would be easier to just remove any atomic nature of those >>>>>>>> variables (or at the very lease replace the compare_exchange with a >>>>>>>> store to solve this problem at hand). >>>>>>>> >>>>>>> >>>>>>> I'm not sure but are you proposed to revert commit >>>>>>> https://github.com/FFmpeg/FFmpeg/commit/590136e78da3d091ea99 >>>>>>> ab5432543d >>>>>>> 47a559a461 >>>>>>> >>>>>>> >>>>>>> Basically, yes. Atomics are not needed for this variable, as access >>>>>>> to it >>>>>>> should be serialized anyways. >>>>>>> >>>>>> >>>>>> OK for me. I've sent smaller patch (only near/Rectangle stuff). >>>>>> >>>>>> >>>>> LGTM. >>>>> >>>> >>>> This patch doesn't apply anymore to the latest code base due to changes >>>> to mxfenc.c. >>>> >>> >>> I should add that the changes to mxfenc.c aren't needed any longer. With >>> the subpatch to mxfenc.c removed, the remain patch applies cleanly, and I >>> can confirm that it fixes MSVC build issues as well. >>> >>> Aaron Levinson >>> >> >> One more detail--while it builds with the patch altered as described >> above, it doesn't work at run-time with MSVC builds without reverting patch >> https://github.com/FFmpeg/FFmpeg/commit/590136e78da3d091ea99 >> ab5432543d47a559a461 as described in earlier comments. So, when the >> patch is finally committed, it would be helpful to revert the atomics patch >> as well. >> >> >> Aaron Levinson >> _______________________________________________ >> ffmpeg-devel mailing list >> ffmpeg-devel@ffmpeg.org >> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> > > I submitted a patch to deal with this yet no one has reviewed it - > http://ffmpeg.org/pipermail/ffmpeg-devel/2017-December/221898.html Hendrik reviewed it last Friday, and in his last response, from earlier today, he indicated that he would revert it unless he heard otherwise. In addition, I just provided my own comments in a response to the thread. Aaron Levinson
diff --git a/libavcodec/jpegls.h b/libavcodec/jpegls.h index c8997c7861..6b89b2afa3 100644 --- a/libavcodec/jpegls.h +++ b/libavcodec/jpegls.h @@ -32,6 +32,8 @@ #include "avcodec.h" #include "internal.h" +#undef near /* This file uses struct member 'near' which in windows.h is defined as empty. */ + typedef struct JpeglsContext { AVCodecContext *avctx; } JpeglsContext; diff --git a/libavcodec/mjpegdec.h b/libavcodec/mjpegdec.h index c84a40aa6e..c36fba5f22 100644 --- a/libavcodec/mjpegdec.h +++ b/libavcodec/mjpegdec.h @@ -39,6 +39,8 @@ #include "hpeldsp.h" #include "idctdsp.h" +#undef near /* This file uses struct member 'near' which in windows.h is defined as empty. */ + #define MAX_COMPONENTS 4 typedef struct MJpegDecodeContext { diff --git a/libavcodec/mss2.c b/libavcodec/mss2.c index 9e7cc466de..3180af1d60 100644 --- a/libavcodec/mss2.c +++ b/libavcodec/mss2.c @@ -464,9 +464,9 @@ static int decode_wmv9(AVCodecContext *avctx, const uint8_t *buf, int buf_size, return 0; } -typedef struct Rectangle { +struct Rectangle { int coded, x, y, w, h; -} Rectangle; +}; #define MAX_WMV9_RECTANGLES 20 #define ARITH2_PADDING 2 @@ -485,7 +485,7 @@ static int mss2_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, int keyframe, has_wmv9, has_mv, is_rle, is_555, ret; - Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; + struct Rectangle wmv9rects[MAX_WMV9_RECTANGLES], *r; int used_rects = 0, i, implicit_rect = 0, av_uninit(wmv9_mask); if ((ret = init_get_bits8(&gb, buf, buf_size)) < 0) diff --git a/libavcodec/utils.c b/libavcodec/utils.c index baf09119fe..70a0764714 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -1943,7 +1943,13 @@ int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)) int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec) { +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) _Bool exp = 0; +#else + atomic_bool exp = 0; +#endif + if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || !codec->init) return 0; @@ -1969,7 +1975,13 @@ int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec) int ff_unlock_avcodec(const AVCodec *codec) { +#if !defined(COMPAT_ATOMICS_DUMMY_STDATOMIC_H) && !defined(COMPAT_ATOMICS_PTHREAD_STDATOMIC_H) && \ + !defined(COMPAT_ATOMICS_SUNCC_STDATOMIC_H) && !defined(COMPAT_ATOMICS_WIN32_STDATOMIC_H) _Bool exp = 1; +#else + atomic_bool exp = 1; +#endif + if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || !codec->init) return 0; diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c index ed6ecbf541..407acdcaaa 100644 --- a/libavformat/mxfenc.c +++ b/libavformat/mxfenc.c @@ -1444,7 +1444,7 @@ static int mxf_write_header_metadata_sets(AVFormatContext *s) AVStream *st = NULL; int i; - MXFPackage packages[2] = {}; + MXFPackage packages[2] = {{NULL}}; int package_count = 2; packages[0].type = MaterialPackage; packages[1].type = SourcePackage;
After commit 3701d49 'error_resilience: remove avpriv_atomic usage' we have included windows.h in much more files and we should avoid conflicts with defines/function declarations. We should declare compatible variables for atomic compat wrappers that expect fixed size variables in atomic_compare_exchange* macro. Signed-off-by: Mateusz Brzostek <mateuszb@poczta.onet.pl> --- libavcodec/jpegls.h | 2 ++ libavcodec/mjpegdec.h | 2 ++ libavcodec/mss2.c | 6 +++--- libavcodec/utils.c | 12 ++++++++++++ libavformat/mxfenc.c | 2 +- 5 files changed, 20 insertions(+), 4 deletions(-)