vlc | branch: master | Rémi Denis-Courmont <r...@remlab.net> | Fri May 18 21:35:06 2018 +0300| [41451f1fca224e83cf713954d388517058e635b1] | committer: Rémi Denis-Courmont
display: make reset_picture flag atomic > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=41451f1fca224e83cf713954d388517058e635b1 --- src/video_output/display.c | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/src/video_output/display.c b/src/video_output/display.c index 69752b3a28..ae347f38f9 100644 --- a/src/video_output/display.c +++ b/src/video_output/display.c @@ -28,6 +28,7 @@ # include "config.h" #endif #include <assert.h> +#include <stdatomic.h> #include <vlc_common.h> #include <vlc_video_splitter.h> @@ -379,7 +380,7 @@ typedef struct { mtime_t last_pressed; } mouse; - bool reset_pictures; + atomic_bool reset_pictures; signed char fit_window; @@ -622,13 +623,8 @@ static void VoutDisplayEvent(vout_display_t *vd, int event, va_list args) case VOUT_DISPLAY_EVENT_PICTURES_INVALID: { msg_Warn(vd, "VoutDisplayEvent 'pictures invalid'"); - - /* */ assert(vd->info.has_pictures_invalid); - - vlc_mutex_lock(&osys->lock); - osys->reset_pictures = true; - vlc_mutex_unlock(&osys->lock); + atomic_store(&osys->reset_pictures, true); break; } default: @@ -697,7 +693,6 @@ bool vout_ManageDisplay(vout_display_t *vd, bool allow_reset_pictures) bool reset_render = false; for (;;) { - vlc_mutex_lock(&osys->lock); #if defined(_WIN32) || defined(__OS2__) bool ch_fullscreen = osys->ch_fullscreen; @@ -714,16 +709,11 @@ bool vout_ManageDisplay(vout_display_t *vd, bool allow_reset_pictures) int display_height = osys->display_height; osys->ch_display_size = false; - bool reset_pictures; - if (allow_reset_pictures) { - reset_pictures = osys->reset_pictures; - osys->reset_pictures = false; - } else { - reset_pictures = false; - } - vlc_mutex_unlock(&osys->lock); + bool reset_pictures = allow_reset_pictures + && atomic_exchange(&osys->reset_pictures, false); + if (!ch_display_size && !reset_pictures && osys->is_display_filled == osys->cfg.is_display_filled && @@ -891,11 +881,7 @@ bool vout_AreDisplayPicturesInvalid(vout_display_t *vd) { vout_display_owner_sys_t *osys = vd->owner.sys; - vlc_mutex_lock(&osys->lock); - const bool reset_pictures = osys->reset_pictures; - vlc_mutex_unlock(&osys->lock); - - return reset_pictures; + return atomic_load(&osys->reset_pictures); } bool vout_IsDisplayFiltered(vout_display_t *vd) @@ -1077,6 +1063,7 @@ static vout_display_t *DisplayNew(vout_thread_t *vout, osys->vout = vout; osys->is_splitter = is_splitter; + atomic_init(&osys->reset_pictures, false); vlc_mutex_init(&osys->lock); vlc_mouse_Init(&osys->mouse.state); _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits