• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_RENDERBUFFER_H_
22 #define _GST_GL_RENDERBUFFER_H_
23 
24 #include <gst/gl/gstglbasememory.h>
25 
26 G_BEGIN_DECLS
27 
28 #define GST_TYPE_GL_RENDERBUFFER_ALLOCATOR (gst_gl_renderbuffer_allocator_get_type())
29 GST_GL_API GType gst_gl_renderbuffer_allocator_get_type(void);
30 
31 #define GST_IS_GL_RENDERBUFFER_ALLOCATOR(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GL_RENDERBUFFER_ALLOCATOR))
32 #define GST_IS_GL_RENDERBUFFER_ALLOCATOR_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GL_RENDERBUFFER_ALLOCATOR))
33 #define GST_GL_RENDERBUFFER_ALLOCATOR_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_GL_RENDERBUFFER_ALLOCATOR, GstGLRenderbufferAllocatorClass))
34 #define GST_GL_RENDERBUFFER_ALLOCATOR(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GL_RENDERBUFFER_ALLOCATOR, GstGLRenderbufferAllocator))
35 #define GST_GL_RENDERBUFFER_ALLOCATOR_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GL_RENDERBUFFER_ALLOCATOR, GstGLRenderbufferAllocatorClass))
36 #define GST_GL_RENDERBUFFER_ALLOCATOR_CAST(obj)            ((GstGLRenderbufferAllocator *)(obj))
37 
38 #define GST_GL_RENDERBUFFER_CAST(obj) ((GstGLRenderbuffer *) obj)
39 
40 /**
41  * GST_GL_RENDERBUFFER_ALLOCATOR_NAME:
42  *
43  * The name of the GL renderbuffer allocator
44  */
45 #define GST_GL_RENDERBUFFER_ALLOCATOR_NAME   "GLRenderbuffer"
46 
47 /**
48  * GstGLRenderbuffer:
49  * @renderbuffer_id: the GL texture id for this memory
50  * @renderbuffer_format: the texture type
51  * @width: the width
52  * @height: the height
53  *
54  * Represents information about a GL renderbuffer
55  */
56 struct _GstGLRenderbuffer
57 {
58   /*< private >*/
59   GstGLBaseMemory           mem;
60 
61   /*< public >*/
62   guint                     renderbuffer_id;
63   GstGLFormat               renderbuffer_format;
64   guint                     width;
65   guint                     height;
66 
67   /*< protected >*/
68   gboolean                  renderbuffer_wrapped;
69 
70   /*< private >*/
71   gpointer                  _padding[GST_PADDING];
72 };
73 
74 /**
75  * GstGLRenderbufferAllocator:
76  *
77  * Opaque #GstGLRenderbufferAllocator struct
78  */
79 struct _GstGLRenderbufferAllocator
80 {
81   GstGLBaseMemoryAllocator parent;
82 
83   /*< private >*/
84   gpointer                  _padding[GST_PADDING];
85 };
86 
87 /**
88  * GstGLRenderbufferAllocatorClass:
89  *
90  * The #GstGLRenderbufferAllocatorClass only contains private data
91  */
92 struct _GstGLRenderbufferAllocatorClass
93 {
94   GstGLBaseMemoryAllocatorClass             parent_class;
95 
96   /*< private >*/
97   gpointer                  _padding[GST_PADDING];
98 };
99 
100 #include <gst/gl/gstglbasememory.h>
101 
102 typedef struct _GstGLRenderbufferAllocationParams GstGLRenderbufferAllocationParams;
103 
104 GST_GL_API GType gst_gl_renderbuffer_allocation_params_get_type (void);
105 #define GST_TYPE_RENDERBUFFER_ALLOCATION_PARAMS (gst_gl_renderbuffer_allocation_params_get_type)
106 
107 /**
108  * GstGLRenderbufferAllocationParams:
109  * @renderbuffer_format: the #GstGLFormat
110  * @width: the width
111  * @height: the height
112  *
113  * Allocation parameters
114  */
115 struct _GstGLRenderbufferAllocationParams
116 {
117   /*< private >*/
118   GstGLAllocationParams parent;
119 
120   /*< public >*/
121   GstGLFormat renderbuffer_format;
122   guint width;
123   guint height;
124 
125   /*< private >*/
126   gpointer _padding[GST_PADDING];
127 };
128 
129 GST_GL_API
130 GstGLRenderbufferAllocationParams *     gst_gl_renderbuffer_allocation_params_new           (GstGLContext * context,
131                                                                                              const GstAllocationParams * alloc_params,
132                                                                                              GstGLFormat renderbuffer_format,
133                                                                                              guint width,
134                                                                                              guint height);
135 
136 GST_GL_API
137 GstGLRenderbufferAllocationParams *     gst_gl_renderbuffer_allocation_params_new_wrapped   (GstGLContext * context,
138                                                                                              const GstAllocationParams * alloc_params,
139                                                                                              GstGLFormat renderbuffer_format,
140                                                                                              guint width,
141                                                                                              guint height,
142                                                                                              gpointer gl_handle,
143                                                                                              gpointer user_data,
144                                                                                              GDestroyNotify notify);
145 
146 /**
147  * GST_TYPE_GL_RENDERBUFFER:
148  *
149  * Since: 1.20
150  */
151 #define GST_TYPE_GL_RENDERBUFFER (gst_gl_renderbuffer_get_type())
152 GST_GL_API
153 GType gst_gl_renderbuffer_get_type(void);
154 
155 GST_GL_API
156 void            gst_gl_renderbuffer_init_once   (void);
157 
158 GST_GL_API
159 gboolean        gst_is_gl_renderbuffer          (GstMemory * mem);
160 
161 /* accessors */
162 GST_GL_API
163 gint                    gst_gl_renderbuffer_get_width     (GstGLRenderbuffer * gl_mem);
164 
165 GST_GL_API
166 gint                    gst_gl_renderbuffer_get_height    (GstGLRenderbuffer * gl_mem);
167 
168 GST_GL_API
169 GstGLFormat             gst_gl_renderbuffer_get_format    (GstGLRenderbuffer * gl_mem);
170 
171 GST_GL_API
172 guint                   gst_gl_renderbuffer_get_id        (GstGLRenderbuffer * gl_mem);
173 
174 G_END_DECLS
175 
176 #endif /* _GST_GL_RENDERBUFFER_H_ */
177