vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Sun Jan 27 21:58:31 2019 +0200| [320b728eb1e6ce4f78da066c63111f9f63716605] | committer: Rémi Denis-Courmont
vout: stop the thread on reinit This enables sharing per-format initialization code between the initial initialization and reinitialization cases. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=320b728eb1e6ce4f78da066c63111f9f63716605 --- src/video_output/video_output.c | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c index ef9d36c7bc..0c063dc679 100644 --- a/src/video_output/video_output.c +++ b/src/video_output/video_output.c @@ -1810,6 +1810,7 @@ vout_thread_t *vout_Request(vlc_object_t *object, if (vout) { video_format_t original; + sys = vout->p; VoutFixFormat(&original, cfg->fmt); /* TODO: If dimensions are equal or slightly smaller, update the aspect @@ -1824,19 +1825,21 @@ vout_thread_t *vout_Request(vlc_object_t *object, msg_Warn(vout, "DPB need to be increased"); } - vout_control_cmd_t cmd; - - vout_control_cmd_Init(&cmd, VOUT_CONTROL_REINIT); - cmd.cfg = cfg; - vout_control_Push(&vout->p->control, &cmd); + vout_control_PushVoid(&sys->control, VOUT_CONTROL_CLEAN); msg_Dbg(object, "reusing provided vout"); + vlc_join(sys->thread, NULL); - vout_control_WaitEmpty(&vout->p->control); - if (vout->p->dead) { - msg_Err(vout, "video output creation failed"); - vout_Close(vout); - return NULL; - } + sys->dead = false; + sys->mouse_event = cfg->mouse_event; + sys->opaque = cfg->opaque; + sys->pause.is_on = false; + sys->pause.date = VLC_TICK_INVALID; + + vout_ReinitInterlacingSupport(vout); + + video_format_Clean(&sys->original); + VoutFixFormat(&sys->original, cfg->fmt); + sys->dpb_size = cfg->dpb_size; vlc_mutex_lock(&vout->p->window_lock); vout_ControlUpdateWindowSize(vout); @@ -1849,15 +1852,15 @@ vout_thread_t *vout_Request(vlc_object_t *object, sys = vout->p; if (input != NULL) vout->p->input = vlc_object_hold((vlc_object_t *)input); + } - if (vout_Start(vout) - || vlc_clone(&sys->thread, Thread, vout, - VLC_THREAD_PRIORITY_OUTPUT)) { - vout_display_window_Delete(sys->display_cfg.window); - spu_Destroy(sys->spu); - vlc_object_release(vout); - return NULL; - } + if (vout_Start(vout) + || vlc_clone(&sys->thread, Thread, vout, VLC_THREAD_PRIORITY_OUTPUT)) { + msg_Err(vout, "video output creation failed"); + vout_display_window_Delete(sys->display_cfg.window); + spu_Destroy(sys->spu); + vlc_object_release(vout); + return NULL; } if (input != NULL) _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
