GstGLBaseMemory

GstGLBaseMemory — memory subclass for GL buffers

Synopsis

                    GstGLBaseMemoryAllocator;
                    GstGLBaseMemoryAllocatorClass;
#define             GST_GL_BASE_MEMORY_ALLOCATOR_NAME
#define             GST_MAP_GL
enum                GstGLBaseMemoryError;
#define             GST_GL_BASE_MEMORY_ERROR
enum                GstGLBaseMemoryTransfer;
struct              GstGLAllocationParams;
void                (*GstGLAllocationParamsCopyFunc)    (GstGLAllocationParams *src,
                                                         GstGLAllocationParams *dest);
void                (*GstGLAllocationParamsFreeFunc)    (gpointer params);
#define             GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_ALLOC
#define             GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM
#define             GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE
#define             GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_USER
gboolean            gst_gl_allocation_params_init       (GstGLAllocationParams *params,
                                                         gsize struct_size,
                                                         guint alloc_flags,
                                                         GstGLAllocationParamsCopyFunc copy,
                                                         GstGLAllocationParamsFreeFunc free,
                                                         GstGLContext *context,
                                                         gsize alloc_size,
                                                         GstAllocationParams *alloc_params,
                                                         gpointer wrapped_data,
                                                         guint gl_handle,
                                                         gpointer user_data,
                                                         GDestroyNotify notify);
GstGLAllocationParams * gst_gl_allocation_params_copy   (GstGLAllocationParams *src);
void                gst_gl_allocation_params_free       (GstGLAllocationParams *params);
void                gst_gl_allocation_params_free_data  (GstGLAllocationParams *params);
void                gst_gl_allocation_params_copy_data  (GstGLAllocationParams *src,
                                                         GstGLAllocationParams *dest);
                    GstGLBaseMemory;
void                gst_gl_base_memory_init_once        (void);
void                gst_gl_base_memory_init             (GstGLBaseMemory *mem,
                                                         GstAllocator *allocator,
                                                         GstMemory *parent,
                                                         GstGLContext *context,
                                                         GstAllocationParams *params,
                                                         gsize size,
                                                         gpointer user_data,
                                                         GDestroyNotify notify);
gboolean            gst_is_gl_base_memory               (GstMemory *mem);
GstGLBaseMemory *   (*GstGLBaseMemoryAllocatorAllocFunction)
                                                        (GstGLBaseMemoryAllocator *allocator,
                                                         GstGLAllocationParams *params);
gboolean            (*GstGLBaseMemoryAllocatorCreateFunction)
                                                        (GstGLBaseMemory *mem,
                                                         GError **error);
gpointer            (*GstGLBaseMemoryAllocatorMapFunction)
                                                        (GstGLBaseMemory *mem,
                                                         GstMapInfo *info,
                                                         gsize maxsize);
void                (*GstGLBaseMemoryAllocatorUnmapFunction)
                                                        (GstGLBaseMemory *mem,
                                                         GstMapInfo *info);
GstGLBaseMemory *   (*GstGLBaseMemoryAllocatorCopyFunction)
                                                        (GstGLBaseMemory *mem,
                                                         gssize offset,
                                                         gssize size);
void                (*GstGLBaseMemoryAllocatorDestroyFunction)
                                                        (GstGLBaseMemory *mem);
GstGLBaseMemory *   gst_gl_base_memory_alloc            (GstGLBaseMemoryAllocator *allocator,
                                                         GstGLAllocationParams *params);
gboolean            gst_gl_base_memory_alloc_data       (GstGLBaseMemory *gl_mem);
gboolean            gst_gl_base_memory_memcpy           (GstGLBaseMemory *src,
                                                         GstGLBaseMemory *dest,
                                                         gssize offset,
                                                         gssize size);

Object Hierarchy

  GObject
   +----GInitiallyUnowned
         +----GstObject
               +----GstAllocator
                     +----GstGLBaseMemoryAllocator
                           +----GstGLBufferAllocator
                           +----GstGLMemoryAllocator

Description

GstGLBaseMemory is a GstMemory subclass providing the basis of support for the mapping of GL buffers.

Data is uploaded or downloaded from the GPU as is necessary.

