summaryrefslogtreecommitdiff
path: root/include/gst/gl/gstglmemory.h
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2022-08-03 21:02:36 +0300
committerGeorge Hazan <ghazan@miranda.im>2022-08-03 21:02:36 +0300
commit5323a782c4e8c42781f22ce2f488962a18f82554 (patch)
treef71537197b16f0f8fd0d6937f7120d018d220814 /include/gst/gl/gstglmemory.h
parent50acf9d37183f86f6f623aad410003392b0af41f (diff)
Jabber: initial version of Jingle support
Diffstat (limited to 'include/gst/gl/gstglmemory.h')
-rw-r--r--include/gst/gl/gstglmemory.h327
1 files changed, 327 insertions, 0 deletions
diff --git a/include/gst/gl/gstglmemory.h b/include/gst/gl/gstglmemory.h
new file mode 100644
index 0000000000..daea4d12a7
--- /dev/null
+++ b/include/gst/gl/gstglmemory.h
@@ -0,0 +1,327 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _GST_GL_MEMORY_H_
+#define _GST_GL_MEMORY_H_
+
+#include <gst/gl/gstglbasememory.h>
+#include <gst/gl/gstglformat.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GL_MEMORY_ALLOCATOR (gst_gl_memory_allocator_get_type())
+GST_GL_API
+GType gst_gl_memory_allocator_get_type(void);
+
+#define GST_IS_GL_MEMORY_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GL_MEMORY_ALLOCATOR))
+#define GST_IS_GL_MEMORY_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GL_MEMORY_ALLOCATOR))
+#define GST_GL_MEMORY_ALLOCATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_GL_MEMORY_ALLOCATOR, GstGLMemoryAllocatorClass))
+#define GST_GL_MEMORY_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GL_MEMORY_ALLOCATOR, GstGLMemoryAllocator))
+#define GST_GL_MEMORY_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GL_MEMORY_ALLOCATOR, GstGLMemoryAllocatorClass))
+#define GST_GL_MEMORY_ALLOCATOR_CAST(obj) ((GstGLMemoryAllocator *)(obj))
+
+#define GST_GL_MEMORY_CAST(obj) ((GstGLMemory *) obj)
+
+/**
+ * GST_CAPS_FEATURE_MEMORY_GL_MEMORY:
+ *
+ * Name of the caps feature for indicating the use of #GstGLMemory
+ */
+#define GST_CAPS_FEATURE_MEMORY_GL_MEMORY "memory:GLMemory"
+/**
+ * GST_GL_MEMORY_VIDEO_EXT_FORMATS: (skip)
+ */
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define GST_GL_MEMORY_VIDEO_EXT_FORMATS \
+ ", BGR10A2_LE, RGB10A2_LE, P010_10LE, P012_LE, P016_LE, Y212_LE, Y412_LE"
+#else
+#define GST_GL_MEMORY_VIDEO_EXT_FORMATS \
+ ", P010_10BE, P012_BE, P016_BE, Y212_BE, Y412_BE"
+#endif
+
+/**
+ * GST_GL_MEMORY_VIDEO_FORMATS_STR:
+ *
+ * List of video formats that are supported by #GstGLMemory
+ */
+#define GST_GL_MEMORY_VIDEO_FORMATS_STR \
+ "{ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, GBRA, GBR, RGBP, BGRP, RGB, BGR, RGB16, BGR16, " \
+ "AYUV, VUYA, Y410, I420, YV12, NV12, NV21, NV16, NV61, YUY2, UYVY, Y210, Y41B, " \
+ "Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE, ARGB64, A420, AV12" \
+ GST_GL_MEMORY_VIDEO_EXT_FORMATS "}"
+
+/**
+ * GstGLMemory:
+ * @mem: the parent #GstGLBaseMemory object
+ * @tex_id: the GL texture id for this memory
+ * @tex_target: the GL texture target for this memory
+ * @tex_format: the texture type
+ * @info: the texture's #GstVideoInfo
+ * @valign: data alignment for system memory mapping
+ * @plane: data plane in @info
+ * @tex_scaling: GL shader scaling parameters for @valign and/or width/height
+ *
+ * Represents information about a GL texture
+ */
+struct _GstGLMemory
+{
+ GstGLBaseMemory mem;
+
+ guint tex_id;
+ GstGLTextureTarget tex_target;
+ GstGLFormat tex_format;
+ GstVideoInfo info;
+ GstVideoAlignment valign;
+ guint plane;
+ gfloat tex_scaling[2];
+
+ /*< protected >*/
+ gboolean texture_wrapped;
+ guint unpack_length;
+ guint tex_width;
+
+ /*< private >*/
+ gpointer _padding[GST_PADDING];
+};
+
+
+#define GST_TYPE_GL_VIDEO_ALLOCATION_PARAMS (gst_gl_video_allocation_params_get_type())
+GST_GL_API
+GType gst_gl_video_allocation_params_get_type (void);
+
+typedef struct _GstGLVideoAllocationParams GstGLVideoAllocationParams;
+
+/**
+ * GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO:
+ *
+ * GL allocation flag indicating the allocation of 2D video frames
+ */
+#define GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO (1 << 3)
+
+/**
+ * GstGLVideoAllocationParams:
+ * @parent: the parent #GstGLAllocationParams structure
+ * @v_info: the #GstVideoInfo to allocate
+ * @plane: the video plane index to allocate
+ * @valign: the #GstVideoAlignment to align the system representation to (may be %NULL for the default)
+ * @target: the #GstGLTextureTarget to allocate
+ * @tex_format: the #GstGLFormat to allocate
+ */
+struct _GstGLVideoAllocationParams
+{
+ GstGLAllocationParams parent;
+
+ GstVideoInfo *v_info;
+ guint plane;
+ GstVideoAlignment *valign;
+ GstGLTextureTarget target;
+ GstGLFormat tex_format;
+
+ /*< private >*/
+ gpointer _padding[GST_PADDING];
+};
+
+GST_GL_API
+gboolean gst_gl_video_allocation_params_init_full (GstGLVideoAllocationParams * params,
+ gsize struct_size,
+ guint alloc_flags,
+ GstGLAllocationParamsCopyFunc copy,
+ GstGLAllocationParamsFreeFunc free,
+ GstGLContext * context,
+ const GstAllocationParams * alloc_params,
+ const GstVideoInfo * v_info,
+ guint plane,
+ const GstVideoAlignment * valign,
+ GstGLTextureTarget target,
+ GstGLFormat tex_format,
+ gpointer wrapped_data,
+ gpointer gl_handle,
+ gpointer user_data,
+ GDestroyNotify notify);
+GST_GL_API
+GstGLVideoAllocationParams * gst_gl_video_allocation_params_new (GstGLContext * context,
+ const GstAllocationParams * alloc_params,
+ const GstVideoInfo * v_info,
+ guint plane,
+ const GstVideoAlignment * valign,
+ GstGLTextureTarget target,
+ GstGLFormat tex_format);
+GST_GL_API
+GstGLVideoAllocationParams * gst_gl_video_allocation_params_new_wrapped_data (GstGLContext * context,
+ const GstAllocationParams * alloc_params,
+ const GstVideoInfo * v_info,
+ guint plane,
+ const GstVideoAlignment * valign,
+ GstGLTextureTarget target,
+ GstGLFormat tex_format,
+ gpointer wrapped_data,
+ gpointer user_data,
+ GDestroyNotify notify);
+
+GST_GL_API
+GstGLVideoAllocationParams * gst_gl_video_allocation_params_new_wrapped_texture (GstGLContext * context,
+ const GstAllocationParams * alloc_params,
+ const GstVideoInfo * v_info,
+ guint plane,
+ const GstVideoAlignment * valign,
+ GstGLTextureTarget target,
+ GstGLFormat tex_format,
+ guint tex_id,
+ gpointer user_data,
+ GDestroyNotify notify);
+
+GST_GL_API
+GstGLVideoAllocationParams * gst_gl_video_allocation_params_new_wrapped_gl_handle (GstGLContext * context,
+ const GstAllocationParams * alloc_params,
+ const GstVideoInfo * v_info,
+ guint plane,
+ const GstVideoAlignment * valign,
+ GstGLTextureTarget target,
+ GstGLFormat tex_format,
+ gpointer gl_handle,
+ gpointer user_data,
+ GDestroyNotify notify);
+
+/* subclass usage */
+GST_GL_API
+void gst_gl_video_allocation_params_free_data (GstGLVideoAllocationParams * params);
+/* subclass usage */
+GST_GL_API
+void gst_gl_video_allocation_params_copy_data (GstGLVideoAllocationParams * src_vid,
+ GstGLVideoAllocationParams * dest_vid);
+
+/**
+ * GstGLMemoryAllocator
+ *
+ * Opaque #GstGLMemoryAllocator struct
+ */
+struct _GstGLMemoryAllocator
+{
+ /*< private >*/
+ GstGLBaseMemoryAllocator parent;
+
+ gpointer _padding[GST_PADDING];
+};
+
+/**
+ * GstGLMemoryAllocatorClass:
+ * @map: provide a custom map implementation
+ * @copy: provide a custom copy implementation
+ * @unmap: provide a custom unmap implementation
+ */
+struct _GstGLMemoryAllocatorClass
+{
+ /*< private >*/
+ GstGLBaseMemoryAllocatorClass parent_class;
+
+ /*< public >*/
+ GstGLBaseMemoryAllocatorMapFunction map;
+ GstGLBaseMemoryAllocatorCopyFunction copy;
+ GstGLBaseMemoryAllocatorUnmapFunction unmap;
+
+ /*< private >*/
+ gpointer _padding[GST_PADDING];
+};
+
+#include <gst/gl/gstglbasememory.h>
+
+/**
+ * GST_GL_MEMORY_ALLOCATOR_NAME:
+ *
+ * The name of the GL memory allocator
+ */
+#define GST_GL_MEMORY_ALLOCATOR_NAME "GLMemory"
+
+/**
+ * GST_TYPE_GL_MEMORY:
+ *
+ * Since: 1.20
+ */
+#define GST_TYPE_GL_MEMORY (gst_gl_memory_get_type())
+GST_GL_API
+GType gst_gl_memory_get_type(void);
+
+GST_GL_API
+void gst_gl_memory_init_once (void);
+GST_GL_API
+gboolean gst_is_gl_memory (GstMemory * mem);
+
+GST_GL_API
+void gst_gl_memory_init (GstGLMemory * mem,
+ GstAllocator * allocator,
+ GstMemory * parent,
+ GstGLContext * context,
+ GstGLTextureTarget target,
+ GstGLFormat tex_format,
+ const GstAllocationParams *params,
+ const GstVideoInfo * info,
+ guint plane,
+ const GstVideoAlignment *valign,
+ gpointer user_data,
+ GDestroyNotify notify);
+
+GST_GL_API
+gboolean gst_gl_memory_copy_into (GstGLMemory *gl_mem,
+ guint tex_id,
+ GstGLTextureTarget target,
+ GstGLFormat tex_format,
+ gint width,
+ gint height);
+GST_GL_API
+gboolean gst_gl_memory_copy_teximage (GstGLMemory * src,
+ guint tex_id,
+ GstGLTextureTarget out_target,
+ GstGLFormat out_tex_format,
+ gint out_width,
+ gint out_height);
+
+GST_GL_API
+gboolean gst_gl_memory_read_pixels (GstGLMemory * gl_mem,
+ gpointer write_pointer);
+GST_GL_API
+void gst_gl_memory_texsubimage (GstGLMemory * gl_mem,
+ gpointer read_pointer);
+
+/* accessors */
+GST_GL_API
+gint gst_gl_memory_get_texture_width (GstGLMemory * gl_mem);
+GST_GL_API
+gint gst_gl_memory_get_texture_height (GstGLMemory * gl_mem);
+GST_GL_API
+GstGLFormat gst_gl_memory_get_texture_format (GstGLMemory * gl_mem);
+GST_GL_API
+GstGLTextureTarget gst_gl_memory_get_texture_target (GstGLMemory * gl_mem);
+GST_GL_API
+guint gst_gl_memory_get_texture_id (GstGLMemory * gl_mem);
+
+GST_GL_API
+gboolean gst_gl_memory_setup_buffer (GstGLMemoryAllocator * allocator,
+ GstBuffer * buffer,
+ GstGLVideoAllocationParams * params,
+ GstGLFormat *tex_formats,
+ gpointer *wrapped_data,
+ gsize n_wrapped_pointers);
+
+GST_GL_API
+GstGLMemoryAllocator * gst_gl_memory_allocator_get_default (GstGLContext *context);
+
+G_END_DECLS
+
+#endif /* _GST_GL_MEMORY_H_ */