1/*
2 * GStreamer
3 * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
14 *
15 * You should have received a copy of the GNU Library General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
18 * Boston, MA 02110-1301, USA.
19 */
20
21#ifndef _GST_GL_BUFFER_H_
22#define _GST_GL_BUFFER_H_
23
24#include <gst/gl/gstglbasememory.h>
25
26G_BEGIN_DECLS
27
28#define GST_TYPE_GL_BUFFER_ALLOCATOR (gst_gl_buffer_allocator_get_type())
29GST_GL_API
30GType gst_gl_buffer_allocator_get_type(void);
31
32#define GST_IS_GL_BUFFER_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GL_ALLOCATOR))
33#define GST_IS_GL_BUFFER_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GL_BUFFER_ALLOCATOR))
34#define GST_GL_BUFFER_ALLOCATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_GL_BUFFER_ALLOCATOR, GstGLBufferAllocatorClass))
35#define GST_GL_BUFFER_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GL_BUFFER_ALLOCATOR, GstGLBufferAllocator))
36#define GST_GL_BUFFER_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GL_BUFFER_ALLOCATOR, GstGLBufferAllocatorClass))
37#define GST_GL_BUFFER_ALLOCATOR_CAST(obj) ((GstGLBufferAllocator *)(obj))
38
39/**
40 * GstGLBuffer:
41 * @mem: the parent object
42 * @id: the buffer id for this memory
43 * @target: the OpenGL target of this texture for binding purposes
44 * @usage_hints: the OpenGL usage hints this buffer was created with
45 *
46 * Represents information about a GL buffer
47 */
48struct _GstGLBuffer
49{
50 GstGLBaseMemory mem;
51
52 guint id;
53 guint target; /* XXX: put this in the allocator? */
54 guint usage_hints; /* XXX: put this in the allocator? */
55};
56
57typedef struct _GstGLBufferAllocationParams GstGLBufferAllocationParams;
58
59#define GST_TYPE_GL_BUFFER_ALLOCATION_PARAMS (gst_gl_buffer_allocation_params_get_type())
60GST_GL_API
61GType gst_gl_buffer_allocation_params_get_type (void);
62
63/**
64 * GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_BUFFER:
65 *
66 * GL allocation flag indicating the allocation of a GL buffer.
67 */
68#define GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_BUFFER (1 << 4)
69
70/**
71 * GstGLBufferAllocationParams:
72 * @parent: parent object
73 * @gl_target: the OpenGL target to bind the buffer to
74 * @gl_usage: the OpenGL usage hint to create the buffer with
75 */
76struct _GstGLBufferAllocationParams
77{
78 GstGLAllocationParams parent;
79
80 guint gl_target;
81 guint gl_usage;
82
83 /*< private >*/
84 gpointer _padding[GST_PADDING];
85};
86
87GST_GL_API
88GstGLBufferAllocationParams * gst_gl_buffer_allocation_params_new (GstGLContext * context,
89 gsize alloc_size,
90 const GstAllocationParams * alloc_params,
91 guint gl_target,
92 guint gl_usage);
93
94/**
95 * GstGLBufferAllocator:
96 *
97 * Opaque #GstGLBufferAllocator struct
98 */
99struct _GstGLBufferAllocator
100{
101 GstGLBaseMemoryAllocator parent;
102
103 /*< private >*/
104 gpointer _padding[GST_PADDING];
105};
106
107/**
108 * GstGLBufferAllocatorClass:
109 *
110 * The #GstGLBufferAllocatorClass only contains private data
111 */
112struct _GstGLBufferAllocatorClass
113{
114 GstGLBaseMemoryAllocatorClass parent_class;
115
116 /*< private >*/
117 gpointer _padding[GST_PADDING];
118};
119
120/**
121 * GST_CAPS_FEATURE_MEMORY_GL_BUFFER:
122 *
123 * Name of the caps feature indicating the use of GL buffers
124 */
125#define GST_CAPS_FEATURE_MEMORY_GL_BUFFER "memory:GLBuffer"
126
127/**
128 * GST_GL_BUFFER_ALLOCATOR_NAME:
129 *
130 * The name of the GL buffer allocator
131 */
132#define GST_GL_BUFFER_ALLOCATOR_NAME "GLBuffer"
133
134/**
135 * GST_TYPE_GL_BUFFER:
136 *
137 * Since: 1.20
138 */
139#define GST_TYPE_GL_BUFFER (gst_gl_buffer_get_type())
140GST_GL_API
141GType gst_gl_buffer_get_type(void);
142
143GST_GL_API
144void gst_gl_buffer_init_once (void);
145GST_GL_API
146gboolean gst_is_gl_buffer (GstMemory * mem);
147
148G_END_DECLS
149
150#endif /* _GST_GL_BUFFER_H_ */
151

source code of include/gstreamer-1.0/gst/gl/gstglbuffer.h