Details

GstGLBaseMemoryAllocator

typedef struct _GstGLBaseMemoryAllocator GstGLBaseMemoryAllocator;

Opaque GstGLBaseMemoryAllocator struct

Since 1.8


GstGLBaseMemoryAllocatorClass

typedef struct {
  GstAllocatorClass parent_class;

  GstGLBaseMemoryAllocatorAllocFunction         alloc;

  GstGLBaseMemoryAllocatorCreateFunction        create;
  GstGLBaseMemoryAllocatorMapFunction           map;
#if 0
  GstGLBaseMemoryAllocatorFlushFunction         flush;        /* make CPU writes visible to the GPU */
  GstGLBaseMemoryAllocatorInvalidateFunction    invalidate;   /* make GPU writes visible to the CPU */
#endif
  GstGLBaseMemoryAllocatorUnmapFunction         unmap;
  GstGLBaseMemoryAllocatorCopyFunction          copy;
  GstGLBaseMemoryAllocatorDestroyFunction       destroy;
} GstGLBaseMemoryAllocatorClass;

Since 1.8


GST_GL_BASE_MEMORY_ALLOCATOR_NAME

#define GST_GL_BASE_MEMORY_ALLOCATOR_NAME   "GLBaseMemory"

The name of the GL buffer allocator

Since 1.8


GST_MAP_GL

#define GST_MAP_GL (GST_MAP_FLAG_LAST << 1)

Flag indicating that we should map the GL object instead of to system memory.

Combining GST_MAP_GL with GST_MAP_WRITE has the same semantics as though you are writing to OpenGL. Conversely, combining GST_MAP_GL with GST_MAP_READ has the same semantics as though you are reading from OpenGL.


enum GstGLBaseMemoryError

typedef enum {
  GST_GL_BASE_MEMORY_ERROR_FAILED,
  GST_GL_BASE_MEMORY_ERROR_OLD_LIBS,
  GST_GL_BASE_MEMORY_ERROR_RESOURCE_UNAVAILABLE,
} GstGLBaseMemoryError;

GST_GL_BASE_MEMORY_ERROR_FAILED

generic faliure

GST_GL_BASE_MEMORY_ERROR_OLD_LIBS

the implementation is too old and doesn't implement enough features

GST_GL_BASE_MEMORY_ERROR_RESOURCE_UNAVAILABLE

a resource could not be found

GST_GL_BASE_MEMORY_ERROR

#define GST_GL_BASE_MEMORY_ERROR (gst_gl_base_memory_error_quark ())

enum GstGLBaseMemoryTransfer

typedef enum {
  GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD   = (GST_MEMORY_FLAG_LAST << 0),
  GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD     = (GST_MEMORY_FLAG_LAST << 1)
} GstGLBaseMemoryTransfer;

GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD

the texture needs downloading to the data pointer

GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD

the data pointer needs uploading to the texture

struct GstGLAllocationParams

struct GstGLAllocationParams {
  gsize                             struct_size;
  GstGLAllocationParamsCopyFunc     copy;
  GstGLAllocationParamsFreeFunc     free;

  guint                             alloc_flags;
  gsize                             alloc_size;
  GstAllocationParams              *alloc_params;
  GstGLContext                     *context;
  GDestroyNotify                    notify;
  gpointer                          user_data;

  /* GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM only */
  gpointer                          wrapped_data;
  /* GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE only */
  guint                             gl_handle;
};

gsize struct_size;

the size of the struct (including and subclass data)

GstGLAllocationParamsCopyFunc copy;

a GstGLAllocationParamsCopyFunc

GstGLAllocationParamsFreeFunc free;

a GstGLAllocationParamsFreeFunc

guint alloc_flags;

allocation flags

gsize alloc_size;

the allocation size

GstAllocationParams *alloc_params;

the GstAllocationParams

GstGLContext *context;

a GstGLContext

GDestroyNotify notify;

a GDestroyNotify

gpointer user_data;

argument to call notify with

gpointer wrapped_data;

the wrapped data pointer

guint gl_handle;

the wrapped OpenGL handle

GstGLAllocationParamsCopyFunc ()

