vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Sun Dec 9 21:37:17 2018 +0200| [e266b6e1b2262714853cf3d56c7f50840e010710] | committer: Rémi Denis-Courmont
vout: allow display not to provide a pool > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e266b6e1b2262714853cf3d56c7f50840e010710 --- src/video_output/display.c | 30 ++++++++++++++++++++++++++++-- src/video_output/vout_wrapper.c | 4 ++-- src/video_output/vout_wrapper.h | 8 +------- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/video_output/display.c b/src/video_output/display.c index 3b91a82edc..dd807bc893 100644 --- a/src/video_output/display.c +++ b/src/video_output/display.c @@ -59,7 +59,7 @@ static picture_t *VideoBufferNew(filter_t *filter) vd->fmt.i_width == fmt->i_width && vd->fmt.i_height == fmt->i_height); - picture_pool_t *pool = vout_display_Pool(vd, 3); + picture_pool_t *pool = vout_GetPool(vd, 3); if (!pool) return NULL; return picture_pool_Get(pool); @@ -390,6 +390,7 @@ typedef struct { } mouse; atomic_bool reset_pictures; + picture_pool_t *pool; } vout_display_owner_sys_t; static const struct filter_video_callbacks vout_display_filter_cbs = { @@ -631,6 +632,21 @@ static void VoutDisplayCropRatio(int *left, int *top, int *right, int *bottom, } } +/** + * It retreives a picture pool from the display + */ +picture_pool_t *vout_GetPool(vout_display_t *vd, unsigned count) +{ + vout_display_owner_sys_t *osys = vd->owner.sys; + + if (vd->pool != NULL) + return vd->pool(vd, count); + + if (osys->pool == NULL) + osys->pool = picture_pool_NewFromFormat(&vd->fmt, count); + return osys->pool; +} + bool vout_ManageDisplay(vout_display_t *vd) { vout_display_owner_sys_t *osys = vd->owner.sys; @@ -671,6 +687,11 @@ bool vout_ManageDisplay(vout_display_t *vd) #endif if (atomic_exchange(&osys->reset_pictures, false)) { + if (osys->pool != NULL) { + picture_pool_Release(osys->pool); + osys->pool = NULL; + } + if (vout_display_Control(vd, VOUT_DISPLAY_RESET_PICTURES, &osys->cfg, &vd->fmt)) { /* FIXME what to do here ? */ @@ -941,6 +962,7 @@ static vout_display_t *DisplayNew(vout_thread_t *vout, osys->is_splitter = is_splitter; atomic_init(&osys->reset_pictures, false); + osys->pool = NULL; vlc_mutex_init(&osys->lock); vlc_mouse_Init(&osys->mouse.state); @@ -998,6 +1020,10 @@ void vout_DeleteDisplay(vout_display_t *vd, vout_display_cfg_t *cfg) VoutDisplayDestroyRender(vd); if (osys->is_splitter) SplitterClose(vd); + + if (osys->pool != NULL) + picture_pool_Release(osys->pool); + vout_display_Delete(vd); vlc_mutex_destroy(&osys->lock); free(osys); @@ -1113,7 +1139,7 @@ static int SplitterPictureNew(video_splitter_t *splitter, picture_t *picture[]) /* TODO use a pool ? */ picture[i] = picture_NewFromFormat(&wsys->display[i]->source); } else { - picture_pool_t *pool = vout_display_Pool(wsys->display[i], 3); + picture_pool_t *pool = vout_GetPool(wsys->display[i], 3); picture[i] = pool ? picture_pool_Get(pool) : NULL; } if (!picture[i]) { diff --git a/src/video_output/vout_wrapper.c b/src/video_output/vout_wrapper.c index 8a723c5e2b..3e1615a2b5 100644 --- a/src/video_output/vout_wrapper.c +++ b/src/video_output/vout_wrapper.c @@ -49,7 +49,7 @@ static int Forward(vlc_object_t *, char const *, static void NoDrInit(vout_thread_sys_t *sys) { if (sys->display.use_dr) - sys->display_pool = vout_display_Pool(sys->display.vd, 3); + sys->display_pool = vout_GetPool(sys->display.vd, 3); else sys->display_pool = NULL; } @@ -89,7 +89,7 @@ int vout_OpenWrapper(vout_thread_t *vout, kept_picture; const unsigned display_pool_size = allow_dr ? __MAX(VOUT_MAX_PICTURES, reserved_picture + decoder_picture) : 3; - picture_pool_t *display_pool = vout_display_Pool(vd, display_pool_size); + picture_pool_t *display_pool = vout_GetPool(vd, display_pool_size); if (display_pool == NULL) goto error; diff --git a/src/video_output/vout_wrapper.h b/src/video_output/vout_wrapper.h index 78bc38e3a2..429408be8e 100644 --- a/src/video_output/vout_wrapper.h +++ b/src/video_output/vout_wrapper.h @@ -28,13 +28,7 @@ /* XXX DO NOT use it outside the vout module wrapper XXX */ -/** - * It retreives a picture pool from the display - */ -static inline picture_pool_t *vout_display_Pool(vout_display_t *vd, unsigned count) -{ - return vd->pool(vd, count); -} +picture_pool_t *vout_GetPool(vout_display_t *vd, unsigned count); /** * It preparse a picture for display. _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
