## GstGLMemory

GstGLMemory — memory subclass for GL textures

## Functions

#define | GST_GL_MEMORY_FLAGS ()
#define | GST_GL_MEMORY_FLAG_IS_SET ()
#define | GST_GL_MEMORY_FLAG_SET ()
#define | GST_GL_MEMORY_FLAG_UNSET ()
void | gst_gl_memory_init ()
GstMemory * | gst_gl_memory_alloc ()
GstGLMemory * | gst_gl_memory_wrapped ()
GstGLMemory * | gst_gl_memory_wrapped_texture ()
gboolean | gst_gl_memory_copy_into_texture ()
gboolean | gst_gl_memory_setup_buffer ()
gboolean | gst_gl_memory_setup_wrapped ()
GstVideoGLTextureType | gst_gl_texture_type_from_format ()
gboolean | gst_is_gl_memory ()

## Types and Values

| GstGLAllocator
| GstGLAllocatorClass
#define | GST_MAP_GL
#define | GST_GL_MEMORY_ALLOCATOR
enum | GstGLMemoryFlags
| GstGLMemory

## Object Hierarchy

        GObject
        ╰── GInitiallyUnowned
            ╰── GstObject
                ╰── GstAllocator
                    ╰── GstGLAllocator

## Description

GstGLMemory is a GstMemory subclass providing support for the mapping of GL textures.

GstGLMemory is created through `gst_gl_memory_alloc()` or system memory can be wrapped through `gst_gl_memory_wrapped()`.

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

## Functions

### GST_GL_MEMORY_FLAGS()

    #define GST_GL_MEMORY_FLAGS(mem) GST_MEMORY_FLAGS(mem)

Get the currently set flags on `mem`

#### Parameters

mem | a GstGLMemory |

### GST_GL_MEMORY_FLAG_IS_SET()

    #define GST_GL_MEMORY_FLAG_IS_SET(mem,flag) GST_MEMORY_FLAG_IS_SET(mem,flag)

Whether `flag` is set on `mem`

#### Parameters

mem | a GstGLMemory |
flag | a flag |

### GST_GL_MEMORY_FLAG_SET()

    #define GST_GL_MEMORY_FLAG_SET(mem,flag) GST_MINI_OBJECT_FLAG_SET(mem,flag)

Set `flag` on `mem`

#### Parameters

mem | a GstGLMemory |
flag | a flag |

### GST_GL_MEMORY_FLAG_UNSET()

    #define GST_GL_MEMORY_FLAG_UNSET(mem,flag) GST_MEMORY_FLAG_UNSET(mem,flag)

Unset `flag` on `mem`

#### Parameters

mem | a GstGLMemory |
flag | a flag |

### gst_gl_memory_init ()

    void
    gst_gl_memory_init (void);

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

### gst_gl_memory_alloc ()

    GstMemory *
    gst_gl_memory_alloc (GstGLContext *context,
                         GstVideoGLTextureType tex_type,
                         gint width,
                         gint height,
                         gint stride);

#### Parameters

context | a GstGLContext |
v_info | the GstVideoInfo of the memory |

#### Returns

a GstMemory object with a GL texture specified by `v_info` from `context`

### gst_gl_memory_wrapped ()

    GstGLMemory *
    gst_gl_memory_wrapped (GstGLContext *context,
                           GstVideoGLTextureType tex_type,
                           gint width,
                           gint height,
                           gint stride,
                           gpointer data,
                           gpointer user_data,
                           GDestroyNotify notify);

#### Parameters

context | a GstGLContext |
v_info | the GstVideoInfo of the memory and data |
data | the data to wrap |
user_data | data called with for `notify` |
notify | function called with `user_data` when `data` needs to be freed |

#### Returns

a GstGLMemory object with a GL texture specified by `v_info` from `context` and contents specified by `data`

### gst_gl_memory_wrapped_texture ()

    GstGLMemory *
    gst_gl_memory_wrapped_texture (GstGLContext *context,
                                   guint texture_id,
                                   GstVideoGLTextureType tex_type,
                                   gint width,
                                   gint height,
                                   gpointer user_data,
                                   GDestroyNotify notify);

### gst_gl_memory_copy_into_texture ()

    gboolean
    gst_gl_memory_copy_into_texture (GstGLMemory *gl_mem,
                                     guint tex_id,
                                     GstVideoGLTextureType tex_type,
                                     gint width,
                                     gint height,
                                     gint stride,
                                     gboolean respecify);

