vlc | branch: master | Hugo Beauzée-Luyssen <h...@beauzee.fr> | Thu Nov 26 12:29:08 2020 +0100| [9b197f348c6d33f565bf8a205486e55ff41a02ba] | committer: Hugo Beauzée-Luyssen
picture: Use vlc_atomic_rc > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9b197f348c6d33f565bf8a205486e55ff41a02ba --- include/vlc_picture.h | 19 ++++--------------- src/misc/picture.c | 6 ++---- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/include/vlc_picture.h b/include/vlc_picture.h index 5010c2f10a..09f65a1326 100644 --- a/include/vlc_picture.h +++ b/include/vlc_picture.h @@ -26,14 +26,7 @@ #define VLC_PICTURE_H 1 #include <assert.h> -#ifndef __cplusplus -#include <stdatomic.h> -#else -#include <atomic> -using std::atomic_uintptr_t; -using std::memory_order_relaxed; -using std::memory_order_release; -#endif +#include <vlc_atomic.h> /** * \file @@ -160,7 +153,7 @@ struct picture_t /** Next picture in a FIFO a pictures */ struct picture_t *p_next; - atomic_uintptr_t refs; + vlc_atomic_rc_t refs; }; static inline vlc_video_context* picture_GetVideoContext(picture_t *pic) @@ -360,8 +353,7 @@ VLC_API void picture_Destroy(picture_t *picture); */ static inline picture_t *picture_Hold(picture_t *picture) { - atomic_fetch_add_explicit(&picture->refs, (uintptr_t)1, - memory_order_relaxed); + vlc_atomic_rc_inc(&picture->refs); return picture; } @@ -374,10 +366,7 @@ static inline picture_t *picture_Hold(picture_t *picture) */ static inline void picture_Release(picture_t *picture) { - uintptr_t refs = atomic_fetch_sub_explicit(&picture->refs, (uintptr_t)1, - memory_order_release); - vlc_assert(refs > 0); - if (refs == 1) + if (vlc_atomic_rc_dec(&picture->refs)) picture_Destroy(picture); } diff --git a/src/misc/picture.c b/src/misc/picture.c index e00b130325..5b867a7591 100644 --- a/src/misc/picture.c +++ b/src/misc/picture.c @@ -210,7 +210,7 @@ static bool picture_InitPrivate(const video_format_t *restrict p_fmt, if( picture_Setup( p_picture, p_fmt ) ) return false; - atomic_init(&p_picture->refs, 1); + vlc_atomic_rc_init(&p_picture->refs); priv->gc.opaque = NULL; p_picture->p_sys = p_resource->p_sys; @@ -337,9 +337,7 @@ picture_t *picture_New( vlc_fourcc_t i_chroma, int i_width, int i_height, int i_ void picture_Destroy(picture_t *picture) { - /* See changes from other threads */ - atomic_thread_fence(memory_order_acquire); - assert(atomic_load_explicit(&picture->refs, memory_order_relaxed) == 0); + assert(vlc_atomic_rc_get(&picture->refs) == 0); PictureDestroyContext(picture); _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits