vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Tue Apr 14 22:08:15 2020 +0300| [26f2af8329651fbafbbd26abadae0d7f7afb4a66] | committer: Rémi Denis-Courmont
vout: simplify without cancellation > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=26f2af8329651fbafbbd26abadae0d7f7afb4a66 --- src/video_output/control.c | 2 -- src/video_output/control.h | 1 + src/video_output/video_output.c | 14 +++++--------- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/video_output/control.c b/src/video_output/control.c index d8da02fc35..fd0c80fe6e 100644 --- a/src/video_output/control.c +++ b/src/video_output/control.c @@ -144,7 +144,6 @@ int vout_control_Pop(vout_control_t *ctrl, vout_control_cmd_t *cmd, vlc_tick_t deadline) { vlc_mutex_lock(&ctrl->lock); - mutex_cleanup_push(&ctrl->lock); if (ctrl->cmd.i_size <= 0) { /* Spurious wakeups are perfectly fine */ @@ -158,7 +157,6 @@ int vout_control_Pop(vout_control_t *ctrl, vout_control_cmd_t *cmd, while (ctrl->is_held) vlc_cond_wait(&ctrl->wait_available, &ctrl->lock); - vlc_cleanup_pop(); bool has_cmd; if (ctrl->cmd.i_size > 0) { diff --git a/src/video_output/control.h b/src/video_output/control.h index 02b0696028..eee86c4ca9 100644 --- a/src/video_output/control.h +++ b/src/video_output/control.h @@ -27,6 +27,7 @@ /* */ enum { + VOUT_CONTROL_TERMINATE, VOUT_CONTROL_CHANGE_FILTERS, /* string */ VOUT_CONTROL_CHANGE_INTERLACE, /* boolean */ diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c index 6a361e568d..480dfe75f3 100644 --- a/src/video_output/video_output.c +++ b/src/video_output/video_output.c @@ -33,8 +33,6 @@ # include "config.h" #endif -#include <stdnoreturn.h> - #include <vlc_common.h> #include <math.h> @@ -1674,7 +1672,7 @@ error: * terminated. It handles the pictures arriving in the video heap and the * display device events. *****************************************************************************/ -noreturn static void *Thread(void *object) +static void *Thread(void *object) { vout_thread_t *vout = object; vout_thread_sys_t *sys = vout->p; @@ -1692,10 +1690,11 @@ noreturn static void *Thread(void *object) } else { deadline = VLC_TICK_INVALID; } - while (!vout_control_Pop(&sys->control, &cmd, deadline)) { - int canc = vlc_savecancel(); + while (!vout_control_Pop(&sys->control, &cmd, deadline)) { switch(cmd.type) { + case VOUT_CONTROL_TERMINATE: + return NULL; /* no need to clean &cmd */ case VOUT_CONTROL_CHANGE_FILTERS: ThreadChangeFilters(vout, cmd.string, NULL, false); break; @@ -1707,17 +1706,14 @@ noreturn static void *Thread(void *object) break; } vout_control_cmd_Clean(&cmd); - vlc_restorecancel(canc); } - int canc = vlc_savecancel(); deadline = VLC_TICK_INVALID; wait = ThreadDisplayPicture(vout, &deadline) != VLC_SUCCESS; const bool picture_interlaced = sys->displayed.is_interlaced; vout_SetInterlacingState(vout, picture_interlaced); - vlc_restorecancel(canc); } } @@ -1772,7 +1768,7 @@ void vout_StopDisplay(vout_thread_t *vout) { vout_thread_sys_t *sys = vout->p; - vlc_cancel(sys->thread); + vout_control_PushVoid(&sys->control, VOUT_CONTROL_TERMINATE); vlc_join(sys->thread, NULL); vout_ReleaseDisplay(vout); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
