vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Thu Oct 30 22:55:27 2014 +0200| [98f3a7b37d290c3b003eda65b56d619fa30aba9d] | committer: Rémi Denis-Courmont
vout: remove unnecessary lock around the picture FIFO The picture FIFO has a lock internally to protect its internal state while picture references protect the pictures. There is no need to protect the FIFO usage with the picture lock. At this point, the picture lock is only protected the decoder pool. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=98f3a7b37d290c3b003eda65b56d619fa30aba9d --- src/video_output/video_output.c | 41 ++++++++++++++------------------------- 1 file changed, 15 insertions(+), 26 deletions(-) diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c index 83df593..32d0915 100644 --- a/src/video_output/video_output.c +++ b/src/video_output/video_output.c @@ -330,43 +330,36 @@ void vout_Reset(vout_thread_t *vout) bool vout_IsEmpty(vout_thread_t *vout) { - vlc_mutex_lock(&vout->p->picture_lock); - picture_t *picture = picture_fifo_Peek(vout->p->decoder_fifo); if (picture) picture_Release(picture); - vlc_mutex_unlock(&vout->p->picture_lock); - return !picture; } void vout_FixLeaks( vout_thread_t *vout ) { - vlc_mutex_lock(&vout->p->picture_lock); - picture_t *picture = picture_fifo_Peek(vout->p->decoder_fifo); - if (!picture) { - picture = picture_pool_Get(vout->p->decoder_pool); - } - - if (picture) { + if (picture != NULL) { picture_Release(picture); - /* Not all pictures has been displayed yet or some are - * free */ - vlc_mutex_unlock(&vout->p->picture_lock); - return; - } - - /* There is no reason that no pictures are available, force one - * from the pool, becarefull with it though */ - msg_Err(vout, "pictures leaked, trying to workaround"); + return; /* Not all pictures has been displayed yet */ - /* */ - picture_pool_NonEmpty(vout->p->decoder_pool); + } + vlc_mutex_lock(&vout->p->picture_lock); + picture = picture_pool_Get(vout->p->decoder_pool); + + if (picture != NULL) + picture_Release(picture); /* Not all pictures are referenced */ + else { + /* There are no reasons that no pictures are available, force one + * from the pool, be careful with it though */ + msg_Err(vout, "pictures leaked, trying to workaround"); + picture_pool_NonEmpty(vout->p->decoder_pool); + } vlc_mutex_unlock(&vout->p->picture_lock); } + void vout_NextPicture(vout_thread_t *vout, mtime_t *duration) { vout_control_cmd_t cmd; @@ -441,13 +434,9 @@ picture_t *vout_GetPicture(vout_thread_t *vout) */ void vout_PutPicture(vout_thread_t *vout, picture_t *picture) { - vlc_mutex_lock(&vout->p->picture_lock); - picture->p_next = NULL; picture_fifo_Push(vout->p->decoder_fifo, picture); - vlc_mutex_unlock(&vout->p->picture_lock); - vout_control_Wake(&vout->p->control); } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
