GstGLMemory

GstGLMemory — memory subclass for GL textures

Functions

Types and Values

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