eglimage: Fix exported DMABuf size

All we know is the height and the stride, so make sure not to expose
the DMABuf larger then the size we know about.
This commit is contained in:
Nicolas Dufresne 2019-07-14 16:33:35 -04:00
parent 976e7e4e3d
commit ac0d19b72f
2 changed files with 9 additions and 7 deletions

View file

@ -286,13 +286,14 @@ _create_cached_dmabuf_info (GstGLContext * context, gpointer data)
if (gst_egl_image_export_dmabuf (image, &fd, &stride, &offset)) { if (gst_egl_image_export_dmabuf (image, &fd, &stride, &offset)) {
GstGLDownloadElement *download = transfer->download; GstGLDownloadElement *download = transfer->download;
struct DmabufInfo *info; struct DmabufInfo *info;
gsize maxsize; gsize size;
gst_memory_get_sizes (GST_MEMORY_CAST (transfer->glmem), NULL, &maxsize); size =
gst_gl_memory_get_texture_height (transfer->glmem) * stride + offset;
info = g_new0 (struct DmabufInfo, 1); info = g_new0 (struct DmabufInfo, 1);
info->dmabuf = info->dmabuf =
gst_dmabuf_allocator_alloc (download->dmabuf_allocator, fd, maxsize); gst_dmabuf_allocator_alloc (download->dmabuf_allocator, fd, size);
info->stride = stride; info->stride = stride;
info->offset = offset; info->offset = offset;

View file

@ -1029,10 +1029,6 @@ gst_egl_image_export_dmabuf (GstEGLImage * image, int *fd, gint * stride,
if (num_planes > 1) if (num_planes > 1)
return FALSE; return FALSE;
GST_DEBUG_OBJECT (image->context, "Export DMABuf with fourcc %"
GST_FOURCC_FORMAT " and modififers %" G_GUINT64_FORMAT,
GST_FOURCC_ARGS (fourcc), modifier);
/* FIXME We don't support modifiers */ /* FIXME We don't support modifiers */
if (modifier != DRM_FORMAT_MOD_LINEAR) if (modifier != DRM_FORMAT_MOD_LINEAR)
return FALSE; return FALSE;
@ -1041,6 +1037,11 @@ gst_egl_image_export_dmabuf (GstEGLImage * image, int *fd, gint * stride,
&egl_stride, &egl_offset)) &egl_stride, &egl_offset))
return FALSE; return FALSE;
GST_DEBUG_OBJECT (image->context, "Export DMABuf with fourcc %"
GST_FOURCC_FORMAT ", modififers %" G_GUINT64_FORMAT
", stride %i and offset %i", GST_FOURCC_ARGS (fourcc), modifier,
egl_stride, egl_offset);
*fd = egl_fd; *fd = egl_fd;
*stride = egl_stride; *stride = egl_stride;
*offset = egl_offset; *offset = egl_offset;