From: RĂ©mi Denis-Courmont Date: Sat, 1 Nov 2014 13:59:55 +0000 (+0200) Subject: vout: fix picture lock/unlock with private pool X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=6a6c23bf075ba70844f8e9b51991df74952d616f;p=vlc vout: fix picture lock/unlock with private pool --- diff --git a/include/vlc_picture_pool.h b/include/vlc_picture_pool.h index ad8835efb3..72278c9ab4 100644 --- a/include/vlc_picture_pool.h +++ b/include/vlc_picture_pool.h @@ -133,6 +133,7 @@ VLC_USED; */ VLC_API unsigned picture_pool_GetSize(const picture_pool_t *); +bool picture_pool_NeedsLocking(const picture_pool_t *); #endif /* VLC_PICTURE_POOL_H */ diff --git a/src/misc/picture_pool.c b/src/misc/picture_pool.c index e899f9eabb..15d07919ae 100644 --- a/src/misc/picture_pool.c +++ b/src/misc/picture_pool.c @@ -208,6 +208,8 @@ error: picture_pool_t *picture_pool_Reserve(picture_pool_t *master, unsigned count) { + assert(master->pic_unlock == NULL); + picture_t *picture[count ? count : 1]; unsigned i; @@ -221,8 +223,6 @@ picture_pool_t *picture_pool_Reserve(picture_pool_t *master, unsigned count) if (!pool) goto error; - pool->pic_lock = master->pic_lock; - pool->pic_unlock = master->pic_unlock; return pool; error: @@ -330,3 +330,8 @@ unsigned picture_pool_GetSize(const picture_pool_t *pool) { return pool->picture_count; } + +bool picture_pool_NeedsLocking(const picture_pool_t *pool) +{ + return pool->pic_lock != NULL || pool->pic_unlock != NULL; +} diff --git a/src/video_output/vout_wrapper.c b/src/video_output/vout_wrapper.c index d172bcca0b..8b5174a235 100644 --- a/src/video_output/vout_wrapper.c +++ b/src/video_output/vout_wrapper.c @@ -133,8 +133,8 @@ int vout_InitWrapper(vout_thread_t *vout) picture_pool_t *display_pool = vout_display_Pool(vd, allow_dr ? __MAX(VOUT_MAX_PICTURES, reserved_picture + decoder_picture) : 3); - if (allow_dr && - picture_pool_GetSize(display_pool) >= reserved_picture + decoder_picture) { + if (allow_dr && !picture_pool_NeedsLocking(display_pool) + && picture_pool_GetSize(display_pool) >= reserved_picture + decoder_picture) { sys->dpb_size = picture_pool_GetSize(display_pool) - reserved_picture; sys->decoder_pool = display_pool; sys->display_pool = display_pool;