void                (*GstGLAllocationParamsCopyFunc)    (GstGLAllocationParams *src,
                                                         GstGLAllocationParams *dest);

Copies the parameters from src into dest. The subclass must compose copy functions from the superclass.

src :

the source GstGLAllocationParams to copy from

dest :

the source GstGLAllocationParams to copy

GstGLAllocationParamsFreeFunc ()

void                (*GstGLAllocationParamsFreeFunc)    (gpointer params);

Free any dynamically allocated data. The subclass must call the superclass' free.

params :

a GstGLAllocationParams

GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_ALLOC

#define GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_ALLOC (1 << 0)

GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM

#define GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM (1 << 1)

GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE

#define GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE (1 << 2)

GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_USER

#define GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_USER (1 << 16)

gst_gl_allocation_params_init ()

gboolean            gst_gl_allocation_params_init       (GstGLAllocationParams *params,
                                                         gsize struct_size,
                                                         guint alloc_flags,
                                                         GstGLAllocationParamsCopyFunc copy,
                                                         GstGLAllocationParamsFreeFunc free,
                                                         GstGLContext *context,
                                                         gsize alloc_size,
                                                         GstAllocationParams *alloc_params,
                                                         gpointer wrapped_data,
                                                         guint gl_handle,
                                                         gpointer user_data,
                                                         GDestroyNotify notify);

notify will be called once for each allocated memory using these params when freeing the memory.

params :

the GstGLAllocationParams to initialize

struct_size :

the struct size of the implementation

alloc_flags :

some alloc flags

copy :

a copy function

free :

a free function

context :

a GstGLContext. [transfer none]

alloc_size :

the number of bytes to allocate.

alloc_params :

a GstAllocationParams to apply. [transfer none][allow-none]

wrapped_data :

a sysmem data pointer to initialize the allocation with. [transfer none][allow-none]

gl_handle :

a GL handle to initialize the allocation with. [transfer none]

user_data :

user data to call notify with. [transfer none][allow-none]

notify :

a GDestroyNotify. [allow-none]

Returns :

whether the paramaters could be initialized

Since 1.8


gst_gl_allocation_params_copy ()

GstGLAllocationParams * gst_gl_allocation_params_copy   (GstGLAllocationParams *src);

src :

the GstGLAllocationParams to initialize

Returns :

a copy of the GstGLAllocationParams specified by src or NULL on failure

Since 1.8


gst_gl_allocation_params_free ()

void                gst_gl_allocation_params_free       (GstGLAllocationParams *params);

Frees the GstGLAllocationParams and all associated data.

params :

the GstGLAllocationParams to initialize

Since 1.8


gst_gl_allocation_params_free_data ()

void                gst_gl_allocation_params_free_data  (GstGLAllocationParams *params);

Frees the dynamically allocated data in params. Direct subclasses should call this function in their own overriden free function.

params :

the source GstGLAllocationParams

Since 1.8


gst_gl_allocation_params_copy_data ()

void                gst_gl_allocation_params_copy_data  (GstGLAllocationParams *src,
                                                         GstGLAllocationParams *dest);

Copies the dynamically allocated data from src to dest. Direct subclasses should call this function in their own overriden copy function.

src :

the source GstGLAllocationParams

dest :

the destination GstGLAllocationParams

Since 1.8


GstGLBaseMemory

typedef struct {
  GstMemory             mem;

  GstGLContext         *context;
} GstGLBaseMemory;

Represents information about a GL memory object

GstMemory mem;

the parent object

GstGLContext *context;

the GstGLContext to use for GL operations

gst_gl_base_memory_init_once ()

void                gst_gl_base_memory_init_once        (void);

Initializes the GL Base Memory allocator. It is safe to call this function multiple times. This must be called before any other GstGLBaseMemory operation.

Since 1.8


gst_gl_base_memory_init ()

void                gst_gl_base_memory_init             (GstGLBaseMemory *mem,
                                                         GstAllocator *allocator,
                                                         GstMemory *parent,
                                                         GstGLContext *context,
                                                         GstAllocationParams *params,
                                                         gsize size,
                                                         gpointer user_data,
                                                         GDestroyNotify notify);

Initializes mem with the required parameters

mem :

the GstGLBaseMemory to initialize

