vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Mon Nov 3 19:58:51 2014 +0200| [6672975cf04c162492507a2483180eddd45534dc] | committer: Rémi Denis-Courmont
Wayland: fix attaching and detaching protocol-side buffer objects > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6672975cf04c162492507a2483180eddd45534dc --- modules/video_output/wayland/shm.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/modules/video_output/wayland/shm.c b/modules/video_output/wayland/shm.c index 92fa3f8..39719e1 100644 --- a/modules/video_output/wayland/shm.c +++ b/modules/video_output/wayland/shm.c @@ -61,12 +61,10 @@ struct vout_display_sys_t static void PictureDestroy(picture_t *pic) { - struct wl_buffer *buf = (struct wl_buffer *)pic->p_sys; const long pagemask = sysconf(_SC_PAGE_SIZE) - 1; size_t picsize = pic->p[0].i_pitch * pic->p[0].i_lines; munmap(pic->p[0].p_pixels, (picsize + pagemask) & ~pagemask); - wl_buffer_destroy(buf); /* XXX: what if wl_display is already gone? */ free(pic); } @@ -83,6 +81,22 @@ static const struct wl_buffer_listener buffer_cbs = buffer_release_cb, }; +static void PictureAttach(void *data, picture_t *pic) +{ + struct wl_buffer *buf = (struct wl_buffer *)pic->p_sys; + + wl_buffer_add_listener(buf, &buffer_cbs, pic); + (void) data; +} + +static void PictureDetach(void *data, picture_t *pic) +{ + struct wl_buffer *buf = (struct wl_buffer *)pic->p_sys; + + wl_buffer_destroy(buf); + (void) data; +} + static picture_pool_t *Pool(vout_display_t *vd, unsigned req) { vout_display_sys_t *sys = vd->sys; @@ -175,7 +189,6 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned req) break; } - wl_buffer_add_listener(buf, &buffer_cbs, pic); pics[count++] = pic; } @@ -194,6 +207,8 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned req) picture_Release(pics[--count]); return NULL; } + + picture_pool_Enum(sys->pool, PictureAttach, NULL); return sys->pool; } @@ -234,6 +249,7 @@ static void ResetPictures(vout_display_t *vd) if (sys->pool == NULL) return; + picture_pool_Enum(sys->pool, PictureDetach, NULL); picture_pool_Release(sys->pool); sys->pool = NULL; } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
