474 lines
15 KiB
Diff
474 lines
15 KiB
Diff
From 7964e5dabf3f89b02a89ac775466de5b3dfab8a9 Mon Sep 17 00:00:00 2001
|
|
From: Haihua Hu <jared.hu@nxp.com>
|
|
Date: Fri, 25 Nov 2016 14:48:44 +0800
|
|
Subject: [PATCH 23/26] Add ion dmabuf support in gldownload
|
|
|
|
Support copy into dma-fb buffer if support the buffer format
|
|
|
|
Upstream-Status: Inappropriate [i.MX specific]
|
|
|
|
Signed-off-by: Haihua Hu <jared.hu@nxp.com>
|
|
---
|
|
ext/gl/gstgldownloadelement.c | 36 +++++-
|
|
gst-libs/gst/gl/Makefile.am | 6 +
|
|
gst-libs/gst/gl/gstgl_fwd.h | 4 +
|
|
gst-libs/gst/gl/gstglmemorydma.c | 258 +++++++++++++++++++++++++++++++++++++++
|
|
gst-libs/gst/gl/gstglmemorydma.h | 76 ++++++++++++
|
|
5 files changed, 376 insertions(+), 4 deletions(-)
|
|
create mode 100644 gst-libs/gst/gl/gstglmemorydma.c
|
|
create mode 100644 gst-libs/gst/gl/gstglmemorydma.h
|
|
|
|
diff --git a/ext/gl/gstgldownloadelement.c b/ext/gl/gstgldownloadelement.c
|
|
index 03f4479..1e6e728 100644
|
|
--- a/ext/gl/gstgldownloadelement.c
|
|
+++ b/ext/gl/gstgldownloadelement.c
|
|
@@ -29,6 +29,10 @@
|
|
#include <gst/gl/gstglphymemory.h>
|
|
#endif
|
|
|
|
+#if GST_GL_HAVE_IONDMA
|
|
+#include <gst/gl/gstglmemorydma.h>
|
|
+#endif
|
|
+
|
|
GST_DEBUG_CATEGORY_STATIC (gst_gl_download_element_debug);
|
|
#define GST_CAT_DEFAULT gst_gl_download_element_debug
|
|
|
|
@@ -173,8 +177,22 @@ gst_gl_download_element_prepare_output_buffer (GstBaseTransform * bt,
|
|
gint i, n;
|
|
GstGLMemory *glmem;
|
|
|
|
-#if GST_GL_HAVE_PHYMEM
|
|
glmem = gst_buffer_peek_memory (inbuf, 0);
|
|
+#if GST_GL_HAVE_IONDMA
|
|
+ if (gst_is_gl_memory_dma (glmem)) {
|
|
+ GstGLContext *context = GST_GL_BASE_FILTER (bt)->context;
|
|
+ GstVideoInfo info;
|
|
+
|
|
+ gst_video_info_from_caps (&info, src_caps);
|
|
+ *outbuf = gst_gl_memory_dma_buffer_to_gstbuffer (context, &info, inbuf);
|
|
+
|
|
+ GST_DEBUG_OBJECT (download, "gl download with dma buf.");
|
|
+
|
|
+ return GST_FLOW_OK;
|
|
+ }
|
|
+#endif
|
|
+
|
|
+#if GST_GL_HAVE_PHYMEM
|
|
if (gst_is_gl_physical_memory (glmem)) {
|
|
GstGLContext *context = GST_GL_BASE_FILTER (bt)->context;
|
|
GstVideoInfo info;
|
|
@@ -233,6 +251,7 @@ gst_gl_download_element_propose_allocation (GstBaseTransform * bt,
|
|
GstCaps *caps;
|
|
GstStructure *config;
|
|
gsize size;
|
|
+ GstVideoFormat fmt;
|
|
|
|
gst_query_parse_allocation (query, &caps, NULL);
|
|
if (!gst_video_info_from_caps (&info, caps)) {
|
|
@@ -240,12 +259,21 @@ gst_gl_download_element_propose_allocation (GstBaseTransform * bt,
|
|
return FALSE;
|
|
}
|
|
|
|
- GST_DEBUG_OBJECT (bt, "video format is %s", gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (&info)));
|
|
-
|
|
gst_allocation_params_init (¶ms);
|
|
|
|
+ fmt = GST_VIDEO_INFO_FORMAT (&info);
|
|
+
|
|
+ GST_DEBUG_OBJECT (bt, "video format is %s", gst_video_format_to_string (fmt));
|
|
+
|
|
+#if GST_GL_HAVE_IONDMA
|
|
+ if (fmt == GST_VIDEO_FORMAT_RGBA || fmt == GST_VIDEO_FORMAT_RGB16) {
|
|
+ allocator = gst_gl_memory_dma_allocator_obtain ();
|
|
+ GST_DEBUG_OBJECT (bt, "obtain dma memory allocator %p.", allocator);
|
|
+ }
|
|
+#endif
|
|
+
|
|
#if GST_GL_HAVE_PHYMEM
|
|
- if (gst_is_gl_physical_memory_supported_fmt (&info)) {
|
|
+ if (!allocator && gst_is_gl_physical_memory_supported_fmt (&info)) {
|
|
allocator = gst_phy_mem_allocator_obtain ();
|
|
GST_DEBUG_OBJECT (bt, "obtain physical memory allocator %p.", allocator);
|
|
}
|
|
diff --git a/gst-libs/gst/gl/Makefile.am b/gst-libs/gst/gl/Makefile.am
|
|
index 03ce1b0..b0b6655 100644
|
|
--- a/gst-libs/gst/gl/Makefile.am
|
|
+++ b/gst-libs/gst/gl/Makefile.am
|
|
@@ -137,6 +137,12 @@ libgstgl_@GST_API_VERSION@include_HEADERS += gstglphymemory.h
|
|
libgstgl_@GST_API_VERSION@_la_LIBADD += -lg2d
|
|
endif
|
|
|
|
+if HAVE_IONDMA
|
|
+libgstgl_@GST_API_VERSION@_la_SOURCES += gstglmemorydma.c
|
|
+libgstgl_@GST_API_VERSION@include_HEADERS += gstglmemorydma.h
|
|
+endif
|
|
+
|
|
+
|
|
configexecincludedir = $(libdir)/gstreamer-@GST_API_VERSION@/include/gst/gl
|
|
nodist_configexecinclude_HEADERS = $(built_sys_header_configure)
|
|
|
|
diff --git a/gst-libs/gst/gl/gstgl_fwd.h b/gst-libs/gst/gl/gstgl_fwd.h
|
|
index 8f42e8d..0f5957d 100644
|
|
--- a/gst-libs/gst/gl/gstgl_fwd.h
|
|
+++ b/gst-libs/gst/gl/gstgl_fwd.h
|
|
@@ -51,6 +51,10 @@ typedef struct _GstGLMemory GstGLMemory;
|
|
typedef struct _GstGLMemoryAllocator GstGLMemoryAllocator;
|
|
typedef struct _GstGLMemoryAllocatorClass GstGLMemoryAllocatorClass;
|
|
|
|
+typedef struct _GstGLMemoryDMA GstGLMemoryDMA;
|
|
+typedef struct _GstGLMemoryDMAAllocator GstGLMemoryDMAAllocator;
|
|
+typedef struct _GstGLMemoryDMAAllocatorClass GstGLMemoryDMAAllocatorClass;
|
|
+
|
|
typedef struct _GstGLMemoryPBO GstGLMemoryPBO;
|
|
typedef struct _GstGLMemoryPBOAllocator GstGLMemoryPBOAllocator;
|
|
typedef struct _GstGLMemoryPBOAllocatorClass GstGLMemoryPBOAllocatorClass;
|
|
diff --git a/gst-libs/gst/gl/gstglmemorydma.c b/gst-libs/gst/gl/gstglmemorydma.c
|
|
new file mode 100644
|
|
index 0000000..8774e6a
|
|
--- /dev/null
|
|
+++ b/gst-libs/gst/gl/gstglmemorydma.c
|
|
@@ -0,0 +1,258 @@
|
|
+/*
|
|
+ * GStreamer
|
|
+ * Copyright (c) 2016, Freescale Semiconductor, Inc.
|
|
+ *
|
|
+ * This library is free software; you can redistribute it and/or
|
|
+ * modify it under the terms of the GNU Library General Public
|
|
+ * License as published by the Free Software Foundatdma; either
|
|
+ * versdma 2 of the License, or (at your option) any later version.
|
|
+ *
|
|
+ * This library is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+ * Library General Public License for more details.
|
|
+ *
|
|
+ * You should have received a copy of the GNU Library General Public
|
|
+ * License along with this library; if not, write to the
|
|
+ * Free Software Foundatdma, Inc., 51 Franklin St, Fifth Floor,
|
|
+ * Boston, MA 02110-1301, USA.
|
|
+ */
|
|
+
|
|
+#ifdef HAVE_CONFIG_H
|
|
+#include "config.h"
|
|
+#endif
|
|
+
|
|
+#include <string.h>
|
|
+
|
|
+#include <gst/allocators/gstdmabuf.h>
|
|
+#include <gst/gl/gstglmemorydma.h>
|
|
+
|
|
+#if GST_GL_HAVE_IONDMA
|
|
+#include <gst/allocators/gstionmemory.h>
|
|
+#endif
|
|
+
|
|
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_GL_DMA_MEMORY);
|
|
+#define GST_CAT_DEFAULT GST_CAT_GL_DMA_MEMORY
|
|
+
|
|
+#define parent_class gst_gl_memory_dma_allocator_parent_class
|
|
+G_DEFINE_TYPE (GstGLMemoryDMAAllocator, gst_gl_memory_dma_allocator,
|
|
+ GST_TYPE_GL_MEMORY_ALLOCATOR);
|
|
+
|
|
+static void
|
|
+gst_gl_memory_dma_init_instance (void)
|
|
+{
|
|
+ GstAllocator *ion_allocator = NULL;
|
|
+ GstGLMemoryDMAAllocator *_gl_allocator;
|
|
+
|
|
+ GST_DEBUG_CATEGORY_INIT (GST_CAT_GL_DMA_MEMORY, "glmemorydma", 0, "OpenGL dma memory");
|
|
+
|
|
+#if GST_GL_HAVE_IONDMA
|
|
+ ion_allocator = gst_ion_allocator_obtain();
|
|
+#endif
|
|
+
|
|
+ if (!ion_allocator)
|
|
+ return;
|
|
+
|
|
+ gst_gl_memory_init_once ();
|
|
+
|
|
+ _gl_allocator = (GstGLMemoryDMAAllocator *) g_object_new (GST_TYPE_GL_MEMORY_DMA_ALLOCATOR, NULL);
|
|
+ _gl_allocator->ion_allocator = ion_allocator;
|
|
+
|
|
+ gst_allocator_register (GST_GL_MEMORY_DMA_ALLOCATOR_NAME,
|
|
+ gst_object_ref (_gl_allocator));
|
|
+}
|
|
+
|
|
+GstAllocator *
|
|
+gst_gl_memory_dma_allocator_obtain (void)
|
|
+{
|
|
+
|
|
+ static GOnce once = G_ONCE_INIT;
|
|
+ GstAllocator *allocator;
|
|
+
|
|
+ g_once (&once, (GThreadFunc) gst_gl_memory_dma_init_instance, NULL);
|
|
+
|
|
+ allocator = gst_allocator_find (GST_GL_MEMORY_DMA_ALLOCATOR_NAME);
|
|
+ if (allocator == NULL)
|
|
+ GST_WARNING ("No allocator named %s found", GST_GL_MEMORY_DMA_ALLOCATOR_NAME);
|
|
+
|
|
+ return allocator;
|
|
+}
|
|
+
|
|
+static void
|
|
+gst_gl_memory_dma_allocator_dispose (GObject * object)
|
|
+{
|
|
+ GstGLMemoryDMAAllocator *gl_dma_alloc= GST_GL_MEMORY_DMA_ALLOCATOR (object);
|
|
+
|
|
+ if (gl_dma_alloc->ion_allocator) {
|
|
+ GST_DEBUG ("free ion allocator");
|
|
+ gst_object_unref (gl_dma_alloc->ion_allocator);
|
|
+ gl_dma_alloc->ion_allocator = NULL;
|
|
+ }
|
|
+
|
|
+ G_OBJECT_CLASS (parent_class)->dispose (object);
|
|
+}
|
|
+
|
|
+static gboolean
|
|
+_gl_mem_create (GstGLMemoryDMA * gl_mem, GError ** error)
|
|
+{
|
|
+ GstGLContext *context = gl_mem->mem.mem.context;
|
|
+ GstGLBaseMemoryAllocatorClass *alloc_class;
|
|
+ guint dma_fd;
|
|
+
|
|
+ alloc_class = GST_GL_BASE_MEMORY_ALLOCATOR_CLASS (parent_class);
|
|
+ if (!alloc_class->create ((GstGLBaseMemory *) gl_mem, error))
|
|
+ return FALSE;
|
|
+
|
|
+ dma_fd = gst_dmabuf_memory_get_fd ((GstMemory*) gl_mem->dma);
|
|
+
|
|
+ gl_mem->eglimage =
|
|
+ gst_egl_image_from_dmabuf (context, dma_fd, &gl_mem->mem.info, 0,0);
|
|
+
|
|
+ if (!gl_mem->eglimage) {
|
|
+ GST_CAT_ERROR (GST_CAT_GL_DMA_MEMORY, "Can't allocate eglimage memory");
|
|
+ return FALSE;
|
|
+ }
|
|
+
|
|
+ const GstGLFuncs *gl = context->gl_vtable;
|
|
+
|
|
+ gl->ActiveTexture (GL_TEXTURE0);
|
|
+ gl->BindTexture (GL_TEXTURE_2D, gl_mem->mem.tex_id);
|
|
+ gl->EGLImageTargetTexture2D (GL_TEXTURE_2D,
|
|
+ gst_egl_image_get_image (gl_mem->eglimage));
|
|
+
|
|
+ GST_CAT_DEBUG (GST_CAT_GL_DMA_MEMORY, "generated dma buffer %p fd %u texid %u",
|
|
+ gl_mem, dma_fd, gl_mem->mem.tex_id);
|
|
+
|
|
+ return TRUE;
|
|
+}
|
|
+
|
|
+static GstMemory *
|
|
+_gl_mem_alloc (GstAllocator * allocator, gsize size,
|
|
+ GstAllocationParams * params)
|
|
+{
|
|
+ g_warning ("Use gst_gl_base_memory_alloc () to allocate from this "
|
|
+ "GstGLMemoryDMA allocator");
|
|
+
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
+static void
|
|
+_gl_mem_destroy (GstGLMemoryDMA * gl_mem)
|
|
+{
|
|
+ GST_CAT_DEBUG (GST_CAT_GL_DMA_MEMORY, "destroy gl dma buffer %p", gl_mem);
|
|
+
|
|
+ if (gl_mem->eglimage)
|
|
+ gst_egl_image_unref (gl_mem->eglimage);
|
|
+ gl_mem->eglimage = NULL;
|
|
+ if (gl_mem->dma)
|
|
+ gst_memory_unref (GST_MEMORY_CAST (gl_mem->dma));
|
|
+ gl_mem->dma = NULL;
|
|
+
|
|
+ GST_GL_BASE_MEMORY_ALLOCATOR_CLASS (parent_class)->destroy ((GstGLBaseMemory
|
|
+ *) gl_mem);
|
|
+}
|
|
+
|
|
+static GstGLMemoryDMA *
|
|
+_gl_mem_dma_alloc (GstGLBaseMemoryAllocator * allocator,
|
|
+ GstGLVideoAllocationParams * params)
|
|
+{
|
|
+ GstGLMemoryDMA *mem;
|
|
+ guint alloc_flags;
|
|
+ gsize size;
|
|
+ GstGLMemoryDMAAllocator *gl_dma_alloc = GST_GL_MEMORY_DMA_ALLOCATOR (allocator);
|
|
+
|
|
+ alloc_flags = params->parent.alloc_flags;
|
|
+
|
|
+ g_return_val_if_fail (alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO,
|
|
+ NULL);
|
|
+
|
|
+ mem = g_new0 (GstGLMemoryDMA, 1);
|
|
+
|
|
+ mem->params = params->parent.alloc_params;
|
|
+
|
|
+ size = gst_gl_get_plane_data_size (params->v_info, params->valign, params->plane);
|
|
+ mem->dma = gst_allocator_alloc (gl_dma_alloc->ion_allocator, size, mem->params);
|
|
+
|
|
+ if (!mem->dma) {
|
|
+ GST_CAT_ERROR (GST_CAT_GL_DMA_MEMORY, "Can't allocate dma memory size %d", size);
|
|
+ g_free(mem);
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ gst_gl_memory_init (GST_GL_MEMORY_CAST (mem), GST_ALLOCATOR_CAST (allocator),
|
|
+ NULL, params->parent.context, params->target, params->tex_format,
|
|
+ params->parent.alloc_params, params->v_info, params->plane,
|
|
+ params->valign, params->parent.user_data, params->parent.notify);
|
|
+
|
|
+ return mem;
|
|
+}
|
|
+
|
|
+static void
|
|
+gst_gl_memory_dma_allocator_class_init (GstGLMemoryDMAAllocatorClass * klass)
|
|
+{
|
|
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
|
+ GstGLBaseMemoryAllocatorClass *gl_base;
|
|
+ GstAllocatorClass *allocator_class;
|
|
+
|
|
+ gl_base = (GstGLBaseMemoryAllocatorClass *) klass;
|
|
+ allocator_class = (GstAllocatorClass *) klass;
|
|
+
|
|
+ gl_base->alloc = (GstGLBaseMemoryAllocatorAllocFunction) _gl_mem_dma_alloc;
|
|
+ gl_base->create = (GstGLBaseMemoryAllocatorCreateFunction) _gl_mem_create;
|
|
+ gl_base->destroy = (GstGLBaseMemoryAllocatorDestroyFunction) _gl_mem_destroy;
|
|
+ gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_gl_memory_dma_allocator_dispose);
|
|
+
|
|
+ allocator_class->alloc = _gl_mem_alloc;
|
|
+}
|
|
+
|
|
+static void
|
|
+gst_gl_memory_dma_allocator_init (GstGLMemoryDMAAllocator * allocator)
|
|
+{
|
|
+ GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator);
|
|
+
|
|
+ alloc->mem_type = GST_GL_MEMORY_DMA_ALLOCATOR_NAME;
|
|
+
|
|
+ GST_OBJECT_FLAG_SET (allocator, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC);
|
|
+}
|
|
+
|
|
+gboolean
|
|
+gst_is_gl_memory_dma (GstMemory * mem)
|
|
+{
|
|
+ return mem != NULL && mem->allocator != NULL
|
|
+ && g_type_is_a (G_OBJECT_TYPE (mem->allocator),
|
|
+ GST_TYPE_GL_MEMORY_DMA_ALLOCATOR);
|
|
+}
|
|
+
|
|
+static void
|
|
+_finish_texture (GstGLContext * ctx, gpointer *data)
|
|
+{
|
|
+ GstGLFuncs *gl = ctx->gl_vtable;
|
|
+
|
|
+ gl->Finish ();
|
|
+}
|
|
+
|
|
+GstBuffer *
|
|
+gst_gl_memory_dma_buffer_to_gstbuffer (GstGLContext *ctx, GstVideoInfo * info,
|
|
+ GstBuffer * glbuf)
|
|
+{
|
|
+ GstBuffer *buf;
|
|
+ GstGLMemoryDMA *glmem;
|
|
+
|
|
+ gst_gl_context_thread_add (ctx, (GstGLContextThreadFunc) _finish_texture, NULL);
|
|
+
|
|
+ glmem = gst_buffer_peek_memory (glbuf, 0);
|
|
+
|
|
+ buf = gst_buffer_new ();
|
|
+ gst_buffer_append_memory (buf, (GstMemory *) glmem->dma);
|
|
+ gst_memory_ref ((GstMemory *)glmem->dma);
|
|
+
|
|
+ gst_buffer_add_video_meta_full (buf, 0,
|
|
+ GST_VIDEO_INFO_FORMAT (info), GST_VIDEO_INFO_WIDTH (info),
|
|
+ GST_VIDEO_INFO_HEIGHT (info), 1, info->offset, info->stride);
|
|
+ GST_BUFFER_FLAGS (buf) = GST_BUFFER_FLAGS (glbuf);
|
|
+ GST_BUFFER_PTS (buf) = GST_BUFFER_PTS (glbuf);
|
|
+ GST_BUFFER_DTS (buf) = GST_BUFFER_DTS (glbuf);
|
|
+ GST_BUFFER_DURATION (buf) = GST_BUFFER_DURATION (glbuf);
|
|
+
|
|
+ return buf;
|
|
+}
|
|
diff --git a/gst-libs/gst/gl/gstglmemorydma.h b/gst-libs/gst/gl/gstglmemorydma.h
|
|
new file mode 100644
|
|
index 0000000..f63442a
|
|
--- /dev/null
|
|
+++ b/gst-libs/gst/gl/gstglmemorydma.h
|
|
@@ -0,0 +1,76 @@
|
|
+/*
|
|
+ * GStreamer
|
|
+ * Copyright (c) 2016, Freescale Semiconductor, Inc.
|
|
+ *
|
|
+ * This library is free software; you can redistribute it and/or
|
|
+ * modify it under the terms of the GNU Library General Public
|
|
+ * License as published by the Free Software Foundatdma; either
|
|
+ * versdma 2 of the License, or (at your optdma) any later versdma.
|
|
+ *
|
|
+ * This library is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+ * Library General Public License for more details.
|
|
+ *
|
|
+ * You should have received a copy of the GNU Library General Public
|
|
+ * License along with this library; if not, write to the
|
|
+ * Free Software Foundatdma, Inc., 51 Franklin St, Fifth Floor,
|
|
+ * Boston, MA 02110-1301, USA.
|
|
+ */
|
|
+
|
|
+#ifndef _GST_GL_MEMORY_DMA_H_
|
|
+#define _GST_GL_MEMORY_DMA_H_
|
|
+
|
|
+#include <gst/gst.h>
|
|
+#include <gst/gstallocator.h>
|
|
+#include <gst/gstmemory.h>
|
|
+#include <gst/video/video.h>
|
|
+
|
|
+#include <gst/gl/gl.h>
|
|
+#include <gst/gl/egl/gstglcontext_egl.h>
|
|
+#include <gst/gl/egl/gsteglimage.h>
|
|
+
|
|
+#include <gst/gl/gstglmemory.h>
|
|
+
|
|
+G_BEGIN_DECLS
|
|
+
|
|
+#define GST_TYPE_GL_MEMORY_DMA_ALLOCATOR (gst_gl_memory_dma_allocator_get_type())
|
|
+GType gst_gl_memory_dma_allocator_get_type(void);
|
|
+
|
|
+#define GST_IS_GL_MEMORY_DMA_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GL_MEMORY_DMA_ALLOCATOR))
|
|
+#define GST_IS_GL_MEMORY_DMA_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GL_MEMORY_DMA_ALLOCATOR))
|
|
+#define GST_GL_MEMORY_DMA_ALLOCATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_GL_MEMORY_DMA_ALLOCATOR, GstGLMemoryDMAAllocatorClass))
|
|
+#define GST_GL_MEMORY_DMA_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GL_MEMORY_DMA_ALLOCATOR, GstGLMemoryDMAAllocator))
|
|
+#define GST_GL_MEMORY_DMA_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GL_MEMORY_DMA_ALLOCATOR, GstGLAllocatorClass))
|
|
+#define GST_GL_MEMORY_DMA_ALLOCATOR_CAST(obj) ((GstGLMemoryDMAAllocator *)(obj))
|
|
+
|
|
+struct _GstGLMemoryDMA
|
|
+{
|
|
+ GstGLMemory mem;
|
|
+
|
|
+ /* <private> */
|
|
+ GstEGLImage *eglimage;
|
|
+ GstMemory *dma;
|
|
+ GstAllocationParams *params;
|
|
+};
|
|
+
|
|
+#define GST_GL_MEMORY_DMA_ALLOCATOR_NAME "GLMemoryDMA"
|
|
+
|
|
+struct _GstGLMemoryDMAAllocator
|
|
+{
|
|
+ GstGLMemoryAllocator parent;
|
|
+ GstAllocator *ion_allocator;
|
|
+};
|
|
+
|
|
+struct _GstGLMemoryDMAAllocatorClass
|
|
+{
|
|
+ GstGLMemoryAllocatorClass parent_class;
|
|
+};
|
|
+
|
|
+GstAllocator *gst_gl_memory_dma_allocator_obtain (void);
|
|
+gboolean gst_is_gl_memory_dma (GstMemory * mem);
|
|
+GstBuffer * gst_gl_memory_dma_buffer_to_gstbuffer (GstGLContext * ctx, GstVideoInfo * info, GstBuffer * glbuf);
|
|
+
|
|
+G_END_DECLS
|
|
+
|
|
+#endif /* _GST_GL_MEMORY_DMA_H_ */
|
|
--
|
|
1.9.1
|
|
|