• 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_FORMAT_H_
22 #define _GST_GL_FORMAT_H_
23 
24 #include <gst/gst.h>
25 
26 #include <gst/gl/gstgl_fwd.h>
27 #include <gst/video/video.h>
28 
29 /**
30  * GST_GL_TEXTURE_TARGET_2D_STR:
31  *
32  * String used for %GST_GL_TEXTURE_TARGET_2D in things like caps values
33  */
34 #define GST_GL_TEXTURE_TARGET_2D_STR "2D"
35 
36 /**
37  * GST_GL_TEXTURE_TARGET_RECTANGLE_STR:
38  *
39  * String used for %GST_GL_TEXTURE_TARGET_RECTANGLE in things like caps values
40  */
41 #define GST_GL_TEXTURE_TARGET_RECTANGLE_STR "rectangle"
42 
43 /**
44  * GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR:
45  *
46  * String used for %GST_GL_TEXTURE_TARGET_EXTERNAL_OES in things like caps values
47  */
48 #define GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR "external-oes"
49 
50 /**
51  * GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_2D:
52  *
53  * String used for %GST_GL_TEXTURE_TARGET_2D as a #GstBufferPool pool option
54  */
55 #define GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_2D "GstBufferPoolOptionGLTextureTarget2D"
56 
57 /**
58  * GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE:
59  *
60  * String used for %GST_GL_TEXTURE_TARGET_RECTANGLE as a #GstBufferPool pool option
61  */
62 #define GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE "GstBufferPoolOptionGLTextureTargetRectangle"
63 
64 /**
65  * GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES:
66  *
67  * String used for %GST_GL_TEXTURE_TARGET_EXTERNAL_OES as a #GstBufferPool pool option
68  */
69 #define GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES "GstBufferPoolOptionGLTextureTargetExternalOES"
70 
71 G_BEGIN_DECLS
72 
73 /**
74  * GstGLFormat:
75  * @GST_GL_LUMINANCE: Single component replicated across R, G, and B textures
76  *                    components
77  * @GST_GL_ALPHA: Single component stored in the A texture component
78  * @GST_GL_LUMINANCE_ALPHA: Combination of #GST_GL_LUMINANCE and #GST_GL_ALPHA
79  * @GST_GL_RED: Single component stored in the R texture component
80  * @GST_GL_R8: Single 8-bit component stored in the R texture component
81  * @GST_GL_RG: Two components stored in the R and G texture components
82  * @GST_GL_RG8: Two 8-bit components stored in the R and G texture components
83  * @GST_GL_RGB: Three components stored in the R, G, and B texture components
84  * @GST_GL_RGB8: Three 8-bit components stored in the R, G, and B
85  *               texture components
86  * @GST_GL_RGB565: Three components of bit depth 5, 6 and 5 stored in the R, G,
87  *                 and B texture components respectively.
88  * @GST_GL_RGB16: Three 16-bit components stored in the R, G, and B
89  *               texture components
90  * @GST_GL_RGBA: Four components stored in the R, G, B, and A texture
91  *               components respectively.
92  * @GST_GL_RGBA8: Four 8-bit components stored in the R, G, B, and A texture
93  *                components respectively.
94  * @GST_GL_RGBA16: Four 16-bit components stored in the R, G, B, and A texture
95  *                components respectively.
96  * @GST_GL_DEPTH_COMPONENT16: A single 16-bit component for depth information.
97  * @GST_GL_DEPTH24_STENCIL8: A 24-bit component for depth information and
98  *                           a 8-bit component for stencil informat.
99  * @GST_GL_RGBA10_A2: Four components of bit depth 10, 10, 10 and 2 stored in the
100  *                    R, G, B and A texture components respectively.
101  * @GST_GL_R16: Single 16-bit component stored in the R texture component
102  * @GST_GL_RG16: Two 16-bit components stored in the R and G texture components
103  */
104 typedef enum
105 {
106   /* values taken from the GL headers */
107   GST_GL_LUMINANCE                      = 0x1909,
108 
109   GST_GL_ALPHA                          = 0x1906,
110 
111   GST_GL_LUMINANCE_ALPHA                = 0x190A,
112 
113   GST_GL_RED                            = 0x1903,
114   GST_GL_R8                             = 0x8229,
115 
116   GST_GL_RG                             = 0x8227,
117   GST_GL_RG8                            = 0x822B,
118 
119   GST_GL_RGB                            = 0x1907,
120   GST_GL_RGB8                           = 0x8051,
121   GST_GL_RGB565                         = 0x8D62,
122   GST_GL_RGB16                          = 0x8054,
123 
124   GST_GL_RGBA                           = 0x1908,
125   GST_GL_RGBA8                          = 0x8058,
126   GST_GL_RGBA16                         = 0x805B,
127 
128   GST_GL_DEPTH_COMPONENT16              = 0x81A5,
129 
130   GST_GL_DEPTH24_STENCIL8               = 0x88F0,
131 
132   GST_GL_RGB10_A2                       = 0x8059,
133 
134   GST_GL_R16                            = 0x822A,
135   GST_GL_RG16                           = 0x822C,
136 } GstGLFormat;
137 
138 GST_GL_API
139 guint                   gst_gl_format_type_n_bytes                  (guint format,
140                                                                      guint type);
141 GST_GL_API
142 GstGLFormat             gst_gl_format_from_video_info               (GstGLContext * context,
143                                                                      const GstVideoInfo * vinfo,
144                                                                      guint plane);
145 GST_GL_API
146 guint                   gst_gl_sized_gl_format_from_gl_format_type  (GstGLContext * context,
147                                                                      guint format,
148                                                                      guint type);
149 GST_GL_API
150 void                    gst_gl_format_type_from_sized_gl_format     (GstGLFormat format,
151                                                                      GstGLFormat * unsized_format,
152                                                                      guint * gl_type);
153 
154 GST_GL_API
155 gboolean                gst_gl_format_is_supported                  (GstGLContext * context,
156                                                                      GstGLFormat format);
157 
158 GST_GL_API
159 GstGLTextureTarget      gst_gl_texture_target_from_string           (const gchar * str);
160 GST_GL_API
161 const gchar *           gst_gl_texture_target_to_string             (GstGLTextureTarget target);
162 GST_GL_API
163 guint                   gst_gl_texture_target_to_gl                 (GstGLTextureTarget target);
164 GST_GL_API
165 GstGLTextureTarget      gst_gl_texture_target_from_gl               (guint target);
166 GST_GL_API
167 const gchar *           gst_gl_texture_target_to_buffer_pool_option (GstGLTextureTarget target);
168 
169 G_END_DECLS
170 
171 #endif /* _GST_GL_FORMAT_H_ */
172