mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 18:21:04 +00:00
glmemorypbo: implement GstGLBaseMemory:alloc
Uses the GstGLVideoAllocationParams parameters
This commit is contained in:
parent
9d862cb83f
commit
228481da18
2 changed files with 52 additions and 11 deletions
|
@ -250,8 +250,8 @@ static void
|
||||||
_gl_mem_init (GstGLMemoryPBO * mem, GstAllocator * allocator,
|
_gl_mem_init (GstGLMemoryPBO * mem, GstAllocator * allocator,
|
||||||
GstMemory * parent, GstGLContext * context, GstGLTextureTarget target,
|
GstMemory * parent, GstGLContext * context, GstGLTextureTarget target,
|
||||||
GstAllocationParams * params, GstVideoInfo * info,
|
GstAllocationParams * params, GstVideoInfo * info,
|
||||||
GstVideoAlignment * valign, guint plane, gpointer user_data,
|
guint plane, GstVideoAlignment * valign, GDestroyNotify notify,
|
||||||
GDestroyNotify notify)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
gst_gl_memory_init ((GstGLMemory *) mem, allocator, parent,
|
gst_gl_memory_init ((GstGLMemory *) mem, allocator, parent,
|
||||||
context, target, params, info, plane, valign, notify, user_data);
|
context, target, params, info, plane, valign, notify, user_data);
|
||||||
|
@ -261,15 +261,15 @@ static GstGLMemoryPBO *
|
||||||
_gl_mem_new (GstAllocator * allocator, GstMemory * parent,
|
_gl_mem_new (GstAllocator * allocator, GstMemory * parent,
|
||||||
GstGLContext * context, GstGLTextureTarget target,
|
GstGLContext * context, GstGLTextureTarget target,
|
||||||
GstAllocationParams * params, GstVideoInfo * info,
|
GstAllocationParams * params, GstVideoInfo * info,
|
||||||
GstVideoAlignment * valign, guint plane, gpointer user_data,
|
guint plane, GstVideoAlignment * valign, GDestroyNotify notify,
|
||||||
GDestroyNotify notify)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GstGLMemoryPBO *mem;
|
GstGLMemoryPBO *mem;
|
||||||
mem = g_slice_new0 (GstGLMemoryPBO);
|
mem = g_slice_new0 (GstGLMemoryPBO);
|
||||||
mem->mem.texture_wrapped = FALSE;
|
mem->mem.texture_wrapped = FALSE;
|
||||||
|
|
||||||
_gl_mem_init (mem, allocator, parent, context, target, params, info, valign,
|
_gl_mem_init (mem, allocator, parent, context, target, params, info, plane,
|
||||||
plane, user_data, notify);
|
valign, notify, user_data);
|
||||||
|
|
||||||
return mem;
|
return mem;
|
||||||
}
|
}
|
||||||
|
@ -629,8 +629,8 @@ _gl_mem_copy (GstGLMemoryPBO * src, gssize offset, gssize size)
|
||||||
}
|
}
|
||||||
|
|
||||||
dest = (GstMemory *) _gl_mem_new (allocator, NULL, src->mem.mem.context,
|
dest = (GstMemory *) _gl_mem_new (allocator, NULL, src->mem.mem.context,
|
||||||
src->mem.tex_target, ¶ms, &src->mem.info, &src->mem.valign,
|
src->mem.tex_target, ¶ms, &src->mem.info, src->mem.plane,
|
||||||
src->mem.plane, NULL, NULL);
|
&src->mem.valign, NULL, NULL);
|
||||||
|
|
||||||
if (GST_MEMORY_FLAG_IS_SET (src, GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD)) {
|
if (GST_MEMORY_FLAG_IS_SET (src, GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD)) {
|
||||||
if (!gst_gl_base_memory_memcpy ((GstGLBaseMemory *) src,
|
if (!gst_gl_base_memory_memcpy ((GstGLBaseMemory *) src,
|
||||||
|
@ -669,7 +669,7 @@ static GstMemory *
|
||||||
_gl_mem_alloc (GstAllocator * allocator, gsize size,
|
_gl_mem_alloc (GstAllocator * allocator, gsize size,
|
||||||
GstAllocationParams * params)
|
GstAllocationParams * params)
|
||||||
{
|
{
|
||||||
g_warning ("use gst_gl_memory_pbo_alloc () to allocate from this "
|
g_warning ("Use gst_gl_base_memory_alloc () to allocate from this "
|
||||||
"GstGLMemoryPBO allocator");
|
"GstGLMemoryPBO allocator");
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -692,6 +692,46 @@ _gl_mem_free (GstAllocator * allocator, GstMemory * mem)
|
||||||
GST_ALLOCATOR_CLASS (parent_class)->free (allocator, mem);
|
GST_ALLOCATOR_CLASS (parent_class)->free (allocator, mem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GstGLMemoryPBO *
|
||||||
|
_gl_mem_pbo_alloc (GstGLBaseMemoryAllocator * allocator,
|
||||||
|
GstGLVideoAllocationParams * params)
|
||||||
|
{
|
||||||
|
GstGLMemoryPBO *mem;
|
||||||
|
|
||||||
|
g_return_val_if_fail (params->
|
||||||
|
parent.alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO, NULL);
|
||||||
|
|
||||||
|
mem = g_new0 (GstGLMemoryPBO, 1);
|
||||||
|
|
||||||
|
if (params->
|
||||||
|
parent.alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE)
|
||||||
|
{
|
||||||
|
mem->mem.tex_id = params->parent.gl_handle;
|
||||||
|
mem->mem.texture_wrapped = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
_gl_mem_init (mem, GST_ALLOCATOR_CAST (allocator), NULL,
|
||||||
|
params->parent.context, params->target, params->parent.alloc_params,
|
||||||
|
params->v_info, params->plane, params->valign, params->parent.notify,
|
||||||
|
params->parent.user_data);
|
||||||
|
|
||||||
|
if (params->
|
||||||
|
parent.alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE)
|
||||||
|
{
|
||||||
|
GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD);
|
||||||
|
}
|
||||||
|
if (params->
|
||||||
|
parent.alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM) {
|
||||||
|
mem->pbo->mem.data = params->parent.wrapped_data;
|
||||||
|
|
||||||
|
GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD);
|
||||||
|
GST_MINI_OBJECT_FLAG_SET (mem->pbo,
|
||||||
|
GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD);
|
||||||
|
}
|
||||||
|
|
||||||
|
return mem;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_gl_memory_pbo_allocator_class_init (GstGLMemoryPBOAllocatorClass * klass)
|
gst_gl_memory_pbo_allocator_class_init (GstGLMemoryPBOAllocatorClass * klass)
|
||||||
{
|
{
|
||||||
|
@ -703,6 +743,7 @@ gst_gl_memory_pbo_allocator_class_init (GstGLMemoryPBOAllocatorClass * klass)
|
||||||
gl_base = (GstGLBaseMemoryAllocatorClass *) klass;
|
gl_base = (GstGLBaseMemoryAllocatorClass *) klass;
|
||||||
allocator_class = (GstAllocatorClass *) klass;
|
allocator_class = (GstAllocatorClass *) klass;
|
||||||
|
|
||||||
|
gl_base->alloc = (GstGLBaseMemoryAllocatorAllocFunction) _gl_mem_pbo_alloc;
|
||||||
gl_base->create = (GstGLBaseMemoryAllocatorCreateFunction) _gl_mem_create;
|
gl_base->create = (GstGLBaseMemoryAllocatorCreateFunction) _gl_mem_create;
|
||||||
gl_tex->map = (GstGLBaseMemoryAllocatorMapFunction) _gl_mem_map;
|
gl_tex->map = (GstGLBaseMemoryAllocatorMapFunction) _gl_mem_map;
|
||||||
gl_tex->unmap = (GstGLBaseMemoryAllocatorUnmapFunction) _gl_mem_unmap;
|
gl_tex->unmap = (GstGLBaseMemoryAllocatorUnmapFunction) _gl_mem_unmap;
|
||||||
|
|
|
@ -61,8 +61,8 @@ struct _GstGLMemoryPBO
|
||||||
*/
|
*/
|
||||||
#define GST_GL_MEMORY_PBO_ALLOCATOR_NAME "GLMemoryPBO"
|
#define GST_GL_MEMORY_PBO_ALLOCATOR_NAME "GLMemoryPBO"
|
||||||
|
|
||||||
void gst_gl_memory_pbo_init_once (void);
|
void gst_gl_memory_pbo_init_once (void);
|
||||||
gboolean gst_is_gl_memory_pbo (GstMemory * mem);
|
gboolean gst_is_gl_memory_pbo (GstMemory * mem);
|
||||||
|
|
||||||
GstMemory * gst_gl_memory_pbo_alloc (GstGLContext * context,
|
GstMemory * gst_gl_memory_pbo_alloc (GstGLContext * context,
|
||||||
GstGLTextureTarget target,
|
GstGLTextureTarget target,
|
||||||
|
|
Loading…
Reference in a new issue