vpx/vpx_util
Peter Boström d42e876164 Add atomics to vp8 synchronization primitives.
Fixes issue on iPad Pro 10.5 (and probably other places) where threads
are not properly synchronized. On x86 this data race was benign as load
and store instructions are atomic, they were being atomic in practice as
the program hasn't been observed to be miscompiled.

Such guarantees are not made outside x86, and real problems manifested
where libvpx reliably reproduced a broken bitstream for even just the
initial keyframe. This was detected in WebRTC where this device started
using multithreading (as its CPU count is higher than earlier devices,
where the problem did not manifest as single-threading was used in
practice).

This issue was not detected under thread-sanitizer bots as mutexes were
conditionally used under this platform to simulate the protected read
and write semantics that were in practice provided on x86 platforms.

This change also removes several mutexes, so encoder/decoder state is
lighter-weight after this change and we do not need to initialize so
many mutexes (this was done even on non-thread-sanitizer platforms where
they were unused).

Change-Id: If41fcb0d99944f7bbc8ec40877cdc34d672ae72a
2017-08-31 17:55:57 -07:00
..
endian_inl.h vpx_util: apply clang-format 2016-07-25 22:33:21 -07:00
vpx_atomics.h Add atomics to vp8 synchronization primitives. 2017-08-31 17:55:57 -07:00
vpx_thread.c vpx_util: apply clang-format 2016-07-25 22:33:21 -07:00
vpx_thread.h Align thread entry point stack 2016-08-10 11:57:34 -07:00
vpx_util.mk Add atomics to vp8 synchronization primitives. 2017-08-31 17:55:57 -07:00
vpx_write_yuv_frame.c Remove duplication on vp8/9_write_yuv_frame. 2017-06-09 17:08:26 -07:00
vpx_write_yuv_frame.h Remove duplication on vp8/9_write_yuv_frame. 2017-06-09 17:08:26 -07:00