Copies `gl_mem` into the texture specfified by `tex_id` . The format of `tex_id` is specified by `tex_type` , `width` and `height` .

If `respecify` is `TRUE`, then the copy is performed in terms of the texture data. This is useful for splitting RGBA textures into RG or R textures or vice versa. The requirement for this to succeed is that the backing texture data must be the same size, i.e. say a RGBA8 texture is converted into a RG8 texture, then the RG texture must have twice as many pixels available for output as the RGBA texture.

Otherwise, if `respecify` is `FALSE`, then the copy is performed per texel using glCopyTexImage. See the OpenGL specification for details on the mappings between texture formats.

#### Parameters

gl_mem | a GstGLMemory |
tex_id | OpenGL texture id |
tex_type | a GstVideoGLTextureType |
width | width of `tex_id` |
height | height of `tex_id` |
stride | stride of the backing texture data |
respecify | whether to copy the data or copy per texel |

#### Returns

Whether the copy suceeded

### gst_gl_memory_setup_buffer ()

    gboolean
    gst_gl_memory_setup_buffer (GstGLContext *context,
                                GstVideoInfo *info,
                                GstBuffer *buffer);

Adds the required GstGLMemorys with the correct configuration to `buffer` based on `info` .

#### Parameters

context | a GstGLContext |
info | a GstVideoInfo |
buffer | a GstBuffer |

#### Returns

whether the memory's were sucessfully added.

### gst_gl_memory_setup_wrapped ()

    gboolean
    gst_gl_memory_setup_wrapped (GstGLContext *context,
                                 GstVideoInfo *info,
                                 gpointer data[GST_VIDEO_MAX_PLANES],
                                 GstGLMemory *textures[GST_VIDEO_MAX_PLANES]);

Wraps per plane data pointer in `data` into the corresponding entry in `textures` based on `info` .

#### Parameters

context | a GstGLContext |
info | a GstVideoInfo |
data | a list of per plane data pointers |
textures | a list of GstGLMemory. | [transfer out]

#### Returns

whether the memory's were sucessfully created.

### gst_gl_texture_type_from_format ()

    GstVideoGLTextureType
    gst_gl_texture_type_from_format (GstGLContext *context,
                                     GstVideoFormat v_format,
                                     guint plane);

### gst_is_gl_memory ()

    gboolean
    gst_is_gl_memory (GstMemory *mem);

#### Parameters

mem | a GstMemory |

#### Returns

whether the memory at `mem` is a GstGLMemory

## Types and Values

### GstGLAllocator

    typedef struct _GstGLAllocator GstGLAllocator;

Opaque GstGLAllocator struct

### GstGLAllocatorClass

    typedef struct {
      GstAllocatorClass parent_class;
    } GstGLAllocatorClass;

The GstGLAllocatorClass only contains private data

### 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.

### GST_GL_MEMORY_ALLOCATOR

    #define GST_GL_MEMORY_ALLOCATOR   "GLMemory"

The name of the GL memore allocator

### enum GstGLMemoryFlags

Flags indicating the current state of a GstGLMemory

#### Members

GST_GL_MEMORY_FLAG_DOWNLOAD_INITTED |  |
GST_GL_MEMORY_FLAG_UPLOAD_INITTED |  |
GST_GL_MEMORY_FLAG_NEED_DOWNLOAD |  |
GST_GL_MEMORY_FLAG_NEED_UPLOAD |  |

### GstGLMemory

    typedef struct {
      GstMemory                    mem;

      GstGLContext         *context;
      guint                 tex_id;
      GstVideoGLTextureType tex_type;
      gint                  width;
      gint                  height;
      gint                  stride;
      gfloat                tex_scaling[2];
    } GstGLMemory;

Represents information about a GL texture

#### Members

GstMemory `mem`; | the parent object |
GstGLContext *`context`; | the GstGLContext to use for GL operations |
guint `tex_id`; | the texture id for this memory |
GstVideoGLTextureType `tex_type`; |  |
gint `width`; | width of the texture |
gint `height`; | height of the texture |
gint `stride`; |  |
gfloat `tex_scaling`[2]; |  |

## See Also

GstMemory, GstAllocator, GstGLBufferPool