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