1 | /* GStreamer |
2 | * Copyright (C) 1999,2000 Erik Walthinsen <[email protected]> |
3 | * 2000 Wim Taymans <[email protected]> |
4 | * |
5 | * gstpadtemplate.h: Header for GstPadTemplate object |
6 | * |
7 | * This library is free software; you can redistribute it and/or |
8 | * modify it under the terms of the GNU Library General Public |
9 | * License as published by the Free Software Foundation; either |
10 | * version 2 of the License, or (at your option) any later version. |
11 | * |
12 | * This library is distributed in the hope that it will be useful, |
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
15 | * Library General Public License for more details. |
16 | * |
17 | * You should have received a copy of the GNU Library General Public |
18 | * License along with this library; if not, write to the |
19 | * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, |
20 | * Boston, MA 02110-1301, USA. |
21 | */ |
22 | |
23 | |
24 | #ifndef __GST_PAD_TEMPLATE_H__ |
25 | #define __GST_PAD_TEMPLATE_H__ |
26 | |
27 | #include <gst/gstconfig.h> |
28 | |
29 | typedef struct _GstPadTemplate GstPadTemplate; |
30 | typedef struct _GstPadTemplateClass GstPadTemplateClass; |
31 | typedef struct _GstStaticPadTemplate GstStaticPadTemplate; |
32 | |
33 | #include <gst/gstobject.h> |
34 | #include <gst/gstbuffer.h> |
35 | #include <gst/gstcaps.h> |
36 | #include <gst/gstevent.h> |
37 | #include <gst/gstquery.h> |
38 | #include <gst/gsttask.h> |
39 | |
40 | G_BEGIN_DECLS |
41 | |
42 | #define GST_TYPE_STATIC_PAD_TEMPLATE (gst_static_pad_template_get_type ()) |
43 | |
44 | #define GST_TYPE_PAD_TEMPLATE (gst_pad_template_get_type ()) |
45 | #define GST_PAD_TEMPLATE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PAD_TEMPLATE,GstPadTemplate)) |
46 | #define GST_PAD_TEMPLATE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PAD_TEMPLATE,GstPadTemplateClass)) |
47 | #define GST_IS_PAD_TEMPLATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PAD_TEMPLATE)) |
48 | #define GST_IS_PAD_TEMPLATE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PAD_TEMPLATE)) |
49 | |
50 | /** |
51 | * GstPadPresence: |
52 | * @GST_PAD_ALWAYS: the pad is always available |
53 | * @GST_PAD_SOMETIMES: the pad will become available depending on the media stream |
54 | * @GST_PAD_REQUEST: the pad is only available on request with |
55 | * gst_element_request_pad(). |
56 | * |
57 | * Indicates when this pad will become available. |
58 | */ |
59 | typedef enum { |
60 | GST_PAD_ALWAYS, |
61 | GST_PAD_SOMETIMES, |
62 | GST_PAD_REQUEST |
63 | } GstPadPresence; |
64 | |
65 | /** |
66 | * GST_PAD_TEMPLATE_NAME_TEMPLATE: |
67 | * @templ: the template to query |
68 | * |
69 | * Get the nametemplate of the padtemplate. |
70 | */ |
71 | #define GST_PAD_TEMPLATE_NAME_TEMPLATE(templ) (((GstPadTemplate *)(templ))->name_template) |
72 | |
73 | /** |
74 | * GST_PAD_TEMPLATE_DIRECTION: |
75 | * @templ: the template to query |
76 | * |
77 | * Get the #GstPadDirection of the padtemplate. |
78 | */ |
79 | #define GST_PAD_TEMPLATE_DIRECTION(templ) (((GstPadTemplate *)(templ))->direction) |
80 | |
81 | /** |
82 | * GST_PAD_TEMPLATE_PRESENCE: |
83 | * @templ: the template to query |
84 | * |
85 | * Get the #GstPadPresence of the padtemplate. |
86 | */ |
87 | #define GST_PAD_TEMPLATE_PRESENCE(templ) (((GstPadTemplate *)(templ))->presence) |
88 | |
89 | /** |
90 | * GST_PAD_TEMPLATE_CAPS: |
91 | * @templ: the template to query |
92 | * |
93 | * Get a handle to the padtemplate #GstCaps |
94 | */ |
95 | #define GST_PAD_TEMPLATE_CAPS(templ) (((GstPadTemplate *)(templ))->caps) |
96 | |
97 | /** |
98 | * GST_PAD_TEMPLATE_GTYPE: |
99 | * @templ: the template to query |
100 | * |
101 | * Get the #GType of the padtemplate |
102 | * |
103 | * Since: 1.14 |
104 | */ |
105 | #define GST_PAD_TEMPLATE_GTYPE(templ) (((GstPadTemplate *)(templ))->ABI.abi.gtype) |
106 | |
107 | /** |
108 | * GstPadTemplateFlags: |
109 | * @GST_PAD_TEMPLATE_FLAG_LAST: first flag that can be used by subclasses. |
110 | * |
111 | * Flags for the padtemplate |
112 | */ |
113 | typedef enum { |
114 | /* padding */ |
115 | GST_PAD_TEMPLATE_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 4) |
116 | } GstPadTemplateFlags; |
117 | |
118 | /** |
119 | * GST_PAD_TEMPLATE_IS_FIXED: |
120 | * @templ: the template to query |
121 | * |
122 | * Check if the properties of the padtemplate are fixed |
123 | */ |
124 | #define GST_PAD_TEMPLATE_IS_FIXED(templ) (GST_OBJECT_FLAG_IS_SET(templ, GST_PAD_TEMPLATE_FIXED)) |
125 | |
126 | /** |
127 | * GstPadTemplate: |
128 | * |
129 | * The padtemplate object. |
130 | */ |
131 | struct _GstPadTemplate { |
132 | GstObject object; |
133 | |
134 | gchar *name_template; |
135 | GstPadDirection direction; |
136 | GstPadPresence presence; |
137 | GstCaps *caps; |
138 | |
139 | /*< private >*/ |
140 | union { |
141 | gpointer _gst_reserved[GST_PADDING]; |
142 | struct { |
143 | GType gtype; |
144 | } abi; |
145 | } ABI; |
146 | }; |
147 | |
148 | struct _GstPadTemplateClass { |
149 | GstObjectClass parent_class; |
150 | |
151 | /* signal callbacks */ |
152 | void (*pad_created) (GstPadTemplate *templ, GstPad *pad); |
153 | |
154 | /*< private >*/ |
155 | gpointer _gst_reserved[GST_PADDING]; |
156 | }; |
157 | |
158 | /** |
159 | * GstStaticPadTemplate: |
160 | * @name_template: the name of the template |
161 | * @direction: the direction of the template |
162 | * @presence: the presence of the template |
163 | * @static_caps: the caps of the template. |
164 | * |
165 | * Structure describing the #GstStaticPadTemplate. |
166 | */ |
167 | struct _GstStaticPadTemplate { |
168 | const gchar *name_template; |
169 | GstPadDirection direction; |
170 | GstPadPresence presence; |
171 | GstStaticCaps static_caps; |
172 | }; |
173 | |
174 | /** |
175 | * GST_STATIC_PAD_TEMPLATE: |
176 | * @padname: the name template of the pad |
177 | * @dir: the GstPadDirection of the pad |
178 | * @pres: the GstPadPresence of the pad |
179 | * @caps: the GstStaticCaps of the pad |
180 | * |
181 | * Convenience macro to fill the values of a #GstStaticPadTemplate |
182 | * structure. |
183 | * Example: |
184 | * |[<!-- language="C" --> |
185 | * static GstStaticPadTemplate my_src_template = \ |
186 | * GST_STATIC_PAD_TEMPLATE("src", GST_PAD_SRC, GST_PAD_ALWAYS, |
187 | * GST_STATIC_CAPS_ANY); |
188 | * ]| |
189 | */ |
190 | #define GST_STATIC_PAD_TEMPLATE(padname, dir, pres, caps) \ |
191 | { \ |
192 | /* name_template */ padname, \ |
193 | /* direction */ dir, \ |
194 | /* presence */ pres, \ |
195 | /* caps */ caps \ |
196 | } |
197 | |
198 | /* templates and factories */ |
199 | |
200 | GST_API |
201 | GType gst_pad_template_get_type (void); |
202 | |
203 | GST_API |
204 | GType gst_static_pad_template_get_type (void); |
205 | |
206 | GST_API |
207 | GstPadTemplate* gst_pad_template_new (const gchar *name_template, |
208 | GstPadDirection direction, GstPadPresence presence, |
209 | GstCaps *caps) G_GNUC_MALLOC; |
210 | GST_API |
211 | GstPadTemplate* gst_pad_template_new_with_gtype (const gchar *name_template, |
212 | GstPadDirection direction, GstPadPresence presence, |
213 | GstCaps *caps, GType pad_type) G_GNUC_MALLOC; |
214 | GST_API |
215 | GstPadTemplate * gst_static_pad_template_get (GstStaticPadTemplate *pad_template); |
216 | |
217 | GST_API |
218 | GstPadTemplate * gst_pad_template_new_from_static_pad_template_with_gtype ( |
219 | GstStaticPadTemplate * pad_template, |
220 | GType pad_type); |
221 | |
222 | GST_API |
223 | GstCaps* gst_static_pad_template_get_caps (GstStaticPadTemplate *templ); |
224 | |
225 | GST_API |
226 | GstCaps* gst_pad_template_get_caps (GstPadTemplate *templ); |
227 | |
228 | GST_API |
229 | void gst_pad_template_pad_created (GstPadTemplate * templ, GstPad * pad); |
230 | |
231 | #ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC |
232 | G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstPadTemplate, gst_object_unref) |
233 | #endif |
234 | |
235 | G_END_DECLS |
236 | |
237 | #endif /* __GST_PAD_TEMPLATE_H__ */ |
238 | |
239 | |