1 /* 2 * This file is part of gtkD. 3 * 4 * gtkD is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU Lesser General Public License 6 * as published by the Free Software Foundation; either version 3 7 * of the License, or (at your option) any later version, with 8 * some exceptions, please read the COPYING file. 9 * 10 * gtkD 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 13 * GNU Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public License 16 * along with gtkD; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA 18 */ 19 20 // generated automatically - do not change 21 // find conversion definition on APILookup.txt 22 // implement new conversion functionalities on the wrap.utils pakage 23 24 25 module gstreamer.PadTemplate; 26 27 private import glib.ConstructionException; 28 private import glib.Str; 29 private import gobject.ObjectG; 30 private import gobject.Signals; 31 private import gstreamer.Caps; 32 private import gstreamer.ObjectGst; 33 private import gstreamer.Pad; 34 private import gstreamerc.gstreamer; 35 public import gstreamerc.gstreamertypes; 36 public import gtkc.gdktypes; 37 38 39 /** 40 * Padtemplates describe the possible media types a pad or an elementfactory can 41 * handle. This allows for both inspection of handled types before loading the 42 * element plugin as well as identifying pads on elements that are not yet 43 * created (request or sometimes pads). 44 * 45 * Pad and PadTemplates have #GstCaps attached to it to describe the media type 46 * they are capable of dealing with. gst_pad_template_get_caps() or 47 * GST_PAD_TEMPLATE_CAPS() are used to get the caps of a padtemplate. It's not 48 * possible to modify the caps of a padtemplate after creation. 49 * 50 * PadTemplates have a #GstPadPresence property which identifies the lifetime 51 * of the pad and that can be retrieved with GST_PAD_TEMPLATE_PRESENCE(). Also 52 * the direction of the pad can be retrieved from the #GstPadTemplate with 53 * GST_PAD_TEMPLATE_DIRECTION(). 54 * 55 * The GST_PAD_TEMPLATE_NAME_TEMPLATE () is important for GST_PAD_REQUEST pads 56 * because it has to be used as the name in the gst_element_get_request_pad() 57 * call to instantiate a pad from this template. 58 * 59 * Padtemplates can be created with gst_pad_template_new() or with 60 * gst_static_pad_template_get (), which creates a #GstPadTemplate from a 61 * #GstStaticPadTemplate that can be filled with the 62 * convenient GST_STATIC_PAD_TEMPLATE() macro. 63 * 64 * A padtemplate can be used to create a pad (see gst_pad_new_from_template() 65 * or gst_pad_new_from_static_template ()) or to add to an element class 66 * (see gst_element_class_add_static_pad_template ()). 67 * 68 * The following code example shows the code to create a pad from a padtemplate. 69 * |[<!-- language="C" --> 70 * GstStaticPadTemplate my_template = 71 * GST_STATIC_PAD_TEMPLATE ( 72 * "sink", // the name of the pad 73 * GST_PAD_SINK, // the direction of the pad 74 * GST_PAD_ALWAYS, // when this pad will be present 75 * GST_STATIC_CAPS ( // the capabilities of the padtemplate 76 * "audio/x-raw, " 77 * "channels = (int) [ 1, 6 ]" 78 * ) 79 * ); 80 * void 81 * my_method (void) 82 * { 83 * GstPad *pad; 84 * pad = gst_pad_new_from_static_template (&my_template, "sink"); 85 * ... 86 * } 87 * ]| 88 * 89 * The following example shows you how to add the padtemplate to an 90 * element class, this is usually done in the class_init of the class: 91 * |[<!-- language="C" --> 92 * static void 93 * my_element_class_init (GstMyElementClass *klass) 94 * { 95 * GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass); 96 * 97 * gst_element_class_add_static_pad_template (gstelement_class, &my_template); 98 * } 99 * ]| 100 */ 101 public class PadTemplate : ObjectGst 102 { 103 /** the main Gtk struct */ 104 protected GstPadTemplate* gstPadTemplate; 105 106 /** Get the main Gtk struct */ 107 public GstPadTemplate* getPadTemplateStruct() 108 { 109 return gstPadTemplate; 110 } 111 112 /** the main Gtk struct as a void* */ 113 protected override void* getStruct() 114 { 115 return cast(void*)gstPadTemplate; 116 } 117 118 protected override void setStruct(GObject* obj) 119 { 120 gstPadTemplate = cast(GstPadTemplate*)obj; 121 super.setStruct(obj); 122 } 123 124 /** 125 * Sets our main struct and passes it to the parent class. 126 */ 127 public this (GstPadTemplate* gstPadTemplate, bool ownedRef = false) 128 { 129 this.gstPadTemplate = gstPadTemplate; 130 super(cast(GstObject*)gstPadTemplate, ownedRef); 131 } 132 133 134 /** */ 135 public static GType getType() 136 { 137 return gst_pad_template_get_type(); 138 } 139 140 /** 141 * Creates a new pad template with a name according to the given template 142 * and with the given arguments. 143 * 144 * Params: 145 * nameTemplate = the name template. 146 * direction = the #GstPadDirection of the template. 147 * presence = the #GstPadPresence of the pad. 148 * caps = a #GstCaps set for the template. 149 * 150 * Return: a new #GstPadTemplate. 151 * 152 * Throws: ConstructionException GTK+ fails to create the object. 153 */ 154 public this(string nameTemplate, GstPadDirection direction, GstPadPresence presence, Caps caps) 155 { 156 auto p = gst_pad_template_new(Str.toStringz(nameTemplate), direction, presence, (caps is null) ? null : caps.getCapsStruct()); 157 158 if(p is null) 159 { 160 throw new ConstructionException("null returned by new"); 161 } 162 163 this(cast(GstPadTemplate*) p); 164 } 165 166 /** 167 * Gets the capabilities of the pad template. 168 * 169 * Return: the #GstCaps of the pad template. 170 * Unref after usage. 171 */ 172 public Caps getCaps() 173 { 174 auto p = gst_pad_template_get_caps(gstPadTemplate); 175 176 if(p is null) 177 { 178 return null; 179 } 180 181 return ObjectG.getDObject!(Caps)(cast(GstCaps*) p, true); 182 } 183 184 /** 185 * Emit the pad-created signal for this template when created by this pad. 186 * 187 * Params: 188 * pad = the #GstPad that created it 189 */ 190 public void padCreated(Pad pad) 191 { 192 gst_pad_template_pad_created(gstPadTemplate, (pad is null) ? null : pad.getPadStruct()); 193 } 194 195 int[string] connectedSignals; 196 197 void delegate(Pad, PadTemplate)[] onPadCreatedListeners; 198 /** 199 * This signal is fired when an element creates a pad from this template. 200 * 201 * Params: 202 * pad = the pad that was created. 203 */ 204 void addOnPadCreated(void delegate(Pad, PadTemplate) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 205 { 206 if ( "pad-created" !in connectedSignals ) 207 { 208 Signals.connectData( 209 this, 210 "pad-created", 211 cast(GCallback)&callBackPadCreated, 212 cast(void*)this, 213 null, 214 connectFlags); 215 connectedSignals["pad-created"] = 1; 216 } 217 onPadCreatedListeners ~= dlg; 218 } 219 extern(C) static void callBackPadCreated(GstPadTemplate* padtemplateStruct, GstPad* pad, PadTemplate _padtemplate) 220 { 221 foreach ( void delegate(Pad, PadTemplate) dlg; _padtemplate.onPadCreatedListeners ) 222 { 223 dlg(ObjectG.getDObject!(Pad)(pad), _padtemplate); 224 } 225 } 226 }