1 | /* |
2 | * GStreamer |
3 | * Copyright (C) 2012 Matthew Waters <ystree00@gmail.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_COLOR_CONVERT_H__ |
22 | #define __GST_GL_COLOR_CONVERT_H__ |
23 | |
24 | #include <gst/video/video.h> |
25 | #include <gst/gstmemory.h> |
26 | |
27 | #include <gst/gl/gstgl_fwd.h> |
28 | |
29 | G_BEGIN_DECLS |
30 | |
31 | GST_GL_API |
32 | GType gst_gl_color_convert_get_type (void); |
33 | #define GST_TYPE_GL_COLOR_CONVERT (gst_gl_color_convert_get_type()) |
34 | #define GST_GL_COLOR_CONVERT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GL_COLOR_CONVERT,GstGLColorConvert)) |
35 | #define GST_GL_COLOR_CONVERT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GL_DISPLAY,GstGLColorConvertClass)) |
36 | #define GST_IS_GL_COLOR_CONVERT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GL_COLOR_CONVERT)) |
37 | #define GST_IS_GL_COLOR_CONVERT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GL_COLOR_CONVERT)) |
38 | #define GST_GL_COLOR_CONVERT_CAST(obj) ((GstGLColorConvert*)(obj)) |
39 | |
40 | /** |
41 | * GstGLColorConvert |
42 | * |
43 | * Opaque #GstGLColorConvert object |
44 | */ |
45 | struct _GstGLColorConvert |
46 | { |
47 | /*< private >*/ |
48 | GstObject parent; |
49 | |
50 | GstGLContext *context; |
51 | |
52 | /* input data */ |
53 | GstVideoInfo in_info; |
54 | GstVideoInfo out_info; |
55 | |
56 | gboolean initted; |
57 | gboolean passthrough; |
58 | |
59 | GstBuffer * inbuf; |
60 | GstBuffer * outbuf; |
61 | |
62 | /* used for the conversion */ |
63 | GstGLFramebuffer *fbo; |
64 | GstGLShader *shader; |
65 | |
66 | /*< private >*/ |
67 | GstGLColorConvertPrivate *priv; |
68 | |
69 | gpointer _reserved[GST_PADDING]; |
70 | }; |
71 | |
72 | /** |
73 | * GstGLColorConvertClass: |
74 | * |
75 | * The #GstGLColorConvertClass struct only contains private data |
76 | */ |
77 | struct _GstGLColorConvertClass |
78 | { |
79 | /*< private >*/ |
80 | GstObjectClass object_class; |
81 | |
82 | gpointer _padding[GST_PADDING]; |
83 | }; |
84 | |
85 | /** |
86 | * GST_GL_COLOR_CONVERT_EXT_FORMATS: (skip) |
87 | * |
88 | */ |
89 | #if G_BYTE_ORDER == G_LITTLE_ENDIAN |
90 | #define GST_GL_COLOR_CONVERT_EXT_FORMATS \ |
91 | ", BGR10A2_LE, RGB10A2_LE, P010_10LE, P012_LE, P016_LE, Y212_LE, Y412_LE" |
92 | #else |
93 | #define GST_GL_COLOR_CONVERT_EXT_FORMATS \ |
94 | ", P010_10BE, P012_BE, P016_BE, Y212_BE, Y412_BE" |
95 | #endif |
96 | |
97 | /** |
98 | * GST_GL_COLOR_CONVERT_FORMATS: |
99 | * |
100 | * The currently supported formats that can be converted |
101 | */ |
102 | #define GST_GL_COLOR_CONVERT_FORMATS "{ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, " \ |
103 | "xBGR, ARGB, ABGR, GBRA, GBR, RGBP, BGRP, Y444, I420, YV12, Y42B, " \ |
104 | "Y41B, NV12, NV21, NV16, NV61, YUY2, UYVY, Y210, AYUV, " \ |
105 | "VUYA, Y410, GRAY8, GRAY16_LE, GRAY16_BE, " \ |
106 | "RGB16, BGR16, ARGB64, A420, AV12" \ |
107 | GST_GL_COLOR_CONVERT_EXT_FORMATS "}" |
108 | |
109 | /** |
110 | * GST_GL_COLOR_CONVERT_VIDEO_CAPS: |
111 | * |
112 | * The currently supported #GstCaps that can be converted |
113 | */ |
114 | #define GST_GL_COLOR_CONVERT_VIDEO_CAPS \ |
115 | "video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), " \ |
116 | "format = (string) " GST_GL_COLOR_CONVERT_FORMATS ", " \ |
117 | "width = " GST_VIDEO_SIZE_RANGE ", " \ |
118 | "height = " GST_VIDEO_SIZE_RANGE ", " \ |
119 | "framerate = " GST_VIDEO_FPS_RANGE ", " \ |
120 | "texture-target = (string) { 2D, rectangle, external-oes } " \ |
121 | " ; " \ |
122 | "video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "," \ |
123 | GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION "), " \ |
124 | "format = (string) " GST_GL_COLOR_CONVERT_FORMATS ", " \ |
125 | "width = " GST_VIDEO_SIZE_RANGE ", " \ |
126 | "height = " GST_VIDEO_SIZE_RANGE ", " \ |
127 | "framerate = " GST_VIDEO_FPS_RANGE ", " \ |
128 | "texture-target = (string) { 2D, rectangle, external-oes }" |
129 | |
130 | GST_GL_API |
131 | GstGLColorConvert * gst_gl_color_convert_new (GstGLContext * context); |
132 | |
133 | GST_GL_API |
134 | GstCaps * gst_gl_color_convert_transform_caps (GstGLContext * context, |
135 | GstPadDirection direction, |
136 | GstCaps * caps, |
137 | GstCaps * filter); |
138 | GST_GL_API |
139 | GstCaps * gst_gl_color_convert_fixate_caps (GstGLContext * context, |
140 | GstPadDirection direction, |
141 | GstCaps * caps, |
142 | GstCaps * other); |
143 | GST_GL_API |
144 | gboolean gst_gl_color_convert_set_caps (GstGLColorConvert * convert, |
145 | GstCaps * in_caps, |
146 | GstCaps * out_caps); |
147 | GST_GL_API |
148 | gboolean gst_gl_color_convert_decide_allocation (GstGLColorConvert * convert, |
149 | GstQuery * query); |
150 | |
151 | GST_GL_API |
152 | GstBuffer * gst_gl_color_convert_perform (GstGLColorConvert * convert, GstBuffer * inbuf); |
153 | |
154 | G_END_DECLS |
155 | |
156 | #endif /* __GST_GL_COLOR_CONVERT_H__ */ |
157 | |