## GstPadTemplate

GstPadTemplate — Describe the media type of a pad.

## Synopsis

    #include <gst/gst.h>

                        GstStaticPadTemplate;
    #define             GST_STATIC_PAD_TEMPLATE             (padname, dir, pres, caps)
    GstPadTemplate*     gst_static_pad_template_get         (GstStaticPadTemplate *pad_template);
    GstCaps*            gst_static_pad_template_get_caps    (GstStaticPadTemplate *templ);
                        GstPadTemplate;
    enum                GstPadTemplateFlags;
    enum                GstPadPresence;
    #define             GST_PAD_TEMPLATE_NAME_TEMPLATE      (templ)
    #define             GST_PAD_TEMPLATE_DIRECTION          (templ)
    #define             GST_PAD_TEMPLATE_PRESENCE           (templ)
    #define             GST_PAD_TEMPLATE_CAPS               (templ)
    #define             GST_PAD_TEMPLATE_IS_FIXED           (templ)
    GstPadTemplate*     gst_pad_template_new                (const gchar *name_template,
                                                             GstPadDirection direction,
                                                             GstPadPresence presence,
                                                             GstCaps *caps);
    GstCaps*            gst_pad_template_get_caps           (GstPadTemplate *templ);

## Object Hierarchy

      GObject
       +----GstObject
             +----GstPadTemplate

## Signals

      "pad-created"                                    : Run Last

## Description

Padtemplates describe the possible media types a pad or an elementfactory can handle. This allows for both inspection of handled types before loading the element plugin as well as identifying pads on elements that are not yet created (request or sometimes pads).

Pad and PadTemplates have GstCaps attached to it to describe the media type they are capable of dealing with. `gst_pad_template_get_caps()` or `GST_PAD_TEMPLATE_CAPS()` are used to get the caps of a padtemplate. It's not possible to modify the caps of a padtemplate after creation.

PadTemplates have a GstPadPresence property which identifies the lifetime of the pad and that can be retrieved with `GST_PAD_TEMPLATE_PRESENCE()`. Also the direction of the pad can be retrieved from the GstPadTemplate with `GST_PAD_TEMPLATE_DIRECTION()`.

The `GST_PAD_TEMPLATE_NAME_TEMPLATE()` is important for GST_PAD_REQUEST pads because it has to be used as the name in the `gst_element_request_pad_by_name()` call to instantiate a pad from this template.

Padtemplates can be created with `gst_pad_template_new()` or with `gst_static_pad_template_get()`, which creates a GstPadTemplate from a GstStaticPadTemplate that can be filled with the convenient `GST_STATIC_PAD_TEMPLATE()` macro.

A padtemplate can be used to create a pad (see `gst_pad_new_from_template()` or `gst_pad_new_from_static_template()`) or to add to an element class (see `gst_element_class_add_pad_template()`).

The following code example shows the code to create a pad from a padtemplate.

Example 12. Create a pad from a padtemplate

      GstStaticPadTemplate my_template =
      GST_STATIC_PAD_TEMPLATE (
        "sink",          // the name of the pad
        GST_PAD_SINK,    // the direction of the pad
        GST_PAD_ALWAYS,  // when this pad will be present
        GST_STATIC_CAPS (        // the capabilities of the padtemplate
          "audio/x-raw-int, "
            "channels = (int) [ 1, 6 ]"
        )
      )
      void
      my_method (void)
      {
        GstPad *pad;
        pad = gst_pad_new_from_static_template (&my_template, "sink");
        ...
      }

The following example shows you how to add the padtemplate to an element class, this is usually done in the base_init of the class:

      static void
      my_element_base_init (gpointer g_class)
      {
        GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);

        gst_element_class_add_pad_template (gstelement_class,
            gst_static_pad_template_get (&my_template));
      }

Last reviewed on 2006-02-14 (0.10.3)

## Details

### GstStaticPadTemplate

    typedef struct {
      gchar           *name_template;
      GstPadDirection  direction;
      GstPadPresence   presence;
      GstStaticCaps   static_caps;
    } GstStaticPadTemplate;

Structure describing the GstStaticPadTemplate.

gchar *`name_template`; | the name of the template
GstPadDirection `direction`; | the direction of the template
GstPadPresence `presence`; | the presence of the template
GstStaticCaps `static_caps`; | the caps of the template.

### GST_STATIC_PAD_TEMPLATE()

    #define             GST_STATIC_PAD_TEMPLATE(padname, dir, pres, caps)

Convenience macro to fill the values of a GstStaticPadTemplate structure.

`padname` : | the name template of pad
`dir` : | the GstPadDirection of the pad
`pres` : | the GstPadPresence of the pad
`caps` : | the GstStaticCaps of the pad

