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 } 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