GstGLMemory

GstGLMemory — memory subclass for GL textures

Synopsis

                    GstGLAllocator;
                    GstGLAllocatorClass;
#define             GST_MAP_GL
#define             GST_GL_MEMORY_ALLOCATOR
enum                GstGLMemoryFlags;
#define             GST_GL_MEMORY_FLAGS                 (mem)
#define             GST_GL_MEMORY_FLAG_IS_SET           (mem,
                                                         flag)
#define             GST_GL_MEMORY_FLAG_SET              (mem,
                                                         flag)
#define             GST_GL_MEMORY_FLAG_UNSET            (mem,
                                                         flag)
                    GstGLMemory;
void                gst_gl_memory_init                  (void);
GstMemory *         gst_gl_memory_alloc                 (GstGLContext *context,
                                                         GstVideoGLTextureType tex_type,
                                                         gint width,
                                                         gint height,
                                                         gint stride);
GstGLMemory *       gst_gl_memory_wrapped               (GstGLContext *context,
                                                         GstVideoGLTextureType tex_type,
                                                         gint width,
                                                         gint height,
                                                         gint stride,
                                                         gpointer data,
                                                         gpointer user_data,
                                                         GDestroyNotify notify);
GstGLMemory *       gst_gl_memory_wrapped_texture       (GstGLContext *context,
                                                         guint texture_id,
                                                         GstVideoGLTextureType tex_type,
                                                         gint width,
                                                         gint height,
                                                         gpointer user_data,
                                                         GDestroyNotify notify);
gboolean            gst_gl_memory_copy_into_texture     (GstGLMemory *gl_mem,
                                                         guint tex_id,
                                                         GstVideoGLTextureType tex_type,
                                                         gint width,
                                                         gint height,
                                                         gint stride,
                                                         gboolean respecify);
gboolean            gst_gl_memory_setup_buffer          (GstGLContext *context,
                                                         GstVideoInfo *info,
                                                         GstBuffer *buffer);
gboolean            gst_gl_memory_setup_wrapped         (GstGLContext *context,
                                                         GstVideoInfo *info,
                                                         gpointer data[GST_VIDEO_MAX_PLANES],
                                                         GstGLMemory *textures[GST_VIDEO_MAX_PLANES]);
GstVideoGLTextureType gst_gl_texture_type_from_format   (GstGLContext *context,
                                                         GstVideoFormat v_format,
                                                         guint plane);
gboolean            gst_is_gl_memory                    (GstMemory *mem);

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.

Details

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

typedef enum {
  GST_GL_MEMORY_FLAG_DOWNLOAD_INITTED = (GST_MEMORY_FLAG_LAST << 0),
  GST_GL_MEMORY_FLAG_UPLOAD_INITTED   = (GST_MEMORY_FLAG_LAST << 1),
  GST_GL_MEMORY_FLAG_NEED_DOWNLOAD   = (GST_MEMORY_FLAG_LAST << 2),
  GST_GL_MEMORY_FLAG_NEED_UPLOAD     = (GST_MEMORY_FLAG_LAST << 3)
} GstGLMemoryFlags;

Flags indicating the current state of a GstGLMemory

GST_GL_MEMORY_FLAG_DOWNLOAD_INITTED

GST_GL_MEMORY_FLAG_UPLOAD_INITTED

GST_GL_MEMORY_FLAG_NEED_DOWNLOAD

GST_GL_MEMORY_FLAG_NEED_UPLOAD


GST_GL_MEMORY_FLAGS()

#define GST_GL_MEMORY_FLAGS(mem) GST_MEMORY_FLAGS(mem)

Get the currently set flags on mem

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

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

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

mem :

a GstGLMemory

flag :

a flag

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

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];


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);

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);

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.

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.

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.

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);

mem :

a GstMemory

Returns :

whether the memory at mem is a GstGLMemory

See Also

GstMemory, GstAllocator, GstGLBufferPool