### gst_static_pad_template_get ()

    GstPadTemplate*     gst_static_pad_template_get         (GstStaticPadTemplate *pad_template);

Converts a GstStaticPadTemplate into a GstPadTemplate.

`pad_template` : | the static pad template
Returns : | a new GstPadTemplate.

### gst_static_pad_template_get_caps ()

    GstCaps*            gst_static_pad_template_get_caps    (GstStaticPadTemplate *templ);

Gets the capabilities of the static pad template.

`templ` : | a GstStaticPadTemplate to get capabilities of.
Returns : | the GstCaps of the static pad template. If you need to keep a reference to the caps, take a ref (see `gst_caps_ref()`).

### GstPadTemplate

    typedef struct _GstPadTemplate GstPadTemplate;

The padtemplate object.

### enum GstPadTemplateFlags

    typedef enum {
      GST_PAD_TEMPLATE_FIXED        = (GST_OBJECT_FLAG_LAST << 0),
      /* padding */
      GST_PAD_TEMPLATE_FLAG_LAST    = (GST_OBJECT_FLAG_LAST << 4)
    } GstPadTemplateFlags;

Flags for the padtemplate

`GST_PAD_TEMPLATE_FIXED` | the padtemplate has no variable properties
`GST_PAD_TEMPLATE_FLAG_LAST` | first flag that can be used by subclasses.

### enum GstPadPresence

    typedef enum {
      GST_PAD_ALWAYS,
      GST_PAD_SOMETIMES,
      GST_PAD_REQUEST
    } GstPadPresence;

Indicates when this pad will become available.

`GST_PAD_ALWAYS` | the pad is always available
`GST_PAD_SOMETIMES` | the pad will become available depending on the media stream
`GST_PAD_REQUEST` | the pad is only available on request with `gst_element_request_pad_by_name()` or `gst_element_request_compatible_pad()`.

### GST_PAD_TEMPLATE_NAME_TEMPLATE()

    #define GST_PAD_TEMPLATE_NAME_TEMPLATE(templ)	(((GstPadTemplate *)(templ))->name_template)

Get the nametemplate of the padtemplate.

`templ` : | the template to query

### GST_PAD_TEMPLATE_DIRECTION()

    #define GST_PAD_TEMPLATE_DIRECTION(templ)	(((GstPadTemplate *)(templ))->direction)

Get the GstPadDirection of the padtemplate.

`templ` : | the template to query

### GST_PAD_TEMPLATE_PRESENCE()

    #define GST_PAD_TEMPLATE_PRESENCE(templ)	(((GstPadTemplate *)(templ))->presence)

Get the GstPadPresence of the padtemplate.

`templ` : | the template to query

### GST_PAD_TEMPLATE_CAPS()

    #define GST_PAD_TEMPLATE_CAPS(templ)		(((GstPadTemplate *)(templ))->caps)

Get a handle to the padtemplate GstCaps

`templ` : | the template to query

### GST_PAD_TEMPLATE_IS_FIXED()

    #define GST_PAD_TEMPLATE_IS_FIXED(templ)	(GST_OBJECT_FLAG_IS_SET(templ, GST_PAD_TEMPLATE_FIXED))

Check if the properties of the padtemplate are fixed

`templ` : | the template to query

### gst_pad_template_new ()

    GstPadTemplate*     gst_pad_template_new                (const gchar *name_template,
                                                             GstPadDirection direction,
                                                             GstPadPresence presence,
                                                             GstCaps *caps);

Creates a new pad template with a name according to the given template and with the given arguments. This functions takes ownership of the provided caps, so be sure to not use them afterwards.

`name_template` : | the name template.
`direction` : | the GstPadDirection of the template.
`presence` : | the GstPadPresence of the pad.
`caps` : | a GstCaps set for the template. The caps are taken ownership of.
Returns : | a new GstPadTemplate.

### gst_pad_template_get_caps ()

    GstCaps*            gst_pad_template_get_caps           (GstPadTemplate *templ);

Gets the capabilities of the pad template.

`templ` : | a GstPadTemplate to get capabilities of.
Returns : | the GstCaps of the pad template. If you need to keep a reference to the caps, take a ref (see `gst_caps_ref()`).

## Signal Details

### The "pad-created" signal

    void                user_function                      (GstPadTemplate *pad_template,
                                                            GstPad         *pad,
                                                            gpointer        user_data)         : Run Last

This signal is fired when an element creates a pad from this template.

`pad_template` : | the object which received the signal.
`pad` : | the pad that was created.
`user_data` : | user data set when the signal handler was connected.

## See Also

GstPad, GstElementFactory