allocator :

the GstAllocator to initialize with

parent :

the parent GstMemory to initialize with. [allow-none]

context :

the GstGLContext to initialize with

params :

the GstAllocationParams to initialize with. [allow-none]

size :

the number of bytes to be allocated

user_data :

user data to call notify with. [allow-none]

notify :

a GDestroyNotify. [allow-none]

Since 1.8


gst_is_gl_base_memory ()

gboolean            gst_is_gl_base_memory               (GstMemory *mem);

mem :

a GstMemory

Returns :

whether the memory at mem is a GstGLBaseMemory

Since 1.8


GstGLBaseMemoryAllocatorAllocFunction ()

GstGLBaseMemory *   (*GstGLBaseMemoryAllocatorAllocFunction)
                                                        (GstGLBaseMemoryAllocator *allocator,
                                                         GstGLAllocationParams *params);

Note: not called with a GL context current

allocator :

a GstGLBaseMemoryAllocator

params :

the GstGLAllocationParams to allocate the memory with

Returns :

a newly allocated GstGLBaseMemory from allocator and params

Since 1.8


GstGLBaseMemoryAllocatorCreateFunction ()

gboolean            (*GstGLBaseMemoryAllocatorCreateFunction)
                                                        (GstGLBaseMemory *mem,
                                                         GError **error);

As this virtual method is called with an OpenGL context current, use this function to allocate and OpenGL resources needed for your application

mem :

a GstGLBaseMemory

error :

a GError to use on failure

Returns :

whether the creation succeeded

Since 1.8


GstGLBaseMemoryAllocatorMapFunction ()

gpointer            (*GstGLBaseMemoryAllocatorMapFunction)
                                                        (GstGLBaseMemory *mem,
                                                         GstMapInfo *info,
                                                         gsize maxsize);

Also see gst_memory_map();

mem :

a GstGLBaseMemory

info :

a GstMapInfo to map with

maxsize :

the size to map

Returns :

the mapped pointer

Since 1.8


GstGLBaseMemoryAllocatorUnmapFunction ()

void                (*GstGLBaseMemoryAllocatorUnmapFunction)
                                                        (GstGLBaseMemory *mem,
                                                         GstMapInfo *info);

Also see gst_memory_unmap();

mem :

a GstGLBaseMemory

info :

a GstMapInfo to map with

Since 1.8


GstGLBaseMemoryAllocatorCopyFunction ()

GstGLBaseMemory *   (*GstGLBaseMemoryAllocatorCopyFunction)
                                                        (GstGLBaseMemory *mem,
                                                         gssize offset,
                                                         gssize size);

Also see gst_memory_copy();

mem :

a GstGLBaseMemory

offset :

the offset to copy from

size :

the number of bytes to copy

Returns :

the newly copied GstGLMemory or NULL

Since 1.8


GstGLBaseMemoryAllocatorDestroyFunction ()

void                (*GstGLBaseMemoryAllocatorDestroyFunction)
                                                        (GstGLBaseMemory *mem);

Destroy any resources allocated throughout the lifetime of mem

mem :

a GstGLBaseMemory

Since 1.8


gst_gl_base_memory_alloc ()

GstGLBaseMemory *   gst_gl_base_memory_alloc            (GstGLBaseMemoryAllocator *allocator,
                                                         GstGLAllocationParams *params);

allocator :

a GstGLBaseMemoryAllocator

params :

the GstGLAllocationParams to allocate the memory with

Returns :

a new GstGLBaseMemory from allocator with the requested params.

Since 1.8


gst_gl_base_memory_alloc_data ()

gboolean            gst_gl_base_memory_alloc_data       (GstGLBaseMemory *gl_mem);

gst_gl_base_memory_memcpy ()

gboolean            gst_gl_base_memory_memcpy           (GstGLBaseMemory *src,
                                                         GstGLBaseMemory *dest,
                                                         gssize offset,
                                                         gssize size);

src :

the source GstGLBaseMemory

dest :

the destination GstGLBaseMemory

offset :

the offset to start at

size :

the number of bytes to copy

Returns :

whether the copy suceeded.

Since 1.8

See Also

GstMemory, GstAllocator