waylandsink: Allow any kind of FD for shm memory

https://bugzilla.gnome.org/show_bug.cgi?id=711155
This commit is contained in:
Nicolas Dufresne 2016-09-29 14:34:18 -04:00
parent 81d1b207ad
commit 3272f2002f
2 changed files with 8 additions and 6 deletions

View file

@ -642,7 +642,7 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer)
/* FIXME check all memory when introducing DMA-Buf */ /* FIXME check all memory when introducing DMA-Buf */
mem = gst_buffer_peek_memory (buffer, 0); mem = gst_buffer_peek_memory (buffer, 0);
if (gst_is_wl_shm_memory (mem)) { if (gst_is_fd_memory (mem)) {
wbuf = gst_wl_shm_memory_construct_wl_buffer (mem, sink->display, wbuf = gst_wl_shm_memory_construct_wl_buffer (mem, sink->display,
&sink->video_info); &sink->video_info);
} }

View file

@ -131,7 +131,7 @@ gst_wl_shm_memory_construct_wl_buffer (GstMemory * mem, GstWlDisplay * display,
const GstVideoInfo * info) const GstVideoInfo * info)
{ {
gint width, height, stride; gint width, height, stride;
gsize size; gsize offset, size, memsize, maxsize;
enum wl_shm_format format; enum wl_shm_format format;
struct wl_shm_pool *wl_pool; struct wl_shm_pool *wl_pool;
struct wl_buffer *wbuffer; struct wl_buffer *wbuffer;
@ -142,16 +142,18 @@ gst_wl_shm_memory_construct_wl_buffer (GstMemory * mem, GstWlDisplay * display,
size = GST_VIDEO_INFO_SIZE (info); size = GST_VIDEO_INFO_SIZE (info);
format = gst_video_format_to_wl_shm_format (GST_VIDEO_INFO_FORMAT (info)); format = gst_video_format_to_wl_shm_format (GST_VIDEO_INFO_FORMAT (info));
g_return_val_if_fail (gst_is_wl_shm_memory (mem), NULL); memsize = gst_memory_get_sizes (mem, &offset, &maxsize);
g_return_val_if_fail (size <= mem->size, NULL);
g_return_val_if_fail (gst_is_fd_memory (mem), NULL);
g_return_val_if_fail (size <= memsize, NULL);
GST_DEBUG_OBJECT (mem->allocator, "Creating wl_buffer of size %" GST_DEBUG_OBJECT (mem->allocator, "Creating wl_buffer of size %"
G_GSSIZE_FORMAT " (%d x %d, stride %d), format %s", size, width, height, G_GSSIZE_FORMAT " (%d x %d, stride %d), format %s", size, width, height,
stride, gst_wl_shm_format_to_string (format)); stride, gst_wl_shm_format_to_string (format));
wl_pool = wl_shm_create_pool (display->shm, gst_fd_memory_get_fd (mem), wl_pool = wl_shm_create_pool (display->shm, gst_fd_memory_get_fd (mem),
mem->size); memsize);
wbuffer = wl_shm_pool_create_buffer (wl_pool, 0, width, height, stride, wbuffer = wl_shm_pool_create_buffer (wl_pool, offset, width, height, stride,
format); format);
wl_shm_pool_destroy (wl_pool); wl_shm_pool_destroy (wl_pool);