## GstGLMemory

GstGLMemory — memory subclass for GL textures

## Functions

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_GL_MEMORY_ALLOCATOR
| GstGLMemory

## Object Hierarchy

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

## Description

GstGLMemory is a GstGLBaseBuffer 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_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,
                         GstAllocationParams *params,
                         GstVideoInfo *info,
                         guint plane,
                         GstVideoAlignment *valign);

Allocated a new GstGlMemory.

#### Parameters

context | a GstGLContext |
params | a GstAllocationParams |
info | the GstVideoInfo of the memory |
plane | the plane this memory will represent |
valign | the GstVideoAlignment applied to `info` |

#### Returns

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

### gst_gl_memory_wrapped ()

    GstGLMemory *
    gst_gl_memory_wrapped (GstGLContext *context,
                           GstVideoInfo *info,
                           guint plane,
                           GstVideoAlignment *valign,
                           gpointer data,
                           gpointer user_data,
                           GDestroyNotify notify);

Wrapped `data` into a GstGLMemory. This version will account for padding added to the allocation and expressed through `valign` .

#### Parameters

context | a GstGLContext |
info | the GstVideoInfo of the memory and data |
plane | the plane this memory will represent |
valign | the GstVideoAlignment applied to `info` |
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,
                                   guint texture_target,
                                   GstVideoInfo *info,
                                   guint plane,
                                   GstVideoAlignment *valign,
                                   gpointer user_data,
                                   GDestroyNotify notify);

Wraps a texture handle into a GstGLMemory.

#### Parameters

context | a GstGLContext |
texture_id | the GL texture handle |
texture_target | the GL texture target |
info | the GstVideoInfo of the memory |
plane | The plane this memory will represent |
user_data | user data |
notify | Destroy callback for the user data |

#### Returns

a newly allocated GstGLMemory

### 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,
                                GstAllocationParams *params,
                                GstVideoInfo *info,
                                GstVideoAlignment *valign,
                                GstBuffer *buffer);

Adds the required GstGLMemorys with the correct configuration to `buffer` based on `info` . This version handles padding through `valign` .

#### Parameters

context | a GstGLContext |
params | a GstAllocationParams |
info | a GstVideoInfo |
valign | the GstVideoAlignment applied to `info` |
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,
                                 GstVideoAlignment *valign,
                                 gpointer data[GST_VIDEO_MAX_PLANES],
                                 GstGLMemory *textures[GST_VIDEO_MAX_PLANES],
                                 gpointer user_data,
                                 GDestroyNotify notify);

Wraps per plane data pointer in `data` into the corresponding entry in `textures` based on `info` and padding from `valign` . Note that the `notify` will be called as many time as there is planes.

#### Parameters

context | a GstGLContext |
info | a GstVideoInfo |
valign | a GstVideoInfo |
data | a list of per plane data pointers |
textures | a list of GstGLMemory. | [transfer out]
user_data | user data for the destroy function |
notify | A function called each time a memory is freed |

#### 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 {
      GstGLBaseBufferAllocatorClass parent_class;
    } GstGLAllocatorClass;

The GstGLAllocatorClass only contains private data

### GST_GL_MEMORY_ALLOCATOR

    #define GST_GL_MEMORY_ALLOCATOR   "GLMemory"

The name of the GL memory allocator

### GstGLMemory

    typedef struct {
      GstGLBaseBuffer       mem;

      guint                 tex_id;
      guint                 tex_target;
      GstVideoGLTextureType tex_type;
      GstVideoInfo          info;
      GstVideoAlignment     valign;
      guint                 plane;
      gfloat                tex_scaling[2];
    } GstGLMemory;

Represents information about a GL texture

#### Members

GstGLBaseBuffer `mem`; | the parent object |
guint `tex_id`; | the GL texture id for this memory |
guint `tex_target`; | the GL texture target for this memory |
GstVideoGLTextureType `tex_type`; | the texture type |
GstVideoInfo `info`; | the texture's GstVideoInfo |
GstVideoAlignment `valign`; | data alignment for system memory mapping |
guint `plane`; | data plane in `info` |
gfloat `tex_scaling`[2]; | GL shader scaling parameters for `valign` and/or width/height |

## See Also

GstMemory, GstAllocator, GstGLBufferPool