1 | /* GStreamer |
2 | * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu> |
3 | * 2000 Wim Taymans <wim.taymans@chello.be> |
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 | GstCaps *documentation_caps; |
145 | } abi; |
146 | } ABI; |
147 | }; |
148 | |
149 | struct _GstPadTemplateClass { |
150 | GstObjectClass parent_class; |
151 | |
152 | /* signal callbacks */ |
153 | void (*pad_created) (GstPadTemplate *templ, GstPad *pad); |
154 | |
155 | /*< private >*/ |
156 | gpointer _gst_reserved[GST_PADDING]; |
157 | }; |
158 | |
159 | /** |
160 | * GstStaticPadTemplate: |
161 | * @name_template: the name of the template |
162 | * @direction: the direction of the template |
163 | * @presence: the presence of the template |
164 | * @static_caps: the caps of the template. |
165 | * |
166 | * Structure describing the #GstStaticPadTemplate. |
167 | */ |
168 | struct _GstStaticPadTemplate { |
169 | const gchar *name_template; |
170 | GstPadDirection direction; |
171 | GstPadPresence presence; |
172 | GstStaticCaps static_caps; |
173 | }; |
174 | |
175 | /** |
176 | * GST_STATIC_PAD_TEMPLATE: |
177 | * @padname: the name template of the pad |
178 | * @dir: the GstPadDirection of the pad |
179 | * @pres: the GstPadPresence of the pad |
180 | * @caps: the GstStaticCaps of the pad |
181 | * |
182 | * Convenience macro to fill the values of a #GstStaticPadTemplate |
183 | * structure. |
184 | * Example: |
185 | * |[<!-- language="C" --> |
186 | * static GstStaticPadTemplate my_src_template = \ |
187 | * GST_STATIC_PAD_TEMPLATE("src", GST_PAD_SRC, GST_PAD_ALWAYS, |
188 | * GST_STATIC_CAPS_ANY); |
189 | * ]| |
190 | */ |
191 | #define GST_STATIC_PAD_TEMPLATE(padname, dir, pres, caps) \ |
192 | { \ |
193 | /* name_template */ padname, \ |
194 | /* direction */ dir, \ |
195 | /* presence */ pres, \ |
196 | /* caps */ caps \ |
197 | } |
198 | |
199 | /* templates and factories */ |
200 | |
201 | GST_API |
202 | GType gst_pad_template_get_type (void); |
203 | |
204 | /** |
205 | * gst_static_pad_template_get_type: (attributes doc.skip=true) |
206 | */ |
207 | GST_API |
208 | GType gst_static_pad_template_get_type (void); |
209 | |
210 | GST_API |
211 | GstPadTemplate* gst_pad_template_new (const gchar *name_template, |
212 | GstPadDirection direction, GstPadPresence presence, |
213 | GstCaps *caps) G_GNUC_MALLOC; |
214 | GST_API |
215 | GstPadTemplate* gst_pad_template_new_with_gtype (const gchar *name_template, |
216 | GstPadDirection direction, GstPadPresence presence, |
217 | GstCaps *caps, GType pad_type) G_GNUC_MALLOC; |
218 | GST_API |
219 | GstPadTemplate * gst_static_pad_template_get (GstStaticPadTemplate *pad_template); |
220 | |
221 | GST_API |
222 | GstPadTemplate * gst_pad_template_new_from_static_pad_template_with_gtype ( |
223 | GstStaticPadTemplate * pad_template, |
224 | GType pad_type); |
225 | |
226 | GST_API |
227 | GstCaps* gst_static_pad_template_get_caps (GstStaticPadTemplate *templ); |
228 | |
229 | GST_API |
230 | GstCaps* gst_pad_template_get_caps (GstPadTemplate *templ); |
231 | |
232 | GST_API |
233 | void gst_pad_template_set_documentation_caps (GstPadTemplate *templ, GstCaps *caps); |
234 | |
235 | GST_API |
236 | GstCaps* gst_pad_template_get_documentation_caps (GstPadTemplate *templ); |
237 | |
238 | GST_API |
239 | void gst_pad_template_pad_created (GstPadTemplate * templ, GstPad * pad); |
240 | |
241 | G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstPadTemplate, gst_object_unref) |
242 | |
243 | G_END_DECLS |
244 | |
245 | #endif /* __GST_PAD_TEMPLATE_H__ */ |
246 | |
247 | |