<?xml version="1.0"?>
<!-- This file was automatically generated from C sources - DO NOT EDIT!
To affect the contents of this file, edit the original C definitions,
and/or use gtk-doc annotations.  -->
<repository version="1.0"
            xmlns="http://www.gtk.org/introspection/core/1.0"
            xmlns:c="http://www.gtk.org/introspection/c/1.0"
            xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
  <include name="GLib" version="2.0"/>
  <include name="GModule" version="2.0"/>
  <include name="GObject" version="2.0"/>
  <include name="libxml2" version="2.0"/>
  <package name="glib-2.0"/>
  <package name="gmodule-no-export-2.0"/>
  <package name="gobject-2.0"/>
  <package name="gthread-2.0"/>
  <package name="libxml-2.0"/>
  <c:include name="gst/gst.h"/>
  <namespace name="Gst"
             version="0.10"
             shared-library="libgstreamer-0.10.so.0"
             c:prefix="Gst">
    <alias name="ClockID" target="any" c:type="GstClockID"/>
    <alias name="ClockTime" target="uint64" c:type="GstClockTime"/>
    <alias name="ClockTimeDiff" target="int64" c:type="GstClockTimeDiff"/>
    <enumeration name="ActivateMode"
                 doc="The status of a GstPad. After activating a pad, which usually happens when the
parent element goes from READY to PAUSED, the GstActivateMode defines if the
pad operates in push or pull mode."
                 c:type="GstActivateMode">
      <member name="none" value="0" c:identifier="GST_ACTIVATE_NONE"/>
      <member name="push" value="1" c:identifier="GST_ACTIVATE_PUSH"/>
      <member name="pull" value="2" c:identifier="GST_ACTIVATE_PULL"/>
    </enumeration>
    <record name="AllocTrace"
            c:type="GstAllocTrace"
            doc="The main tracing object">
      <field name="name" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="flags" writable="1">
        <type name="int" c:type="gint"/>
      </field>
      <field name="live" writable="1">
        <type name="int" c:type="gint"/>
      </field>
      <field name="mem_live" writable="1">
        <type name="GLib.SList" c:type="GSList*"/>
      </field>
      <method name="print"
              c:identifier="gst_alloc_trace_print"
              doc="Print the status of the given GstAllocTrace.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="set_flags"
              c:identifier="gst_alloc_trace_set_flags"
              doc="Enable the given features on the given GstAllocTrace object.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="flags" transfer-ownership="none">
            <type name="AllocTraceFlags" c:type="GstAllocTraceFlags"/>
          </parameter>
        </parameters>
      </method>
    </record>
    <bitfield name="AllocTraceFlags"
              doc="Flags indicating which tracing feature to enable."
              c:type="GstAllocTraceFlags">
      <member name="live" value="1" c:identifier="GST_ALLOC_TRACE_LIVE"/>
      <member name="mem_live"
              value="2"
              c:identifier="GST_ALLOC_TRACE_MEM_LIVE"/>
    </bitfield>
    <bitfield name="AssocFlags"
              doc="Flags for an association entry."
              c:type="GstAssocFlags">
      <member name="none" value="0" c:identifier="GST_ASSOCIATION_FLAG_NONE"/>
      <member name="key_unit"
              value="1"
              c:identifier="GST_ASSOCIATION_FLAG_KEY_UNIT"/>
      <member name="delta_unit"
              value="2"
              c:identifier="GST_ASSOCIATION_FLAG_DELTA_UNIT"/>
      <member name="last"
              value="256"
              c:identifier="GST_ASSOCIATION_FLAG_LAST"/>
    </bitfield>
    <constant name="BUFFER_COPY_ALL" value="0">
      <type name="int"/>
    </constant>
    <constant name="BUFFER_OFFSET_NONE" value="-1">
      <type name="int"/>
    </constant>
    <constant name="BUFFER_TRACE_NAME" value="GstBuffer">
      <type name="utf8"/>
    </constant>
    <class name="Bin"
           c:type="GstBin"
           doc="The GstBin base class. Subclasses can access these fields provided
the LOCK is taken."
           parent="Element"
           glib:type-name="GstBin"
           glib:get-type="gst_bin_get_type"
           glib:type-struct="BinClass">
      <implements name="ChildProxy"/>
      <constructor name="new"
                   c:identifier="gst_bin_new"
                   doc="Creates a new bin with the given name.">
        <return-value transfer-ownership="full">
          <type name="Bin" c:type="GstElement*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <virtual-method name="add_element">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="element" transfer-ownership="none">
            <type name="Element" c:type="GstElement*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="remove_element">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="element" transfer-ownership="none">
            <type name="Element" c:type="GstElement*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="handle_message">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="message" transfer-ownership="none">
            <type name="Message" c:type="GstMessage*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="add"
              c:identifier="gst_bin_add"
              doc="Adds the given element to the bin.  Sets the element&apos;s parent, and thus
takes ownership of the element. An element can only be added to one bin.
If the element&apos;s pads are linked to other pads, the pads will be unlinked
before the element is added to the bin.
MT safe.
the bin does not want to accept the element.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="element" transfer-ownership="none">
            <type name="Element" c:type="GstElement*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove"
              c:identifier="gst_bin_remove"
              doc="Removes the element from the bin, unparenting it as well.
Unparenting the element means that the element will be dereferenced,
so if the bin holds the only reference to the element, the element
will be freed in the process of removing it from the bin.  If you
want the element to still exist after removing, you need to call
gst_object_ref() before removing it from the bin.
If the element&apos;s pads are linked to other pads, the pads will be unlinked
before the element is removed from the bin.
MT safe.
the bin does not want to remove the element.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="element" transfer-ownership="none">
            <type name="Element" c:type="GstElement*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_by_name"
              c:identifier="gst_bin_get_by_name"
              doc="Gets the element with the given name from a bin. This
function recurses into child bins.
Returns NULL if no element with the given name is found in the bin.
MT safe.  Caller owns returned reference.">
        <return-value transfer-ownership="full">
          <type name="Element" c:type="GstElement*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_by_name_recurse_up"
              c:identifier="gst_bin_get_by_name_recurse_up"
              doc="Gets the element with the given name from this bin. If the
element is not found, a recursion is performed on the parent bin.
Returns NULL if:
- no element with the given name is found in the bin
MT safe.  Caller owns returned reference.">
        <return-value transfer-ownership="full">
          <type name="Element" c:type="GstElement*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_by_interface"
              c:identifier="gst_bin_get_by_interface"
              doc="Looks for an element inside the bin that implements the given
interface. If such an element is found, it returns the element.
You can cast this element to the given interface afterwards.  If you want
all elements that implement the interface, use
gst_bin_iterate_all_by_interface(). This function recurses into child bins.
MT safe.  Caller owns returned reference.">
        <return-value transfer-ownership="full">
          <type name="Element" c:type="GstElement*"/>
        </return-value>
        <parameters>
          <parameter name="iface" transfer-ownership="none">
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </method>
      <method name="iterate_elements"
              c:identifier="gst_bin_iterate_elements"
              doc="Gets an iterator for the elements in this bin.
Each element yielded by the iterator will have its refcount increased, so
unref after use.
MT safe.  Caller owns returned value.">
        <return-value transfer-ownership="full">
          <type name="Iterator" c:type="GstIterator*"/>
        </return-value>
      </method>
      <method name="iterate_sorted"
              c:identifier="gst_bin_iterate_sorted"
              doc="Gets an iterator for the elements in this bin in topologically
sorted order. This means that the elements are returned from
the most downstream elements (sinks) to the sources.
This function is used internally to perform the state changes
of the bin elements and for clock selection.
Each element yielded by the iterator will have its refcount increased, so
unref after use.
MT safe.  Caller owns returned value.">
        <return-value transfer-ownership="full">
          <type name="Iterator" c:type="GstIterator*"/>
        </return-value>
      </method>
      <method name="iterate_recurse"
              c:identifier="gst_bin_iterate_recurse"
              doc="Gets an iterator for the elements in this bin.
This iterator recurses into GstBin children.
Each element yielded by the iterator will have its refcount increased, so
unref after use.
MT safe.  Caller owns returned value.">
        <return-value transfer-ownership="full">
          <type name="Iterator" c:type="GstIterator*"/>
        </return-value>
      </method>
      <method name="iterate_sinks"
              c:identifier="gst_bin_iterate_sinks"
              doc="Gets an iterator for all elements in the bin that have the
#GST_ELEMENT_IS_SINK flag set.
Each element yielded by the iterator will have its refcount increased, so
unref after use.
MT safe.  Caller owns returned value.">
        <return-value transfer-ownership="full">
          <type name="Iterator" c:type="GstIterator*"/>
        </return-value>
      </method>
      <method name="iterate_sources"
              c:identifier="gst_bin_iterate_sources"
              doc="Gets an iterator for all elements in the bin that have no sinkpads and have
the #GST_ELEMENT_IS_SINK flag unset.
Each element yielded by the iterator will have its refcount increased, so
unref after use.
MT safe.  Caller owns returned value.">
        <return-value transfer-ownership="full">
          <type name="Iterator" c:type="GstIterator*"/>
        </return-value>
      </method>
      <method name="iterate_all_by_interface"
              c:identifier="gst_bin_iterate_all_by_interface"
              doc="Looks for all elements inside the bin that implements the given
interface. You can safely cast all returned elements to the given interface.
The function recurses inside child bins. The iterator will yield a series
of #GstElement that should be unreffed after use.
Each element yielded by the iterator will have its refcount increased, so
unref after use.
MT safe.  Caller owns returned value.
implementing the given interface, or NULL">
        <return-value transfer-ownership="full">
          <type name="Iterator" c:type="GstIterator*"/>
        </return-value>
        <parameters>
          <parameter name="iface" transfer-ownership="none">
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </method>
      <method name="recalculate_latency"
              c:identifier="gst_bin_recalculate_latency"
              doc="Query @bin for the current latency using and reconfigures this latency to all the
elements with a LATENCY event.
This method is typically called on the pipeline when a #GST_MESSAGE_LATENCY
is posted on the bus.
This function simply emits the &apos;do-latency&apos; signal so any custom latency
calculations will be performed."
              version="0.10.22.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="add_many"
              c:identifier="gst_bin_add_many"
              doc="Adds a NULL-terminated list of elements to a bin.  This function is
equivalent to calling gst_bin_add() for each member of the list. The return
value of each gst_bin_add() is ignored.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="element_1" transfer-ownership="none">
            <type name="Element" c:type="GstElement*"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="remove_many"
              c:identifier="gst_bin_remove_many"
              doc="Remove a list of elements from a bin. This function is equivalent
to calling gst_bin_remove() with each member of the list.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="element_1" transfer-ownership="none">
            <type name="Element" c:type="GstElement*"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="find_unlinked_pad"
              c:identifier="gst_bin_find_unlinked_pad"
              doc="Recursively looks for elements with an unlinked pad of the given
direction within the specified bin and returns an unlinked pad
if one is found, or NULL otherwise. If a pad is found, the caller
owns a reference to it and should use gst_object_unref() on the
pad when it is not needed any longer."
              version="0.10.20">
        <return-value transfer-ownership="full">
          <type name="Pad" c:type="GstPad*"/>
        </return-value>
        <parameters>
          <parameter name="direction" transfer-ownership="none">
            <type name="PadDirection" c:type="GstPadDirection"/>
          </parameter>
        </parameters>
      </method>
      <method name="find_unconnected_pad"
              c:identifier="gst_bin_find_unconnected_pad"
              doc="Recursively looks for elements with an unlinked pad of the given
direction within the specified bin and returns an unlinked pad
if one is found, or NULL otherwise. If a pad is found, the caller
owns a reference to it and should use gst_object_unref() on the
pad when it is not needed any longer."
              version="0.10.3"
              deprecated="use gst_bin_find_unlinked_pad() instead.">
        <return-value transfer-ownership="full">
          <type name="Pad" c:type="GstPad*"/>
        </return-value>
        <parameters>
          <parameter name="direction" transfer-ownership="none">
            <type name="PadDirection" c:type="GstPadDirection"/>
          </parameter>
        </parameters>
      </method>
      <property name="async-handling" writable="1">
        <type name="boolean" c:type="gboolean"/>
      </property>
      <field name="element">
        <type name="Element" c:type="GstElement"/>
      </field>
      <field name="numchildren">
        <type name="int" c:type="gint"/>
      </field>
      <field name="children">
        <type name="GLib.List" c:type="GList*"/>
      </field>
      <field name="children_cookie">
        <type name="uint32" c:type="guint32"/>
      </field>
      <field name="child_bus">
        <type name="Bus" c:type="GstBus*"/>
      </field>
      <field name="messages">
        <type name="GLib.List" c:type="GList*"/>
      </field>
      <field name="polling">
        <type name="boolean" c:type="gboolean"/>
      </field>
      <field name="state_dirty">
        <type name="boolean" c:type="gboolean"/>
      </field>
      <field name="clock_dirty">
        <type name="boolean" c:type="gboolean"/>
      </field>
      <field name="provided_clock">
        <type name="Clock" c:type="GstClock*"/>
      </field>
      <field name="clock_provider">
        <type name="Element" c:type="GstElement*"/>
      </field>
      <field name="priv">
        <type name="BinPrivate" c:type="GstBinPrivate*"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="3">
          <type name="any"/>
        </array>
      </field>
      <glib:signal name="do-latency"
                   doc="Will be emitted when the bin needs to perform latency calculations. This
signal is only emited for toplevel bins or when async-handling is
enabled.
Only one signal handler is invoked. If no signals are connected, the
default handler is invoked, which will query and distribute the lowest
possible latency to all sinks.
Connect to this signal if the default latency calculations are not
sufficient, like when you need different latencies for different sinks in
the same pipeline."
                   version="0.10.22">
        <return-value transfer-ownership="full">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </glib:signal>
      <glib:signal name="element-added"
                   doc="Will be emitted after the element was added to the bin.">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="element" transfer-ownership="none">
            <type name="Element" c:type="GstElement"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="element-removed"
                   doc="Will be emitted after the element was removed from the bin.">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="element" transfer-ownership="none">
            <type name="Element" c:type="GstElement"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="BinClass"
            c:type="GstBinClass"
            glib:is-gtype-struct-for="Bin"
            doc="Subclasses can override the @add_element and @remove_element to
update the list of children in the bin.
The @handle_message method can be overridden to implement custom
message handling.  @handle_message takes ownership of the message, just like
#gst_element_post_message.">
      <field name="parent_class">
        <type name="ElementClass" c:type="GstElementClass"/>
      </field>
      <field name="pool">
        <type name="GLib.ThreadPool" c:type="GThreadPool*"/>
      </field>
      <field name="element_added">
        <callback name="element_added" c:type="element_added">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="bin" transfer-ownership="none">
              <type name="Bin" c:type="GstBin*"/>
            </parameter>
            <parameter name="child" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="element_removed">
        <callback name="element_removed" c:type="element_removed">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="bin" transfer-ownership="none">
              <type name="Bin" c:type="GstBin*"/>
            </parameter>
            <parameter name="child" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="add_element">
        <callback name="add_element" c:type="add_element">
          <return-value transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="bin" transfer-ownership="none">
              <type name="Bin" c:type="GstBin*"/>
            </parameter>
            <parameter name="element" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="remove_element">
        <callback name="remove_element" c:type="remove_element">
          <return-value transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="bin" transfer-ownership="none">
              <type name="Bin" c:type="GstBin*"/>
            </parameter>
            <parameter name="element" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="handle_message">
        <callback name="handle_message" c:type="handle_message">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="bin" transfer-ownership="none">
              <type name="Bin" c:type="GstBin*"/>
            </parameter>
            <parameter name="message" transfer-ownership="none">
              <type name="Message" c:type="GstMessage*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="do_latency">
        <callback name="do_latency" c:type="do_latency">
          <return-value transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="bin" transfer-ownership="none">
              <type name="Bin" c:type="GstBin*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="3">
          <type name="any"/>
        </array>
      </field>
    </record>
    <bitfield name="BinFlags"
              doc="GstBinFlags are a set of flags specific to bins. Most are set/used
internally. They can be checked using the GST_OBJECT_FLAG_IS_SET () macro,
and (un)set using GST_OBJECT_FLAG_SET () and GST_OBJECT_FLAG_UNSET ()."
              c:type="GstBinFlags">
      <member name="bin_flag_last"
              value="33554432"
              c:identifier="GST_BIN_FLAG_LAST"/>
    </bitfield>
    <record name="BinPrivate" c:type="GstBinPrivate">
    </record>
    <record name="Buffer"
            c:type="GstBuffer"
            doc="The structure of a #GstBuffer. Use the associated macros to access the public
variables.">
      <field name="mini_object" writable="1">
        <type name="MiniObject" c:type="GstMiniObject"/>
      </field>
      <field name="data" writable="1">
        <type name="any" c:type="guint8*"/>
      </field>
      <field name="size" writable="1">
        <type name="uint" c:type="guint"/>
      </field>
      <field name="timestamp" writable="1">
        <type name="ClockTime" c:type="GstClockTime"/>
      </field>
      <field name="duration" writable="1">
        <type name="ClockTime" c:type="GstClockTime"/>
      </field>
      <field name="caps" writable="1">
        <type name="Caps" c:type="GstCaps*"/>
      </field>
      <field name="offset" writable="1">
        <type name="uint64" c:type="guint64"/>
      </field>
      <field name="offset_end" writable="1">
        <type name="uint64" c:type="guint64"/>
      </field>
      <field name="malloc_data" writable="1">
        <type name="any" c:type="guint8*"/>
      </field>
      <field name="free_func" writable="1">
        <type name="GLib.FreeFunc" c:type="GFreeFunc"/>
      </field>
      <field name="parent" writable="1">
        <type name="Buffer" c:type="GstBuffer*"/>
      </field>
      <field name="_gst_reserved" writable="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="2">
          <type name="any"/>
        </array>
      </field>
      <constructor name="new"
                   c:identifier="gst_buffer_new"
                   doc="Creates a newly allocated buffer without any data.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Buffer" c:type="GstBuffer*"/>
        </return-value>
      </constructor>
      <constructor name="new_and_alloc"
                   c:identifier="gst_buffer_new_and_alloc"
                   doc="Creates a newly allocated buffer with data of the given size.
The buffer memory is not cleared. If the requested amount of
memory can&apos;t be allocated, the program will abort. Use
gst_buffer_try_new_and_alloc() if you want to handle this case
gracefully or have gotten the size to allocate from an untrusted
source such as a media stream.
Note that when @size == 0, the buffer data pointer will be NULL.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Buffer" c:type="GstBuffer*"/>
        </return-value>
        <parameters>
          <parameter name="size" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="copy_metadata"
              c:identifier="gst_buffer_copy_metadata"
              doc="Copies the metadata from @src into @dest. The data, size and mallocdata
fields are not copied.
all the metadata fields.
This function is typically called from a custom buffer copy function after
creating @dest and setting the data, size, mallocdata."
              version="0.10.13">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Buffer" c:type="GstBuffer*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <type name="BufferCopyFlags" c:type="GstBufferCopyFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_metadata_writable"
              c:identifier="gst_buffer_is_metadata_writable"
              doc="Similar to gst_buffer_is_writable, but this only ensures that the
refcount of the buffer is 1, indicating that the caller is the sole
owner and can change the buffer metadata, such as caps and timestamps.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="make_metadata_writable"
              c:identifier="gst_buffer_make_metadata_writable"
              doc="Similar to gst_buffer_make_writable, but does not ensure that the buffer
data array is writable. Instead, this just ensures that the returned buffer
is solely owned by the caller, by creating a subbuffer of the original
buffer if necessary.
After calling this function, @buf should not be referenced anymore. The
result of this function has guaranteed writable metadata.">
        <return-value transfer-ownership="full">
          <type name="Buffer" c:type="GstBuffer*"/>
        </return-value>
      </method>
      <method name="get_caps"
              c:identifier="gst_buffer_get_caps"
              doc="Gets the media type of the buffer. This can be NULL if there
is no media type attached to this buffer.
Returns NULL if there were no caps on this buffer.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </method>
      <method name="set_caps"
              c:identifier="gst_buffer_set_caps"
              doc="Sets the media type on the buffer. The refcount of the caps will
be increased and any previous caps on the buffer will be
unreffed.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="caps" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_sub"
              c:identifier="gst_buffer_create_sub"
              doc="Creates a sub-buffer from @parent at @offset and @size.
This sub-buffer uses the actual memory space of the parent buffer.
This function will copy the offset and timestamp fields when the
offset is 0. If not, they will be set to #GST_CLOCK_TIME_NONE and
#GST_BUFFER_OFFSET_NONE.
If @offset equals 0 and @size equals the total size of @buffer, the
duration and offset end fields are also copied. If not they will be set
to #GST_CLOCK_TIME_NONE and #GST_BUFFER_OFFSET_NONE.
MT safe.
Returns NULL if the arguments were invalid.">
        <return-value transfer-ownership="full">
          <type name="Buffer" c:type="GstBuffer*"/>
        </return-value>
        <parameters>
          <parameter name="offset" transfer-ownership="none" doc=" begins.">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_span_fast"
              c:identifier="gst_buffer_is_span_fast"
              doc="Determines whether a gst_buffer_span() can be done without copying
the contents, that is, whether the data areas are contiguous sub-buffers of
the same buffer.
MT safe.
FALSE if a copy would be required.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="buf2" transfer-ownership="none">
            <type name="Buffer" c:type="GstBuffer*"/>
          </parameter>
        </parameters>
      </method>
      <method name="span"
              c:identifier="gst_buffer_span"
              doc="Creates a new buffer that consists of part of buf1 and buf2.
Logically, buf1 and buf2 are concatenated into a single larger
buffer, and a new buffer is created at the given offset inside
this space, with a given length.
If the two source buffers are children of the same larger buffer,
and are contiguous, the new buffer will be a child of the shared
parent, and thus no copying is necessary. you can use
gst_buffer_is_span_fast() to determine if a memcpy will be needed.
MT safe.
Returns NULL if the arguments are invalid.">
        <return-value transfer-ownership="full">
          <type name="Buffer" c:type="GstBuffer*"/>
        </return-value>
        <parameters>
          <parameter name="offset"
                     transfer-ownership="none"
                     doc=" buffer should start.">
            <type name="uint32" c:type="guint32"/>
          </parameter>
          <parameter name="buf2" transfer-ownership="none">
            <type name="Buffer" c:type="GstBuffer*"/>
          </parameter>
          <parameter name="len" transfer-ownership="none">
            <type name="uint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </method>
      <method name="merge"
              c:identifier="gst_buffer_merge"
              doc="Create a new buffer that is the concatenation of the two source
buffers.  The original source buffers will not be modified or
unref&apos;d.  Make sure you unref the source buffers if they are not used
anymore afterwards.
If the buffers point to contiguous areas of memory, the buffer
is created without copying the data.">
        <return-value transfer-ownership="full">
          <type name="Buffer" c:type="GstBuffer*"/>
        </return-value>
        <parameters>
          <parameter name="buf2" transfer-ownership="none">
            <type name="Buffer" c:type="GstBuffer*"/>
          </parameter>
        </parameters>
      </method>
      <method name="join"
              c:identifier="gst_buffer_join"
              doc="Create a new buffer that is the concatenation of the two source
buffers, and unrefs the original source buffers.
If the buffers point to contiguous areas of memory, the buffer
is created without copying the data.
This is a convenience function for C programmers. See also
gst_buffer_merge(), which does the same thing without
unreffing the input parameters. Language bindings without
explicit reference counting should not wrap this function.">
        <return-value transfer-ownership="full">
          <type name="Buffer" c:type="GstBuffer*"/>
        </return-value>
        <parameters>
          <parameter name="buf2" transfer-ownership="none">
            <type name="Buffer" c:type="GstBuffer*"/>
          </parameter>
        </parameters>
      </method>
      <method name="stamp"
              c:identifier="gst_buffer_stamp"
              doc="Copies additional information (the timestamp, duration, and offset start
and end) from one buffer to the other.
This function does not copy any buffer flags or caps and is equivalent to
gst_buffer_copy_metadata(@dest, @src, GST_BUFFER_COPY_TIMESTAMPS).
control."
              deprecated="use gst_buffer_copy_metadata() instead, it provides more">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Buffer" c:type="GstBuffer*"/>
          </parameter>
        </parameters>
      </method>
    </record>
    <record name="BufferClass" c:type="GstBufferClass">
      <field name="mini_object_class" writable="1">
        <type name="MiniObjectClass" c:type="GstMiniObjectClass"/>
      </field>
    </record>
    <bitfield name="BufferCopyFlags"
              doc="A set of flags that can be provided to the gst_buffer_copy_metadata()
function to specify which metadata fields should be copied."
              version="0.10.13"
              c:type="GstBufferCopyFlags">
      <member name="flags" value="1" c:identifier="GST_BUFFER_COPY_FLAGS"/>
      <member name="timestamps"
              value="2"
              c:identifier="GST_BUFFER_COPY_TIMESTAMPS"/>
      <member name="caps" value="4" c:identifier="GST_BUFFER_COPY_CAPS"/>
    </bitfield>
    <bitfield name="BufferFlag"
              doc="A set of buffer flags used to describe properties of a #GstBuffer."
              c:type="GstBufferFlag">
      <member name="readonly"
              value="1"
              c:identifier="GST_BUFFER_FLAG_READONLY"/>
      <member name="preroll"
              value="16"
              c:identifier="GST_BUFFER_FLAG_PREROLL"/>
      <member name="discont"
              value="32"
              c:identifier="GST_BUFFER_FLAG_DISCONT"/>
      <member name="in_caps"
              value="64"
              c:identifier="GST_BUFFER_FLAG_IN_CAPS"/>
      <member name="gap" value="128" c:identifier="GST_BUFFER_FLAG_GAP"/>
      <member name="delta_unit"
              value="256"
              c:identifier="GST_BUFFER_FLAG_DELTA_UNIT"/>
      <member name="media1" value="512" c:identifier="GST_BUFFER_FLAG_MEDIA1"/>
      <member name="media2"
              value="1024"
              c:identifier="GST_BUFFER_FLAG_MEDIA2"/>
      <member name="media3"
              value="2048"
              c:identifier="GST_BUFFER_FLAG_MEDIA3"/>
      <member name="last" value="4096" c:identifier="GST_BUFFER_FLAG_LAST"/>
    </bitfield>
    <record name="BufferList"
            c:type="GstBufferList"
            doc="Opaque list of grouped buffers."
            version="0.10.24">
      <constructor name="new"
                   c:identifier="gst_buffer_list_new"
                   doc="Creates a new, empty #GstBufferList. The caller is responsible for unreffing
the returned #GstBufferList."
                   version="0.10.24">
        <return-value transfer-ownership="full" doc="after usage.">
          <type name="BufferList" c:type="GstBufferList*"/>
        </return-value>
      </constructor>
      <method name="n_groups"
              c:identifier="gst_buffer_list_n_groups"
              doc="Returns the number of groups in @list."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </return-value>
      </method>
      <method name="foreach"
              c:identifier="gst_buffer_list_foreach"
              doc="Call @func with @data for each buffer in @list.
of @func define if this function returns or if the remaining buffers in a
group should be skipped."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="BufferListFunc" c:type="GstBufferListFunc"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="get"
              c:identifier="gst_buffer_list_get"
              doc="Get the buffer at @idx in @group.
Note that this function is not efficient for iterating over the entire list.
Use an iterator or gst_buffer_list_foreach() instead.
buffer remains valid as long as @list is valid."
              version="0.10.24">
        <return-value transfer-ownership="full">
          <type name="Buffer" c:type="GstBuffer*"/>
        </return-value>
        <parameters>
          <parameter name="group" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="idx" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="iterate"
              c:identifier="gst_buffer_list_iterate"
              doc="Iterate the buffers in @list. The owner of the iterator must also be the
owner of a reference to @list while the returned iterator is in use.
gst_buffer_list_iterator_free() after usage"
              version="0.10.24">
        <return-value transfer-ownership="full">
          <type name="BufferListIterator" c:type="GstBufferListIterator*"/>
        </return-value>
      </method>
    </record>
    <record name="BufferListClass" c:type="GstBufferListClass">
    </record>
    <callback name="BufferListDoFunction"
              c:type="GstBufferListDoFunction"
              doc="A function for accessing the last buffer returned by
gst_buffer_list_iterator_next(). The function can leave @buffer in the list,
replace @buffer in the list or remove @buffer from the list, depending on
the return value. If the function returns NULL, @buffer will be removed from
the list, otherwise @buffer will be replaced with the returned buffer.
The last buffer returned by gst_buffer_list_iterator_next() will be replaced
with the buffer returned from the function. The function takes ownership of
unreffed. If NULL is returned, the buffer will be removed from the list. The
list must be writable.
from the list"
              version="0.10.24">
      <return-value transfer-ownership="full">
        <type name="Buffer" c:type="GstBuffer*"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <type name="Buffer" c:type="GstBuffer*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="1">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="BufferListFunc"
              c:type="GstBufferListFunc"
              doc="A function that will be called from gst_buffer_list_foreach(). The @buffer
field will point to a the reference of the buffer at @idx in @group.
When this function returns #GST_BUFFER_LIST_CONTINUE, the next buffer will be
returned. When #GST_BUFFER_LIST_SKIP_GROUP is returned, all remaining buffers
in the current group will be skipped and the first buffer of the next group
is returned (if any). When GST_BUFFER_LIST_END is returned,
gst_buffer_list_foreach() will return.
When @buffer is set to NULL, the item will be removed from the bufferlist.
When @buffer has been made writable, the new buffer reference can be assigned
to @buffer. This function is responsible for unreffing the old buffer when
removing or modifying."
              version="0.10.24">
      <return-value transfer-ownership="full">
        <type name="BufferListItem" c:type="GstBufferListItem"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <type name="Buffer" c:type="GstBuffer**"/>
        </parameter>
        <parameter name="group" transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </parameter>
        <parameter name="idx" transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="3">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <enumeration name="BufferListItem"
                 doc="The result of the #GstBufferListFunc."
                 version="0.10.24"
                 c:type="GstBufferListItem">
      <member name="continue"
              value="0"
              c:identifier="GST_BUFFER_LIST_CONTINUE"/>
      <member name="skip_group"
              value="1"
              c:identifier="GST_BUFFER_LIST_SKIP_GROUP"/>
      <member name="end" value="2" c:identifier="GST_BUFFER_LIST_END"/>
    </enumeration>
    <record name="BufferListIterator"
            c:type="GstBufferListIterator"
            doc="Opaque iterator for a #GstBufferList."
            version="0.10.24">
      <method name="free"
              c:identifier="gst_buffer_list_iterator_free"
              doc="Free the iterator."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="n_buffers"
              c:identifier="gst_buffer_list_iterator_n_buffers"
              doc="Returns the number of buffers left to iterate in the current group. I.e. the
number of calls that can be made to gst_buffer_list_iterator_next() before
it returns NULL.
This function will not move the implicit cursor or in any other way affect
the state of the iterator @it."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </return-value>
      </method>
      <method name="next"
              c:identifier="gst_buffer_list_iterator_next"
              doc="Returns the next buffer in the list iterated with @it. If the iterator is at
the end of a group, NULL will be returned. This function may be called
repeatedly to iterate through the current group.
The caller will not get a new ref to the returned #GstBuffer and must not
unref it."
              version="0.10.24">
        <return-value transfer-ownership="full">
          <type name="Buffer" c:type="GstBuffer*"/>
        </return-value>
      </method>
      <method name="next_group"
              c:identifier="gst_buffer_list_iterator_next_group"
              doc="Advance the iterator @it to the first buffer in the next group. If the
iterator is at the last group, FALSE will be returned. This function may be
called repeatedly to iterate through the groups in a buffer list.
the iterator was already at the last group"
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="add"
              c:identifier="gst_buffer_list_iterator_add"
              doc="Inserts @buffer into the #GstBufferList iterated with @it. The buffer is
inserted into the current group, immediately before the buffer that would be
returned by gst_buffer_list_iterator_next(). The buffer is inserted before
the implicit cursor, a subsequent call to gst_buffer_list_iterator_next()
will return the buffer after the inserted buffer, if any.
This function takes ownership of @buffer."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="buffer" transfer-ownership="none">
            <type name="Buffer" c:type="GstBuffer*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_group"
              c:identifier="gst_buffer_list_iterator_add_group"
              doc="Inserts a new, empty group into the #GstBufferList iterated with @it. The
group is inserted immediately before the group that would be returned by
gst_buffer_list_iterator_next_group(). A subsequent call to
gst_buffer_list_iterator_next_group() will advance the iterator to the group
after the inserted group, if any."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="remove"
              c:identifier="gst_buffer_list_iterator_remove"
              doc="Removes the last buffer returned by gst_buffer_list_iterator_next() from
the #GstBufferList iterated with @it. gst_buffer_list_iterator_next() must
have been called on @it before this function is called. This function can
only be called once per call to gst_buffer_list_iterator_next().
The removed buffer is unreffed."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="steal"
              c:identifier="gst_buffer_list_iterator_steal"
              doc="Returns the last buffer returned by gst_buffer_list_iterator_next() without
modifying the refcount of the buffer."
              version="0.10.24">
        <return-value transfer-ownership="full">
          <type name="Buffer" c:type="GstBuffer*"/>
        </return-value>
      </method>
      <method name="take"
              c:identifier="gst_buffer_list_iterator_take"
              doc="Replaces the last buffer returned by gst_buffer_list_iterator_next() with
this function is called. gst_buffer_list_iterator_remove() must not have been
called since the last call to gst_buffer_list_iterator_next().
This function unrefs the replaced buffer if it has not been stolen with
gst_buffer_list_iterator_steal() and takes ownership of @buffer (i.e. the
refcount of @buffer is not increased)."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="buffer" transfer-ownership="none">
            <type name="Buffer" c:type="GstBuffer*"/>
          </parameter>
        </parameters>
      </method>
      <method name="do"
              c:identifier="gst_buffer_list_iterator_do"
              doc="Calls the given function for the last buffer returned by
gst_buffer_list_iterator_next(). gst_buffer_list_iterator_next() must have
been called on @it before this function is called.
gst_buffer_list_iterator_remove() and gst_buffer_list_iterator_steal() must
not have been called since the last call to gst_buffer_list_iterator_next().
See #GstBufferListDoFunction for more details."
              version="0.10.24">
        <return-value transfer-ownership="full">
          <type name="Buffer" c:type="GstBuffer*"/>
        </return-value>
        <parameters>
          <parameter name="do_func"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="BufferListDoFunction"
                  c:type="GstBufferListDoFunction"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="merge_group"
              c:identifier="gst_buffer_list_iterator_merge_group"
              doc="Merge a buffer list group into a normal #GstBuffer by copying its metadata
and memcpying its data into consecutive memory. All buffers in the current
group after the implicit cursor will be merged into one new buffer. The
metadata of the new buffer will be a copy of the metadata of the buffer that
would be returned by gst_buffer_list_iterator_next(). If there is no buffer
in the current group after the implicit cursor, NULL will be returned.
This function will not move the implicit cursor or in any other way affect
the state of the iterator @it or the list."
              version="0.10.24">
        <return-value transfer-ownership="full" doc="after usage, or NULL">
          <type name="Buffer" c:type="GstBuffer*"/>
        </return-value>
      </method>
    </record>
    <enumeration name="BufferingMode"
                 doc="The different types of buffering methods."
                 c:type="GstBufferingMode">
      <member name="stream" value="0" c:identifier="GST_BUFFERING_STREAM"/>
      <member name="download" value="1" c:identifier="GST_BUFFERING_DOWNLOAD"/>
      <member name="timeshift"
              value="2"
              c:identifier="GST_BUFFERING_TIMESHIFT"/>
      <member name="live" value="3" c:identifier="GST_BUFFERING_LIVE"/>
    </enumeration>
    <class name="Bus"
           c:type="GstBus"
           doc="The opaque #GstBus data structure."
           parent="Object"
           glib:type-name="GstBus"
           glib:get-type="gst_bus_get_type"
           glib:type-struct="BusClass">
      <constructor name="new"
                   c:identifier="gst_bus_new"
                   doc="Creates a new #GstBus instance.">
        <return-value transfer-ownership="full">
          <type name="Bus" c:type="GstBus*"/>
        </return-value>
      </constructor>
      <method name="post"
              c:identifier="gst_bus_post"
              doc="Post a message on the given bus. Ownership of the message
is taken by the bus.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="message" transfer-ownership="none">
            <type name="Message" c:type="GstMessage*"/>
          </parameter>
        </parameters>
      </method>
      <method name="have_pending"
              c:identifier="gst_bus_have_pending"
              doc="Check if there are pending messages on the bus that
should be handled.
otherwise.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="peek"
              c:identifier="gst_bus_peek"
              doc="Peek the message on the top of the bus&apos; queue. The message will remain
on the bus&apos; message queue. A reference is returned, and needs to be unreffed
by the caller.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
      </method>
      <method name="pop"
              c:identifier="gst_bus_pop"
              doc="Get a message from the bus.
The message is taken from the bus and needs to be unreffed with
gst_message_unref() after usage.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
      </method>
      <method name="pop_filtered"
              c:identifier="gst_bus_pop_filtered"
              doc="Get a message matching @type from the bus.  Will discard all messages on
the bus that do not match @type and that have been posted before the first
message that does match @type.  If there is no message matching @type on
the bus, all messages will be discarded.
the bus is empty or there is no message matching @type.
The message is taken from the bus and needs to be unreffed with
gst_message_unref() after usage.
MT safe."
              version="0.10.15">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="types" transfer-ownership="none">
            <type name="MessageType" c:type="GstMessageType"/>
          </parameter>
        </parameters>
      </method>
      <method name="timed_pop"
              c:identifier="gst_bus_timed_pop"
              doc="Get a message from the bus, waiting up to the specified timeout.
If @timeout is 0, this function behaves like gst_bus_pop(). If @timeout is
#GST_CLOCK_TIME_NONE, this function will block forever until a message was
posted on the bus.
or NULL if the bus is empty after the timeout expired.
The message is taken from the bus and needs to be unreffed with
gst_message_unref() after usage.
MT safe."
              version="0.10.12">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="timeout" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </method>
      <method name="timed_pop_filtered"
              c:identifier="gst_bus_timed_pop_filtered"
              doc="Get a message from the bus whose type matches the message type mask @types,
waiting up to the specified timeout (and discarding any messages that do not
match the mask provided).
If @timeout is 0, this function behaves like gst_bus_pop_filtered(). If
matching message was posted on the bus.
message was found on the bus until the timeout expired.
The message is taken from the bus and needs to be unreffed with
gst_message_unref() after usage.
MT safe."
              version="0.10.15">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="timeout" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
          <parameter name="types" transfer-ownership="none">
            <type name="MessageType" c:type="GstMessageType"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_flushing"
              c:identifier="gst_bus_set_flushing"
              doc="If @flushing, flush out and unref any messages queued in the bus. Releases
references to the message origin objects. Will flush future messages until
gst_bus_set_flushing() sets @flushing to #FALSE.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="flushing" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_sync_handler"
              c:identifier="gst_bus_set_sync_handler"
              doc="Sets the synchronous handler on the bus. The function will be called
every time a new message is posted on the bus. Note that the function
will be called in the same thread context as the posting object. This
function is usually only called by the creator of the bus. Applications
should handle messages asynchronously using the gst_bus watch and poll
functions.
You cannot replace an existing sync_handler. You can pass NULL to this
function, which will clear the existing handler.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="BusSyncHandler" c:type="GstBusSyncHandler"/>
          </parameter>
          <parameter name="data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_watch"
              c:identifier="gst_bus_create_watch"
              doc="Create watch for this bus. The GSource will be dispatched whenever
a message is on the bus. After the GSource is dispatched, the
message is popped off the bus and unreffed.">
        <return-value transfer-ownership="full">
          <type name="GLib.Source" c:type="GSource*"/>
        </return-value>
      </method>
      <method name="add_watch_full"
              c:identifier="gst_bus_add_watch_full"
              doc="Adds a bus watch to the default main context with the given @priority.
This function is used to receive asynchronous messages in the main loop.
There can only be a single bus watch per bus, you must remove it before you
can set a new one.
When @func is called, the message belongs to the caller; if you want to
keep a copy of it, call gst_message_ref() before leaving @func.
The watch can be removed using g_source_remove() or by returning FALSE
from @func.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </return-value>
        <parameters>
          <parameter name="priority" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="notified"
                     closure="3"
                     destroy="4">
            <type name="BusFunc" c:type="GstBusFunc"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
          <parameter name="notify" transfer-ownership="none" scope="call">
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_watch"
              c:identifier="gst_bus_add_watch"
              doc="Adds a bus watch to the default main context with the default priority.
This function is used to receive asynchronous messages in the main loop.
There can only be a single bus watch per bus, you must remove it before you
can set a new one.
The watch can be removed using g_source_remove() or by returning FALSE
from @func.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </return-value>
        <parameters>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="BusFunc" c:type="GstBusFunc"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="poll"
              c:identifier="gst_bus_poll"
              doc="Poll the bus for messages. Will block while waiting for messages to come.
You can specify a maximum time to poll with the @timeout parameter. If
All messages not in @events will be popped off the bus and will be ignored.
Because poll is implemented using the &quot;message&quot; signal enabled by
gst_bus_add_signal_watch(), calling gst_bus_poll() will cause the &quot;message&quot;
signal to be emitted for every message that poll sees. Thus a &quot;message&quot;
signal handler will see the same messages that this function sees -- neither
will steal messages from the other.
This function will run a main loop from the default main context when
polling.
You should never use this function, since it is pure evil. This is
especially true for GUI applications based on Gtk+ or Qt, but also for any
other non-trivial application that uses the GLib main loop. As this function
runs a GLib main loop, any callback attached to the default GLib main
context may be invoked. This could be timeouts, GUI events, I/O events etc.;
even if gst_bus_poll() is called with a 0 timeout. Any of these callbacks
may do things you do not expect, e.g. destroy the main application window or
some other resource; change other application state; display a dialog and
run another main loop until the user clicks it away. In short, using this
function may add a lot of complexity to your code through unexpected
re-entrancy and unexpected changes to your application&apos;s state.
For 0 timeouts use gst_bus_pop_filtered() instead of this function; for
other short timeouts use gst_bus_timed_pop_filtered(); everything else is
better handled by setting up an asynchronous bus watch and doing things
from there.
The message is taken from the bus and needs to be unreffed with
gst_message_unref() after usage.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="events" transfer-ownership="none" doc=" poll for.">
            <type name="MessageType" c:type="GstMessageType"/>
          </parameter>
          <parameter name="timeout"
                     transfer-ownership="none"
                     doc=" indefinitely.">
            <type name="ClockTimeDiff" c:type="GstClockTimeDiff"/>
          </parameter>
        </parameters>
      </method>
      <method name="async_signal_func"
              c:identifier="gst_bus_async_signal_func"
              doc="A helper #GstBusFunc that can be used to convert all asynchronous messages
into signals.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="message" transfer-ownership="none">
            <type name="Message" c:type="GstMessage*"/>
          </parameter>
          <parameter name="data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="sync_signal_handler"
              c:identifier="gst_bus_sync_signal_handler"
              doc="A helper GstBusSyncHandler that can be used to convert all synchronous
messages into signals.">
        <return-value transfer-ownership="full">
          <type name="BusSyncReply" c:type="GstBusSyncReply"/>
        </return-value>
        <parameters>
          <parameter name="message" transfer-ownership="none">
            <type name="Message" c:type="GstMessage*"/>
          </parameter>
          <parameter name="data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_signal_watch"
              c:identifier="gst_bus_add_signal_watch"
              doc="Adds a bus signal watch to the default main context with the default
priority.
After calling this statement, the bus will emit the &quot;message&quot; signal for each
message posted on the bus.
This function may be called multiple times. To clean up, the caller is
responsible for calling gst_bus_remove_signal_watch() as many times as this
function is called.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="add_signal_watch_full"
              c:identifier="gst_bus_add_signal_watch_full"
              doc="Adds a bus signal watch to the default main context with the given priority.
After calling this statement, the bus will emit the &quot;message&quot; signal for each
message posted on the bus when the main loop is running.
This function may be called multiple times. To clean up, the caller is
responsible for calling gst_bus_remove_signal_watch() as many times as this
function is called.
There can only be a single bus watch per bus, you most remove all signal watch
before you can set another type of watch.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="priority" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_signal_watch"
              c:identifier="gst_bus_remove_signal_watch"
              doc="Removes a signal watch previously added with gst_bus_add_signal_watch().
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="enable_sync_message_emission"
              c:identifier="gst_bus_enable_sync_message_emission"
              doc="Instructs GStreamer to emit the &quot;sync-message&quot; signal after running the bus&apos;s
sync handler. This function is here so that code can ensure that they can
synchronously receive messages without having to affect what the bin&apos;s sync
handler is.
This function may be called multiple times. To clean up, the caller is
responsible for calling gst_bus_disable_sync_message_emission() as many times
as this function is called.
While this function looks similar to gst_bus_add_signal_watch(), it is not
exactly the same -- this function enables &lt;emphasis&gt;synchronous&lt;/emphasis&gt; emission of
signals when messages arrive; gst_bus_add_signal_watch() adds an idle callback
to pop messages off the bus &lt;emphasis&gt;asynchronously&lt;/emphasis&gt;. The sync-message signal
comes from the thread of whatever object posted the message; the &quot;message&quot;
signal is marshalled to the main thread via the main loop.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="disable_sync_message_emission"
              c:identifier="gst_bus_disable_sync_message_emission"
              doc="Instructs GStreamer to stop emitting the &quot;sync-message&quot; signal for this bus.
See gst_bus_enable_sync_message_emission() for more information.
In the event that multiple pieces of code have called
gst_bus_enable_sync_message_emission(), the sync-message emissions will only
be stopped after all calls to gst_bus_enable_sync_message_emission() were
&quot;cancelled&quot; by calling this function. In this way the semantics are exactly
the same as gst_object_ref() that which calls enable should also call
disable.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <field name="object">
        <type name="Object" c:type="GstObject"/>
      </field>
      <field name="queue">
        <type name="GLib.Queue" c:type="GQueue*"/>
      </field>
      <field name="queue_lock">
        <type name="GLib.Mutex" c:type="GMutex*"/>
      </field>
      <field name="sync_handler">
        <type name="BusSyncHandler" c:type="GstBusSyncHandler"/>
      </field>
      <field name="sync_handler_data">
        <type name="any" c:type="gpointer"/>
      </field>
      <field name="signal_watch_id">
        <type name="uint" c:type="guint"/>
      </field>
      <field name="num_signal_watchers">
        <type name="uint" c:type="guint"/>
      </field>
      <field name="priv">
        <type name="BusPrivate" c:type="GstBusPrivate*"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="3">
          <type name="any"/>
        </array>
      </field>
      <glib:signal name="message"
                   doc="A message has been posted on the bus. This signal is emitted from a
GSource added to the mainloop. this signal will only be emitted when
there is a mainloop running.">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="message" transfer-ownership="none">
            <type name="Message" c:type="GstMessage"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="sync-message"
                   doc="A message has been posted on the bus. This signal is emitted from the
thread that posted the message so one has to be careful with locking.
This signal will not be emitted by default, you have to set up
gst_bus_sync_signal_handler() as a sync handler if you want this
signal to be emitted when a message is posted on the bus, like this:
&lt;programlisting&gt;
gst_bus_set_sync_handler (bus, gst_bus_sync_signal_handler, yourdata);
&lt;/programlisting&gt;">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="message" transfer-ownership="none">
            <type name="Message" c:type="GstMessage"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="BusClass"
            c:type="GstBusClass"
            glib:is-gtype-struct-for="Bus">
      <field name="parent_class">
        <type name="ObjectClass" c:type="GstObjectClass"/>
      </field>
      <field name="message">
        <callback name="message" c:type="message">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="bus" transfer-ownership="none">
              <type name="Bus" c:type="GstBus*"/>
            </parameter>
            <parameter name="message" transfer-ownership="none">
              <type name="Message" c:type="GstMessage*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="sync_message">
        <callback name="sync_message" c:type="sync_message">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="bus" transfer-ownership="none">
              <type name="Bus" c:type="GstBus*"/>
            </parameter>
            <parameter name="message" transfer-ownership="none">
              <type name="Message" c:type="GstMessage*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <bitfield name="BusFlags"
              doc="The standard flags that a bus may have."
              c:type="GstBusFlags">
      <member name="flushing" value="16" c:identifier="GST_BUS_FLUSHING"/>
      <member name="flag_last" value="32" c:identifier="GST_BUS_FLAG_LAST"/>
    </bitfield>
    <callback name="BusFunc"
              c:type="GstBusFunc"
              doc="Specifies the type of function passed to gst_bus_add_watch() or
gst_bus_add_watch_full(), which is called from the mainloop when a message
is available on the bus.
The message passed to the function will be unreffed after execution of this
function so it should not be freed in the function.
Note that this function is used as a GSourceFunc which means that returning
FALSE will remove the GSource from the mainloop.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="bus" transfer-ownership="none">
          <type name="Bus" c:type="GstBus*"/>
        </parameter>
        <parameter name="message" transfer-ownership="none">
          <type name="Message" c:type="GstMessage*"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <record name="BusPrivate" c:type="GstBusPrivate">
    </record>
    <callback name="BusSyncHandler"
              c:type="GstBusSyncHandler"
              doc="Handler will be invoked synchronously, when a new message has been injected
into the bus. This function is mostly used internally. Only one sync handler
can be attached to a given bus.
If the handler returns GST_BUS_DROP, it should unref the message, else the
message should not be unreffed by the sync handler.">
      <return-value transfer-ownership="full">
        <type name="BusSyncReply" c:type="GstBusSyncReply"/>
      </return-value>
      <parameters>
        <parameter name="bus" transfer-ownership="none">
          <type name="Bus" c:type="GstBus*"/>
        </parameter>
        <parameter name="message" transfer-ownership="none">
          <type name="Message" c:type="GstMessage*"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <enumeration name="BusSyncReply"
                 doc="The result values for a GstBusSyncHandler."
                 c:type="GstBusSyncReply">
      <member name="drop" value="0" c:identifier="GST_BUS_DROP"/>
      <member name="pass" value="1" c:identifier="GST_BUS_PASS"/>
      <member name="async" value="2" c:identifier="GST_BUS_ASYNC"/>
    </enumeration>
    <constant name="CAN_INLINE" value="1">
      <type name="int"/>
    </constant>
    <constant name="CLOCK_ENTRY_TRACE_NAME" value="GstClockEntry">
      <type name="utf8"/>
    </constant>
    <constant name="CLOCK_TIME_NONE" value="-1">
      <type name="int"/>
    </constant>
    <record name="Caps"
            c:type="GstCaps"
            doc="Object describing media types."
            glib:type-name="GstCaps"
            glib:get-type="gst_caps_get_type">
      <field name="type" writable="1">
        <type name="GType" c:type="GType"/>
      </field>
      <field name="refcount" writable="1">
        <type name="int" c:type="gint"/>
      </field>
      <field name="flags" writable="1">
        <type name="CapsFlags" c:type="GstCapsFlags"/>
      </field>
      <field name="structs" writable="1">
        <type name="GLib.PtrArray" c:type="GPtrArray*"/>
      </field>
      <field name="_gst_reserved" writable="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
      <constructor name="new_empty"
                   c:identifier="gst_caps_new_empty"
                   doc="Creates a new #GstCaps that is empty.  That is, the returned
#GstCaps contains no media formats.
Caller is responsible for unreffing the returned caps.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </constructor>
      <constructor name="new_any"
                   c:identifier="gst_caps_new_any"
                   doc="Creates a new #GstCaps that indicates that it is compatible with
any media format.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </constructor>
      <constructor name="new_simple"
                   c:identifier="gst_caps_new_simple"
                   doc="Creates a new #GstCaps that contains one #GstStructure.  The
structure is defined by the arguments, which have the same format
as gst_structure_new().
Caller is responsible for unreffing the returned caps.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
        <parameters>
          <parameter name="media_type" transfer-ownership="none">
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_full"
                   c:identifier="gst_caps_new_full"
                   doc="Creates a new #GstCaps and adds all the structures listed as
arguments.  The list must be NULL-terminated.  The structures
are not copied; the returned #GstCaps owns the structures.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
        <parameters>
          <parameter name="struct1" transfer-ownership="none">
            <type name="Structure" c:type="GstStructure*"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </constructor>
      <method name="ref"
              c:identifier="gst_caps_ref"
              doc="Add a reference to a #GstCaps object.
From this point on, until the caller calls gst_caps_unref() or
gst_caps_make_writable(), it is guaranteed that the caps object will not
change. This means its structures won&apos;t change, etc. To use a #GstCaps
object, you must always have a refcount on it -- either the one made
implicitly by e.g. gst_caps_new_simple(), or via taking one explicitly with
this function.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </method>
      <method name="copy"
              c:identifier="gst_caps_copy"
              doc="Creates a new #GstCaps as a copy of the old @caps. The new caps will have a
refcount of 1, owned by the caller. The structures are copied as well.
Note that this function is the semantic equivalent of a gst_caps_ref()
followed by a gst_caps_make_writable(). If you only want to hold on to a
reference to the data, you should use gst_caps_ref().
When you are finished with the caps, call gst_caps_unref() on it.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </method>
      <method name="make_writable"
              c:identifier="gst_caps_make_writable"
              doc="Returns a writable copy of @caps.
If there is only one reference count on @caps, the caller must be the owner,
and so this function will return the caps object unchanged. If on the other
hand there is more than one reference on the object, a new caps object will
be returned. The caller&apos;s reference on @caps will be removed, and instead the
caller will own a reference to the returned object.
In short, this function unrefs the caps in the argument and refs the caps
that it returns. Don&apos;t access the argument after calling this function. See">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </method>
      <method name="unref"
              c:identifier="gst_caps_unref"
              doc="Unref a #GstCaps and and free all its structures and the
structures&apos; values when the refcount reaches 0.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="append"
              c:identifier="gst_caps_append"
              doc="Appends the structures contained in @caps2 to @caps1. The structures in
freed. If either caps is ANY, the resulting caps will be ANY.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="caps2" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="merge"
              c:identifier="gst_caps_merge"
              doc="Appends the structures contained in @caps2 to @caps1 if they are not yet
expressed by @caps1. The structures in @caps2 are not copied -- they are
transferred to @caps1, and then @caps2 is freed.
If either caps is ANY, the resulting caps will be ANY."
              version="0.10.10">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="caps2" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="append_structure"
              c:identifier="gst_caps_append_structure"
              doc="Appends @structure to @caps.  The structure is not copied; @caps
becomes the owner of @structure.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="structure" transfer-ownership="none">
            <type name="Structure" c:type="GstStructure*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_structure"
              c:identifier="gst_caps_remove_structure"
              doc="removes the stucture with the given index from the list of structures
contained in @caps.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="idx" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="merge_structure"
              c:identifier="gst_caps_merge_structure"
              doc="Appends @structure to @caps if its not already expressed by @caps.  The
structure is not copied; @caps becomes the owner of @structure.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="structure" transfer-ownership="none">
            <type name="Structure" c:type="GstStructure*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_size"
              c:identifier="gst_caps_get_size"
              doc="Gets the number of structures contained in @caps.">
        <return-value transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </return-value>
      </method>
      <method name="get_structure"
              c:identifier="gst_caps_get_structure"
              doc="Finds the structure in @caps that has the index @index, and
returns it.
non-const GstStructure *.  This is for programming convenience --
the caller should be aware that structures inside a constant
#GstCaps should not be modified. However, if you know the caps
are writable, either because you have just copied them or made
them writable with gst_caps_make_writable(), you may modify the
structure returned in the usual way, e.g. with functions like
gst_structure_set().
You do not need to free or unref the structure returned, it
belongs to the #GstCaps.">
        <return-value transfer-ownership="full">
          <type name="Structure" c:type="GstStructure*"/>
        </return-value>
        <parameters>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="copy_nth"
              c:identifier="gst_caps_copy_nth"
              doc="Creates a new #GstCaps and appends a copy of the nth structure
contained in @caps.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
        <parameters>
          <parameter name="nth" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="truncate"
              c:identifier="gst_caps_truncate"
              doc="Destructively discard all but the first structure from @caps. Useful when
fixating. @caps must be writable.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="set_value"
              c:identifier="gst_caps_set_value"
              doc="Sets the given @field on all structures of @caps to the given @value.
This is a convenience function for calling gst_structure_set_value() on
all structures of @caps."
              version="0.10.26">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="field" transfer-ownership="none">
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_simple"
              c:identifier="gst_caps_set_simple"
              doc="Sets fields in a #GstCaps.  The arguments must be passed in the same
manner as gst_structure_set(), and be NULL-terminated.
&lt;note&gt;Prior to GStreamer version 0.10.26, this function failed when
of GStreamer, you may only call this function when GST_CAPS_IS_SIMPLE()
is %TRUE for @caps.&lt;/note&gt;">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="field" transfer-ownership="none">
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="is_any"
              c:identifier="gst_caps_is_any"
              doc="Determines if @caps represents any media format.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="is_empty"
              c:identifier="gst_caps_is_empty"
              doc="Determines if @caps represents no media formats.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="is_fixed"
              c:identifier="gst_caps_is_fixed"
              doc="Fixed #GstCaps describe exactly one format, that is, they have exactly
one structure, and each field in the structure describes a fixed type.
Examples of non-fixed types are GST_TYPE_INT_RANGE and GST_TYPE_LIST.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="is_always_compatible"
              c:identifier="gst_caps_is_always_compatible"
              doc="A given #GstCaps structure is always compatible with another if
every media format that is in the first is also contained in the
second.  That is, @caps1 is a subset of @caps2.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="caps2" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_subset"
              c:identifier="gst_caps_is_subset"
              doc="Checks if all caps represented by @subset are also represented by @superset.
&lt;note&gt;This function does not work reliably if optional properties for caps
are included on one caps and omitted on the other.&lt;/note&gt;">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="superset" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_equal"
              c:identifier="gst_caps_is_equal"
              doc="Checks if the given caps represent the same set of caps.
&lt;note&gt;This function does not work reliably if optional properties for caps
are included on one caps and omitted on the other.&lt;/note&gt;
This function deals correctly with passing NULL for any of the caps.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="caps2" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_equal_fixed"
              c:identifier="gst_caps_is_equal_fixed"
              doc="Tests if two #GstCaps are equal.  This function only works on fixed
#GstCaps.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="caps2" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="can_intersect"
              c:identifier="gst_caps_can_intersect"
              doc="Tries intersecting @caps1 and @caps2 and reports wheter the result would not
be empty"
              version="0.10.25">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="caps2" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="intersect"
              c:identifier="gst_caps_intersect"
              doc="Creates a new #GstCaps that contains all the formats that are common
to both @caps1 and @caps2.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
        <parameters>
          <parameter name="caps2" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="subtract"
              c:identifier="gst_caps_subtract"
              doc="Subtracts the @subtrahend from the @minuend.
&lt;note&gt;This function does not work reliably if optional properties for caps
are included on one caps and omitted on the other.&lt;/note&gt;">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
        <parameters>
          <parameter name="subtrahend" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="union"
              c:identifier="gst_caps_union"
              doc="Creates a new #GstCaps that contains all the formats that are in
either @caps1 and @caps2.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
        <parameters>
          <parameter name="caps2" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="normalize"
              c:identifier="gst_caps_normalize"
              doc="Creates a new #GstCaps that represents the same set of formats as">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </method>
      <method name="do_simplify"
              c:identifier="gst_caps_do_simplify"
              doc="Modifies the given @caps inplace into a representation that represents the
same set of formats, but in a simpler form.  Component structures that are
identical are merged.  Component structures that have values that can be
merged are also merged.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="save_thyself"
              c:identifier="gst_caps_save_thyself"
              doc="Serializes a #GstCaps to XML and adds it as a child node of @parent.">
        <return-value transfer-ownership="full">
          <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
        </return-value>
        <parameters>
          <parameter name="parent" transfer-ownership="none">
            <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
          </parameter>
        </parameters>
      </method>
      <method name="replace"
              c:identifier="gst_caps_replace"
              doc="Replaces *caps with @newcaps.  Unrefs the #GstCaps in the location
pointed to by @caps, if applicable, then modifies @caps to point to
This function does not take any locks so you might want to lock
the object owning @caps pointer.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="newcaps" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="to_string"
              c:identifier="gst_caps_to_string"
              doc="Converts @caps to a string representation.  This string representation
can be converted back to a #GstCaps by gst_caps_from_string().
For debugging purposes its easier to do something like this:
|[
GST_LOG (&quot;caps are %&quot; GST_PTR_FORMAT, caps);
]|
This prints the caps in human readble form.">
        <return-value transfer-ownership="full">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
    </record>
    <bitfield name="CapsFlags"
              doc="Extra flags for a caps."
              c:type="GstCapsFlags">
      <member name="caps_flags_any"
              value="1"
              c:identifier="GST_CAPS_FLAGS_ANY"/>
    </bitfield>
    <interface name="ChildProxy"
               c:type="GstChildProxy"
               doc="Opaque #GstChildProxy data structure."
               glib:type-name="GstChildProxy"
               glib:get-type="gst_child_proxy_get_type"
               glib:type-struct="ChildProxyInterface">
      <prerequisite name="Object"/>
      <virtual-method name="get_child_by_index" invoker="get_child_by_index">
        <return-value transfer-ownership="full">
          <type name="Object" c:type="GstObject*"/>
        </return-value>
        <parameters>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_children_count" invoker="get_children_count">
        <return-value transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </return-value>
      </virtual-method>
      <method name="get_child_by_name"
              c:identifier="gst_child_proxy_get_child_by_name"
              doc="Looks up a child element by the given name.
Implementors can use #GstObject together with gst_object_get_name()
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Object" c:type="GstObject*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_child_by_index"
              c:identifier="gst_child_proxy_get_child_by_index"
              doc="Fetches a child by its number.
after usage.
MT safe.">
        <return-value transfer-ownership="full" doc="Unref">
          <type name="Object" c:type="GstObject*"/>
        </return-value>
        <parameters>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_children_count"
              c:identifier="gst_child_proxy_get_children_count"
              doc="Gets the number of child objects this parent contains.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </return-value>
      </method>
      <glib:signal name="child-added">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="GObject.Object" c:type="GObject"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="child-removed">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="GObject.Object" c:type="GObject"/>
          </parameter>
        </parameters>
      </glib:signal>
    </interface>
    <record name="ChildProxyInterface"
            c:type="GstChildProxyInterface"
            glib:is-gtype-struct-for="ChildProxy"
            doc="#GstChildProxy interface.">
      <field name="parent">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
      <field name="get_child_by_index">
        <callback name="get_child_by_index" c:type="get_child_by_index">
          <return-value transfer-ownership="full">
            <type name="Object" c:type="GstObject*"/>
          </return-value>
          <parameters>
            <parameter name="parent" transfer-ownership="none">
              <type name="ChildProxy" c:type="GstChildProxy*"/>
            </parameter>
            <parameter name="index" transfer-ownership="none">
              <type name="uint" c:type="guint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_children_count">
        <callback name="get_children_count" c:type="get_children_count">
          <return-value transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </return-value>
          <parameters>
            <parameter name="parent" transfer-ownership="none">
              <type name="ChildProxy" c:type="GstChildProxy*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="child_added">
        <callback name="child_added" c:type="child_added">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="parent" transfer-ownership="none">
              <type name="ChildProxy" c:type="GstChildProxy*"/>
            </parameter>
            <parameter name="child" transfer-ownership="none">
              <type name="Object" c:type="GstObject*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="child_removed">
        <callback name="child_removed" c:type="child_removed">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="parent" transfer-ownership="none">
              <type name="ChildProxy" c:type="GstChildProxy*"/>
            </parameter>
            <parameter name="child" transfer-ownership="none">
              <type name="Object" c:type="GstObject*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <class name="Clock"
           c:type="GstClock"
           doc="#GstClock base structure. The values of this structure are
protected for subclasses, use the methods to use the #GstClock."
           parent="Object"
           glib:type-name="GstClock"
           glib:get-type="gst_clock_get_type"
           glib:type-struct="ClockClass">
      <function name="id_ref"
                c:identifier="gst_clock_id_ref"
                doc="Increase the refcount of given @id.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="ClockID" c:type="GstClockID"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <type name="ClockID" c:type="GstClockID"/>
          </parameter>
        </parameters>
      </function>
      <function name="id_unref"
                c:identifier="gst_clock_id_unref"
                doc="Unref given @id. When the refcount reaches 0 the
#GstClockID will be freed.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <type name="ClockID" c:type="GstClockID"/>
          </parameter>
        </parameters>
      </function>
      <function name="id_compare_func"
                c:identifier="gst_clock_id_compare_func">
        <return-value transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </return-value>
        <parameters>
          <parameter name="id1" transfer-ownership="none">
            <type name="any" c:type="gconstpointer"/>
          </parameter>
          <parameter name="id2" transfer-ownership="none">
            <type name="any" c:type="gconstpointer"/>
          </parameter>
        </parameters>
      </function>
      <function name="id_get_time" c:identifier="gst_clock_id_get_time">
        <return-value transfer-ownership="full">
          <type name="ClockTime" c:type="GstClockTime"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <type name="ClockID" c:type="GstClockID"/>
          </parameter>
        </parameters>
      </function>
      <function name="id_wait" c:identifier="gst_clock_id_wait">
        <return-value transfer-ownership="full">
          <type name="ClockReturn" c:type="GstClockReturn"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <type name="ClockID" c:type="GstClockID"/>
          </parameter>
          <parameter name="jitter" transfer-ownership="none">
            <type name="ClockTimeDiff" c:type="GstClockTimeDiff*"/>
          </parameter>
        </parameters>
      </function>
      <function name="id_wait_async"
                c:identifier="gst_clock_id_wait_async"
                doc="Register a callback on the given #GstClockID @id with the given
function and user_data. When passing a #GstClockID with an invalid
time to this function, the callback will be called immediately
with  a time set to GST_CLOCK_TIME_NONE. The callback will
be called when the time of @id has been reached.
The callback @func can be invoked from any thread, either provided by the
core or from a streaming thread. The application should be prepared for this.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="ClockReturn" c:type="GstClockReturn"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <type name="ClockID" c:type="GstClockID"/>
          </parameter>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="ClockCallback" c:type="GstClockCallback"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </function>
      <function name="id_unschedule"
                c:identifier="gst_clock_id_unschedule"
                doc="Cancel an outstanding request with @id. This can either
be an outstanding async notification or a pending sync notification.
After this call, @id cannot be used anymore to receive sync or
async notifications, you need to create a new #GstClockID.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <type name="ClockID" c:type="GstClockID"/>
          </parameter>
        </parameters>
      </function>
      <virtual-method name="change_resolution">
        <return-value transfer-ownership="full">
          <type name="ClockTime" c:type="GstClockTime"/>
        </return-value>
        <parameters>
          <parameter name="old_resolution" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
          <parameter name="new_resolution" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_resolution" invoker="get_resolution">
        <return-value transfer-ownership="full">
          <type name="ClockTime" c:type="GstClockTime"/>
        </return-value>
      </virtual-method>
      <virtual-method name="get_internal_time" invoker="get_internal_time">
        <return-value transfer-ownership="full">
          <type name="ClockTime" c:type="GstClockTime"/>
        </return-value>
      </virtual-method>
      <virtual-method name="wait">
        <return-value transfer-ownership="full">
          <type name="ClockReturn" c:type="GstClockReturn"/>
        </return-value>
        <parameters>
          <parameter name="entry" transfer-ownership="none">
            <type name="ClockEntry" c:type="GstClockEntry*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="wait_async">
        <return-value transfer-ownership="full">
          <type name="ClockReturn" c:type="GstClockReturn"/>
        </return-value>
        <parameters>
          <parameter name="entry" transfer-ownership="none">
            <type name="ClockEntry" c:type="GstClockEntry*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="unschedule">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="entry" transfer-ownership="none">
            <type name="ClockEntry" c:type="GstClockEntry*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="wait_jitter">
        <return-value transfer-ownership="full">
          <type name="ClockReturn" c:type="GstClockReturn"/>
        </return-value>
        <parameters>
          <parameter name="entry" transfer-ownership="none">
            <type name="ClockEntry" c:type="GstClockEntry*"/>
          </parameter>
          <parameter name="jitter" transfer-ownership="none">
            <type name="ClockTimeDiff" c:type="GstClockTimeDiff*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="set_resolution" c:identifier="gst_clock_set_resolution">
        <return-value transfer-ownership="full">
          <type name="ClockTime" c:type="GstClockTime"/>
        </return-value>
        <parameters>
          <parameter name="resolution" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_resolution" c:identifier="gst_clock_get_resolution">
        <return-value transfer-ownership="full">
          <type name="ClockTime" c:type="GstClockTime"/>
        </return-value>
      </method>
      <method name="get_time" c:identifier="gst_clock_get_time">
        <return-value transfer-ownership="full">
          <type name="ClockTime" c:type="GstClockTime"/>
        </return-value>
      </method>
      <method name="set_calibration" c:identifier="gst_clock_set_calibration">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="internal" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
          <parameter name="external" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
          <parameter name="rate_num" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
          <parameter name="rate_denom" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_calibration" c:identifier="gst_clock_get_calibration">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="internal" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime*"/>
          </parameter>
          <parameter name="external" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime*"/>
          </parameter>
          <parameter name="rate_num" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime*"/>
          </parameter>
          <parameter name="rate_denom" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_master" c:identifier="gst_clock_set_master">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="master" transfer-ownership="none">
            <type name="Clock" c:type="GstClock*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_master" c:identifier="gst_clock_get_master">
        <return-value transfer-ownership="full">
          <type name="Clock" c:type="GstClock*"/>
        </return-value>
      </method>
      <method name="add_observation" c:identifier="gst_clock_add_observation">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="slave" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
          <parameter name="master" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
          <parameter name="r_squared"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="double" c:type="gdouble*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_internal_time"
              c:identifier="gst_clock_get_internal_time">
        <return-value transfer-ownership="full">
          <type name="ClockTime" c:type="GstClockTime"/>
        </return-value>
      </method>
      <method name="adjust_unlocked" c:identifier="gst_clock_adjust_unlocked">
        <return-value transfer-ownership="full">
          <type name="ClockTime" c:type="GstClockTime"/>
        </return-value>
        <parameters>
          <parameter name="internal" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </method>
      <method name="unadjust_unlocked"
              c:identifier="gst_clock_unadjust_unlocked">
        <return-value transfer-ownership="full">
          <type name="ClockTime" c:type="GstClockTime"/>
        </return-value>
        <parameters>
          <parameter name="external" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </method>
      <method name="new_single_shot_id"
              c:identifier="gst_clock_new_single_shot_id">
        <return-value transfer-ownership="full">
          <type name="ClockID" c:type="GstClockID"/>
        </return-value>
        <parameters>
          <parameter name="time" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </method>
      <method name="new_periodic_id" c:identifier="gst_clock_new_periodic_id">
        <return-value transfer-ownership="full">
          <type name="ClockID" c:type="GstClockID"/>
        </return-value>
        <parameters>
          <parameter name="start_time" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
          <parameter name="interval" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </method>
      <property name="stats" writable="1">
        <type name="boolean" c:type="gboolean"/>
      </property>
      <property name="timeout" writable="1">
        <type name="uint64" c:type="guint64"/>
      </property>
      <property name="window-size" writable="1">
        <type name="int" c:type="gint"/>
      </property>
      <property name="window-threshold" writable="1">
        <type name="int" c:type="gint"/>
      </property>
      <field name="object">
        <type name="Object" c:type="GstObject"/>
      </field>
      <field name="slave_lock">
        <type name="GLib.Mutex" c:type="GMutex*"/>
      </field>
      <field name="internal_calibration">
        <type name="ClockTime" c:type="GstClockTime"/>
      </field>
      <field name="external_calibration">
        <type name="ClockTime" c:type="GstClockTime"/>
      </field>
      <field name="rate_numerator">
        <type name="ClockTime" c:type="GstClockTime"/>
      </field>
      <field name="rate_denominator">
        <type name="ClockTime" c:type="GstClockTime"/>
      </field>
      <field name="last_time">
        <type name="ClockTime" c:type="GstClockTime"/>
      </field>
      <field name="entries">
        <type name="GLib.List" c:type="GList*"/>
      </field>
      <field name="entries_changed">
        <type name="GLib.Cond" c:type="GCond*"/>
      </field>
      <field name="resolution">
        <type name="ClockTime" c:type="GstClockTime"/>
      </field>
      <field name="stats">
        <type name="boolean" c:type="gboolean"/>
      </field>
      <field name="master">
        <type name="Clock" c:type="GstClock*"/>
      </field>
      <field name="filling">
        <type name="boolean" c:type="gboolean"/>
      </field>
      <field name="window_size">
        <type name="int" c:type="gint"/>
      </field>
      <field name="window_threshold">
        <type name="int" c:type="gint"/>
      </field>
      <field name="time_index">
        <type name="int" c:type="gint"/>
      </field>
      <field name="timeout">
        <type name="ClockTime" c:type="GstClockTime"/>
      </field>
      <field name="times">
        <type name="ClockTime" c:type="GstClockTime*"/>
      </field>
      <field name="clockid">
        <type name="ClockID" c:type="GstClockID"/>
      </field>
      <union name="ABI" c:type="ABI">
        <field name="priv" writable="1">
          <type name="ClockPrivate" c:type="GstClockPrivate*"/>
        </field>
        <field name="_gst_reserved" writable="1">
          <array zero-terminated="0" c:type="GstClockTime" fixed-size="4">
            <type name="ClockTime"/>
          </array>
        </field>
      </union>
    </class>
    <callback name="ClockCallback"
              c:type="GstClockCallback"
              doc="The function prototype of the callback.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="clock" transfer-ownership="none">
          <type name="Clock" c:type="GstClock*"/>
        </parameter>
        <parameter name="time" transfer-ownership="none">
          <type name="ClockTime" c:type="GstClockTime"/>
        </parameter>
        <parameter name="id" transfer-ownership="none">
          <type name="ClockID" c:type="GstClockID"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   closure="3"
                   doc="function">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <record name="ClockClass"
            c:type="GstClockClass"
            glib:is-gtype-struct-for="Clock"
            doc="GStreamer clock class. Override the vmethods to implement the clock
functionality.">
      <field name="parent_class">
        <type name="ObjectClass" c:type="GstObjectClass"/>
      </field>
      <field name="change_resolution">
        <callback name="change_resolution" c:type="change_resolution">
          <return-value transfer-ownership="full">
            <type name="ClockTime" c:type="GstClockTime"/>
          </return-value>
          <parameters>
            <parameter name="clock" transfer-ownership="none">
              <type name="Clock" c:type="GstClock*"/>
            </parameter>
            <parameter name="old_resolution" transfer-ownership="none">
              <type name="ClockTime" c:type="GstClockTime"/>
            </parameter>
            <parameter name="new_resolution" transfer-ownership="none">
              <type name="ClockTime" c:type="GstClockTime"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_resolution">
        <callback name="get_resolution" c:type="get_resolution">
          <return-value transfer-ownership="full">
            <type name="ClockTime" c:type="GstClockTime"/>
          </return-value>
          <parameters>
            <parameter name="clock" transfer-ownership="none">
              <type name="Clock" c:type="GstClock*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_internal_time">
        <callback name="get_internal_time" c:type="get_internal_time">
          <return-value transfer-ownership="full">
            <type name="ClockTime" c:type="GstClockTime"/>
          </return-value>
          <parameters>
            <parameter name="clock" transfer-ownership="none">
              <type name="Clock" c:type="GstClock*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="wait">
        <callback name="wait" c:type="wait">
          <return-value transfer-ownership="full">
            <type name="ClockReturn" c:type="GstClockReturn"/>
          </return-value>
          <parameters>
            <parameter name="clock" transfer-ownership="none">
              <type name="Clock" c:type="GstClock*"/>
            </parameter>
            <parameter name="entry" transfer-ownership="none">
              <type name="ClockEntry" c:type="GstClockEntry*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="wait_async">
        <callback name="wait_async" c:type="wait_async">
          <return-value transfer-ownership="full">
            <type name="ClockReturn" c:type="GstClockReturn"/>
          </return-value>
          <parameters>
            <parameter name="clock" transfer-ownership="none">
              <type name="Clock" c:type="GstClock*"/>
            </parameter>
            <parameter name="entry" transfer-ownership="none">
              <type name="ClockEntry" c:type="GstClockEntry*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="unschedule">
        <callback name="unschedule" c:type="unschedule">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="clock" transfer-ownership="none">
              <type name="Clock" c:type="GstClock*"/>
            </parameter>
            <parameter name="entry" transfer-ownership="none">
              <type name="ClockEntry" c:type="GstClockEntry*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="wait_jitter">
        <callback name="wait_jitter" c:type="wait_jitter">
          <return-value transfer-ownership="full">
            <type name="ClockReturn" c:type="GstClockReturn"/>
          </return-value>
          <parameters>
            <parameter name="clock" transfer-ownership="none">
              <type name="Clock" c:type="GstClock*"/>
            </parameter>
            <parameter name="entry" transfer-ownership="none">
              <type name="ClockEntry" c:type="GstClockEntry*"/>
            </parameter>
            <parameter name="jitter" transfer-ownership="none">
              <type name="ClockTimeDiff" c:type="GstClockTimeDiff*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="3">
          <type name="any"/>
        </array>
      </field>
    </record>
    <record name="ClockEntry"
            c:type="GstClockEntry"
            doc="All pending timeouts or periodic notifies are converted into
an entry.">
      <field name="refcount" writable="1">
        <type name="int" c:type="gint"/>
      </field>
      <field name="clock" writable="1">
        <type name="Clock" c:type="GstClock*"/>
      </field>
      <field name="type" writable="1">
        <type name="ClockEntryType" c:type="GstClockEntryType"/>
      </field>
      <field name="time" writable="1">
        <type name="ClockTime" c:type="GstClockTime"/>
      </field>
      <field name="interval" writable="1">
        <type name="ClockTime" c:type="GstClockTime"/>
      </field>
      <field name="status" writable="1">
        <type name="ClockReturn" c:type="GstClockReturn"/>
      </field>
      <field name="func" writable="1">
        <type name="ClockCallback" c:type="GstClockCallback"/>
      </field>
      <field name="user_data" writable="1">
        <type name="any" c:type="gpointer"/>
      </field>
    </record>
    <enumeration name="ClockEntryType"
                 doc="The type of the clock entry"
                 c:type="GstClockEntryType">
      <member name="single" value="0" c:identifier="GST_CLOCK_ENTRY_SINGLE"/>
      <member name="periodic"
              value="1"
              c:identifier="GST_CLOCK_ENTRY_PERIODIC"/>
    </enumeration>
    <bitfield name="ClockFlags"
              doc="The capabilities of this clock"
              c:type="GstClockFlags">
      <member name="can_do_single_sync"
              value="16"
              c:identifier="GST_CLOCK_FLAG_CAN_DO_SINGLE_SYNC"/>
      <member name="can_do_single_async"
              value="32"
              c:identifier="GST_CLOCK_FLAG_CAN_DO_SINGLE_ASYNC"/>
      <member name="can_do_periodic_sync"
              value="64"
              c:identifier="GST_CLOCK_FLAG_CAN_DO_PERIODIC_SYNC"/>
      <member name="can_do_periodic_async"
              value="128"
              c:identifier="GST_CLOCK_FLAG_CAN_DO_PERIODIC_ASYNC"/>
      <member name="can_set_resolution"
              value="256"
              c:identifier="GST_CLOCK_FLAG_CAN_SET_RESOLUTION"/>
      <member name="can_set_master"
              value="512"
              c:identifier="GST_CLOCK_FLAG_CAN_SET_MASTER"/>
      <member name="last" value="4096" c:identifier="GST_CLOCK_FLAG_LAST"/>
    </bitfield>
    <record name="ClockPrivate" c:type="GstClockPrivate">
    </record>
    <enumeration name="ClockReturn"
                 doc="The return value of a clock operation."
                 c:type="GstClockReturn">
      <member name="ok" value="0" c:identifier="GST_CLOCK_OK"/>
      <member name="early" value="1" c:identifier="GST_CLOCK_EARLY"/>
      <member name="unscheduled"
              value="2"
              c:identifier="GST_CLOCK_UNSCHEDULED"/>
      <member name="busy" value="3" c:identifier="GST_CLOCK_BUSY"/>
      <member name="badtime" value="4" c:identifier="GST_CLOCK_BADTIME"/>
      <member name="error" value="5" c:identifier="GST_CLOCK_ERROR"/>
      <member name="unsupported"
              value="6"
              c:identifier="GST_CLOCK_UNSUPPORTED"/>
    </enumeration>
    <enumeration name="ClockType"
                 doc="The different kind of clocks."
                 c:type="GstClockType">
      <member name="realtime"
              value="0"
              c:identifier="GST_CLOCK_TYPE_REALTIME"/>
      <member name="monotonic"
              value="1"
              c:identifier="GST_CLOCK_TYPE_MONOTONIC"/>
    </enumeration>
    <callback name="CopyFunction"
              c:type="GstCopyFunction"
              doc="A function to create a copy of some object or
increase its reference count."
              version="0.10.25">
      <return-value transfer-ownership="none">
        <type name="any" c:type="gpointer"/>
      </return-value>
      <parameters>
        <parameter name="object" transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <enumeration name="CoreError"
                 doc="Core errors are errors inside the core GStreamer library."
                 c:type="GstCoreError"
                 glib:error-quark="gst_core_error_quark">
      <member name="failed" value="1" c:identifier="GST_CORE_ERROR_FAILED"/>
      <member name="too_lazy"
              value="2"
              c:identifier="GST_CORE_ERROR_TOO_LAZY"/>
      <member name="not_implemented"
              value="3"
              c:identifier="GST_CORE_ERROR_NOT_IMPLEMENTED"/>
      <member name="state_change"
              value="4"
              c:identifier="GST_CORE_ERROR_STATE_CHANGE"/>
      <member name="pad" value="5" c:identifier="GST_CORE_ERROR_PAD"/>
      <member name="thread" value="6" c:identifier="GST_CORE_ERROR_THREAD"/>
      <member name="negotiation"
              value="7"
              c:identifier="GST_CORE_ERROR_NEGOTIATION"/>
      <member name="event" value="8" c:identifier="GST_CORE_ERROR_EVENT"/>
      <member name="seek" value="9" c:identifier="GST_CORE_ERROR_SEEK"/>
      <member name="caps" value="10" c:identifier="GST_CORE_ERROR_CAPS"/>
      <member name="tag" value="11" c:identifier="GST_CORE_ERROR_TAG"/>
      <member name="missing_plugin"
              value="12"
              c:identifier="GST_CORE_ERROR_MISSING_PLUGIN"/>
      <member name="clock" value="13" c:identifier="GST_CORE_ERROR_CLOCK"/>
      <member name="disabled"
              value="14"
              c:identifier="GST_CORE_ERROR_DISABLED"/>
      <member name="num_errors"
              value="15"
              c:identifier="GST_CORE_ERROR_NUM_ERRORS"/>
    </enumeration>
    <constant name="DEBUG_BG_MASK" value="240">
      <type name="int"/>
    </constant>
    <constant name="DEBUG_FG_MASK" value="15">
      <type name="int"/>
    </constant>
    <constant name="DEBUG_FORMAT_MASK" value="65280">
      <type name="int"/>
    </constant>
    <glib:boxed c:type="GstDate"
                glib:name="Date"
                glib:type-name="GstDate"
                glib:get-type="gst_date_get_type">
    </glib:boxed>
    <record name="DebugCategory"
            c:type="GstDebugCategory"
            doc="This is the struct that describes the categories. Once initialized with
#GST_DEBUG_CATEGORY_INIT, its values can&apos;t be changed anymore.">
      <field name="threshold" writable="1">
        <type name="int" c:type="gint"/>
      </field>
      <field name="color" writable="1">
        <type name="uint" c:type="guint"/>
      </field>
      <field name="name" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="description" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <method name="free"
              c:identifier="gst_debug_category_free"
              doc="Removes and frees the category and all associated resources.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="set_threshold"
              c:identifier="gst_debug_category_set_threshold"
              doc="Sets the threshold of the category to the given level. Debug information will
only be output if the threshold is lower or equal to the level of the
debugging message.
&lt;note&gt;&lt;para&gt;
Do not use this function in production code, because other functions may
change the threshold of categories as side effect. It is however a nice
function to use when debugging (even from gdb).
&lt;/para&gt;&lt;/note&gt;">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="level" transfer-ownership="none">
            <type name="DebugLevel" c:type="GstDebugLevel"/>
          </parameter>
        </parameters>
      </method>
      <method name="reset_threshold"
              c:identifier="gst_debug_category_reset_threshold"
              doc="Resets the threshold of the category to the default level. Debug information
will only be output if the threshold is lower or equal to the level of the
debugging message.
Use this function to set the threshold back to where it was after using
gst_debug_category_set_threshold().">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="get_threshold"
              c:identifier="gst_debug_category_get_threshold"
              doc="Returns the threshold of a #GstDebugCategory.">
        <return-value transfer-ownership="full">
          <type name="DebugLevel" c:type="GstDebugLevel"/>
        </return-value>
      </method>
      <method name="get_name"
              c:identifier="gst_debug_category_get_name"
              doc="Returns the name of a debug category.">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="get_color"
              c:identifier="gst_debug_category_get_color"
              doc="Returns the color of a debug category used when printing output in this
category.">
        <return-value transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </return-value>
      </method>
      <method name="get_description"
              c:identifier="gst_debug_category_get_description"
              doc="Returns the description of a debug category.">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
    </record>
    <enumeration name="DebugColorFlags"
                 doc="These are some terminal style flags you can use when creating your
debugging categories to make them stand out in debugging output."
                 c:type="GstDebugColorFlags">
      <member name="fg_black" value="0" c:identifier="GST_DEBUG_FG_BLACK"/>
      <member name="fg_red" value="1" c:identifier="GST_DEBUG_FG_RED"/>
      <member name="fg_green" value="2" c:identifier="GST_DEBUG_FG_GREEN"/>
      <member name="fg_yellow" value="3" c:identifier="GST_DEBUG_FG_YELLOW"/>
      <member name="fg_blue" value="4" c:identifier="GST_DEBUG_FG_BLUE"/>
      <member name="fg_magenta" value="5" c:identifier="GST_DEBUG_FG_MAGENTA"/>
      <member name="fg_cyan" value="6" c:identifier="GST_DEBUG_FG_CYAN"/>
      <member name="fg_white" value="7" c:identifier="GST_DEBUG_FG_WHITE"/>
      <member name="bg_black" value="0" c:identifier="GST_DEBUG_BG_BLACK"/>
      <member name="bg_red" value="16" c:identifier="GST_DEBUG_BG_RED"/>
      <member name="bg_green" value="32" c:identifier="GST_DEBUG_BG_GREEN"/>
      <member name="bg_yellow" value="48" c:identifier="GST_DEBUG_BG_YELLOW"/>
      <member name="bg_blue" value="64" c:identifier="GST_DEBUG_BG_BLUE"/>
      <member name="bg_magenta"
              value="80"
              c:identifier="GST_DEBUG_BG_MAGENTA"/>
      <member name="bg_cyan" value="96" c:identifier="GST_DEBUG_BG_CYAN"/>
      <member name="bg_white" value="112" c:identifier="GST_DEBUG_BG_WHITE"/>
      <member name="bold" value="256" c:identifier="GST_DEBUG_BOLD"/>
      <member name="underline" value="512" c:identifier="GST_DEBUG_UNDERLINE"/>
    </enumeration>
    <callback name="DebugFuncPtr" c:type="GstDebugFuncPtr">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
    </callback>
    <bitfield name="DebugGraphDetails"
              doc="Available details for pipeline graphs produced by GST_DEBUG_BIN_TO_DOT_FILE()
and GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS()."
              version="0.10.15"
              c:type="GstDebugGraphDetails">
      <member name="media_type"
              value="1"
              c:identifier="GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE"/>
      <member name="caps_details"
              value="2"
              c:identifier="GST_DEBUG_GRAPH_SHOW_CAPS_DETAILS"/>
      <member name="non_default_params"
              value="4"
              c:identifier="GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS"/>
      <member name="states"
              value="8"
              c:identifier="GST_DEBUG_GRAPH_SHOW_STATES"/>
      <member name="all" value="15" c:identifier="GST_DEBUG_GRAPH_SHOW_ALL"/>
    </bitfield>
    <enumeration name="DebugLevel"
                 doc="The level defines the importance of a debugging message. The more important a
message is, the greater the probability that the debugging system outputs it."
                 c:type="GstDebugLevel">
      <member name="none" value="0" c:identifier="GST_LEVEL_NONE"/>
      <member name="error" value="1" c:identifier="GST_LEVEL_ERROR"/>
      <member name="warning" value="2" c:identifier="GST_LEVEL_WARNING"/>
      <member name="info" value="3" c:identifier="GST_LEVEL_INFO"/>
      <member name="debug" value="4" c:identifier="GST_LEVEL_DEBUG"/>
      <member name="log" value="5" c:identifier="GST_LEVEL_LOG"/>
      <member name="fixme" value="6" c:identifier="GST_LEVEL_FIXME"/>
      <member name="memdump" value="9" c:identifier="GST_LEVEL_MEMDUMP"/>
      <member name="count" value="10" c:identifier="GST_LEVEL_COUNT"/>
    </enumeration>
    <record name="DebugMessage" c:type="GstDebugMessage">
      <method name="get"
              c:identifier="gst_debug_message_get"
              doc="Gets the string representation of a #GstDebugMessage. This function is used
in debug handlers to extract the message.">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
    </record>
    <constant name="ERROR_SYSTEM" value="system error: %s">
      <type name="utf8"/>
    </constant>
    <constant name="EVENT_TRACE_NAME" value="GstEvent">
      <type name="utf8"/>
    </constant>
    <constant name="EVENT_TYPE_BOTH" value="0">
      <type name="int"/>
    </constant>
    <constant name="EVENT_TYPE_SHIFT" value="4">
      <type name="int"/>
    </constant>
    <class name="Element"
           c:type="GstElement"
           doc="GStreamer element abstract base class."
           parent="Object"
           abstract="1"
           glib:type-name="GstElement"
           glib:get-type="gst_element_get_type"
           glib:type-struct="ElementClass">
      <function name="register"
                c:identifier="gst_element_register"
                doc="Create a new elementfactory capable of instantiating objects of the">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="plugin"
                     transfer-ownership="none"
                     doc=" element (note that passing NULL only works in GStreamer 0.10.13 and later)">
            <type name="Plugin" c:type="GstPlugin*"/>
          </parameter>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="rank" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </function>
      <function name="make_from_uri"
                c:identifier="gst_element_make_from_uri"
                doc="Creates an element for handling the given URI.">
        <return-value transfer-ownership="full">
          <type name="Element" c:type="GstElement*"/>
        </return-value>
        <parameters>
          <parameter name="type" transfer-ownership="none">
            <type name="URIType" c:type="GstURIType"/>
          </parameter>
          <parameter name="uri" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="elementname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </function>
      <function name="state_get_name"
                c:identifier="gst_element_state_get_name"
                doc="Gets a string representing the given state.">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <parameter name="state" transfer-ownership="none">
            <type name="State" c:type="GstState"/>
          </parameter>
        </parameters>
      </function>
      <function name="state_change_return_get_name"
                c:identifier="gst_element_state_change_return_get_name"
                doc="Gets a string representing the given state change result."
                version="0.10.11">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <parameter name="state_ret" transfer-ownership="none">
            <type name="StateChangeReturn" c:type="GstStateChangeReturn"/>
          </parameter>
        </parameters>
      </function>
      <virtual-method name="request_new_pad">
        <return-value transfer-ownership="full">
          <type name="Pad" c:type="GstPad*"/>
        </return-value>
        <parameters>
          <parameter name="templ" transfer-ownership="none">
            <type name="PadTemplate" c:type="GstPadTemplate*"/>
          </parameter>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="release_pad">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="pad" transfer-ownership="none">
            <type name="Pad" c:type="GstPad*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_state" invoker="get_state">
        <return-value transfer-ownership="full">
          <type name="StateChangeReturn" c:type="GstStateChangeReturn"/>
        </return-value>
        <parameters>
          <parameter name="state" transfer-ownership="none">
            <type name="State" c:type="GstState*"/>
          </parameter>
          <parameter name="pending" transfer-ownership="none">
            <type name="State" c:type="GstState*"/>
          </parameter>
          <parameter name="timeout" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="set_state" invoker="set_state">
        <return-value transfer-ownership="full">
          <type name="StateChangeReturn" c:type="GstStateChangeReturn"/>
        </return-value>
        <parameters>
          <parameter name="state" transfer-ownership="none">
            <type name="State" c:type="GstState"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="change_state" invoker="change_state">
        <return-value transfer-ownership="full">
          <type name="StateChangeReturn" c:type="GstStateChangeReturn"/>
        </return-value>
        <parameters>
          <parameter name="transition" transfer-ownership="none">
            <type name="StateChange" c:type="GstStateChange"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="set_bus" invoker="set_bus">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="bus" transfer-ownership="none">
            <type name="Bus" c:type="GstBus*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="provide_clock" invoker="provide_clock">
        <return-value transfer-ownership="full">
          <type name="Clock" c:type="GstClock*"/>
        </return-value>
      </virtual-method>
      <virtual-method name="set_clock" invoker="set_clock">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="clock" transfer-ownership="none">
            <type name="Clock" c:type="GstClock*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_index" invoker="get_index">
        <return-value transfer-ownership="full">
          <type name="Index" c:type="GstIndex*"/>
        </return-value>
      </virtual-method>
      <virtual-method name="set_index" invoker="set_index">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="index" transfer-ownership="none">
            <type name="Index" c:type="GstIndex*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="send_event" invoker="send_event">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="event" transfer-ownership="none">
            <type name="Event" c:type="GstEvent*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_query_types" invoker="get_query_types">
        <return-value transfer-ownership="none">
          <type name="QueryType" c:type="GstQueryType*"/>
        </return-value>
      </virtual-method>
      <virtual-method name="query" invoker="query">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="query" transfer-ownership="none">
            <type name="Query" c:type="GstQuery*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="requires_clock"
              c:identifier="gst_element_requires_clock"
              doc="Query if the element requires a clock.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="provides_clock"
              c:identifier="gst_element_provides_clock"
              doc="Query if the element provides a clock. A #GstClock provided by an
element can be used as the global #GstClock for the pipeline.
An element that can provide a clock is only required to do so in the PAUSED
state, this means when it is fully negotiated and has allocated the resources
to operate the clock.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="provide_clock"
              c:identifier="gst_element_provide_clock"
              doc="Get the clock provided by the given element.
&lt;note&gt;An element is only required to provide a clock in the PAUSED
state. Some elements can provide a clock in other states.&lt;/note&gt;
if no clock could be provided.  Unref after usage.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Clock" c:type="GstClock*"/>
        </return-value>
      </method>
      <method name="get_clock"
              c:identifier="gst_element_get_clock"
              doc="Gets the currently configured clock of the element. This is the clock as was
last set with gst_element_set_clock().
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Clock" c:type="GstClock*"/>
        </return-value>
      </method>
      <method name="set_clock"
              c:identifier="gst_element_set_clock"
              doc="Sets the clock for the element. This function increases the
refcount on the clock. Any previously set clock on the object
is unreffed.
clock when it, for example, is not able to slave its internal clock to the
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="clock" transfer-ownership="none">
            <type name="Clock" c:type="GstClock*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_base_time"
              c:identifier="gst_element_set_base_time"
              doc="Set the base time of an element. See gst_element_get_base_time().
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="time" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_base_time"
              c:identifier="gst_element_get_base_time"
              doc="Returns the base time of the element. The base time is the
absolute time of the clock when this element was last put to
PLAYING. Subtracting the base time from the clock time gives
the running time of the element.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="ClockTime" c:type="GstClockTime"/>
        </return-value>
      </method>
      <method name="set_start_time"
              c:identifier="gst_element_set_start_time"
              doc="Set the start time of an element. The start time of the element is the
running time of the element when it last went to the PAUSED state. In READY
or after a flushing seek, it is set to 0.
Toplevel elements like #GstPipeline will manage the start_time and
base_time on its children. Setting the start_time to #GST_CLOCK_TIME_NONE
on such a toplevel element will disable the distribution of the base_time to
the children and can be useful if the application manages the base_time
itself, for example if you want to synchronize capture from multiple
pipelines, and you can also ensure that the pipelines have the same clock.
MT safe."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="time" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_start_time"
              c:identifier="gst_element_get_start_time"
              doc="Returns the start time of the element. The start time is the
running time of the clock when this element was last put to PAUSED.
Usually the start_time is managed by a toplevel element such as
#GstPipeline.
MT safe."
              version="0.10.24">
        <return-value transfer-ownership="full">
          <type name="ClockTime" c:type="GstClockTime"/>
        </return-value>
      </method>
      <method name="is_indexable"
              c:identifier="gst_element_is_indexable"
              doc="Queries if the element can be indexed.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="set_index"
              c:identifier="gst_element_set_index"
              doc="Set @index on the element. The refcount of the index
will be increased, any previously set index is unreffed.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="index" transfer-ownership="none">
            <type name="Index" c:type="GstIndex*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_index"
              c:identifier="gst_element_get_index"
              doc="Gets the index from the element.
element. unref after usage.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Index" c:type="GstIndex*"/>
        </return-value>
      </method>
      <method name="set_bus"
              c:identifier="gst_element_set_bus"
              doc="Sets the bus of the element. Increases the refcount on the bus.
For internal use only, unless you&apos;re testing elements.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="bus" transfer-ownership="none">
            <type name="Bus" c:type="GstBus*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_bus"
              c:identifier="gst_element_get_bus"
              doc="Returns the bus of the element. Note that only a #GstPipeline will provide a
bus for the application.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Bus" c:type="GstBus*"/>
        </return-value>
      </method>
      <method name="add_pad"
              c:identifier="gst_element_add_pad"
              doc="Adds a pad (link point) to @element. @pad&apos;s parent will be set to @element;
see gst_object_set_parent() for refcounting information.
Pads are not automatically activated so elements should perform the needed
steps to activate the pad in case this pad is added in the PAUSED or PLAYING
state. See gst_pad_set_active() for more information about activating pads.
The pad and the element should be unlocked when calling this function.
This function will emit the #GstElement::pad-added signal on the element.
a pad with the same name already existed or the pad already had another
parent.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="pad" transfer-ownership="none">
            <type name="Pad" c:type="GstPad*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_pad"
              c:identifier="gst_element_remove_pad"
              doc="Removes @pad from @element. @pad will be destroyed if it has not been
referenced elsewhere using gst_object_unparent().
This function is used by plugin developers and should not be used
by applications. Pads that were dynamically requested from elements
with gst_element_get_request_pad() should be released with the
gst_element_release_request_pad() function instead.
Pads are not automatically deactivated so elements should perform the needed
steps to deactivate the pad in case this pad is removed in the PAUSED or
PLAYING state. See gst_pad_set_active() for more information about
deactivating pads.
The pad and the element should be unlocked when calling this function.
This function will emit the #GstElement::pad-removed signal on the element.
pad does not belong to the provided element.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="pad" transfer-ownership="none">
            <type name="Pad" c:type="GstPad*"/>
          </parameter>
        </parameters>
      </method>
      <method name="no_more_pads"
              c:identifier="gst_element_no_more_pads"
              doc="Use this function to signal that the element does not expect any more pads
to show up in the current pipeline. This function should be called whenever
pads have been added by the element itself. Elements with #GST_PAD_SOMETIMES
pad templates use this in combination with autopluggers to figure out that
the element is done initializing its pads.
This function emits the #GstElement::no-more-pads signal.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="get_pad"
              c:identifier="gst_element_get_pad"
              doc="Retrieves a pad from @element by name. Tries gst_element_get_static_pad()
first, then gst_element_get_request_pad().
to the result pad should be released with gst_object_unref() in case of a static pad
or gst_element_release_request_pad() in case of a request pad.
Use gst_element_get_static_pad() or gst_element_get_request_pad() instead.
depending on the type of the pad."
              deprecated="This function is deprecated as it&apos;s unclear if the reference">
        <return-value transfer-ownership="full">
          <type name="Pad" c:type="GstPad*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_static_pad"
              c:identifier="gst_element_get_static_pad"
              doc="Retrieves a pad from @element by name. This version only retrieves
already-existing (i.e. &apos;static&apos;) pads.
usage.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Pad" c:type="GstPad*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_request_pad"
              c:identifier="gst_element_get_request_pad"
              doc="Retrieves a pad from the element by name. This version only retrieves
request pads. The pad should be released with
gst_element_release_request_pad().">
        <return-value transfer-ownership="full">
          <type name="Pad" c:type="GstPad*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="release_request_pad"
              c:identifier="gst_element_release_request_pad"
              doc="Makes the element free the previously requested pad as obtained
with gst_element_get_request_pad().
This does not unref the pad. If the pad was created by using
gst_element_get_request_pad(), gst_element_release_request_pad() needs to be
followed by gst_object_unref() to free the @pad.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="pad" transfer-ownership="none">
            <type name="Pad" c:type="GstPad*"/>
          </parameter>
        </parameters>
      </method>
      <method name="iterate_pads"
              c:identifier="gst_element_iterate_pads"
              doc="Retrieves an iterattor of @element&apos;s pads. The iterator should
be freed after usage.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Iterator" c:type="GstIterator*"/>
        </return-value>
      </method>
      <method name="iterate_src_pads"
              c:identifier="gst_element_iterate_src_pads"
              doc="Retrieves an iterator of @element&apos;s source pads.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Iterator" c:type="GstIterator*"/>
        </return-value>
      </method>
      <method name="iterate_sink_pads"
              c:identifier="gst_element_iterate_sink_pads"
              doc="Retrieves an iterator of @element&apos;s sink pads.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Iterator" c:type="GstIterator*"/>
        </return-value>
      </method>
      <method name="send_event"
              c:identifier="gst_element_send_event"
              doc="Sends an event to an element. If the element doesn&apos;t implement an
event handler, the event will be pushed on a random linked sink pad for
upstream events or a random linked source pad for downstream events.
This function takes owership of the provided event so you should
gst_event_ref() it if you want to reuse the event after this call.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="event" transfer-ownership="none">
            <type name="Event" c:type="GstEvent*"/>
          </parameter>
        </parameters>
      </method>
      <method name="seek"
              c:identifier="gst_element_seek"
              doc="Sends a seek event to an element. See gst_event_new_seek() for the details of
the parameters. The seek event is sent to the element using
gst_element_send_event().
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="rate" transfer-ownership="none">
            <type name="double" c:type="gdouble"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <type name="SeekFlags" c:type="GstSeekFlags"/>
          </parameter>
          <parameter name="cur_type" transfer-ownership="none">
            <type name="SeekType" c:type="GstSeekType"/>
          </parameter>
          <parameter name="cur" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="stop_type" transfer-ownership="none">
            <type name="SeekType" c:type="GstSeekType"/>
          </parameter>
          <parameter name="stop" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_query_types"
              c:identifier="gst_element_get_query_types"
              doc="Get an array of query types from the element.
If the element doesn&apos;t implement a query types function,
the query will be forwarded to the peer of a random linked sink pad.
be freed or modified.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="QueryType" c:type="GstQueryType*"/>
        </return-value>
      </method>
      <method name="query"
              c:identifier="gst_element_query"
              doc="Performs a query on the given element.
For elements that don&apos;t implement a query handler, this function
forwards the query to a random srcpad or to the peer of a
random linked sinkpad of this element.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="query" transfer-ownership="none">
            <type name="Query" c:type="GstQuery*"/>
          </parameter>
        </parameters>
      </method>
      <method name="post_message"
              c:identifier="gst_element_post_message"
              doc="Post a message on the element&apos;s #GstBus. This function takes ownership of the
message; if you want to access the message after this call, you should add an
additional reference before calling.
%FALSE if the element did not have a bus.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="message" transfer-ownership="none">
            <type name="Message" c:type="GstMessage*"/>
          </parameter>
        </parameters>
      </method>
      <method name="message_full"
              c:identifier="gst_element_message_full"
              doc="Post an error, warning or info message on the bus from inside an element.
#GST_MESSAGE_INFO.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="type" transfer-ownership="none">
            <type name="MessageType" c:type="GstMessageType"/>
          </parameter>
          <parameter name="domain" transfer-ownership="none">
            <type name="GLib.Quark" c:type="GQuark"/>
          </parameter>
          <parameter name="code" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="text"
                     transfer-ownership="full"
                     doc=" default message connected to code, or %NULL">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="debug"
                     transfer-ownership="full"
                     doc=" default debugging information, or %NULL">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="file" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="function" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="line" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_locked_state"
              c:identifier="gst_element_is_locked_state"
              doc="Checks if the state of an element is locked.
If the state of an element is locked, state changes of the parent don&apos;t
affect the element.
This way you can leave currently unused elements inside bins. Just lock their
state before changing the state from #GST_STATE_NULL.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="set_locked_state"
              c:identifier="gst_element_set_locked_state"
              doc="Locks the state of an element, so state changes of the parent don&apos;t affect
this element anymore.
MT safe.
or the elements state-locking needed no change.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="locked_state" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="sync_state_with_parent"
              c:identifier="gst_element_sync_state_with_parent"
              doc="Tries to change the state of the element to the same as its parent.
If this function returns FALSE, the state of element is undefined.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="get_state"
              c:identifier="gst_element_get_state"
              doc="Gets the state of the element.
For elements that performed an ASYNC state change, as reported by
gst_element_set_state(), this function will block up to the
specified timeout value for the state change to complete.
If the element completes the state change or goes into
an error, this function returns immediately with a return value of
%GST_STATE_CHANGE_SUCCESS or %GST_STATE_CHANGE_FAILURE respectively.
For elements that did not return %GST_STATE_CHANGE_ASYNC, this function
returns the current and pending state immediately.
This function returns %GST_STATE_CHANGE_NO_PREROLL if the element
successfully changed its state but is not able to provide data yet.
This mostly happens for live sources that only produce data in
%GST_STATE_PLAYING. While the state change return is equivalent to
%GST_STATE_CHANGE_SUCCESS, it is returned to the application to signal that
some sink elements might not be able to complete their state change because
an element is not producing data to complete the preroll. When setting the
element to playing, the preroll will complete and playback will start.
and the last state change succeeded, %GST_STATE_CHANGE_ASYNC if the
element is still performing a state change or
%GST_STATE_CHANGE_FAILURE if the last state change failed.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="StateChangeReturn" c:type="GstStateChangeReturn"/>
        </return-value>
        <parameters>
          <parameter name="state"
                     direction="out"
                     caller-allocates="1"
                     transfer-ownership="none"
                     doc="a pointer to #GstState to hold the state. Can be %NULL.">
            <type name="State" c:type="GstState*"/>
          </parameter>
          <parameter name="pending"
                     direction="out"
                     caller-allocates="1"
                     transfer-ownership="none"
                     doc="a pointer to #GstState to hold the pending state. Can be %NULL.">
            <type name="State" c:type="GstState*"/>
          </parameter>
          <parameter name="timeout"
                     transfer-ownership="none"
                     doc=" state change or %GST_CLOCK_TIME_NONE for infinite timeout.">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_state"
              c:identifier="gst_element_set_state"
              doc="Sets the state of the element. This function will try to set the
requested state by going through all the intermediary states and calling
the class&apos;s state change function for each.
This function can return #GST_STATE_CHANGE_ASYNC, in which case the
element will perform the remainder of the state change asynchronously in
another thread.
An application can use gst_element_get_state() to wait for the completion
of the state change or it can wait for a state change message on the bus.
State changes to %GST_STATE_READY or %GST_STATE_NULL never return
#GST_STATE_CHANGE_ASYNC.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="StateChangeReturn" c:type="GstStateChangeReturn"/>
        </return-value>
        <parameters>
          <parameter name="state" transfer-ownership="none">
            <type name="State" c:type="GstState"/>
          </parameter>
        </parameters>
      </method>
      <method name="abort_state"
              c:identifier="gst_element_abort_state"
              doc="Abort the state change of the element. This function is used
by elements that do asynchronous state changes and find out
something is wrong.
This function should be called with the STATE_LOCK held.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="change_state"
              c:identifier="gst_element_change_state"
              doc="Perform @transition on @element.
This function must be called with STATE_LOCK held and is mainly used
internally.">
        <return-value transfer-ownership="full">
          <type name="StateChangeReturn" c:type="GstStateChangeReturn"/>
        </return-value>
        <parameters>
          <parameter name="transition" transfer-ownership="none">
            <type name="StateChange" c:type="GstStateChange"/>
          </parameter>
        </parameters>
      </method>
      <method name="continue_state"
              c:identifier="gst_element_continue_state"
              doc="Commit the state change of the element and proceed to the next
pending state if any. This function is used
by elements that do asynchronous state changes.
The core will normally call this method automatically when an
element returned %GST_STATE_CHANGE_SUCCESS from the state change function.
If after calling this method the element still has not reached
the pending state, the next state change is performed.
This method is used internally and should normally not be called by plugins
or applications.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="StateChangeReturn" c:type="GstStateChangeReturn"/>
        </return-value>
        <parameters>
          <parameter name="ret" transfer-ownership="none">
            <type name="StateChangeReturn" c:type="GstStateChangeReturn"/>
          </parameter>
        </parameters>
      </method>
      <method name="lost_state"
              c:identifier="gst_element_lost_state"
              doc="Brings the element to the lost state. This function calls
gst_element_lost_state_full() with the new_base_time set to %TRUE.
This function is used internally and should normally not be called from
plugins or applications.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="lost_state_full"
              c:identifier="gst_element_lost_state_full"
              doc="Brings the element to the lost state. The current state of the
element is copied to the pending state so that any call to
gst_element_get_state() will return %GST_STATE_CHANGE_ASYNC.
An ASYNC_START message is posted with indication to distribute a new
base_time to the element when @new_base_time is %TRUE.
If the element was PLAYING, it will go to PAUSED. The element
will be restored to its PLAYING state by the parent pipeline when it
prerolls again.
This is mostly used for elements that lost their preroll buffer
in the %GST_STATE_PAUSED or %GST_STATE_PLAYING state after a flush,
they will go to their pending state again when a new preroll buffer is
queued. This function can only be called when the element is currently
not in error or an async state change.
This function is used internally and should normally not be called from
plugins or applications.
MT safe."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="new_base_time" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_factory"
              c:identifier="gst_element_get_factory"
              doc="Retrieves the factory that was used to create this element.
no refcounting is needed.">
        <return-value transfer-ownership="full">
          <type name="ElementFactory" c:type="GstElementFactory*"/>
        </return-value>
      </method>
      <method name="implements_interface"
              c:identifier="gst_element_implements_interface"
              doc="Test whether the given element implements a certain interface of type
iface_type, and test whether it is supported for this specific instance.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="iface_type"
                     transfer-ownership="none"
                     doc="type of the interface which we want to be implemented">
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_all_pads"
              c:identifier="gst_element_create_all_pads"
              doc="Creates a pad for each pad template that is always available.
This function is only useful during object intialization of
subclasses of #GstElement.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="get_compatible_pad"
              c:identifier="gst_element_get_compatible_pad"
              doc="Looks for an unlinked pad to which the given pad can link. It is not
guaranteed that linking the pads will work, though it should work in most
cases.
found. gst_object_unref() after usage.">
        <return-value transfer-ownership="full">
          <type name="Pad" c:type="GstPad*"/>
        </return-value>
        <parameters>
          <parameter name="pad" transfer-ownership="none">
            <type name="Pad" c:type="GstPad*"/>
          </parameter>
          <parameter name="caps" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_compatible_pad_template"
              c:identifier="gst_element_get_compatible_pad_template"
              doc="Retrieves a pad template from @element that is compatible with @compattempl.
Pads from compatible templates can be linked together.
unreferencing is necessary.">
        <return-value transfer-ownership="full">
          <type name="PadTemplate" c:type="GstPadTemplate*"/>
        </return-value>
        <parameters>
          <parameter name="compattempl" transfer-ownership="none">
            <type name="PadTemplate" c:type="GstPadTemplate*"/>
          </parameter>
        </parameters>
      </method>
      <method name="link"
              c:identifier="gst_element_link"
              doc="Links @src to @dest. The link must be from source to
destination; the other direction will not be tried. The function looks for
existing pads that aren&apos;t linked yet. It will request new pads if necessary.
Such pads need to be released manualy when unlinking.
If multiple links are possible, only one is established.
Make sure you have added your elements to a bin or pipeline with
gst_bin_add() before trying to link them.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="dest" transfer-ownership="none">
            <type name="Element" c:type="GstElement*"/>
          </parameter>
        </parameters>
      </method>
      <method name="link_many"
              c:identifier="gst_element_link_many"
              doc="Chain together a series of elements. Uses gst_element_link().
Make sure you have added your elements to a bin or pipeline with
gst_bin_add() before trying to link them.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="element_2" transfer-ownership="none">
            <type name="Element" c:type="GstElement*"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="link_filtered"
              c:identifier="gst_element_link_filtered"
              doc="Links @src to @dest using the given caps as filtercaps.
The link must be from source to
destination; the other direction will not be tried. The function looks for
existing pads that aren&apos;t linked yet. It will request new pads if necessary.
If multiple links are possible, only one is established.
Make sure you have added your elements to a bin or pipeline with
gst_bin_add() before trying to link them.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="dest" transfer-ownership="none">
            <type name="Element" c:type="GstElement*"/>
          </parameter>
          <parameter name="filter" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="unlink"
              c:identifier="gst_element_unlink"
              doc="Unlinks all source pads of the source element with all sink pads
of the sink element to which they are linked.
If the link has been made using gst_element_link(), it could have created an
requestpad, which has to be released using gst_element_release_request_pad().">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="dest" transfer-ownership="none">
            <type name="Element" c:type="GstElement*"/>
          </parameter>
        </parameters>
      </method>
      <method name="unlink_many"
              c:identifier="gst_element_unlink_many"
              doc="Unlinks a series of elements. Uses gst_element_unlink().">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="element_2" transfer-ownership="none">
            <type name="Element" c:type="GstElement*"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="link_pads"
              c:identifier="gst_element_link_pads"
              doc="Links the two named pads of the source and destination elements.
Side effect is that if one of the pads has no parent, it becomes a
child of the parent of the other element.  If they have different
parents, the link fails.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="srcpadname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="dest" transfer-ownership="none">
            <type name="Element" c:type="GstElement*"/>
          </parameter>
          <parameter name="destpadname"
                     transfer-ownership="none"
                     doc=" or NULL for any pad.">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="unlink_pads"
              c:identifier="gst_element_unlink_pads"
              doc="Unlinks the two named pads of the source and destination elements.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="srcpadname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="dest" transfer-ownership="none">
            <type name="Element" c:type="GstElement*"/>
          </parameter>
          <parameter name="destpadname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="link_pads_filtered"
              c:identifier="gst_element_link_pads_filtered"
              doc="Links the two named pads of the source and destination elements. Side effect
is that if one of the pads has no parent, it becomes a child of the parent of
the other element. If they have different parents, the link fails. If @caps
is not #NULL, makes sure that the caps of the link is a subset of @caps.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="srcpadname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="dest" transfer-ownership="none">
            <type name="Element" c:type="GstElement*"/>
          </parameter>
          <parameter name="destpadname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="filter" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="seek_simple" c:identifier="gst_element_seek_simple">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="seek_flags" transfer-ownership="none">
            <type name="SeekFlags" c:type="GstSeekFlags"/>
          </parameter>
          <parameter name="seek_pos" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_position"
              c:identifier="gst_element_query_position"
              doc="Queries an element for the stream position.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="format"
                     transfer-ownership="none"
                     doc=" On return contains the #GstFormat used.">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="cur"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_duration"
              c:identifier="gst_element_query_duration"
              doc="Queries an element for the total stream duration.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="format"
                     direction="inout"
                     caller-allocates="0"
                     transfer-ownership="full"
                     doc="a pointer to the #GstFormat asked for. On return contains the #GstFormat used.">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="duration"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     doc="A location in which to store the total duration, or NULL.">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_convert"
              c:identifier="gst_element_query_convert"
              doc="Queries an element to convert @src_val in @src_format to @dest_format.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="src_format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="src_val" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="dest_format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="dest_val"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="found_tags_for_pad"
              c:identifier="gst_element_found_tags_for_pad"
              doc="Posts a message to the bus that new tags were found and pushes the
tags as event. Takes ownership of the @list.
This is a utility method for elements. Applications should use the
#GstTagSetter interface.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="pad" transfer-ownership="none">
            <type name="Pad" c:type="GstPad*"/>
          </parameter>
          <parameter name="list" transfer-ownership="none">
            <type name="TagList" c:type="GstTagList*"/>
          </parameter>
        </parameters>
      </method>
      <method name="found_tags"
              c:identifier="gst_element_found_tags"
              doc="Posts a message to the bus that new tags were found, and pushes an event
to all sourcepads. Takes ownership of the @list.
This is a utility method for elements. Applications should use the
#GstTagSetter interface.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="list" transfer-ownership="none">
            <type name="TagList" c:type="GstTagList*"/>
          </parameter>
        </parameters>
      </method>
      <field name="object">
        <type name="Object" c:type="GstObject"/>
      </field>
      <field name="state_lock">
        <type name="GLib.StaticRecMutex" c:type="GStaticRecMutex*"/>
      </field>
      <field name="state_cond">
        <type name="GLib.Cond" c:type="GCond*"/>
      </field>
      <field name="state_cookie">
        <type name="uint32" c:type="guint32"/>
      </field>
      <field name="current_state">
        <type name="State" c:type="GstState"/>
      </field>
      <field name="next_state">
        <type name="State" c:type="GstState"/>
      </field>
      <field name="pending_state">
        <type name="State" c:type="GstState"/>
      </field>
      <field name="last_return">
        <type name="StateChangeReturn" c:type="GstStateChangeReturn"/>
      </field>
      <field name="bus">
        <type name="Bus" c:type="GstBus*"/>
      </field>
      <field name="clock">
        <type name="Clock" c:type="GstClock*"/>
      </field>
      <field name="base_time">
        <type name="ClockTimeDiff" c:type="GstClockTimeDiff"/>
      </field>
      <field name="numpads">
        <type name="uint16" c:type="guint16"/>
      </field>
      <field name="pads">
        <type name="GLib.List" c:type="GList*"/>
      </field>
      <field name="numsrcpads">
        <type name="uint16" c:type="guint16"/>
      </field>
      <field name="srcpads">
        <type name="GLib.List" c:type="GList*"/>
      </field>
      <field name="numsinkpads">
        <type name="uint16" c:type="guint16"/>
      </field>
      <field name="sinkpads">
        <type name="GLib.List" c:type="GList*"/>
      </field>
      <field name="pads_cookie">
        <type name="uint32" c:type="guint32"/>
      </field>
      <union name="abidata" c:type="abidata">
        <record name="ABI" c:type="ABI">
          <field name="target_state" writable="1">
            <type name="State" c:type="GstState"/>
          </field>
          <field name="start_time" writable="1">
            <type name="ClockTime" c:type="GstClockTime"/>
          </field>
        </record>
        <field name="_gst_reserved" writable="1">
          <array zero-terminated="0" c:type="gpointer" fixed-size="4">
            <type name="any"/>
          </array>
        </field>
      </union>
      <glib:signal name="no-more-pads"
                   doc="This signals that the element will not generate more dynamic pads.">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="pad-added"
                   doc="a new #GstPad has been added to the element.">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="new_pad" transfer-ownership="none">
            <type name="Pad" c:type="GstPad"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="pad-removed"
                   doc="a #GstPad has been removed from the element">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="old_pad" transfer-ownership="none">
            <type name="Pad" c:type="GstPad"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="ElementClass"
            c:type="GstElementClass"
            glib:is-gtype-struct-for="Element"
            doc="GStreamer element class. Override the vmethods to implement the element
functionality.">
      <field name="parent_class">
        <type name="ObjectClass" c:type="GstObjectClass"/>
      </field>
      <field name="details">
        <type name="ElementDetails" c:type="GstElementDetails"/>
      </field>
      <field name="elementfactory">
        <type name="ElementFactory" c:type="GstElementFactory*"/>
      </field>
      <field name="padtemplates">
        <type name="GLib.List" c:type="GList*"/>
      </field>
      <field name="numpadtemplates">
        <type name="int" c:type="gint"/>
      </field>
      <field name="pad_templ_cookie">
        <type name="uint32" c:type="guint32"/>
      </field>
      <field name="pad_added">
        <callback name="pad_added" c:type="pad_added">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="element" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
            <parameter name="pad" transfer-ownership="none">
              <type name="Pad" c:type="GstPad*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="pad_removed">
        <callback name="pad_removed" c:type="pad_removed">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="element" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
            <parameter name="pad" transfer-ownership="none">
              <type name="Pad" c:type="GstPad*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="no_more_pads">
        <callback name="no_more_pads" c:type="no_more_pads">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="element" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="request_new_pad">
        <callback name="request_new_pad" c:type="request_new_pad">
          <return-value transfer-ownership="full">
            <type name="Pad" c:type="GstPad*"/>
          </return-value>
          <parameters>
            <parameter name="element" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
            <parameter name="templ" transfer-ownership="none">
              <type name="PadTemplate" c:type="GstPadTemplate*"/>
            </parameter>
            <parameter name="name" transfer-ownership="none">
              <type name="utf8" c:type="gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="release_pad">
        <callback name="release_pad" c:type="release_pad">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="element" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
            <parameter name="pad" transfer-ownership="none">
              <type name="Pad" c:type="GstPad*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_state">
        <callback name="get_state" c:type="get_state">
          <return-value transfer-ownership="full">
            <type name="StateChangeReturn" c:type="GstStateChangeReturn"/>
          </return-value>
          <parameters>
            <parameter name="element" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
            <parameter name="state" transfer-ownership="none">
              <type name="State" c:type="GstState*"/>
            </parameter>
            <parameter name="pending" transfer-ownership="none">
              <type name="State" c:type="GstState*"/>
            </parameter>
            <parameter name="timeout" transfer-ownership="none">
              <type name="ClockTime" c:type="GstClockTime"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="set_state">
        <callback name="set_state" c:type="set_state">
          <return-value transfer-ownership="full">
            <type name="StateChangeReturn" c:type="GstStateChangeReturn"/>
          </return-value>
          <parameters>
            <parameter name="element" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
            <parameter name="state" transfer-ownership="none">
              <type name="State" c:type="GstState"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="change_state">
        <callback name="change_state" c:type="change_state">
          <return-value transfer-ownership="full">
            <type name="StateChangeReturn" c:type="GstStateChangeReturn"/>
          </return-value>
          <parameters>
            <parameter name="element" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
            <parameter name="transition" transfer-ownership="none">
              <type name="StateChange" c:type="GstStateChange"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="set_bus">
        <callback name="set_bus" c:type="set_bus">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="element" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
            <parameter name="bus" transfer-ownership="none">
              <type name="Bus" c:type="GstBus*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="provide_clock">
        <callback name="provide_clock" c:type="provide_clock">
          <return-value transfer-ownership="full">
            <type name="Clock" c:type="GstClock*"/>
          </return-value>
          <parameters>
            <parameter name="element" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="set_clock">
        <callback name="set_clock" c:type="set_clock">
          <return-value transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="element" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
            <parameter name="clock" transfer-ownership="none">
              <type name="Clock" c:type="GstClock*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_index">
        <callback name="get_index" c:type="get_index">
          <return-value transfer-ownership="full">
            <type name="Index" c:type="GstIndex*"/>
          </return-value>
          <parameters>
            <parameter name="element" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="set_index">
        <callback name="set_index" c:type="set_index">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="element" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
            <parameter name="index" transfer-ownership="none">
              <type name="Index" c:type="GstIndex*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="send_event">
        <callback name="send_event" c:type="send_event">
          <return-value transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="element" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
            <parameter name="event" transfer-ownership="none">
              <type name="Event" c:type="GstEvent*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_query_types">
        <callback name="get_query_types" c:type="get_query_types">
          <return-value transfer-ownership="none">
            <type name="QueryType" c:type="GstQueryType*"/>
          </return-value>
          <parameters>
            <parameter name="element" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="query">
        <callback name="query" c:type="query">
          <return-value transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="element" transfer-ownership="none">
              <type name="Element" c:type="GstElement*"/>
            </parameter>
            <parameter name="query" transfer-ownership="none">
              <type name="Query" c:type="GstQuery*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
      <method name="add_pad_template"
              c:identifier="gst_element_class_add_pad_template"
              doc="Adds a padtemplate to an element class. This is mainly used in the _base_init
functions of classes.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="templ" transfer-ownership="none">
            <type name="PadTemplate" c:type="GstPadTemplate*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_pad_template"
              c:identifier="gst_element_class_get_pad_template"
              doc="Retrieves a padtemplate from @element_class with the given name.
&lt;note&gt;If you use this function in the #GInstanceInitFunc of an object class
that has subclasses, make sure to pass the g_class parameter of the
#GInstanceInitFunc here.&lt;/note&gt;
No unreferencing is necessary.">
        <return-value transfer-ownership="full">
          <type name="PadTemplate" c:type="GstPadTemplate*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_pad_template_list"
              c:identifier="gst_element_class_get_pad_template_list"
              doc="Retrieves a list of the pad templates associated with @element_class. The
list must not be modified by the calling code.
&lt;note&gt;If you use this function in the #GInstanceInitFunc of an object class
that has subclasses, make sure to pass the g_class parameter of the
#GInstanceInitFunc here.&lt;/note&gt;">
        <return-value transfer-ownership="full">
          <type name="GLib.List" c:type="GList*"/>
        </return-value>
      </method>
      <method name="set_details"
              c:identifier="gst_element_class_set_details"
              doc="Sets the detailed information for a #GstElementClass.
&lt;note&gt;This function is for use in _base_init functions only.&lt;/note&gt;
The @details are copied."
              deprecated="Use gst_element_class_set_details_simple() instead.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="details" transfer-ownership="none">
            <type name="ElementDetails" c:type="GstElementDetails*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_details_simple"
              c:identifier="gst_element_class_set_details_simple"
              doc="Sets the detailed information for a #GstElementClass. Simpler version of
gst_element_class_set_details() that generates less linker overhead.
&lt;note&gt;This function is for use in _base_init functions only.&lt;/note&gt;
The detail parameter strings are copied into the #GstElementDetails for
the element class."
              version="0.10.14">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="longname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="classification"
                     transfer-ownership="none"
                     doc=" separated with slashes (&apos;/&apos;). See draft-klass.txt of the design docs">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="description" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="author"
                     transfer-ownership="none"
                     doc="Use \n to separate">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="install_std_props"
              c:identifier="gst_element_class_install_std_props"
              doc="Adds a list of standardized properties with types to the @klass.
the id is for the property switch in your get_prop method, and
the flags determine readability / writeability.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="first_name"
                     transfer-ownership="none"
                     doc=" in a NULL terminated">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
    </record>
    <record name="ElementDetails"
            c:type="GstElementDetails"
            doc="This struct defines the public information about a #GstElement. It contains
meta-data about the element that is mostly for the benefit of editors.
The @klass member can be used by applications to filter elements based
on functionality.">
      <field name="longname" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="klass" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="description" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="author" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="_gst_reserved" writable="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <class name="ElementFactory"
           c:type="GstElementFactory"
           doc="The opaque #GstElementFactory data structure."
           parent="PluginFeature"
           glib:type-name="GstElementFactory"
           glib:get-type="gst_element_factory_get_type"
           glib:type-struct="ElementFactoryClass">
      <function name="find"
                c:identifier="gst_element_factory_find"
                doc="Search for an element factory of the given name. Refs the returned
element factory; caller is responsible for unreffing.">
        <return-value transfer-ownership="full">
          <type name="ElementFactory" c:type="GstElementFactory*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </function>
      <function name="make"
                c:identifier="gst_element_factory_make"
                doc="Create a new element of the type defined by the given element factory.
If name is NULL, then the element will receive a guaranteed unique name,
consisting of the element factory name and a number.
If name is given, it will be given the name supplied.">
        <return-value transfer-ownership="full">
          <type name="Element" c:type="GstElement*"/>
        </return-value>
        <parameters>
          <parameter name="factoryname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </function>
      <method name="get_element_type"
              c:identifier="gst_element_factory_get_element_type"
              doc="Get the #GType for elements managed by this factory. The type can
only be retrieved if the element factory is loaded, which can be
assured with gst_plugin_feature_load().
the factory is not loaded.">
        <return-value transfer-ownership="none">
          <type name="GType" c:type="GType"/>
        </return-value>
      </method>
      <method name="get_longname"
              c:identifier="gst_element_factory_get_longname"
              doc="Gets the longname for this factory">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="get_klass"
              c:identifier="gst_element_factory_get_klass"
              doc="Gets the class for this factory.">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="get_description"
              c:identifier="gst_element_factory_get_description"
              doc="Gets the description for this factory.">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="get_author"
              c:identifier="gst_element_factory_get_author"
              doc="Gets the author for this factory.">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="get_num_pad_templates"
              c:identifier="gst_element_factory_get_num_pad_templates"
              doc="Gets the number of pad_templates in this factory.">
        <return-value transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </return-value>
      </method>
      <method name="get_static_pad_templates"
              c:identifier="gst_element_factory_get_static_pad_templates"
              doc="Gets the #GList of #GstStaticPadTemplate for this factory.">
        <return-value transfer-ownership="none">
          <type name="GLib.List" c:type="GList*"/>
        </return-value>
      </method>
      <method name="get_uri_type"
              c:identifier="gst_element_factory_get_uri_type"
              doc="Gets the type of URIs the element supports or #GST_URI_UNKNOWN if none.">
        <return-value transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </return-value>
      </method>
      <method name="get_uri_protocols"
              c:identifier="gst_element_factory_get_uri_protocols"
              doc="Gets a NULL-terminated array of protocols this element supports or NULL if
no protocols are supported. You may not change the contents of the returned
array, as it is still owned by the element factory. Use g_strdupv() to
make a copy of the protocol string array if you need to.">
        <return-value transfer-ownership="full">
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </return-value>
      </method>
      <method name="has_interface"
              c:identifier="gst_element_factory_has_interface"
              doc="Check if @factory implements the interface with name @interfacename."
              version="0.10.14">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="interfacename" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="create"
              c:identifier="gst_element_factory_create"
              doc="Create a new element of the type defined by the given elementfactory.
It will be given the name supplied, since all elements require a name as
their first argument.">
        <return-value transfer-ownership="full">
          <type name="Element" c:type="GstElement*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="can_src_caps"
              c:identifier="gst_element_factory_can_src_caps"
              doc="Checks if the factory can source the given capability.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="caps" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="can_sink_caps"
              c:identifier="gst_element_factory_can_sink_caps"
              doc="Checks if the factory can sink the given capability.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="caps" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent">
        <type name="PluginFeature" c:type="GstPluginFeature"/>
      </field>
      <field name="type">
        <type name="GType" c:type="GType"/>
      </field>
      <field name="details">
        <type name="ElementDetails" c:type="GstElementDetails"/>
      </field>
      <field name="staticpadtemplates">
        <type name="GLib.List" c:type="GList*"/>
      </field>
      <field name="numpadtemplates">
        <type name="uint" c:type="guint"/>
      </field>
      <field name="uri_type">
        <type name="uint" c:type="guint"/>
      </field>
      <field name="uri_protocols">
        <type name="utf8" c:type="gchar**"/>
      </field>
      <field name="interfaces">
        <type name="GLib.List" c:type="GList*"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </class>
    <record name="ElementFactoryClass"
            c:type="GstElementFactoryClass"
            glib:is-gtype-struct-for="ElementFactory">
      <field name="parent_class">
        <type name="PluginFeatureClass" c:type="GstPluginFeatureClass"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <bitfield name="ElementFlags"
              doc="The standard flags that an element may have."
              c:type="GstElementFlags">
      <member name="locked_state"
              value="16"
              c:identifier="GST_ELEMENT_LOCKED_STATE"/>
      <member name="is_sink" value="32" c:identifier="GST_ELEMENT_IS_SINK"/>
      <member name="unparenting"
              value="64"
              c:identifier="GST_ELEMENT_UNPARENTING"/>
      <member name="flag_last"
              value="1048576"
              c:identifier="GST_ELEMENT_FLAG_LAST"/>
    </bitfield>
    <record name="Event" c:type="GstEvent" doc="A #GstEvent.">
      <field name="mini_object" writable="1">
        <type name="MiniObject" c:type="GstMiniObject"/>
      </field>
      <field name="type" writable="1">
        <type name="EventType" c:type="GstEventType"/>
      </field>
      <field name="timestamp" writable="1">
        <type name="uint64" c:type="guint64"/>
      </field>
      <field name="src" writable="1">
        <type name="Object" c:type="GstObject*"/>
      </field>
      <field name="structure" writable="1">
        <type name="Structure" c:type="GstStructure*"/>
      </field>
      <union name="abidata" c:type="abidata">
        <field name="seqnum" writable="1">
          <type name="uint32" c:type="guint32"/>
        </field>
        <field name="_gst_reserved" writable="1">
          <type name="any" c:type="gpointer"/>
        </field>
      </union>
      <constructor name="new_custom"
                   c:identifier="gst_event_new_custom"
                   doc="Create a new custom-typed event. This can be used for anything not
handled by other event-specific functions to pass an event to another
element.
Make sure to allocate an event type with the #GST_EVENT_MAKE_TYPE macro,
assigning a free number and filling in the correct direction and
serialization flags.
New custom events can also be created by subclassing the event type if
needed.">
        <return-value transfer-ownership="full">
          <type name="Event" c:type="GstEvent*"/>
        </return-value>
        <parameters>
          <parameter name="type" transfer-ownership="none">
            <type name="EventType" c:type="GstEventType"/>
          </parameter>
          <parameter name="structure"
                     transfer-ownership="none"
                     doc=" the structure.">
            <type name="Structure" c:type="GstStructure*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_flush_start"
                   c:identifier="gst_event_new_flush_start"
                   doc="Allocate a new flush start event. The flush start event can be sent
upstream and downstream and travels out-of-bounds with the dataflow.
It marks pads as being flushing and will make them return
#GST_FLOW_WRONG_STATE when used for data flow with gst_pad_push(),
gst_pad_chain(), gst_pad_alloc_buffer(), gst_pad_get_range() and
gst_pad_pull_range(). Any event (except a #GST_EVENT_FLUSH_STOP) received
on a flushing pad will return %FALSE immediately.
Elements should unlock any blocking functions and exit their streaming
functions as fast as possible when this event is received.
This event is typically generated after a seek to flush out all queued data
in the pipeline so that the new media is played as soon as possible.">
        <return-value transfer-ownership="full">
          <type name="Event" c:type="GstEvent*"/>
        </return-value>
      </constructor>
      <constructor name="new_flush_stop"
                   c:identifier="gst_event_new_flush_stop"
                   doc="Allocate a new flush stop event. The flush stop event can be sent
upstream and downstream and travels serialized with the dataflow.
It is typically sent after sending a FLUSH_START event to make the
pads accept data again.
Elements can process this event synchronized with the dataflow since
the preceeding FLUSH_START event stopped the dataflow.
This event is typically generated to complete a seek and to resume
dataflow.">
        <return-value transfer-ownership="full">
          <type name="Event" c:type="GstEvent*"/>
        </return-value>
      </constructor>
      <constructor name="new_eos"
                   c:identifier="gst_event_new_eos"
                   doc="Create a new EOS event. The eos event can only travel downstream
synchronized with the buffer flow. Elements that receive the EOS
event on a pad can return #GST_FLOW_UNEXPECTED as a #GstFlowReturn
when data after the EOS event arrives.
The EOS event will travel down to the sink elements in the pipeline
which will then post the #GST_MESSAGE_EOS on the bus after they have
finished playing any buffered data.
When all sinks have posted an EOS message, an EOS message is
forwarded to the application.
The EOS event itself will not cause any state transitions of the pipeline.">
        <return-value transfer-ownership="full">
          <type name="Event" c:type="GstEvent*"/>
        </return-value>
      </constructor>
      <constructor name="new_new_segment"
                   c:identifier="gst_event_new_new_segment"
                   doc="Allocate a new newsegment event with the given format/values tripplets
This method calls gst_event_new_new_segment_full() passing a default
value of 1.0 for applied_rate">
        <return-value transfer-ownership="full">
          <type name="Event" c:type="GstEvent*"/>
        </return-value>
        <parameters>
          <parameter name="update" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
          <parameter name="rate" transfer-ownership="none">
            <type name="double" c:type="gdouble"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="start" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="stop" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="position" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_new_segment_full"
                   c:identifier="gst_event_new_new_segment_full"
                   doc="Allocate a new newsegment event with the given format/values triplets.
The newsegment event marks the range of buffers to be processed. All
data not within the segment range is not to be processed. This can be
used intelligently by plugins to apply more efficient methods of skipping
unneeded data. The valid range is expressed with the @start and @stop
values.
The position value of the segment is used in conjunction with the start
value to convert the buffer timestamps into the stream time. This is
usually done in sinks to report the current stream_time.
is a valid @stop given, it must be greater or equal the @start, including
when the indicated playback @rate is &lt; 0.
The @applied_rate value provides information about any rate adjustment that
has already been made to the timestamps and content on the buffers of the
stream. (@rate * @applied_rate) should always equal the rate that has been
requested for playback. For example, if an element has an input segment
with intended playback @rate of 2.0 and applied_rate of 1.0, it can adjust
incoming timestamps and buffer content by half and output a newsegment event
with @rate of 1.0 and @applied_rate of 2.0
After a newsegment event, the buffer stream time is calculated with:
position + (TIMESTAMP(buf) - start) * ABS (rate * applied_rate)"
                   version="0.10.6">
        <return-value transfer-ownership="full">
          <type name="Event" c:type="GstEvent*"/>
        </return-value>
        <parameters>
          <parameter name="update" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
          <parameter name="rate" transfer-ownership="none">
            <type name="double" c:type="gdouble"/>
          </parameter>
          <parameter name="applied_rate" transfer-ownership="none">
            <type name="double" c:type="gdouble"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="start" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="stop" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="position" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_tag"
                   c:identifier="gst_event_new_tag"
                   doc="Generates a metadata tag event from the given @taglist.">
        <return-value transfer-ownership="full">
          <type name="Event" c:type="GstEvent*"/>
        </return-value>
        <parameters>
          <parameter name="taglist" transfer-ownership="none">
            <type name="TagList" c:type="GstTagList*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_buffer_size"
                   c:identifier="gst_event_new_buffer_size"
                   doc="Create a new buffersize event. The event is sent downstream and notifies
elements that they should provide a buffer of the specified dimensions.
When the @async flag is set, a thread boundary is prefered.">
        <return-value transfer-ownership="full">
          <type name="Event" c:type="GstEvent*"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="minsize" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="maxsize" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="async" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_qos"
                   c:identifier="gst_event_new_qos"
                   doc="Allocate a new qos event with the given values.
The QOS event is generated in an element that wants an upstream
element to either reduce or increase its rate because of
high/low CPU load or other resource usage such as network performance.
Typically sinks generate these events for each buffer they receive.
element that generated the QoS event (usually the sink). The value is
generally computed based on more long term statistics about the streams
timestamps compared to the clock.
A value &lt; 1.0 indicates that the upstream element is producing data faster
than real-time. A value &gt; 1.0 indicates that the upstream element is not
producing data fast enough. 1.0 is the ideal @proportion value. The
proportion value can safely be used to lower or increase the quality of
the element.
buffer that caused the element to generate the QOS event. A negative value
means that the buffer with @timestamp arrived in time. A positive value
indicates how late the buffer with @timestamp was.
to generate the QOS event. It is expressed in running time and thus an ever
increasing value.
The upstream element can use the @diff and @timestamp values to decide
whether to process more buffers. For possitive @diff, all buffers with
timestamp &lt;= @timestamp + @diff will certainly arrive late in the sink
as well. A (negative) @diff value so that @timestamp + @diff would yield a
result smaller than 0 is not allowed.
The application can use general event probes to intercept the QoS
event and implement custom application specific QoS handling.">
        <return-value transfer-ownership="full">
          <type name="Event" c:type="GstEvent*"/>
        </return-value>
        <parameters>
          <parameter name="proportion" transfer-ownership="none">
            <type name="double" c:type="gdouble"/>
          </parameter>
          <parameter name="diff" transfer-ownership="none">
            <type name="ClockTimeDiff" c:type="GstClockTimeDiff"/>
          </parameter>
          <parameter name="timestamp" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_seek"
                   c:identifier="gst_event_new_seek"
                   doc="Allocate a new seek event with the given parameters.
The seek event configures playback of the pipeline between @start to @stop
at the speed given in @rate, also called a playback segment.
The @start and @stop values are expressed in @format.
A @rate of 1.0 means normal playback rate, 2.0 means double speed.
Negatives values means backwards playback. A value of 0.0 for the
rate is not allowed and should be accomplished instead by PAUSING the
pipeline.
A pipeline has a default playback segment configured with a start
position of 0, a stop position of -1 and a rate of 1.0. The currently
configured playback segment can be queried with #GST_QUERY_SEGMENT.
start and stop fields in playback segment. Adjustments can be made relative
or absolute to the last configured values. A type of #GST_SEEK_TYPE_NONE
means that the position should not be updated.
When the rate is positive and @start has been updated, playback will start
from the newly configured start position.
For negative rates, playback will start from the newly configured stop
position (if any). If the stop position if updated, it must be different from
-1 for negative rates.
It is not possible to seek relative to the current playback position, to do
this, PAUSE the pipeline, query the current playback position with
#GST_QUERY_POSITION and update the playback segment current position with a
#GST_SEEK_TYPE_SET to the desired position.">
        <return-value transfer-ownership="full">
          <type name="Event" c:type="GstEvent*"/>
        </return-value>
        <parameters>
          <parameter name="rate" transfer-ownership="none">
            <type name="double" c:type="gdouble"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <type name="SeekFlags" c:type="GstSeekFlags"/>
          </parameter>
          <parameter name="start_type" transfer-ownership="none">
            <type name="SeekType" c:type="GstSeekType"/>
          </parameter>
          <parameter name="start" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="stop_type" transfer-ownership="none">
            <type name="SeekType" c:type="GstSeekType"/>
          </parameter>
          <parameter name="stop" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_navigation"
                   c:identifier="gst_event_new_navigation"
                   doc="Create a new navigation event from the given description.">
        <return-value transfer-ownership="full">
          <type name="Event" c:type="GstEvent*"/>
        </return-value>
        <parameters>
          <parameter name="structure"
                     transfer-ownership="none"
                     doc=" structure.">
            <type name="Structure" c:type="GstStructure*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_latency"
                   c:identifier="gst_event_new_latency"
                   doc="Create a new latency event. The event is sent upstream from the sinks and
notifies elements that they should add an additional @latency to the
running time before synchronising against the clock.
The latency is mostly used in live sinks and is always expressed in
the time format."
                   version="0.10.12">
        <return-value transfer-ownership="full">
          <type name="Event" c:type="GstEvent*"/>
        </return-value>
        <parameters>
          <parameter name="latency" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_step"
                   c:identifier="gst_event_new_step"
                   doc="Create a new step event. The purpose of the step event is to instruct a sink
to skip @amount (expressed in @format) of media. It can be used to implement
stepping through the video frame by frame or for doing fast trick modes.
A rate of &lt;= 0.0 is not allowed, pause the pipeline or reverse the playback
direction of the pipeline to get the same effect.
The @flush flag will clear any pending data in the pipeline before starting
the step operation.
The @intermediate flag instructs the pipeline that this step operation is
part of a larger step operation."
                   version="0.10.24">
        <return-value transfer-ownership="full">
          <type name="Event" c:type="GstEvent*"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="amount" transfer-ownership="none">
            <type name="uint64" c:type="guint64"/>
          </parameter>
          <parameter name="rate" transfer-ownership="none">
            <type name="double" c:type="gdouble"/>
          </parameter>
          <parameter name="flush" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
          <parameter name="intermediate" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_sink_message"
                   c:identifier="gst_event_new_sink_message"
                   doc="Create a new sink-message event. The purpose of the sink-message event is
to instruct a sink to post the message contained in the event synchronized
with the stream."
                   version="0.10.26">
        <return-value transfer-ownership="full">
          <type name="Event" c:type="GstEvent*"/>
        </return-value>
        <parameters>
          <parameter name="msg" transfer-ownership="none">
            <type name="Message" c:type="GstMessage*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get_structure"
              c:identifier="gst_event_get_structure"
              doc="Access the structure of the event.
owned by the event, which means that you should not free it and
that the pointer becomes invalid when you free the event.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="Structure" c:type="GstStructure*"/>
        </return-value>
      </method>
      <method name="has_name"
              c:identifier="gst_event_has_name"
              doc="Checks if @event has the given @name. This function is usually used to
check the name of a custom event."
              version="0.10.20">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_seqnum"
              c:identifier="gst_event_get_seqnum"
              doc="Retrieve the sequence number of a event.
Events have ever-incrementing sequence numbers, which may also be set
explicitly via gst_event_set_seqnum(). Sequence numbers are typically used to
indicate that a event corresponds to some other set of events or messages,
for example an EOS event corresponding to a SEEK event. It is considered good
practice to make this correspondence when possible, though it is not
required.
Note that events and messages share the same sequence number incrementor;
two events or messages will never not have the same sequence number unless
that correspondence was made explicitly.
MT safe."
              version="0.10.22">
        <return-value transfer-ownership="none">
          <type name="uint32" c:type="guint32"/>
        </return-value>
      </method>
      <method name="set_seqnum"
              c:identifier="gst_event_set_seqnum"
              doc="Set the sequence number of a event.
This function might be called by the creator of a event to indicate that the
event relates to other events or messages. See gst_event_get_seqnum() for
more information.
MT safe."
              version="0.10.22">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="seqnum" transfer-ownership="none">
            <type name="uint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_new_segment"
              c:identifier="gst_event_parse_new_segment"
              doc="Get the update flag, rate, format, start, stop and position in the
newsegment event. In general, gst_event_parse_new_segment_full() should
be used instead of this, to also retrieve the applied_rate value of the
segment. See gst_event_new_new_segment_full() for a full description
of the newsegment event.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="update"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
          <parameter name="rate"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="double" c:type="gdouble*"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="start"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
          <parameter name="stop"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
          <parameter name="position"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_new_segment_full"
              c:identifier="gst_event_parse_new_segment_full"
              doc="Get the update, rate, applied_rate, format, start, stop and
position in the newsegment event. See gst_event_new_new_segment_full()
for a full description of the newsegment event."
              version="0.10.6">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="update"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
          <parameter name="rate"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="double" c:type="gdouble*"/>
          </parameter>
          <parameter name="applied_rate"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="double" c:type="gdouble*"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="start"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
          <parameter name="stop"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
          <parameter name="position"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_tag"
              c:identifier="gst_event_parse_tag"
              doc="Parses a tag @event and stores the results in the given @taglist location.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="taglist" transfer-ownership="none">
            <type name="TagList" c:type="GstTagList**"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_buffer_size"
              c:identifier="gst_event_parse_buffer_size"
              doc="Get the format, minsize, maxsize and async-flag in the buffersize event.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="minsize"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
          <parameter name="maxsize"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
          <parameter name="async"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_qos"
              c:identifier="gst_event_parse_qos"
              doc="Get the proportion, diff and timestamp in the qos event. See
gst_event_new_qos() for more information about the different QoS values.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="proportion"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="double" c:type="gdouble*"/>
          </parameter>
          <parameter name="diff" transfer-ownership="none">
            <type name="ClockTimeDiff" c:type="GstClockTimeDiff*"/>
          </parameter>
          <parameter name="timestamp" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_seek"
              c:identifier="gst_event_parse_seek"
              doc="Parses a seek @event and stores the results in the given result locations.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="rate"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="double" c:type="gdouble*"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <type name="SeekFlags" c:type="GstSeekFlags*"/>
          </parameter>
          <parameter name="start_type" transfer-ownership="none">
            <type name="SeekType" c:type="GstSeekType*"/>
          </parameter>
          <parameter name="start"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
          <parameter name="stop_type" transfer-ownership="none">
            <type name="SeekType" c:type="GstSeekType*"/>
          </parameter>
          <parameter name="stop"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_latency"
              c:identifier="gst_event_parse_latency"
              doc="Get the latency in the latency event."
              version="0.10.12">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="latency" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_step"
              c:identifier="gst_event_parse_step"
              doc="Parse the step event."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="amount"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="uint64" c:type="guint64*"/>
          </parameter>
          <parameter name="rate"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="double" c:type="gdouble*"/>
          </parameter>
          <parameter name="flush"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
          <parameter name="intermediate"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_sink_message"
              c:identifier="gst_event_parse_sink_message"
              doc="Parse the sink-message event. Unref @msg after usage."
              version="0.10.26">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="msg" transfer-ownership="none">
            <type name="Message" c:type="GstMessage**"/>
          </parameter>
        </parameters>
      </method>
    </record>
    <record name="EventClass" c:type="GstEventClass">
      <field name="mini_object_class" writable="1">
        <type name="MiniObjectClass" c:type="GstMiniObjectClass"/>
      </field>
      <field name="_gst_reserved" writable="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <bitfield name="EventType"
              doc="#GstEventType lists the standard event types that can be sent in a pipeline.
The custom event types can be used for private messages between elements
that can&apos;t be expressed using normal
GStreamer buffer passing semantics. Custom events carry an arbitrary
#GstStructure.
Specific custom events are distinguished by the name of the structure."
              c:type="GstEventType">
      <member name="unknown" value="0" c:identifier="GST_EVENT_UNKNOWN"/>
      <member name="flush_start"
              value="19"
              c:identifier="GST_EVENT_FLUSH_START"/>
      <member name="flush_stop"
              value="39"
              c:identifier="GST_EVENT_FLUSH_STOP"/>
      <member name="eos" value="86" c:identifier="GST_EVENT_EOS"/>
      <member name="newsegment"
              value="102"
              c:identifier="GST_EVENT_NEWSEGMENT"/>
      <member name="tag" value="118" c:identifier="GST_EVENT_TAG"/>
      <member name="buffersize"
              value="134"
              c:identifier="GST_EVENT_BUFFERSIZE"/>
      <member name="sink_message"
              value="150"
              c:identifier="GST_EVENT_SINK_MESSAGE"/>
      <member name="qos" value="241" c:identifier="GST_EVENT_QOS"/>
      <member name="seek" value="257" c:identifier="GST_EVENT_SEEK"/>
      <member name="navigation"
              value="273"
              c:identifier="GST_EVENT_NAVIGATION"/>
      <member name="latency" value="289" c:identifier="GST_EVENT_LATENCY"/>
      <member name="step" value="305" c:identifier="GST_EVENT_STEP"/>
      <member name="custom_upstream"
              value="513"
              c:identifier="GST_EVENT_CUSTOM_UPSTREAM"/>
      <member name="custom_downstream"
              value="518"
              c:identifier="GST_EVENT_CUSTOM_DOWNSTREAM"/>
      <member name="custom_downstream_oob"
              value="514"
              c:identifier="GST_EVENT_CUSTOM_DOWNSTREAM_OOB"/>
      <member name="custom_both"
              value="519"
              c:identifier="GST_EVENT_CUSTOM_BOTH"/>
      <member name="custom_both_oob"
              value="515"
              c:identifier="GST_EVENT_CUSTOM_BOTH_OOB"/>
    </bitfield>
    <bitfield name="EventTypeFlags"
              doc="#GstEventTypeFlags indicate the aspects of the different #GstEventType
values. You can get the type flags of a #GstEventType with the
gst_event_type_get_flags() function."
              c:type="GstEventTypeFlags">
      <member name="upstream"
              value="1"
              c:identifier="GST_EVENT_TYPE_UPSTREAM"/>
      <member name="downstream"
              value="2"
              c:identifier="GST_EVENT_TYPE_DOWNSTREAM"/>
      <member name="serialized"
              value="4"
              c:identifier="GST_EVENT_TYPE_SERIALIZED"/>
    </bitfield>
    <constant name="FOURCC_FORMAT" value="c%c%c%c">
      <type name="utf8"/>
    </constant>
    <callback name="FilterFunc"
              c:type="GstFilterFunc"
              doc="Function prototype for a filter callback taht can be use in gst_filter_run().
The function should apply its filtering to @obj. Additional data passed to
gst_filter_run() are in @data.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="obj" transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="1">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <enumeration name="FlowReturn"
                 doc="The result of passing data to a pad.
Note that the custom return values should not be exposed outside of the
element scope and are available since 0.10.7."
                 c:type="GstFlowReturn">
      <member name="custom_success_2"
              value="102"
              c:identifier="GST_FLOW_CUSTOM_SUCCESS_2"/>
      <member name="custom_success_1"
              value="101"
              c:identifier="GST_FLOW_CUSTOM_SUCCESS_1"/>
      <member name="custom_success"
              value="100"
              c:identifier="GST_FLOW_CUSTOM_SUCCESS"/>
      <member name="resend" value="1" c:identifier="GST_FLOW_RESEND"/>
      <member name="ok" value="0" c:identifier="GST_FLOW_OK"/>
      <member name="not_linked" value="-1" c:identifier="GST_FLOW_NOT_LINKED"/>
      <member name="wrong_state"
              value="-2"
              c:identifier="GST_FLOW_WRONG_STATE"/>
      <member name="unexpected" value="-3" c:identifier="GST_FLOW_UNEXPECTED"/>
      <member name="not_negotiated"
              value="-4"
              c:identifier="GST_FLOW_NOT_NEGOTIATED"/>
      <member name="error" value="-5" c:identifier="GST_FLOW_ERROR"/>
      <member name="not_supported"
              value="-6"
              c:identifier="GST_FLOW_NOT_SUPPORTED"/>
      <member name="custom_error"
              value="-100"
              c:identifier="GST_FLOW_CUSTOM_ERROR"/>
      <member name="custom_error_1"
              value="-101"
              c:identifier="GST_FLOW_CUSTOM_ERROR_1"/>
      <member name="custom_error_2"
              value="-102"
              c:identifier="GST_FLOW_CUSTOM_ERROR_2"/>
    </enumeration>
    <enumeration name="Format"
                 doc="Standard predefined formats"
                 c:type="GstFormat">
      <member name="undefined" value="0" c:identifier="GST_FORMAT_UNDEFINED"/>
      <member name="default" value="1" c:identifier="GST_FORMAT_DEFAULT"/>
      <member name="bytes" value="2" c:identifier="GST_FORMAT_BYTES"/>
      <member name="time" value="3" c:identifier="GST_FORMAT_TIME"/>
      <member name="buffers" value="4" c:identifier="GST_FORMAT_BUFFERS"/>
      <member name="percent" value="5" c:identifier="GST_FORMAT_PERCENT"/>
    </enumeration>
    <record name="FormatDefinition"
            c:type="GstFormatDefinition"
            doc="A format definition">
      <field name="value" writable="1">
        <type name="Format" c:type="GstFormat"/>
      </field>
      <field name="nick" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="description" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="quark" writable="1">
        <type name="GLib.Quark" c:type="GQuark"/>
      </field>
    </record>
    <glib:boxed c:type="GstGError"
                glib:name="GError"
                glib:type-name="GstGError"
                glib:get-type="gst_g_error_get_type">
    </glib:boxed>
    <class name="GhostPad"
           c:type="GstGhostPad"
           doc="Opaque #GstGhostPad structure."
           parent="ProxyPad"
           glib:type-name="GstGhostPad"
           glib:get-type="gst_ghost_pad_get_type"
           glib:type-struct="GhostPadClass">
      <constructor name="new"
                   c:identifier="gst_ghost_pad_new"
                   doc="Create a new ghostpad with @target as the target. The direction will be taken
from the target pad. @target must be unlinked.
Will ref the target.">
        <return-value transfer-ownership="full">
          <type name="GhostPad" c:type="GstPad*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="target" transfer-ownership="none">
            <type name="Pad" c:type="GstPad*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_no_target"
                   c:identifier="gst_ghost_pad_new_no_target"
                   doc="Create a new ghostpad without a target with the given direction.
A target can be set on the ghostpad later with the
gst_ghost_pad_set_target() function.
The created ghostpad will not have a padtemplate.">
        <return-value transfer-ownership="full">
          <type name="GhostPad" c:type="GstPad*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="dir" transfer-ownership="none">
            <type name="PadDirection" c:type="GstPadDirection"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_from_template"
                   c:identifier="gst_ghost_pad_new_from_template"
                   doc="Create a new ghostpad with @target as the target. The direction will be taken
from the target pad. The template used on the ghostpad will be @template.
Will ref the target."
                   version="0.10.10">
        <return-value transfer-ownership="full">
          <type name="GhostPad" c:type="GstPad*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="target" transfer-ownership="none">
            <type name="Pad" c:type="GstPad*"/>
          </parameter>
          <parameter name="templ" transfer-ownership="none">
            <type name="PadTemplate" c:type="GstPadTemplate*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_no_target_from_template"
                   c:identifier="gst_ghost_pad_new_no_target_from_template"
                   doc="Create a new ghostpad based on @templ, without setting a target. The
direction will be taken from the @templ."
                   version="0.10.10">
        <return-value transfer-ownership="full">
          <type name="GhostPad" c:type="GstPad*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="templ" transfer-ownership="none">
            <type name="PadTemplate" c:type="GstPadTemplate*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get_target"
              c:identifier="gst_ghost_pad_get_target"
              doc="Get the target pad of @gpad. Unref target pad after usage.
has no target set. Unref target pad after usage.">
        <return-value transfer-ownership="full">
          <type name="Pad" c:type="GstPad*"/>
        </return-value>
      </method>
      <method name="set_target"
              c:identifier="gst_ghost_pad_set_target"
              doc="Set the new target of the ghostpad @gpad. Any existing target
is unlinked and links to the new target are established. if @newtarget is
NULL the target will be cleared.
when the internal pads could not be linked.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="newtarget" transfer-ownership="none">
            <type name="Pad" c:type="GstPad*"/>
          </parameter>
        </parameters>
      </method>
      <method name="construct"
              c:identifier="gst_ghost_pad_construct"
              doc="Finish initialization of a newly allocated ghost pad.
This function is most useful in language bindings and when subclassing
#GstGhostPad; plugin and application developers normally will not call this
function. Call this function directly after a call to g_object_new
(GST_TYPE_GHOST_PAD, &quot;direction&quot;, @dir, ..., NULL)."
              version="0.10.22">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <field name="pad">
        <type name="ProxyPad" c:type="GstProxyPad"/>
      </field>
      <field name="priv">
        <type name="GhostPadPrivate" c:type="GstGhostPadPrivate*"/>
      </field>
    </class>
    <record name="GhostPadClass"
            c:type="GstGhostPadClass"
            glib:is-gtype-struct-for="GhostPad">
      <field name="parent_class">
        <type name="ProxyPadClass" c:type="GstProxyPadClass"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <record name="GhostPadPrivate" c:type="GstGhostPadPrivate">
    </record>
    <constant name="INDEX_ID_INVALID" value="-1">
      <type name="int"/>
    </constant>
    <interface name="ImplementsInterface"
               c:type="GstImplementsInterface"
               doc="Opaque #GstImplementsInterface structure."
               glib:type-name="GstImplementsInterface"
               glib:get-type="gst_implements_interface_get_type"
               glib:type-struct="ImplementsInterfaceClass">
      <prerequisite name="Element"/>
      <virtual-method name="supported">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="iface_type" transfer-ownership="none">
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </virtual-method>
    </interface>
    <record name="ImplementsInterfaceClass"
            c:type="GstImplementsInterfaceClass"
            glib:is-gtype-struct-for="ImplementsInterface">
      <field name="parent">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
      <field name="supported">
        <callback name="supported" c:type="supported">
          <return-value transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="iface" transfer-ownership="none">
              <type name="ImplementsInterface"
                    c:type="GstImplementsInterface*"/>
            </parameter>
            <parameter name="iface_type" transfer-ownership="none">
              <type name="GType" c:type="GType"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <class name="Index"
           c:type="GstIndex"
           doc="Opaque #GstIndex structure."
           parent="Object"
           glib:type-name="GstIndex"
           glib:get-type="gst_index_get_type"
           glib:type-struct="IndexClass">
      <constructor name="new"
                   c:identifier="gst_index_new"
                   doc="Create a new tileindex object">
        <return-value transfer-ownership="full">
          <type name="Index" c:type="GstIndex*"/>
        </return-value>
      </constructor>
      <virtual-method name="get_writer_id">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="writer_id"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int" c:type="gint*"/>
          </parameter>
          <parameter name="writer_string" transfer-ownership="full">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="commit" invoker="commit">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="add_entry">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="entry" transfer-ownership="none">
            <type name="IndexEntry" c:type="GstIndexEntry*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_assoc_entry">
        <return-value transfer-ownership="full">
          <type name="IndexEntry" c:type="GstIndexEntry*"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="method" transfer-ownership="none">
            <type name="IndexLookupMethod" c:type="GstIndexLookupMethod"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <type name="AssocFlags" c:type="GstAssocFlags"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="func" transfer-ownership="none">
            <type name="GLib.CompareDataFunc" c:type="GCompareDataFunc"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none" closure="7">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="commit"
              c:identifier="gst_index_commit"
              doc="Tell the index that the writer with the given id is done
with this index and is not going to write any more entries
to it.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_group"
              c:identifier="gst_index_get_group"
              doc="Get the id of the current group.">
        <return-value transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </return-value>
      </method>
      <method name="new_group"
              c:identifier="gst_index_new_group"
              doc="Create a new group for the given index. It will be
set as the current group.">
        <return-value transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </return-value>
      </method>
      <method name="set_group"
              c:identifier="gst_index_set_group"
              doc="Set the current groupnumber to the given argument.
did not exist.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="groupnum" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_certainty"
              c:identifier="gst_index_set_certainty"
              doc="Set the certainty of the given index.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="certainty" transfer-ownership="none">
            <type name="IndexCertainty" c:type="GstIndexCertainty"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_certainty"
              c:identifier="gst_index_get_certainty"
              doc="Get the certainty of the given index.">
        <return-value transfer-ownership="full">
          <type name="IndexCertainty" c:type="GstIndexCertainty"/>
        </return-value>
      </method>
      <method name="set_filter"
              c:identifier="gst_index_set_filter"
              doc="Lets the app register a custom filter function so that
it can select what entries should be stored in the index.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="filter"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="IndexFilter" c:type="GstIndexFilter"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_filter_full"
              c:identifier="gst_index_set_filter_full"
              doc="Lets the app register a custom filter function so that
it can select what entries should be stored in the index.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="filter"
                     transfer-ownership="none"
                     scope="notified"
                     closure="2"
                     destroy="3">
            <type name="IndexFilter" c:type="GstIndexFilter"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
          <parameter name="user_data_destroy"
                     transfer-ownership="none"
                     scope="call">
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_resolver"
              c:identifier="gst_index_set_resolver"
              doc="Lets the app register a custom function to map index
ids to writer descriptions.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="resolver"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="IndexResolver" c:type="GstIndexResolver"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_resolver_full"
              c:identifier="gst_index_set_resolver_full"
              doc="Lets the app register a custom function to map index
ids to writer descriptions."
              version="0.10.18">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="resolver"
                     transfer-ownership="none"
                     scope="notified"
                     closure="2"
                     destroy="3">
            <type name="IndexResolver" c:type="GstIndexResolver"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
          <parameter name="user_data_destroy"
                     transfer-ownership="none"
                     scope="call">
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_writer_id"
              c:identifier="gst_index_get_writer_id"
              doc="Before entries can be added to the index, a writer
should obtain a unique id. The methods to add new entries
to the index require this id as an argument.
The application can implement a custom function to map the writer object
to a string. That string will be used to register or look up an id
in the index.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="writer" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="id"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int" c:type="gint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_format"
              c:identifier="gst_index_add_format"
              doc="Adds a format entry into the index. This function is
used to map dynamic GstFormat ids to their original
format key.">
        <return-value transfer-ownership="full">
          <type name="IndexEntry" c:type="GstIndexEntry*"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_associationv"
              c:identifier="gst_index_add_associationv"
              doc="Associate given format/value pairs with each other.">
        <return-value transfer-ownership="full">
          <type name="IndexEntry" c:type="GstIndexEntry*"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <type name="AssocFlags" c:type="GstAssocFlags"/>
          </parameter>
          <parameter name="n" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="list" transfer-ownership="none">
            <type name="IndexAssociation" c:type="GstIndexAssociation*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_association"
              c:identifier="gst_index_add_association"
              doc="Associate given format/value pairs with each other.
Be sure to pass gint64 values to this functions varargs,
you might want to use a gint64 cast to be sure.">
        <return-value transfer-ownership="full">
          <type name="IndexEntry" c:type="GstIndexEntry*"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <type name="AssocFlags" c:type="GstAssocFlags"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="add_object"
              c:identifier="gst_index_add_object"
              doc="Add the given object to the index with the given key.
This function is not yet implemented.">
        <return-value transfer-ownership="full">
          <type name="IndexEntry" c:type="GstIndexEntry*"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="key" transfer-ownership="full">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <type name="GType" c:type="GType"/>
          </parameter>
          <parameter name="object" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_id"
              c:identifier="gst_index_add_id"
              doc="Add an id entry into the index.">
        <return-value transfer-ownership="full">
          <type name="IndexEntry" c:type="GstIndexEntry*"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="description" transfer-ownership="full">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_assoc_entry"
              c:identifier="gst_index_get_assoc_entry"
              doc="Finds the given format/value in the index
value was not found.">
        <return-value transfer-ownership="full">
          <type name="IndexEntry" c:type="GstIndexEntry*"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="method" transfer-ownership="none">
            <type name="IndexLookupMethod" c:type="GstIndexLookupMethod"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <type name="AssocFlags" c:type="GstAssocFlags"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_assoc_entry_full"
              c:identifier="gst_index_get_assoc_entry_full"
              doc="Finds the given format/value in the index with the given
compare function and user_data.
value was not found.">
        <return-value transfer-ownership="full">
          <type name="IndexEntry" c:type="GstIndexEntry*"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="method" transfer-ownership="none">
            <type name="IndexLookupMethod" c:type="GstIndexLookupMethod"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <type name="AssocFlags" c:type="GstAssocFlags"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="call"
                     closure="7">
            <type name="GLib.CompareDataFunc" c:type="GCompareDataFunc"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <property name="resolver" writable="1">
        <type name="IndexResolver" c:type="GstIndexResolver"/>
      </property>
      <field name="object">
        <type name="Object" c:type="GstObject"/>
      </field>
      <field name="groups">
        <type name="GLib.List" c:type="GList*"/>
      </field>
      <field name="curgroup">
        <type name="IndexGroup" c:type="GstIndexGroup*"/>
      </field>
      <field name="maxgroup">
        <type name="int" c:type="gint"/>
      </field>
      <field name="method">
        <type name="IndexResolverMethod" c:type="GstIndexResolverMethod"/>
      </field>
      <field name="resolver">
        <type name="IndexResolver" c:type="GstIndexResolver"/>
      </field>
      <field name="resolver_user_data">
        <type name="any" c:type="gpointer"/>
      </field>
      <field name="filter">
        <type name="IndexFilter" c:type="GstIndexFilter"/>
      </field>
      <field name="filter_user_data">
        <type name="any" c:type="gpointer"/>
      </field>
      <field name="filter_user_data_destroy">
        <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
      </field>
      <field name="writers">
        <type name="GLib.HashTable" c:type="GHashTable*"/>
      </field>
      <field name="last_id">
        <type name="int" c:type="gint"/>
      </field>
      <field name="resolver_user_data_destroy">
        <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="3">
          <type name="any"/>
        </array>
      </field>
      <glib:signal name="entry-added">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="IndexEntry" c:type="GstIndexEntry"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="IndexAssociation"
            c:type="GstIndexAssociation"
            doc="An association in an entry.">
      <field name="format" writable="1">
        <type name="Format" c:type="GstFormat"/>
      </field>
      <field name="value" writable="1">
        <type name="int64" c:type="gint64"/>
      </field>
    </record>
    <enumeration name="IndexCertainty"
                 doc="The certainty of a group in the index."
                 c:type="GstIndexCertainty">
      <member name="unknown" value="0" c:identifier="GST_INDEX_UNKNOWN"/>
      <member name="certain" value="1" c:identifier="GST_INDEX_CERTAIN"/>
      <member name="fuzzy" value="2" c:identifier="GST_INDEX_FUZZY"/>
    </enumeration>
    <record name="IndexClass"
            c:type="GstIndexClass"
            glib:is-gtype-struct-for="Index">
      <field name="parent_class">
        <type name="ObjectClass" c:type="GstObjectClass"/>
      </field>
      <field name="get_writer_id">
        <callback name="get_writer_id" c:type="get_writer_id">
          <return-value transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="index" transfer-ownership="none">
              <type name="Index" c:type="GstIndex*"/>
            </parameter>
            <parameter name="writer_id"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <type name="int" c:type="gint*"/>
            </parameter>
            <parameter name="writer_string" transfer-ownership="full">
              <type name="utf8" c:type="gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="commit">
        <callback name="commit" c:type="commit">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="index" transfer-ownership="none">
              <type name="Index" c:type="GstIndex*"/>
            </parameter>
            <parameter name="id" transfer-ownership="none">
              <type name="int" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="add_entry">
        <callback name="add_entry" c:type="add_entry">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="index" transfer-ownership="none">
              <type name="Index" c:type="GstIndex*"/>
            </parameter>
            <parameter name="entry" transfer-ownership="none">
              <type name="IndexEntry" c:type="GstIndexEntry*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_assoc_entry">
        <callback name="get_assoc_entry" c:type="get_assoc_entry">
          <return-value transfer-ownership="full">
            <type name="IndexEntry" c:type="GstIndexEntry*"/>
          </return-value>
          <parameters>
            <parameter name="index" transfer-ownership="none">
              <type name="Index" c:type="GstIndex*"/>
            </parameter>
            <parameter name="id" transfer-ownership="none">
              <type name="int" c:type="gint"/>
            </parameter>
            <parameter name="method" transfer-ownership="none">
              <type name="IndexLookupMethod" c:type="GstIndexLookupMethod"/>
            </parameter>
            <parameter name="flags" transfer-ownership="none">
              <type name="AssocFlags" c:type="GstAssocFlags"/>
            </parameter>
            <parameter name="format" transfer-ownership="none">
              <type name="Format" c:type="GstFormat"/>
            </parameter>
            <parameter name="value" transfer-ownership="none">
              <type name="int64" c:type="gint64"/>
            </parameter>
            <parameter name="func" transfer-ownership="none">
              <type name="GLib.CompareDataFunc" c:type="GCompareDataFunc"/>
            </parameter>
            <parameter name="user_data" transfer-ownership="none" closure="7">
              <type name="any" c:type="gpointer"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="entry_added">
        <callback name="entry_added" c:type="entry_added">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="index" transfer-ownership="none">
              <type name="Index" c:type="GstIndex*"/>
            </parameter>
            <parameter name="entry" transfer-ownership="none">
              <type name="IndexEntry" c:type="GstIndexEntry*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <record name="IndexEntry"
            c:type="GstIndexEntry"
            doc="The basic element of an index."
            glib:type-name="GstIndexEntry"
            glib:get-type="gst_index_entry_get_type">
      <field name="type" writable="1">
        <type name="IndexEntryType" c:type="GstIndexEntryType"/>
      </field>
      <field name="id" writable="1">
        <type name="int" c:type="gint"/>
      </field>
      <union name="data" c:type="data">
        <record name="id" c:type="id">
          <field name="description" writable="1">
            <type name="utf8" c:type="gchar*"/>
          </field>
        </record>
        <record name="assoc" c:type="assoc">
          <field name="nassocs" writable="1">
            <type name="int" c:type="gint"/>
          </field>
          <field name="assocs" writable="1">
            <type name="IndexAssociation" c:type="GstIndexAssociation*"/>
          </field>
          <field name="flags" writable="1">
            <type name="AssocFlags" c:type="GstAssocFlags"/>
          </field>
        </record>
        <record name="object" c:type="object">
          <field name="key" writable="1">
            <type name="utf8" c:type="gchar*"/>
          </field>
          <field name="type" writable="1">
            <type name="GType" c:type="GType"/>
          </field>
          <field name="object" writable="1">
            <type name="any" c:type="gpointer"/>
          </field>
        </record>
        <record name="format" c:type="format">
          <field name="format" writable="1">
            <type name="Format" c:type="GstFormat"/>
          </field>
          <field name="key" writable="1">
            <type name="utf8" c:type="gchar*"/>
          </field>
        </record>
      </union>
      <method name="copy"
              c:identifier="gst_index_entry_copy"
              doc="Copies an entry and returns the result.">
        <return-value transfer-ownership="full">
          <type name="IndexEntry" c:type="GstIndexEntry*"/>
        </return-value>
      </method>
      <method name="free"
              c:identifier="gst_index_entry_free"
              doc="Free the memory used by the given entry.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="assoc_map"
              c:identifier="gst_index_entry_assoc_map"
              doc="Gets alternative formats associated with the indexentry.
format.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
    </record>
    <enumeration name="IndexEntryType"
                 doc="The different types of entries in the index."
                 c:type="GstIndexEntryType">
      <member name="id" value="0" c:identifier="GST_INDEX_ENTRY_ID"/>
      <member name="association"
              value="1"
              c:identifier="GST_INDEX_ENTRY_ASSOCIATION"/>
      <member name="object" value="2" c:identifier="GST_INDEX_ENTRY_OBJECT"/>
      <member name="format" value="3" c:identifier="GST_INDEX_ENTRY_FORMAT"/>
    </enumeration>
    <class name="IndexFactory"
           c:type="GstIndexFactory"
           doc="The GstIndexFactory object"
           parent="PluginFeature"
           glib:type-name="GstIndexFactory"
           glib:get-type="gst_index_factory_get_type"
           glib:type-struct="IndexFactoryClass">
      <constructor name="new"
                   c:identifier="gst_index_factory_new"
                   doc="Create a new indexfactory with the given parameters">
        <return-value transfer-ownership="full">
          <type name="IndexFactory" c:type="GstIndexFactory*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="longdesc" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </constructor>
      <function name="find"
                c:identifier="gst_index_factory_find"
                doc="Search for an indexfactory of the given name.">
        <return-value transfer-ownership="full">
          <type name="IndexFactory" c:type="GstIndexFactory*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </function>
      <function name="make"
                c:identifier="gst_index_factory_make"
                doc="Create a new #GstIndex instance from the
indexfactory with the given name.">
        <return-value transfer-ownership="full">
          <type name="Index" c:type="GstIndex*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </function>
      <method name="destroy"
              c:identifier="gst_index_factory_destroy"
              doc="Removes the index from the global list.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="create"
              c:identifier="gst_index_factory_create"
              doc="Create a new #GstIndex instance from the
given indexfactory.">
        <return-value transfer-ownership="full">
          <type name="Index" c:type="GstIndex*"/>
        </return-value>
      </method>
      <field name="feature">
        <type name="PluginFeature" c:type="GstPluginFeature"/>
      </field>
      <field name="longdesc">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="type">
        <type name="GType" c:type="GType"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </class>
    <record name="IndexFactoryClass"
            c:type="GstIndexFactoryClass"
            glib:is-gtype-struct-for="IndexFactory">
      <field name="parent">
        <type name="PluginFeatureClass" c:type="GstPluginFeatureClass"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <callback name="IndexFilter"
              c:type="GstIndexFilter"
              doc="Function to filter out entries in the index.
to the index, %FALSE otherwise.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="index" transfer-ownership="none">
          <type name="Index" c:type="GstIndex*"/>
        </parameter>
        <parameter name="entry" transfer-ownership="none">
          <type name="IndexEntry" c:type="GstIndexEntry*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="2">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <bitfield name="IndexFlags"
              doc="Flags for this index"
              c:type="GstIndexFlags">
      <member name="writable" value="16" c:identifier="GST_INDEX_WRITABLE"/>
      <member name="readable" value="32" c:identifier="GST_INDEX_READABLE"/>
      <member name="flag_last"
              value="4096"
              c:identifier="GST_INDEX_FLAG_LAST"/>
    </bitfield>
    <record name="IndexGroup"
            c:type="GstIndexGroup"
            doc="A group of related entries in an index.">
      <field name="groupnum" writable="1">
        <type name="int" c:type="gint"/>
      </field>
      <field name="entries" writable="1">
        <type name="GLib.List" c:type="GList*"/>
      </field>
      <field name="certainty" writable="1">
        <type name="IndexCertainty" c:type="GstIndexCertainty"/>
      </field>
      <field name="peergroup" writable="1">
        <type name="int" c:type="gint"/>
      </field>
    </record>
    <enumeration name="IndexLookupMethod"
                 doc="Specify the method to find an index entry in the index."
                 c:type="GstIndexLookupMethod">
      <member name="exact" value="0" c:identifier="GST_INDEX_LOOKUP_EXACT"/>
      <member name="before" value="1" c:identifier="GST_INDEX_LOOKUP_BEFORE"/>
      <member name="after" value="2" c:identifier="GST_INDEX_LOOKUP_AFTER"/>
    </enumeration>
    <callback name="IndexResolver"
              c:type="GstIndexResolver"
              doc="Function to resolve ids to writer descriptions.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="index" transfer-ownership="none">
          <type name="Index" c:type="GstIndex*"/>
        </parameter>
        <parameter name="writer" transfer-ownership="none">
          <type name="Object" c:type="GstObject*"/>
        </parameter>
        <parameter name="writer_string" transfer-ownership="none">
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="3">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <enumeration name="IndexResolverMethod"
                 doc="The method used to resolve index writers"
                 c:type="GstIndexResolverMethod">
      <member name="custom"
              value="0"
              c:identifier="GST_INDEX_RESOLVER_CUSTOM"/>
      <member name="gtype" value="1" c:identifier="GST_INDEX_RESOLVER_GTYPE"/>
      <member name="path" value="2" c:identifier="GST_INDEX_RESOLVER_PATH"/>
    </enumeration>
    <record name="Iterator"
            c:type="GstIterator"
            doc="#GstIterator base structure. The values of this structure are
protected for subclasses, use the methods to use the #GstIterator.">
      <field name="next" writable="1">
        <type name="IteratorNextFunction" c:type="GstIteratorNextFunction"/>
      </field>
      <field name="item" writable="1">
        <type name="IteratorItemFunction" c:type="GstIteratorItemFunction"/>
      </field>
      <field name="resync" writable="1">
        <type name="IteratorResyncFunction"
              c:type="GstIteratorResyncFunction"/>
      </field>
      <field name="free" writable="1">
        <type name="IteratorFreeFunction" c:type="GstIteratorFreeFunction"/>
      </field>
      <field name="pushed" writable="1">
        <type name="Iterator" c:type="GstIterator*"/>
      </field>
      <field name="type" writable="1">
        <type name="GType" c:type="GType"/>
      </field>
      <field name="lock" writable="1">
        <type name="GLib.Mutex" c:type="GMutex*"/>
      </field>
      <field name="cookie" writable="1">
        <type name="uint32" c:type="guint32"/>
      </field>
      <field name="master_cookie" writable="1">
        <type name="any" c:type="guint32*"/>
      </field>
      <field name="_gst_reserved" writable="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
      <constructor name="new"
                   c:identifier="gst_iterator_new"
                   doc="Create a new iterator. This function is mainly used for objects
implementing the next/resync/free function to iterate a data structure.
For each item retrieved, the @item function is called with the lock
held. The @free function is called when the iterator is freed.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Iterator" c:type="GstIterator*"/>
        </return-value>
        <parameters>
          <parameter name="size" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <type name="GType" c:type="GType"/>
          </parameter>
          <parameter name="lock" transfer-ownership="none">
            <type name="GLib.Mutex" c:type="GMutex*"/>
          </parameter>
          <parameter name="master_cookie"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     doc=" iterator changed.">
            <type name="uint32" c:type="guint32*"/>
          </parameter>
          <parameter name="next" transfer-ownership="none" scope="call">
            <type name="IteratorNextFunction"
                  c:type="GstIteratorNextFunction"/>
          </parameter>
          <parameter name="item" transfer-ownership="none" scope="call">
            <type name="IteratorItemFunction"
                  c:type="GstIteratorItemFunction"/>
          </parameter>
          <parameter name="resync" transfer-ownership="none" scope="call">
            <type name="IteratorResyncFunction"
                  c:type="GstIteratorResyncFunction"/>
          </parameter>
          <parameter name="free" transfer-ownership="none" scope="call">
            <type name="IteratorFreeFunction"
                  c:type="GstIteratorFreeFunction"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_list"
                   c:identifier="gst_iterator_new_list"
                   doc="Create a new iterator designed for iterating @list.
The list you iterate is usually part of a data structure @owner and is
protected with @lock.
The iterator will use @lock to retrieve the next item of the list and it
will then call the @item function before releasing @lock again.
The @item function usualy makes sure that the item remains alive while
responsible for freeing/unreffing the item after usage as explained in
gst_iterator_next().
When a concurrent update to the list is performed, usually by @owner while
holding @lock, @master_cookie will be updated. The iterator implementation
will notice the update of the cookie and will return %GST_ITERATOR_RESYNC to
the user of the iterator in the next call to gst_iterator_next().
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Iterator" c:type="GstIterator*"/>
        </return-value>
        <parameters>
          <parameter name="type" transfer-ownership="none">
            <type name="GType" c:type="GType"/>
          </parameter>
          <parameter name="lock" transfer-ownership="none">
            <type name="GLib.Mutex" c:type="GMutex*"/>
          </parameter>
          <parameter name="master_cookie"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     doc=" is changed.">
            <type name="uint32" c:type="guint32*"/>
          </parameter>
          <parameter name="list" transfer-ownership="none">
            <type name="GLib.List" c:type="GList**"/>
          </parameter>
          <parameter name="owner" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
          <parameter name="item" transfer-ownership="none" scope="call">
            <type name="IteratorItemFunction"
                  c:type="GstIteratorItemFunction"/>
          </parameter>
          <parameter name="free" transfer-ownership="none" scope="call">
            <type name="IteratorDisposeFunction"
                  c:type="GstIteratorDisposeFunction"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_single"
                   c:identifier="gst_iterator_new_single"
                   doc="This #GstIterator is a convenient iterator for the common
case where a #GstIterator needs to be returned but only
a single object has to be considered. This happens often
for the #GstPadIterIntLinkFunction."
                   version="0.10.25">
        <return-value transfer-ownership="full">
          <type name="Iterator" c:type="GstIterator*"/>
        </return-value>
        <parameters>
          <parameter name="type" transfer-ownership="none">
            <type name="GType" c:type="GType"/>
          </parameter>
          <parameter name="object" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
          <parameter name="copy" transfer-ownership="none" scope="call">
            <type name="CopyFunction" c:type="GstCopyFunction"/>
          </parameter>
          <parameter name="free" transfer-ownership="none" scope="call">
            <type name="GLib.FreeFunc" c:type="GFreeFunc"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="next"
              c:identifier="gst_iterator_next"
              doc="Get the next item from the iterator in @elem.
Only when this function returns %GST_ITERATOR_OK, @elem will contain a valid
value. For iterators that return refcounted objects, the returned object
will have its refcount increased and should therefore be unreffed after
usage.
When this function returns %GST_ITERATOR_DONE, no more elements can be
retrieved from @it.
A return value of %GST_ITERATOR_RESYNC indicates that the element list was
concurrently updated. The user of @it should call gst_iterator_resync() to
get the newly updated list.
A return value of %GST_ITERATOR_ERROR indicates an unrecoverable fatal error.
is a refcounted object.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="IteratorResult" c:type="GstIteratorResult"/>
        </return-value>
        <parameters>
          <parameter name="elem" transfer-ownership="none">
            <type name="any" c:type="gpointer*"/>
          </parameter>
        </parameters>
      </method>
      <method name="resync"
              c:identifier="gst_iterator_resync"
              doc="Resync the iterator. this function is mostly called
after gst_iterator_next() returned %GST_ITERATOR_RESYNC.
When an iterator was pushed on @it, it will automatically be popped again
with this function.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="free"
              c:identifier="gst_iterator_free"
              doc="Free the iterator.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="push"
              c:identifier="gst_iterator_push"
              doc="Pushes @other iterator onto @it. All calls performed on @it are
forwarded to @other. If @other returns %GST_ITERATOR_DONE, it is
popped again and calls are handled by @it again.
This function is mainly used by objects implementing the iterator
next function to recurse into substructures.
When gst_iterator_resync() is called on @it, @other will automatically be
popped.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="other" transfer-ownership="none">
            <type name="Iterator" c:type="GstIterator*"/>
          </parameter>
        </parameters>
      </method>
      <method name="filter"
              c:identifier="gst_iterator_filter"
              doc="Create a new iterator from an existing iterator. The new iterator
will only return those elements that match the given compare function @func.
in the iterator.
When this iterator is freed, @it will also be freed.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Iterator" c:type="GstIterator*"/>
        </return-value>
        <parameters>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="GLib.CompareFunc" c:type="GCompareFunc"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="fold"
              c:identifier="gst_iterator_fold"
              doc="Folds @func over the elements of @iter. That is to say, @func will be called
as @func (object, @ret, @user_data) for each object in @it. The normal use
of this procedure is to accumulate the results of operating on the objects in
before @func is called, and it should be unrefed after use in @func.
This procedure can be used (and is used internally) to implement the
gst_iterator_foreach() and gst_iterator_find_custom() operations.
The fold will proceed as long as @func returns TRUE. When the iterator has no
more arguments, %GST_ITERATOR_DONE will be returned. If @func returns FALSE,
the fold will stop, and %GST_ITERATOR_OK will be returned. Errors or resyncs
will cause fold to return %GST_ITERATOR_ERROR or %GST_ITERATOR_RESYNC as
appropriate.
The iterator will not be freed.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="IteratorResult" c:type="GstIteratorResult"/>
        </return-value>
        <parameters>
          <parameter name="func" transfer-ownership="none" scope="call">
            <type name="IteratorFoldFunction"
                  c:type="GstIteratorFoldFunction"/>
          </parameter>
          <parameter name="ret" transfer-ownership="none">
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="foreach"
              c:identifier="gst_iterator_foreach"
              doc="Iterate over all element of @it and call the given function @func for
each element.  As in gst_iterator_fold(), the refcount of a refcounted
object will be increased before @func is called, and should be unrefed
after use.
freed.
MT safe.">
        <return-value transfer-ownership="full" doc="The iterator will not be">
          <type name="IteratorResult" c:type="GstIteratorResult"/>
        </return-value>
        <parameters>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="GLib.Func" c:type="GFunc"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="find_custom"
              c:identifier="gst_iterator_find_custom"
              doc="Find the first element in @it that matches the compare function @func.
the refcount of a refcounted object will be increased before @func is
called, and should be unrefed after use.
The iterator will not be freed.
This function will return NULL if an error or resync happened to
the iterator.
function or NULL when no element matched.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </return-value>
        <parameters>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="GLib.CompareFunc" c:type="GCompareFunc"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
    </record>
    <callback name="IteratorDisposeFunction"
              c:type="GstIteratorDisposeFunction"
              doc="The function that will be called when a #GList iterator is freed. The
owner of the #GList iterator can then clean up its resources.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="owner" transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="IteratorFoldFunction"
              c:type="GstIteratorFoldFunction"
              doc="A function to be passed to gst_iterator_fold().">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="item" transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </parameter>
        <parameter name="ret" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="2">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="IteratorFreeFunction"
              c:type="GstIteratorFreeFunction"
              doc="This function will be called when the iterator is freed.
Implementors of a #GstIterator should implement this
function and pass it to the constructor of the custom iterator.
The function will be called with the iterator lock held.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="it" transfer-ownership="none">
          <type name="Iterator" c:type="GstIterator*"/>
        </parameter>
      </parameters>
    </callback>
    <enumeration name="IteratorItem"
                 doc="The result of a #GstIteratorItemFunction."
                 c:type="GstIteratorItem">
      <member name="skip" value="0" c:identifier="GST_ITERATOR_ITEM_SKIP"/>
      <member name="pass" value="1" c:identifier="GST_ITERATOR_ITEM_PASS"/>
      <member name="end" value="2" c:identifier="GST_ITERATOR_ITEM_END"/>
    </enumeration>
    <callback name="IteratorItemFunction"
              c:type="GstIteratorItemFunction"
              doc="The function that will be called after the next item of the iterator
has been retrieved. This function will typically increase the refcount
of the item or make a copy.
Implementors of a #GstIterator should implement this
function and pass it to the constructor of the custom iterator.
The function will be called with the iterator lock held.">
      <return-value transfer-ownership="full">
        <type name="IteratorItem" c:type="GstIteratorItem"/>
      </return-value>
      <parameters>
        <parameter name="it" transfer-ownership="none">
          <type name="Iterator" c:type="GstIterator*"/>
        </parameter>
        <parameter name="item" transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="IteratorNextFunction"
              c:type="GstIteratorNextFunction"
              doc="The function that will be called when the next element of the iterator
should be retrieved.
Implementors of a #GstIterator should implement this
function and pass it to the constructor of the custom iterator.
The function will be called with the iterator lock held.">
      <return-value transfer-ownership="full">
        <type name="IteratorResult" c:type="GstIteratorResult"/>
      </return-value>
      <parameters>
        <parameter name="it" transfer-ownership="none">
          <type name="Iterator" c:type="GstIterator*"/>
        </parameter>
        <parameter name="result" transfer-ownership="none">
          <type name="any" c:type="gpointer*"/>
        </parameter>
      </parameters>
    </callback>
    <enumeration name="IteratorResult"
                 doc="The result of gst_iterator_next()."
                 c:type="GstIteratorResult">
      <member name="done" value="0" c:identifier="GST_ITERATOR_DONE"/>
      <member name="ok" value="1" c:identifier="GST_ITERATOR_OK"/>
      <member name="resync" value="2" c:identifier="GST_ITERATOR_RESYNC"/>
      <member name="error" value="3" c:identifier="GST_ITERATOR_ERROR"/>
    </enumeration>
    <callback name="IteratorResyncFunction"
              c:type="GstIteratorResyncFunction"
              doc="This function will be called whenever a concurrent update happened
to the iterated datastructure. The implementor of the iterator should
restart the iterator from the beginning and clean up any state it might
have.
Implementors of a #GstIterator should implement this
function and pass it to the constructor of the custom iterator.
The function will be called with the iterator lock held.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="it" transfer-ownership="none">
          <type name="Iterator" c:type="GstIterator*"/>
        </parameter>
      </parameters>
    </callback>
    <constant name="LICENSE_UNKNOWN" value="unknown">
      <type name="utf8"/>
    </constant>
    <enumeration name="LibraryError"
                 doc="Library errors are for errors from the library being used by elements
(initializing, finalizing, settings, ...)"
                 c:type="GstLibraryError"
                 glib:error-quark="gst_library_error_quark">
      <member name="failed" value="1" c:identifier="GST_LIBRARY_ERROR_FAILED"/>
      <member name="too_lazy"
              value="2"
              c:identifier="GST_LIBRARY_ERROR_TOO_LAZY"/>
      <member name="init" value="3" c:identifier="GST_LIBRARY_ERROR_INIT"/>
      <member name="shutdown"
              value="4"
              c:identifier="GST_LIBRARY_ERROR_SHUTDOWN"/>
      <member name="settings"
              value="5"
              c:identifier="GST_LIBRARY_ERROR_SETTINGS"/>
      <member name="encode" value="6" c:identifier="GST_LIBRARY_ERROR_ENCODE"/>
      <member name="num_errors"
              value="7"
              c:identifier="GST_LIBRARY_ERROR_NUM_ERRORS"/>
    </enumeration>
    <callback name="LogFunction"
              c:type="GstLogFunction"
              doc="Function prototype for a logging function that can be registered with
gst_debug_add_log_function().
Use G_GNUC_NO_INSTRUMENT on that function.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="category" transfer-ownership="none">
          <type name="DebugCategory" c:type="GstDebugCategory*"/>
        </parameter>
        <parameter name="level" transfer-ownership="none">
          <type name="DebugLevel" c:type="GstDebugLevel"/>
        </parameter>
        <parameter name="file" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="function" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="line" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="object" transfer-ownership="none">
          <type name="GObject.Object" c:type="GObject*"/>
        </parameter>
        <parameter name="message" transfer-ownership="none">
          <type name="DebugMessage" c:type="GstDebugMessage*"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <constant name="MESSAGE_TRACE_NAME" value="GstMessage">
      <type name="utf8"/>
    </constant>
    <constant name="MSECOND" value="0">
      <type name="int"/>
    </constant>
    <constant name="M_PI" value="3.14159265359">
      <type name="double"/>
    </constant>
    <record name="Message" c:type="GstMessage" doc="A #GstMessage.">
      <field name="mini_object" writable="1">
        <type name="MiniObject" c:type="GstMiniObject"/>
      </field>
      <field name="lock" writable="1">
        <type name="GLib.Mutex" c:type="GMutex*"/>
      </field>
      <field name="cond" writable="1">
        <type name="GLib.Cond" c:type="GCond*"/>
      </field>
      <field name="type" writable="1">
        <type name="MessageType" c:type="GstMessageType"/>
      </field>
      <field name="timestamp" writable="1">
        <type name="uint64" c:type="guint64"/>
      </field>
      <field name="src" writable="1">
        <type name="Object" c:type="GstObject*"/>
      </field>
      <field name="structure" writable="1">
        <type name="Structure" c:type="GstStructure*"/>
      </field>
      <union name="abidata" c:type="abidata">
        <record name="ABI" c:type="ABI">
          <field name="seqnum" writable="1">
            <type name="uint32" c:type="guint32"/>
          </field>
        </record>
        <field name="_gst_reserved" writable="1">
          <array zero-terminated="0" c:type="gpointer" fixed-size="4">
            <type name="any"/>
          </array>
        </field>
      </union>
      <constructor name="new_eos"
                   c:identifier="gst_message_new_eos"
                   doc="Create a new eos message. This message is generated and posted in
the sink elements of a GstBin. The bin will only forward the EOS
message to the application if all sinks have posted an EOS message.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_error"
                   c:identifier="gst_message_new_error"
                   doc="Create a new error message. The message will copy @error and
occured. The pipeline will probably (partially) stop. The application
receiving this message should stop the pipeline.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
          <parameter name="debug" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_warning"
                   c:identifier="gst_message_new_warning"
                   doc="Create a new warning message. The message will make copies of @error and
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
          <parameter name="debug" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_info"
                   c:identifier="gst_message_new_info"
                   doc="Create a new info message. The message will make copies of @error and
MT safe."
                   version="0.10.12">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
          <parameter name="debug" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_tag"
                   c:identifier="gst_message_new_tag"
                   doc="Create a new tag message. The message will take ownership of the tag list.
The message is posted by elements that discovered a new taglist.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="tag_list" transfer-ownership="none">
            <type name="TagList" c:type="GstTagList*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_tag_full"
                   c:identifier="gst_message_new_tag_full"
                   doc="Create a new tag message. The message will take ownership of the tag list.
The message is posted by elements that discovered a new taglist.
MT safe."
                   version="0.10.24">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="pad" transfer-ownership="none">
            <type name="Pad" c:type="GstPad*"/>
          </parameter>
          <parameter name="tag_list" transfer-ownership="none">
            <type name="TagList" c:type="GstTagList*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_buffering"
                   c:identifier="gst_message_new_buffering"
                   doc="Create a new buffering message. This message can be posted by an element that
needs to buffer data before it can continue processing. @percent should be a
value between 0 and 100. A value of 100 means that the buffering completed.
When @percent is &lt; 100 the application should PAUSE a PLAYING pipeline. When
The application must be prepared to receive BUFFERING messages in the
PREROLLING state and may only set the pipeline to PLAYING after receiving a
message with @percent set to 100, which can happen after the pipeline
completed prerolling.
MT safe."
                   version="0.10.11">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="percent" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_state_changed"
                   c:identifier="gst_message_new_state_changed"
                   doc="Create a state change message. This message is posted whenever an element
changed its state.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="oldstate" transfer-ownership="none">
            <type name="State" c:type="GstState"/>
          </parameter>
          <parameter name="newstate" transfer-ownership="none" doc="state">
            <type name="State" c:type="GstState"/>
          </parameter>
          <parameter name="pending" transfer-ownership="none" doc="state">
            <type name="State" c:type="GstState"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_state_dirty"
                   c:identifier="gst_message_new_state_dirty"
                   doc="Create a state dirty message. This message is posted whenever an element
changed its state asynchronously and is used internally to update the
states of container objects.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_step_done"
                   c:identifier="gst_message_new_step_done"
                   doc="This message is posted by elements when they complete a part, when @intermediate set
to TRUE, or a complete step operation.
MT safe."
                   version="0.10.24">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="amount" transfer-ownership="none">
            <type name="uint64" c:type="guint64"/>
          </parameter>
          <parameter name="rate" transfer-ownership="none">
            <type name="double" c:type="gdouble"/>
          </parameter>
          <parameter name="flush" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
          <parameter name="intermediate" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
          <parameter name="duration" transfer-ownership="none">
            <type name="uint64" c:type="guint64"/>
          </parameter>
          <parameter name="eos" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_clock_provide"
                   c:identifier="gst_message_new_clock_provide"
                   doc="Create a clock provide message. This message is posted whenever an
element is ready to provide a clock or lost its ability to provide
a clock (maybe because it paused or became EOS).
This message is mainly used internally to manage the clock
selection.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="clock" transfer-ownership="none">
            <type name="Clock" c:type="GstClock*"/>
          </parameter>
          <parameter name="ready" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_clock_lost"
                   c:identifier="gst_message_new_clock_lost"
                   doc="Create a clock lost message. This message is posted whenever the
clock is not valid anymore.
If this message is posted by the pipeline, the pipeline will
select a new clock again when it goes to PLAYING. It might therefore
be needed to set the pipeline to PAUSED and PLAYING again.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="clock" transfer-ownership="none">
            <type name="Clock" c:type="GstClock*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_new_clock"
                   c:identifier="gst_message_new_new_clock"
                   doc="Create a new clock message. This message is posted whenever the
pipeline selectes a new clock for the pipeline.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="clock" transfer-ownership="none">
            <type name="Clock" c:type="GstClock*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_application"
                   c:identifier="gst_message_new_application"
                   doc="Create a new application-typed message. GStreamer will never create these
messages; they are a gift from us to you. Enjoy.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="structure"
                     transfer-ownership="none"
                     doc=" the structure.">
            <type name="Structure" c:type="GstStructure*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_element"
                   c:identifier="gst_message_new_element"
                   doc="Create a new element-specific message. This is meant as a generic way of
allowing one-way communication from an element to an application, for example
&quot;the firewire cable was unplugged&quot;. The format of the message should be
documented in the element&apos;s documentation. The structure field can be NULL.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="structure"
                     transfer-ownership="none"
                     doc=" the structure.">
            <type name="Structure" c:type="GstStructure*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_segment_start"
                   c:identifier="gst_message_new_segment_start"
                   doc="Create a new segment message. This message is posted by elements that
start playback of a segment as a result of a segment seek. This message
is not received by the application but is used for maintenance reasons in
container elements.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="position" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_segment_done"
                   c:identifier="gst_message_new_segment_done"
                   doc="Create a new segment done message. This message is posted by elements that
finish playback of a segment as a result of a segment seek. This message
is received by the application after all elements that posted a segment_start
have posted the segment_done.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="position" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_duration"
                   c:identifier="gst_message_new_duration"
                   doc="Create a new duration message. This message is posted by elements that
know the duration of a stream in a specific format. This message
is received by bins and is used to calculate the total duration of a
pipeline. Elements may post a duration message with a duration of
GST_CLOCK_TIME_NONE to indicate that the duration has changed and the
cached duration should be discarded. The new duration can then be
retrieved via a query.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="duration" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_latency"
                   c:identifier="gst_message_new_latency"
                   doc="This message can be posted by elements when their latency requirements have
changed.
MT safe."
                   version="0.10.12">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_async_start"
                   c:identifier="gst_message_new_async_start"
                   doc="This message is posted by elements when they start an ASYNC state change.
PLAYING.
MT safe."
                   version="0.10.13">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="new_base_time" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_async_done"
                   c:identifier="gst_message_new_async_done"
                   doc="The message is posted when elements completed an ASYNC state change.
MT safe."
                   version="0.10.13">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_structure_change"
                   c:identifier="gst_message_new_structure_change"
                   doc="Create a new structure change message. This message is posted when the
structure of a pipeline is in the process of being changed, for example
when pads are linked or unlinked.
MT safe."
                   version="0.10.22.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <type name="StructureChangeType" c:type="GstStructureChangeType"/>
          </parameter>
          <parameter name="owner" transfer-ownership="none">
            <type name="Element" c:type="GstElement*"/>
          </parameter>
          <parameter name="busy" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_stream_status"
                   c:identifier="gst_message_new_stream_status"
                   doc="Create a new stream status message. This message is posted when a streaming
thread is created/destroyed or when the state changed.
MT safe."
                   version="0.10.24.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <type name="StreamStatusType" c:type="GstStreamStatusType"/>
          </parameter>
          <parameter name="owner" transfer-ownership="none">
            <type name="Element" c:type="GstElement*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_request_state"
                   c:identifier="gst_message_new_request_state"
                   doc="This message can be posted by elements when they want to have their state
changed. A typical use case would be an audio server that wants to pause the
pipeline because a higher priority stream is being played.
MT safe."
                   version="0.10.23">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="state" transfer-ownership="none">
            <type name="State" c:type="GstState"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_step_start"
                   c:identifier="gst_message_new_step_start"
                   doc="This message is posted by elements when they accept or activate a new step
event for @amount in @format.
queued it for execution in the streaming threads.
is now ready to start executing the step in the streaming thread. After this
message is emited, the application can queue a new step operation in the
element.
MT safe."
                   version="0.10.24">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="active" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="amount" transfer-ownership="none">
            <type name="uint64" c:type="guint64"/>
          </parameter>
          <parameter name="rate" transfer-ownership="none">
            <type name="double" c:type="gdouble"/>
          </parameter>
          <parameter name="flush" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
          <parameter name="intermediate" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_qos"
                   c:identifier="gst_message_new_qos"
                   doc="A QOS message is posted on the bus whenever an element decides to drop a
buffer because of QoS reasons or whenever it changes its processing strategy
because of QoS reasons (quality adjustments such as processing at lower
accuracy).
This message can be posted by an element that performs synchronisation against the
clock (live) or it could be dropped by an element that performs QoS because of QOS
events received from a downstream element (!live).
respective running-time, stream-time, timestamp and duration of the (dropped)
buffer that generated the QoS event. Values can be left to
GST_CLOCK_TIME_NONE when unknown.
MT safe."
                   version="0.10.29">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="live" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
          <parameter name="running_time" transfer-ownership="none">
            <type name="uint64" c:type="guint64"/>
          </parameter>
          <parameter name="stream_time" transfer-ownership="none">
            <type name="uint64" c:type="guint64"/>
          </parameter>
          <parameter name="timestamp" transfer-ownership="none">
            <type name="uint64" c:type="guint64"/>
          </parameter>
          <parameter name="duration" transfer-ownership="none">
            <type name="uint64" c:type="guint64"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_custom"
                   c:identifier="gst_message_new_custom"
                   doc="Create a new custom-typed message. This can be used for anything not
handled by other message-specific functions to pass a message to the
app. The structure field can be NULL.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="type" transfer-ownership="none">
            <type name="MessageType" c:type="GstMessageType"/>
          </parameter>
          <parameter name="src" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="structure"
                     transfer-ownership="none"
                     doc=" the structure.">
            <type name="Structure" c:type="GstStructure*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get_seqnum"
              c:identifier="gst_message_get_seqnum"
              doc="Retrieve the sequence number of a message.
Messages have ever-incrementing sequence numbers, which may also be set
explicitly via gst_message_set_seqnum(). Sequence numbers are typically used
to indicate that a message corresponds to some other set of messages or
events, for example a SEGMENT_DONE message corresponding to a SEEK event. It
is considered good practice to make this correspondence when possible, though
it is not required.
Note that events and messages share the same sequence number incrementor;
two events or messages will never not have the same sequence number unless
that correspondence was made explicitly.
MT safe."
              version="0.10.22">
        <return-value transfer-ownership="none">
          <type name="uint32" c:type="guint32"/>
        </return-value>
      </method>
      <method name="set_seqnum"
              c:identifier="gst_message_set_seqnum"
              doc="Set the sequence number of a message.
This function might be called by the creator of a message to indicate that
the message relates to other messages or events. See gst_message_get_seqnum()
for more information.
MT safe."
              version="0.10.22">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="seqnum" transfer-ownership="none">
            <type name="uint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_error"
              c:identifier="gst_message_parse_error"
              doc="Extracts the GError and debug string from the GstMessage. The values returned
in the output arguments are copies; the caller must free them when done.
Typical usage of this function might be:
|[
...
switch (GST_MESSAGE_TYPE (msg)) {
GError *err = NULL;
gchar *dbg_info = NULL;
gst_message_parse_error (msg, &amp;amp;err, &amp;amp;dbg_info);
GST_OBJECT_NAME (msg-&gt;src), err-&gt;message);
g_error_free (err);
g_free (dbg_info);
break;
}
...
}
...
]|
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="gerror" transfer-ownership="none">
            <type name="GLib.Error" c:type="GError**"/>
          </parameter>
          <parameter name="debug" transfer-ownership="none">
            <array c:type="gchar**">
              <type name="utf8"/>
            </array>
          </parameter>
        </parameters>
      </method>
      <method name="parse_warning"
              c:identifier="gst_message_parse_warning"
              doc="Extracts the GError and debug string from the GstMessage. The values returned
in the output arguments are copies; the caller must free them when done.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="gerror" transfer-ownership="none">
            <type name="GLib.Error" c:type="GError**"/>
          </parameter>
          <parameter name="debug" transfer-ownership="none">
            <array c:type="gchar**">
              <type name="utf8"/>
            </array>
          </parameter>
        </parameters>
      </method>
      <method name="parse_info"
              c:identifier="gst_message_parse_info"
              doc="Extracts the GError and debug string from the GstMessage. The values returned
in the output arguments are copies; the caller must free them when done.
MT safe."
              version="0.10.12">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="gerror" transfer-ownership="none">
            <type name="GLib.Error" c:type="GError**"/>
          </parameter>
          <parameter name="debug" transfer-ownership="none">
            <array c:type="gchar**">
              <type name="utf8"/>
            </array>
          </parameter>
        </parameters>
      </method>
      <method name="parse_tag"
              c:identifier="gst_message_parse_tag"
              doc="Extracts the tag list from the GstMessage. The tag list returned in the
output argument is a copy; the caller must free it when done.
Typical usage of this function might be:
|[
...
switch (GST_MESSAGE_TYPE (msg)) {
GstTagList *tags = NULL;
gst_message_parse_tag (msg, &amp;amp;tags);
g_print (&quot;Got tags from element %s\n&quot;, GST_OBJECT_NAME (msg-&gt;src));
handle_tags (tags);
gst_tag_list_free (tags);
break;
}
...
}
...
]|
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="tag_list" transfer-ownership="none">
            <type name="TagList" c:type="GstTagList**"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_tag_full"
              c:identifier="gst_message_parse_tag_full"
              doc="Extracts the tag list from the GstMessage. The tag list returned in the
output argument is a copy; the caller must free it when done.
MT safe."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="pad" transfer-ownership="none">
            <type name="Pad" c:type="GstPad**"/>
          </parameter>
          <parameter name="tag_list" transfer-ownership="none">
            <type name="TagList" c:type="GstTagList**"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_buffering"
              c:identifier="gst_message_parse_buffering"
              doc="Extracts the buffering percent from the GstMessage. see also
gst_message_new_buffering().
MT safe."
              version="0.10.11">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="percent"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int" c:type="gint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_buffering_stats"
              c:identifier="gst_message_set_buffering_stats"
              doc="Configures the buffering stats values in @message."
              version="0.10.20">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="mode" transfer-ownership="none">
            <type name="BufferingMode" c:type="GstBufferingMode"/>
          </parameter>
          <parameter name="avg_in" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="avg_out" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="buffering_left" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_buffering_stats"
              c:identifier="gst_message_parse_buffering_stats"
              doc="Extracts the buffering stats values from @message."
              version="0.10.20">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="mode" transfer-ownership="none">
            <type name="BufferingMode" c:type="GstBufferingMode*"/>
          </parameter>
          <parameter name="avg_in"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int" c:type="gint*"/>
          </parameter>
          <parameter name="avg_out"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int" c:type="gint*"/>
          </parameter>
          <parameter name="buffering_left"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_state_changed"
              c:identifier="gst_message_parse_state_changed"
              doc="Extracts the old and new states from the GstMessage.
Typical usage of this function might be:
|[
...
switch (GST_MESSAGE_TYPE (msg)) {
GstState old_state, new_state;
gst_message_parse_state_changed (msg, &amp;amp;old_state, &amp;amp;new_state, NULL);
g_print (&quot;Element %s changed state from %s to %s.\n&quot;,
GST_OBJECT_NAME (msg-&gt;src),
gst_element_state_get_name (old_state),
gst_element_state_get_name (new_state));
break;
}
...
}
...
]|
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="oldstate" transfer-ownership="none">
            <type name="State" c:type="GstState*"/>
          </parameter>
          <parameter name="newstate"
                     transfer-ownership="none"
                     doc="state, or NULL">
            <type name="State" c:type="GstState*"/>
          </parameter>
          <parameter name="pending"
                     transfer-ownership="none"
                     doc="state, or NULL">
            <type name="State" c:type="GstState*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_step_done"
              c:identifier="gst_message_parse_step_done"
              doc="Extract the values the step_done message.
MT safe."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="amount"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="uint64" c:type="guint64*"/>
          </parameter>
          <parameter name="rate"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="double" c:type="gdouble*"/>
          </parameter>
          <parameter name="flush"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
          <parameter name="intermediate"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
          <parameter name="duration"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="uint64" c:type="guint64*"/>
          </parameter>
          <parameter name="eos"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_clock_provide"
              c:identifier="gst_message_parse_clock_provide"
              doc="Extracts the clock and ready flag from the GstMessage.
The clock object returned remains valid until the message is freed.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="clock" transfer-ownership="none">
            <type name="Clock" c:type="GstClock**"/>
          </parameter>
          <parameter name="ready"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_clock_lost"
              c:identifier="gst_message_parse_clock_lost"
              doc="Extracts the lost clock from the GstMessage.
The clock object returned remains valid until the message is freed.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="clock" transfer-ownership="none">
            <type name="Clock" c:type="GstClock**"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_new_clock"
              c:identifier="gst_message_parse_new_clock"
              doc="Extracts the new clock from the GstMessage.
The clock object returned remains valid until the message is freed.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="clock" transfer-ownership="none">
            <type name="Clock" c:type="GstClock**"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_segment_start"
              c:identifier="gst_message_parse_segment_start"
              doc="Extracts the position and format from the segment start message.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="position"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_segment_done"
              c:identifier="gst_message_parse_segment_done"
              doc="Extracts the position and format from the segment start message.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="position"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_duration"
              c:identifier="gst_message_parse_duration"
              doc="Extracts the duration and format from the duration message. The duration
might be GST_CLOCK_TIME_NONE, which indicates that the duration has
changed. Applications should always use a query to retrieve the duration
of a pipeline.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="duration"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_async_start"
              c:identifier="gst_message_parse_async_start"
              doc="Extract the new_base_time from the async_start message.
MT safe."
              version="0.10.13">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="new_base_time"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_structure_change"
              c:identifier="gst_message_parse_structure_change"
              doc="Extracts the change type and completion status from the GstMessage.
MT safe."
              version="0.10.22">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="type" transfer-ownership="none">
            <type name="StructureChangeType" c:type="GstStructureChangeType*"/>
          </parameter>
          <parameter name="owner" transfer-ownership="none">
            <type name="Element" c:type="GstElement**"/>
          </parameter>
          <parameter name="busy"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     doc=" completed">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_stream_status"
              c:identifier="gst_message_parse_stream_status"
              doc="Extracts the stream status type and owner the GstMessage. The returned
owner remains valid for as long as the reference to @message is valid and
should thus not be unreffed.
MT safe."
              version="0.10.24.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="type" transfer-ownership="none">
            <type name="StreamStatusType" c:type="GstStreamStatusType*"/>
          </parameter>
          <parameter name="owner" transfer-ownership="none">
            <type name="Element" c:type="GstElement**"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_stream_status_object"
              c:identifier="gst_message_set_stream_status_object"
              doc="Configures the object handling the streaming thread. This is usually a
GstTask object but other objects might be added in the future."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_stream_status_object"
              c:identifier="gst_message_get_stream_status_object"
              doc="Extracts the object managing the streaming thread from @message.
This object is usually of type GstTask but other types can be added in the
future. The object remains valid as long as @message is valid."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </return-value>
      </method>
      <method name="parse_request_state"
              c:identifier="gst_message_parse_request_state"
              doc="Extract the requested state from the request_state message.
MT safe."
              version="0.10.23">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="state" transfer-ownership="none">
            <type name="State" c:type="GstState*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_step_start"
              c:identifier="gst_message_parse_step_start"
              doc="Extract the values from step_start message.
MT safe."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="active"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="amount"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="uint64" c:type="guint64*"/>
          </parameter>
          <parameter name="rate"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="double" c:type="gdouble*"/>
          </parameter>
          <parameter name="flush"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
          <parameter name="intermediate"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_qos_values"
              c:identifier="gst_message_set_qos_values"
              doc="Set the QoS values that have been calculated/analysed from the QoS data
MT safe."
              version="0.10.29">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="jitter" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="proportion"
                     transfer-ownership="none"
                     doc=" to get optimal quality.">
            <type name="double" c:type="gdouble"/>
          </parameter>
          <parameter name="quality"
                     transfer-ownership="none"
                     doc=" quality level of the element. The default maximum quality is 1000000.">
            <type name="int" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_qos_stats"
              c:identifier="gst_message_set_qos_stats"
              doc="Set the QoS stats representing the history of the current continuous pipeline
playback period.
When @format is @GST_FORMAT_UNDEFINED both @dropped and @processed are
invalid. Values of -1 for either @processed or @dropped mean unknown values.
MT safe."
              version="0.10.29">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format"
                     transfer-ownership="none"
                     doc=" filters will use GST_FORMAT_BUFFERS (frames). Audio sinks and audio filters will likely use GST_FORMAT_DEFAULT (samples).">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="processed"
                     transfer-ownership="none"
                     doc=" change to READY or a flushing operation.">
            <type name="uint64" c:type="guint64"/>
          </parameter>
          <parameter name="dropped"
                     transfer-ownership="none"
                     doc=" or a flushing operation.">
            <type name="uint64" c:type="guint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_qos"
              c:identifier="gst_message_parse_qos"
              doc="Extract the timestamps and live status from the QoS message.
The returned values give the running_time, stream_time, timestamp and
duration of the dropped buffer. Values of GST_CLOCK_TIME_NONE mean unknown
values.
MT safe."
              version="0.10.29">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="live"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
          <parameter name="running_time"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="uint64" c:type="guint64*"/>
          </parameter>
          <parameter name="stream_time"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="uint64" c:type="guint64*"/>
          </parameter>
          <parameter name="timestamp"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="uint64" c:type="guint64*"/>
          </parameter>
          <parameter name="duration"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="uint64" c:type="guint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_qos_values"
              c:identifier="gst_message_parse_qos_values"
              doc="Extract the QoS values that have been calculated/analysed from the QoS data
MT safe."
              version="0.10.29">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="jitter"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
          <parameter name="proportion"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     doc=" to get optimal quality.">
            <type name="double" c:type="gdouble*"/>
          </parameter>
          <parameter name="quality"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     doc=" quality level of the element. The default maximum quality is 1000000.">
            <type name="int" c:type="gint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_qos_stats"
              c:identifier="gst_message_parse_qos_stats"
              doc="Extract the QoS stats representing the history of the current continuous
pipeline playback period.
When @format is @GST_FORMAT_UNDEFINED both @dropped and @processed are
invalid. Values of -1 for either @processed or @dropped mean unknown values.
MT safe."
              version="0.10.29">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format"
                     transfer-ownership="none"
                     doc=" filters will use GST_FORMAT_BUFFERS (frames). Audio sinks and audio filters will likely use GST_FORMAT_DEFAULT (samples).">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="processed"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     doc=" change to READY or a flushing operation.">
            <type name="uint64" c:type="guint64*"/>
          </parameter>
          <parameter name="dropped"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     doc=" or a flushing operation.">
            <type name="uint64" c:type="guint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_structure"
              c:identifier="gst_message_get_structure"
              doc="Access the structure of the message.
owned by the message, which means that you should not free it and
that the pointer becomes invalid when you free the message.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="Structure" c:type="GstStructure*"/>
        </return-value>
      </method>
    </record>
    <record name="MessageClass" c:type="GstMessageClass">
      <field name="mini_object_class" writable="1">
        <type name="MiniObjectClass" c:type="GstMiniObjectClass"/>
      </field>
      <field name="_gst_reserved" writable="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <bitfield name="MessageType"
              doc="The different message types that are available."
              c:type="GstMessageType">
      <member name="unknown" value="0" c:identifier="GST_MESSAGE_UNKNOWN"/>
      <member name="eos" value="1" c:identifier="GST_MESSAGE_EOS"/>
      <member name="error" value="2" c:identifier="GST_MESSAGE_ERROR"/>
      <member name="warning" value="4" c:identifier="GST_MESSAGE_WARNING"/>
      <member name="info" value="8" c:identifier="GST_MESSAGE_INFO"/>
      <member name="tag" value="16" c:identifier="GST_MESSAGE_TAG"/>
      <member name="buffering"
              value="32"
              c:identifier="GST_MESSAGE_BUFFERING"/>
      <member name="state_changed"
              value="64"
              c:identifier="GST_MESSAGE_STATE_CHANGED"/>
      <member name="state_dirty"
              value="128"
              c:identifier="GST_MESSAGE_STATE_DIRTY"/>
      <member name="step_done"
              value="256"
              c:identifier="GST_MESSAGE_STEP_DONE"/>
      <member name="clock_provide"
              value="512"
              c:identifier="GST_MESSAGE_CLOCK_PROVIDE"/>
      <member name="clock_lost"
              value="1024"
              c:identifier="GST_MESSAGE_CLOCK_LOST"/>
      <member name="new_clock"
              value="2048"
              c:identifier="GST_MESSAGE_NEW_CLOCK"/>
      <member name="structure_change"
              value="4096"
              c:identifier="GST_MESSAGE_STRUCTURE_CHANGE"/>
      <member name="stream_status"
              value="8192"
              c:identifier="GST_MESSAGE_STREAM_STATUS"/>
      <member name="application"
              value="16384"
              c:identifier="GST_MESSAGE_APPLICATION"/>
      <member name="element" value="32768" c:identifier="GST_MESSAGE_ELEMENT"/>
      <member name="segment_start"
              value="65536"
              c:identifier="GST_MESSAGE_SEGMENT_START"/>
      <member name="segment_done"
              value="131072"
              c:identifier="GST_MESSAGE_SEGMENT_DONE"/>
      <member name="duration"
              value="262144"
              c:identifier="GST_MESSAGE_DURATION"/>
      <member name="latency"
              value="524288"
              c:identifier="GST_MESSAGE_LATENCY"/>
      <member name="async_start"
              value="1048576"
              c:identifier="GST_MESSAGE_ASYNC_START"/>
      <member name="async_done"
              value="2097152"
              c:identifier="GST_MESSAGE_ASYNC_DONE"/>
      <member name="request_state"
              value="4194304"
              c:identifier="GST_MESSAGE_REQUEST_STATE"/>
      <member name="step_start"
              value="8388608"
              c:identifier="GST_MESSAGE_STEP_START"/>
      <member name="qos" value="16777216" c:identifier="GST_MESSAGE_QOS"/>
      <member name="any" value="-1" c:identifier="GST_MESSAGE_ANY"/>
    </bitfield>
    <record name="MiniObject"
            c:type="GstMiniObject"
            doc="Base class for refcounted lightweight objects.">
      <field name="instance" writable="1">
        <type name="GObject.TypeInstance" c:type="GTypeInstance"/>
      </field>
      <field name="refcount" writable="1">
        <type name="int" c:type="gint"/>
      </field>
      <field name="flags" writable="1">
        <type name="uint" c:type="guint"/>
      </field>
      <field name="_gst_reserved" writable="1">
        <type name="any" c:type="gpointer"/>
      </field>
      <constructor name="new"
                   c:identifier="gst_mini_object_new"
                   doc="Creates a new mini-object of the desired type.
MT safe">
        <return-value transfer-ownership="full">
          <type name="MiniObject" c:type="GstMiniObject*"/>
        </return-value>
        <parameters>
          <parameter name="type" transfer-ownership="none">
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="copy"
              c:identifier="gst_mini_object_copy"
              doc="Creates a copy of the mini-object.
MT safe">
        <return-value transfer-ownership="full">
          <type name="MiniObject" c:type="GstMiniObject*"/>
        </return-value>
      </method>
      <method name="is_writable"
              c:identifier="gst_mini_object_is_writable"
              doc="Checks if a mini-object is writable.  A mini-object is writable
if the reference count is one and the #GST_MINI_OBJECT_FLAG_READONLY
flag is not set.  Modification of a mini-object should only be
done after verifying that it is writable.
MT safe">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="make_writable"
              c:identifier="gst_mini_object_make_writable"
              doc="Checks if a mini-object is writable.  If not, a writable copy is made and
returned.  This gives away the reference to the original mini object,
and returns a reference to the new object.
MT safe">
        <return-value transfer-ownership="full" doc="that is writable.">
          <type name="MiniObject" c:type="GstMiniObject*"/>
        </return-value>
      </method>
      <method name="ref"
              c:identifier="gst_mini_object_ref"
              doc="Increase the reference count of the mini-object.
Note that the refcount affects the writeability
of @mini-object, see gst_mini_object_is_writable(). It is
important to note that keeping additional references to
GstMiniObject instances can potentially increase the number
of memcpy operations in a pipeline, especially if the miniobject
is a #GstBuffer.">
        <return-value transfer-ownership="full">
          <type name="MiniObject" c:type="GstMiniObject*"/>
        </return-value>
      </method>
      <method name="unref"
              c:identifier="gst_mini_object_unref"
              doc="Decreases the reference count of the mini-object, possibly freeing
the mini-object.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="replace"
              c:identifier="gst_mini_object_replace"
              doc="Modifies a pointer to point to a new mini-object.  The modification
is done atomically, and the reference counts are updated correctly.
Either @newdata and the value pointed to by @olddata may be NULL.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="newdata" transfer-ownership="none">
            <type name="MiniObject" c:type="GstMiniObject*"/>
          </parameter>
        </parameters>
      </method>
    </record>
    <record name="MiniObjectClass" c:type="GstMiniObjectClass">
      <field name="type_class" writable="1">
        <type name="GObject.TypeClass" c:type="GTypeClass"/>
      </field>
      <field name="copy" writable="1">
        <type name="MiniObjectCopyFunction"
              c:type="GstMiniObjectCopyFunction"/>
      </field>
      <field name="finalize" writable="1">
        <type name="MiniObjectFinalizeFunction"
              c:type="GstMiniObjectFinalizeFunction"/>
      </field>
      <field name="_gst_reserved" writable="1">
        <type name="any" c:type="gpointer"/>
      </field>
    </record>
    <callback name="MiniObjectCopyFunction"
              c:type="GstMiniObjectCopyFunction"
              doc="Virtual function prototype for methods to create copies of instances.">
      <return-value transfer-ownership="full">
        <type name="MiniObject" c:type="GstMiniObject*"/>
      </return-value>
      <parameters>
        <parameter name="obj" transfer-ownership="none">
          <type name="MiniObject" c:type="GstMiniObject*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="MiniObjectFinalizeFunction"
              c:type="GstMiniObjectFinalizeFunction"
              doc="Virtual function prototype for methods to free ressources used by
mini-objects. Subclasses of the mini object are allowed to revive the
passed object by doing a gst_mini_object_ref(). If the object is not
revived after the finalize function, the memory associated with the
object is freed.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="obj" transfer-ownership="none">
          <type name="MiniObject" c:type="GstMiniObject*"/>
        </parameter>
      </parameters>
    </callback>
    <bitfield name="MiniObjectFlags"
              doc="Flags for the padtemplate"
              c:type="GstMiniObjectFlags">
      <member name="readonly"
              value="1"
              c:identifier="GST_MINI_OBJECT_FLAG_READONLY"/>
      <member name="last" value="16" c:identifier="GST_MINI_OBJECT_FLAG_LAST"/>
    </bitfield>
    <constant name="NSECOND" value="0">
      <type name="int"/>
    </constant>
    <class name="Object"
           c:type="GstObject"
           doc="GStreamer base object class."
           parent="GObject.Object"
           abstract="1"
           glib:type-name="GstObject"
           glib:get-type="gst_object_get_type"
           glib:type-struct="ObjectClass">
      <function name="default_deep_notify"
                c:identifier="gst_object_default_deep_notify"
                doc="A default deep_notify signal callback for an object. The user data
should contain a pointer to an array of strings that should be excluded
from the notify. The default handler will print the new value of the property
using g_print.
MT safe. This function grabs and releases @object&apos;s LOCK for getting its
path string.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="GObject.Object" c:type="GObject*"/>
          </parameter>
          <parameter name="orig" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="pspec" transfer-ownership="none">
            <type name="GObject.ParamSpec" c:type="GParamSpec*"/>
          </parameter>
          <parameter name="excluded_props"
                     transfer-ownership="none"
                     doc=" NULL to show all changes.">
            <array c:type="gchar**">
              <type name="utf8"/>
            </array>
          </parameter>
        </parameters>
      </function>
      <function name="ref"
                c:identifier="gst_object_ref"
                doc="Increments the reference count on @object. This function
does not take the lock on @object because it relies on
atomic refcounting.
This object returns the input parameter to ease writing
constructs like :
result = gst_object_ref (object-&gt;parent);">
        <return-value transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </function>
      <function name="unref"
                c:identifier="gst_object_unref"
                doc="Decrements the reference count on @object.  If reference count hits
zero, destroy @object. This function does not take the lock
on @object as it relies on atomic refcounting.
The unref method should never be called with the LOCK held since
this might deadlock the dispose function.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </function>
      <function name="ref_sink"
                c:identifier="gst_object_ref_sink"
                doc="Increase the reference count of @object, and possibly remove the floating
reference, if @object has a floating reference.
In other words, if the object is floating, then this call &quot;assumes ownership&quot;
of the floating reference, converting it to a normal reference by clearing
the floating flag while leaving the reference count unchanged. If the object
is not floating, then this call adds a new normal reference increasing the
reference count by one.
MT safe. This function grabs and releases @object lock."
                version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </function>
      <function name="sink"
                c:identifier="gst_object_sink"
                doc="If @object was floating, the #GST_OBJECT_FLOATING flag is removed
and @object is unreffed. When @object was not floating,
this function does nothing.
Any newly created object has a refcount of 1 and is floating.
This function should be used when creating a new object to
symbolically &apos;take ownership&apos; of @object. This done by first doing a
gst_object_ref() to keep a reference to @object and then gst_object_sink()
to remove and unref any floating references to @object.
Use gst_object_set_parent() to have this done for you.
MT safe. This function grabs and releases @object lock.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </function>
      <function name="check_uniqueness"
                c:identifier="gst_object_check_uniqueness"
                doc="Checks to see if there is any object named @name in @list. This function
does not do any locking of any kind. You might want to protect the
provided list with the lock of the owner of the list. This function
will lock each #GstObject in the list to compare the name, so be
carefull when passing a list with a locked object.
FALSE if it does.
MT safe. Grabs and releases the LOCK of each object in the list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="list" transfer-ownership="none">
            <type name="GLib.List" c:type="GList*"/>
          </parameter>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </function>
      <virtual-method name="save_thyself" invoker="save_thyself">
        <return-value transfer-ownership="full">
          <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
        </return-value>
        <parameters>
          <parameter name="parent" transfer-ownership="none">
            <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="restore_thyself" invoker="restore_thyself">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="self" transfer-ownership="none">
            <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="set_name"
              c:identifier="gst_object_set_name"
              doc="Sets the name of @object, or gives @object a guaranteed unique
name (if @name is NULL).
This function makes a copy of the provided name, so the caller
retains ownership of the name it sent.
a parent cannot be renamed, this function returns FALSE in those
cases.
MT safe.  This function grabs and releases @object&apos;s LOCK.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_name"
              c:identifier="gst_object_get_name"
              doc="Returns a copy of the name of @object.
Caller should g_free() the return value after usage.
For a nameless object, this returns NULL, which you can safely g_free()
as well.
MT safe. This function grabs and releases @object&apos;s LOCK.">
        <return-value transfer-ownership="full" doc="after usage.">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="set_name_prefix"
              c:identifier="gst_object_set_name_prefix"
              doc="Sets the name prefix of @object to @name_prefix.
This function makes a copy of the provided name prefix, so the caller
retains ownership of the name prefix it sent.
MT safe.  This function grabs and releases @object&apos;s LOCK.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="name_prefix" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_name_prefix"
              c:identifier="gst_object_get_name_prefix"
              doc="Returns a copy of the name prefix of @object.
Caller should g_free() the return value after usage.
For a prefixless object, this returns NULL, which you can safely g_free()
as well.
MT safe. This function grabs and releases @object&apos;s LOCK.">
        <return-value transfer-ownership="full" doc="after usage.">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="set_parent"
              c:identifier="gst_object_set_parent"
              doc="Sets the parent of @object to @parent. The object&apos;s reference count will
be incremented, and any floating reference will be removed (see gst_object_sink()).
This function causes the parent-set signal to be emitted when the parent
was successfully set.
already had a parent or @object and @parent are the same.
MT safe. Grabs and releases @object&apos;s LOCK.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="parent" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_parent"
              c:identifier="gst_object_get_parent"
              doc="Returns the parent of @object. This function increases the refcount
of the parent object so you should gst_object_unref() it after usage.
parent. unref after usage.
MT safe. Grabs and releases @object&apos;s LOCK.">
        <return-value transfer-ownership="full">
          <type name="Object" c:type="GstObject*"/>
        </return-value>
      </method>
      <method name="unparent"
              c:identifier="gst_object_unparent"
              doc="Clear the parent of @object, removing the associated reference.
This function decreases the refcount of @object.
MT safe. Grabs and releases @object&apos;s lock.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="has_ancestor"
              c:identifier="gst_object_has_ancestor"
              doc="Check if @object has an ancestor @ancestor somewhere up in
the hierarchy.
MT safe. Grabs and releases @object&apos;s locks.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="ancestor" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
        </parameters>
      </method>
      <method name="replace"
              c:identifier="gst_object_replace"
              doc="Unrefs the #GstObject pointed to by @oldobj, refs @newobj and
puts @newobj in *@oldobj. Be carefull when calling this
function, it does not take any locks. You might want to lock
the object owning @oldobj pointer before calling this
function.
Make sure not to LOCK @oldobj because it might be unreffed
which could cause a deadlock when it is disposed.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="newobj" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_path_string"
              c:identifier="gst_object_get_path_string"
              doc="Generates a string describing the path of @object in
the object hierarchy. Only useful (or used) for debugging.
g_free() the string after usage.
MT safe. Grabs and releases the #GstObject&apos;s LOCK for all objects
in the hierarchy.">
        <return-value transfer-ownership="full">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="save_thyself"
              c:identifier="gst_object_save_thyself"
              doc="Saves @object into the parent XML node.">
        <return-value transfer-ownership="full">
          <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
        </return-value>
        <parameters>
          <parameter name="parent" transfer-ownership="none">
            <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
          </parameter>
        </parameters>
      </method>
      <method name="restore_thyself"
              c:identifier="gst_object_restore_thyself"
              doc="Restores @object with the data from the parent XML node.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="self" transfer-ownership="none">
            <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
          </parameter>
        </parameters>
      </method>
      <method name="default_error"
              c:identifier="gst_object_default_error"
              doc="A default error function.
The default handler will simply print the error string using g_print.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="error" transfer-ownership="none">
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
          <parameter name="debug" transfer-ownership="full">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <property name="name" writable="1" construct="1">
        <type name="utf8" c:type="gchararray"/>
      </property>
      <field name="object">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="refcount">
        <type name="int" c:type="gint"/>
      </field>
      <field name="lock">
        <type name="GLib.Mutex" c:type="GMutex*"/>
      </field>
      <field name="name">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="name_prefix">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="parent">
        <type name="Object" c:type="GstObject*"/>
      </field>
      <field name="flags">
        <type name="uint32" c:type="guint32"/>
      </field>
      <field name="_gst_reserved">
        <type name="any" c:type="gpointer"/>
      </field>
      <glib:signal name="deep-notify"
                   doc="The deep notify signal is used to be notified of property changes. It is
typically attached to the toplevel bin to receive notifications from all
the elements contained in that bin.">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="prop_object" transfer-ownership="none">
            <type name="Object" c:type="GstObject"/>
          </parameter>
          <parameter name="prop" transfer-ownership="none">
            <type name="GObject.ParamSpec" c:type="GParam"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="object-saved"
                   doc="Trigered whenever a new object is saved to XML. You can connect to this
signal to insert custom XML tags into the core XML.">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="xml_node" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="parent-set"
                   doc="Emitted when the parent of an object is set.">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="parent" transfer-ownership="none">
            <type name="Object" c:type="GstObject"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="parent-unset"
                   doc="Emitted when the parent of an object is unset.">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="parent" transfer-ownership="none">
            <type name="Object" c:type="GstObject"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="ObjectClass"
            c:type="GstObjectClass"
            glib:is-gtype-struct-for="Object"
            doc="GStreamer base object class.">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="path_string_separator">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="signal_object">
        <type name="GObject.Object" c:type="GObject*"/>
      </field>
      <field name="lock">
        <type name="GLib.StaticRecMutex" c:type="GStaticRecMutex*"/>
      </field>
      <field name="parent_set">
        <callback name="parent_set" c:type="parent_set">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="object" transfer-ownership="none">
              <type name="Object" c:type="GstObject*"/>
            </parameter>
            <parameter name="parent" transfer-ownership="none">
              <type name="Object" c:type="GstObject*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="parent_unset">
        <callback name="parent_unset" c:type="parent_unset">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="object" transfer-ownership="none">
              <type name="Object" c:type="GstObject*"/>
            </parameter>
            <parameter name="parent" transfer-ownership="none">
              <type name="Object" c:type="GstObject*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="object_saved">
        <callback name="object_saved" c:type="object_saved">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="object" transfer-ownership="none">
              <type name="Object" c:type="GstObject*"/>
            </parameter>
            <parameter name="parent" transfer-ownership="none">
              <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="deep_notify">
        <callback name="deep_notify" c:type="deep_notify">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="object" transfer-ownership="none">
              <type name="Object" c:type="GstObject*"/>
            </parameter>
            <parameter name="orig" transfer-ownership="none">
              <type name="Object" c:type="GstObject*"/>
            </parameter>
            <parameter name="pspec" transfer-ownership="none">
              <type name="GObject.ParamSpec" c:type="GParamSpec*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="save_thyself">
        <callback name="save_thyself" c:type="save_thyself">
          <return-value transfer-ownership="full">
            <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
          </return-value>
          <parameters>
            <parameter name="object" transfer-ownership="none">
              <type name="Object" c:type="GstObject*"/>
            </parameter>
            <parameter name="parent" transfer-ownership="none">
              <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="restore_thyself">
        <callback name="restore_thyself" c:type="restore_thyself">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="object" transfer-ownership="none">
              <type name="Object" c:type="GstObject*"/>
            </parameter>
            <parameter name="self" transfer-ownership="none">
              <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <bitfield name="ObjectFlags"
              doc="The standard flags that an gstobject may have."
              c:type="GstObjectFlags">
      <member name="disposing" value="1" c:identifier="GST_OBJECT_DISPOSING"/>
      <member name="floating" value="2" c:identifier="GST_OBJECT_FLOATING"/>
      <member name="flag_last" value="16" c:identifier="GST_OBJECT_FLAG_LAST"/>
    </bitfield>
    <constant name="PARAM_CONTROLLABLE" value="2">
      <type name="int"/>
    </constant>
    <constant name="PARAM_MUTABLE_PAUSED" value="8">
      <type name="int"/>
    </constant>
    <constant name="PARAM_MUTABLE_PLAYING" value="16">
      <type name="int"/>
    </constant>
    <constant name="PARAM_MUTABLE_READY" value="4">
      <type name="int"/>
    </constant>
    <constant name="PARAM_USER_SHIFT" value="256">
      <type name="int"/>
    </constant>
    <class name="Pad"
           c:type="GstPad"
           doc="The #GstPad structure. Use the functions to update the variables."
           parent="Object"
           glib:type-name="GstPad"
           glib:get-type="gst_pad_get_type"
           glib:type-struct="PadClass">
      <constructor name="new"
                   c:identifier="gst_pad_new"
                   doc="Creates a new pad with the given name in the given direction.
If name is NULL, a guaranteed unique name (across all pads)
will be assigned.
This function makes a copy of the name so you can safely free the name.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Pad" c:type="GstPad*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="direction" transfer-ownership="none">
            <type name="PadDirection" c:type="GstPadDirection"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_from_template"
                   c:identifier="gst_pad_new_from_template"
                   doc="Creates a new pad with the given name from the given template.
If name is NULL, a guaranteed unique name (across all pads)
will be assigned.
This function makes a copy of the name so you can safely free the name.">
        <return-value transfer-ownership="full">
          <type name="Pad" c:type="GstPad*"/>
        </return-value>
        <parameters>
          <parameter name="templ" transfer-ownership="none">
            <type name="PadTemplate" c:type="GstPadTemplate*"/>
          </parameter>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_from_static_template"
                   c:identifier="gst_pad_new_from_static_template"
                   doc="Creates a new pad with the given name from the given static template.
If name is NULL, a guaranteed unique name (across all pads)
will be assigned.
This function makes a copy of the name so you can safely free the name.">
        <return-value transfer-ownership="full">
          <type name="Pad" c:type="GstPad*"/>
        </return-value>
        <parameters>
          <parameter name="templ" transfer-ownership="none">
            <type name="StaticPadTemplate" c:type="GstStaticPadTemplate*"/>
          </parameter>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <function name="load_and_link"
                c:identifier="gst_pad_load_and_link"
                doc="Reads the pad definition from the XML node and links the given pad
in the element to a pad of an element up in the hierarchy.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="self" transfer-ownership="none">
            <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
          </parameter>
          <parameter name="parent" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
        </parameters>
      </function>
      <method name="get_direction"
              c:identifier="gst_pad_get_direction"
              doc="Gets the direction of the pad. The direction of the pad is
decided at construction time so this function does not take
the LOCK.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="PadDirection" c:type="GstPadDirection"/>
        </return-value>
      </method>
      <method name="set_active"
              c:identifier="gst_pad_set_active"
              doc="Activates or deactivates the given pad.
Normally called from within core state change functions.
If @active, makes sure the pad is active. If it is already active, either in
push or pull mode, just return. Otherwise dispatches to the pad&apos;s activate
function to perform the actual activation.
If not @active, checks the pad&apos;s current mode and calls
gst_pad_activate_push() or gst_pad_activate_pull(), as appropriate, with a
FALSE argument.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="active" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_active"
              c:identifier="gst_pad_is_active"
              doc="Query if a pad is active
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="activate_pull"
              c:identifier="gst_pad_activate_pull"
              doc="Activates or deactivates the given pad in pull mode via dispatching to the
pad&apos;s activatepullfunc. For use from within pad activation functions only.
When called on sink pads, will first proxy the call to the peer pad, which
is expected to activate its internally linked pads from within its
activate_pull function.
If you don&apos;t know what this is, you probably don&apos;t want to call it.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="active" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="activate_push"
              c:identifier="gst_pad_activate_push"
              doc="Activates or deactivates the given pad in push mode via dispatching to the
pad&apos;s activatepushfunc. For use from within pad activation functions only.
If you don&apos;t know what this is, you probably don&apos;t want to call it.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="active" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_blocked"
              c:identifier="gst_pad_set_blocked"
              doc="Blocks or unblocks the dataflow on a pad. This function is
a shortcut for gst_pad_set_blocked_async() with a NULL
callback.
wrong parameters were passed or the pad was already in the requested state.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="blocked" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_blocked_async"
              c:identifier="gst_pad_set_blocked_async"
              doc="Blocks or unblocks the dataflow on a pad. The provided callback
is called when the operation succeeds; this happens right before the next
attempt at pushing a buffer on the pad.
This can take a while as the pad can only become blocked when real dataflow
is happening.
When the pipeline is stalled, for example in PAUSED, this can
take an indeterminate amount of time.
You can pass NULL as the callback to make this call block. Be careful with
this blocking call as it might not return for reasons stated above.
wrong parameters were passed or the pad was already in the requested state.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="blocked" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="call"
                     closure="3"
                     doc=" operation succeeds">
            <type name="PadBlockCallback" c:type="GstPadBlockCallback"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_blocked_async_full"
              c:identifier="gst_pad_set_blocked_async_full"
              doc="Blocks or unblocks the dataflow on a pad. The provided callback
is called when the operation succeeds; this happens right before the next
attempt at pushing a buffer on the pad.
This can take a while as the pad can only become blocked when real dataflow
is happening.
When the pipeline is stalled, for example in PAUSED, this can
take an indeterminate amount of time.
You can pass NULL as the callback to make this call block. Be careful with
this blocking call as it might not return for reasons stated above.
wrong parameters were passed or the pad was already in the requested state.
MT safe."
              version="0.10.23">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="blocked" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="notified"
                     closure="3"
                     destroy="4"
                     doc=" operation succeeds">
            <type name="PadBlockCallback" c:type="GstPadBlockCallback"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
          <parameter name="destroy_data"
                     transfer-ownership="none"
                     scope="call">
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_blocked"
              c:identifier="gst_pad_is_blocked"
              doc="Checks if the pad is blocked or not. This function returns the
last requested state of the pad. It is not certain that the pad
is actually blocking at this point (see gst_pad_is_blocking()).
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="is_blocking"
              c:identifier="gst_pad_is_blocking"
              doc="Checks if the pad is blocking or not. This is a guaranteed state
of whether the pad is actually blocking on a #GstBuffer or a #GstEvent.
MT safe."
              version="0.10.11">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="set_element_private"
              c:identifier="gst_pad_set_element_private"
              doc="Set the given private data gpointer on the pad.
This function can only be used by the element that owns the pad.
No locking is performed in this function.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="priv" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_element_private"
              c:identifier="gst_pad_get_element_private"
              doc="Gets the private data of a pad.
No locking is performed in this function.">
        <return-value transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </return-value>
      </method>
      <method name="get_pad_template"
              c:identifier="gst_pad_get_pad_template"
              doc="Gets the template for @pad.
if this pad has no template.">
        <return-value transfer-ownership="full">
          <type name="PadTemplate" c:type="GstPadTemplate*"/>
        </return-value>
      </method>
      <method name="set_bufferalloc_function"
              c:identifier="gst_pad_set_bufferalloc_function"
              doc="Sets the given bufferalloc function for the pad. Note that the
bufferalloc function can only be set on sinkpads.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="bufalloc" transfer-ownership="none" scope="call">
            <type name="PadBufferAllocFunction"
                  c:type="GstPadBufferAllocFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="alloc_buffer"
              c:identifier="gst_pad_alloc_buffer"
              doc="Allocates a new, empty buffer optimized to push to pad @pad.  This
function only works if @pad is a source pad and has a peer.
A new, empty #GstBuffer will be put in the @buf argument.
You need to check the caps of the buffer after performing this
function and renegotiate to the format if needed. If the caps changed, it is
possible that the buffer returned in @buf is not of the right size for the
new format, @buf needs to be unreffed and reallocated if this is the case.
result code other than #GST_FLOW_OK is an error and @buf should
not be used.
An error can occur if the pad is not connected or when the downstream
peer elements cannot provide an acceptable buffer.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <parameter name="offset" transfer-ownership="none">
            <type name="uint64" c:type="guint64"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="caps" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
          <parameter name="buf" transfer-ownership="none">
            <type name="Buffer" c:type="GstBuffer**"/>
          </parameter>
        </parameters>
      </method>
      <method name="alloc_buffer_and_set_caps"
              c:identifier="gst_pad_alloc_buffer_and_set_caps"
              doc="In addition to the function gst_pad_alloc_buffer(), this function
automatically calls gst_pad_set_caps() when the caps of the
newly allocated buffer are different from the @pad caps.
After a renegotiation, the size of the new buffer returned in @buf could
be of the wrong size for the new format and must be unreffed an reallocated
in that case.
result code other than #GST_FLOW_OK is an error and @buf should
not be used.
An error can occur if the pad is not connected or when the downstream
peer elements cannot provide an acceptable buffer.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <parameter name="offset" transfer-ownership="none">
            <type name="uint64" c:type="guint64"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="caps" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
          <parameter name="buf" transfer-ownership="none">
            <type name="Buffer" c:type="GstBuffer**"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_activate_function"
              c:identifier="gst_pad_set_activate_function"
              doc="Sets the given activate function for @pad. The activate function will
dispatch to gst_pad_activate_push() or gst_pad_activate_pull() to perform
the actual activation. Only makes sense to set on sink pads.
Call this function if your sink pad can start a pull-based task.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="activate" transfer-ownership="none" scope="call">
            <type name="PadActivateFunction" c:type="GstPadActivateFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_activatepull_function"
              c:identifier="gst_pad_set_activatepull_function"
              doc="Sets the given activate_pull function for the pad. An activate_pull function
prepares the element and any upstream connections for pulling. See XXX
part-activation.txt for details.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="activatepull"
                     transfer-ownership="none"
                     scope="call">
            <type name="PadActivateModeFunction"
                  c:type="GstPadActivateModeFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_activatepush_function"
              c:identifier="gst_pad_set_activatepush_function"
              doc="Sets the given activate_push function for the pad. An activate_push function
prepares the element for pushing. See XXX part-activation.txt for details.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="activatepush"
                     transfer-ownership="none"
                     scope="call">
            <type name="PadActivateModeFunction"
                  c:type="GstPadActivateModeFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_chain_function"
              c:identifier="gst_pad_set_chain_function"
              doc="Sets the given chain function for the pad. The chain function is called to
process a #GstBuffer input buffer. see #GstPadChainFunction for more details.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="chain" transfer-ownership="none" scope="call">
            <type name="PadChainFunction" c:type="GstPadChainFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_chain_list_function"
              c:identifier="gst_pad_set_chain_list_function"
              doc="Sets the given chain list function for the pad. The chainlist function is
called to process a #GstBufferList input buffer list. See
#GstPadChainListFunction for more details."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="chainlist" transfer-ownership="none" scope="call">
            <type name="PadChainListFunction"
                  c:type="GstPadChainListFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_getrange_function"
              c:identifier="gst_pad_set_getrange_function"
              doc="Sets the given getrange function for the pad. The getrange function is
called to produce a new #GstBuffer to start the processing pipeline. see
#GstPadGetRangeFunction for a description of the getrange function.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="get" transfer-ownership="none" scope="call">
            <type name="PadGetRangeFunction" c:type="GstPadGetRangeFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_checkgetrange_function"
              c:identifier="gst_pad_set_checkgetrange_function"
              doc="Sets the given checkgetrange function for the pad. Implement this function
on a pad if you dynamically support getrange based scheduling on the pad.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="check" transfer-ownership="none" scope="call">
            <type name="PadCheckGetRangeFunction"
                  c:type="GstPadCheckGetRangeFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_event_function"
              c:identifier="gst_pad_set_event_function"
              doc="Sets the given event handler for the pad.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="event" transfer-ownership="none" scope="call">
            <type name="PadEventFunction" c:type="GstPadEventFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_link_function"
              c:identifier="gst_pad_set_link_function"
              doc="Sets the given link function for the pad. It will be called when
the pad is linked with another pad.
The return value #GST_PAD_LINK_OK should be used when the connection can be
made.
The return value #GST_PAD_LINK_REFUSED should be used when the connection
cannot be made for some reason.
If @link is installed on a source pad, it should call the #GstPadLinkFunction
of the peer sink pad, if present.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="link" transfer-ownership="none" scope="call">
            <type name="PadLinkFunction" c:type="GstPadLinkFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_unlink_function"
              c:identifier="gst_pad_set_unlink_function"
              doc="Sets the given unlink function for the pad. It will be called
when the pad is unlinked.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="unlink" transfer-ownership="none" scope="call">
            <type name="PadUnlinkFunction" c:type="GstPadUnlinkFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="can_link"
              c:identifier="gst_pad_can_link"
              doc="Checks if the source pad and the sink pad are compatible so they can be
linked.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="sinkpad" transfer-ownership="none">
            <type name="Pad" c:type="GstPad*"/>
          </parameter>
        </parameters>
      </method>
      <method name="link"
              c:identifier="gst_pad_link"
              doc="Links the source pad and the sink pad.
what went wrong.
MT Safe.">
        <return-value transfer-ownership="full">
          <type name="PadLinkReturn" c:type="GstPadLinkReturn"/>
        </return-value>
        <parameters>
          <parameter name="sinkpad" transfer-ownership="none">
            <type name="Pad" c:type="GstPad*"/>
          </parameter>
        </parameters>
      </method>
      <method name="unlink"
              c:identifier="gst_pad_unlink"
              doc="Unlinks the source pad from the sink pad. Will emit the #GstPad::unlinked
signal on both pads.
the pads were not linked together.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="sinkpad" transfer-ownership="none">
            <type name="Pad" c:type="GstPad*"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_linked"
              c:identifier="gst_pad_is_linked"
              doc="Checks if a @pad is linked to another pad or not.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="get_peer"
              c:identifier="gst_pad_get_peer"
              doc="Gets the peer of @pad. This function refs the peer pad so
you need to unref it after use.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Pad" c:type="GstPad*"/>
        </return-value>
      </method>
      <method name="set_getcaps_function"
              c:identifier="gst_pad_set_getcaps_function"
              doc="Sets the given getcaps function for the pad. @getcaps should return the
allowable caps for a pad in the context of the element&apos;s state, its link to
other elements, and the devices or files it has opened. These caps must be a
subset of the pad template caps. In the NULL state with no links, @getcaps
should ideally return the same caps as the pad template. In rare
circumstances, an object property can affect the caps returned by @getcaps,
but this is discouraged.
You do not need to call this function if @pad&apos;s allowed caps are always the
same as the pad template caps. This can only be true if the padtemplate
has fixed simple caps.
For most filters, the caps returned by @getcaps is directly affected by the
allowed caps on other pads. For demuxers and decoders, the caps returned by
the srcpad&apos;s getcaps function is directly related to the stream data. Again,
helps with autoplugging.
Note that the return value from @getcaps is owned by the caller, so the
caller should unref the caps after usage.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="getcaps" transfer-ownership="none" scope="call">
            <type name="PadGetCapsFunction" c:type="GstPadGetCapsFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_acceptcaps_function"
              c:identifier="gst_pad_set_acceptcaps_function"
              doc="Sets the given acceptcaps function for the pad.  The acceptcaps function
will be called to check if the pad can accept the given caps. Setting the
acceptcaps function to NULL restores the default behaviour of allowing
any caps that matches the caps from gst_pad_get_caps.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="acceptcaps" transfer-ownership="none" scope="call">
            <type name="PadAcceptCapsFunction"
                  c:type="GstPadAcceptCapsFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_fixatecaps_function"
              c:identifier="gst_pad_set_fixatecaps_function"
              doc="Sets the given fixatecaps function for the pad.  The fixatecaps function
will be called whenever the default values for a GstCaps needs to be
filled in.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="fixatecaps" transfer-ownership="none" scope="call">
            <type name="PadFixateCapsFunction"
                  c:type="GstPadFixateCapsFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_setcaps_function"
              c:identifier="gst_pad_set_setcaps_function"
              doc="Sets the given setcaps function for the pad.  The setcaps function
will be called whenever a buffer with a new media type is pushed or
pulled from the pad. The pad/element needs to update its internal
structures to process the new media type. If this new type is not
acceptable, the setcaps function should return FALSE.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="setcaps" transfer-ownership="none" scope="call">
            <type name="PadSetCapsFunction" c:type="GstPadSetCapsFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_pad_template_caps"
              c:identifier="gst_pad_get_pad_template_caps"
              doc="Gets the capabilities for @pad&apos;s template.
reference on the caps, make a copy (see gst_caps_copy ()).">
        <return-value transfer-ownership="none">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </method>
      <method name="get_caps_reffed"
              c:identifier="gst_pad_get_caps_reffed"
              doc="Gets the capabilities this pad can produce or consume. Preferred function if
one only wants to read or intersect the caps."
              version="0.10.26">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </method>
      <method name="get_caps"
              c:identifier="gst_pad_get_caps"
              doc="Gets the capabilities this pad can produce or consume.
Note that this method doesn&apos;t necessarily return the caps set by
gst_pad_set_caps() - use GST_PAD_CAPS() for that instead.
gst_pad_get_caps returns all possible caps a pad can operate with, using
the pad&apos;s get_caps function;
this returns the pad template caps if not explicitly set.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </method>
      <method name="fixate_caps"
              c:identifier="gst_pad_fixate_caps"
              doc="Fixate a caps on the given pad. Modifies the caps in place, so you should
make sure that the caps are actually writable (see gst_caps_make_writable()).">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="caps" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="accept_caps"
              c:identifier="gst_pad_accept_caps"
              doc="Check if the given pad accepts the caps.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="caps" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_caps"
              c:identifier="gst_pad_set_caps"
              doc="Sets the capabilities of this pad. The caps must be fixed. Any previous
caps on the pad will be unreffed. This function refs the caps so you should
unref if as soon as you don&apos;t need it anymore.
It is possible to set NULL caps, which will make the pad unnegotiated
again.
or bad parameters were provided to this function.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="caps" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="peer_get_caps_reffed"
              c:identifier="gst_pad_peer_get_caps_reffed"
              doc="Gets the capabilities of the peer connected to this pad. Preferred function
if one only wants to read or intersect the caps."
              version="0.10.26">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </method>
      <method name="peer_get_caps"
              c:identifier="gst_pad_peer_get_caps"
              doc="Gets the capabilities of the peer connected to this pad. Similar to
gst_pad_get_caps().
gst_caps_unref() to get rid of it. This function returns %NULL if there is
no peer pad.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </method>
      <method name="peer_accept_caps"
              c:identifier="gst_pad_peer_accept_caps"
              doc="Check if the peer of @pad accepts @caps. If @pad has no peer, this function
returns TRUE.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="caps" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_allowed_caps"
              c:identifier="gst_pad_get_allowed_caps"
              doc="Gets the capabilities of the allowed media types that can flow through
The allowed capabilities is calculated as the intersection of the results of
calling gst_pad_get_caps() on @pad and its peer. The caller owns a reference
on the resulting caps.
longer need it. This function returns NULL when @pad has no peer.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </method>
      <method name="get_negotiated_caps"
              c:identifier="gst_pad_get_negotiated_caps"
              doc="Gets the capabilities of the media type that currently flows through @pad
and its peer.
This function can be used on both src and sinkpads. Note that srcpads are
always negotiated before sinkpads so it is possible that the negotiated caps
on the srcpad do not match the negotiated caps of the peer.
you no longer need it. This function returns NULL when the @pad has no
peer or is not negotiated yet.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </method>
      <method name="push"
              c:identifier="gst_pad_push"
              doc="Pushes a buffer to the peer of @pad.
This function will call an installed pad block before triggering any
installed pad probes.
If the caps on @buffer are different from the currently configured caps on
gst_pad_set_setcaps_function()). In case of failure to renegotiate the new
format, this function returns #GST_FLOW_NOT_NEGOTIATED.
The function proceeds calling gst_pad_chain() on the peer pad and returns
the value from that function. If @pad has no peer, #GST_FLOW_NOT_LINKED will
be returned.
In all cases, success or failure, the caller loses its reference to @buffer
after calling this function.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <parameter name="buffer" transfer-ownership="none">
            <type name="Buffer" c:type="GstBuffer*"/>
          </parameter>
        </parameters>
      </method>
      <method name="push_list"
              c:identifier="gst_pad_push_list"
              doc="Pushes a buffer list to the peer of @pad.
This function will call an installed pad block before triggering any
installed pad probes.
If the caps on the first buffer in the first group of @list are different
from the currently configured caps on @pad, this function will call any
installed setcaps function on @pad (see gst_pad_set_setcaps_function()). In
case of failure to renegotiate the new format, this function returns
#GST_FLOW_NOT_NEGOTIATED.
If there are any probes installed on @pad every group of the buffer list
will be merged into a normal #GstBuffer and pushed via gst_pad_push and the
buffer list will be unreffed.
The function proceeds calling the chain function on the peer pad and returns
the value from that function. If @pad has no peer, #GST_FLOW_NOT_LINKED will
be returned. If the peer pad does not have any installed chainlist function
every group buffer of the list will be merged into a normal #GstBuffer and
chained via gst_pad_chain().
In all cases, success or failure, the caller loses its reference to @list
after calling this function.
MT safe."
              version="0.10.24">
        <return-value transfer-ownership="full">
          <type name="FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <parameter name="list" transfer-ownership="none">
            <type name="BufferList" c:type="GstBufferList*"/>
          </parameter>
        </parameters>
      </method>
      <method name="check_pull_range"
              c:identifier="gst_pad_check_pull_range"
              doc="Checks if a gst_pad_pull_range() can be performed on the peer
source pad. This function is used by plugins that want to check
if they can use random access on the peer source pad.
The peer sourcepad can implement a custom #GstPadCheckGetRangeFunction
if it needs to perform some logic to determine if pull_range is
possible.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="pull_range"
              c:identifier="gst_pad_pull_range"
              doc="Pulls a @buffer from the peer pad.
This function will first trigger the pad block signal if it was
installed.
When @pad is not linked #GST_FLOW_NOT_LINKED is returned else this
function returns the result of gst_pad_get_range() on the peer pad.
See gst_pad_get_range() for a list of return values and for the
semantics of the arguments of this function.
configured on @pad. Renegotiation within a running pull-mode pipeline is not
supported.
When this function returns #GST_FLOW_OK, @buffer will contain a valid
#GstBuffer that should be freed with gst_buffer_unref() after usage.
#GST_FLOW_OK is returned.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <parameter name="offset" transfer-ownership="none">
            <type name="uint64" c:type="guint64"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="buffer" transfer-ownership="none">
            <type name="Buffer" c:type="GstBuffer**"/>
          </parameter>
        </parameters>
      </method>
      <method name="push_event"
              c:identifier="gst_pad_push_event"
              doc="Sends the event to the peer of the given pad. This function is
mainly used by elements to send events to their peer
elements.
This function takes owership of the provided event so you should
gst_event_ref() it if you want to reuse the event after this call.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="event" transfer-ownership="none">
            <type name="Event" c:type="GstEvent*"/>
          </parameter>
        </parameters>
      </method>
      <method name="event_default"
              c:identifier="gst_pad_event_default"
              doc="Invokes the default event handler for the given pad. End-of-stream and
discontinuity events are handled specially, and then the event is sent to all
pads internally linked to @pad. Note that if there are many possible sink
pads that are internally linked to @pad, only one will be sent an event.
Multi-sinkpad elements should implement custom event handlers.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="event" transfer-ownership="none">
            <type name="Event" c:type="GstEvent*"/>
          </parameter>
        </parameters>
      </method>
      <method name="chain"
              c:identifier="gst_pad_chain"
              doc="Chain a buffer to @pad.
The function returns #GST_FLOW_WRONG_STATE if the pad was flushing.
If the caps on @buffer are different from the current caps on @pad, this
function will call any setcaps function (see gst_pad_set_setcaps_function())
installed on @pad. If the new caps are not acceptable for @pad, this
function returns #GST_FLOW_NOT_NEGOTIATED.
The function proceeds calling the chain function installed on @pad (see
gst_pad_set_chain_function()) and the return value of that function is
returned to the caller. #GST_FLOW_NOT_SUPPORTED is returned if @pad has no
chain function.
In all cases, success or failure, the caller loses its reference to @buffer
after calling this function.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <parameter name="buffer" transfer-ownership="none">
            <type name="Buffer" c:type="GstBuffer*"/>
          </parameter>
        </parameters>
      </method>
      <method name="chain_list"
              c:identifier="gst_pad_chain_list"
              doc="Chain a bufferlist to @pad.
The function returns #GST_FLOW_WRONG_STATE if the pad was flushing.
If the caps on the first buffer of @list are different from the current
caps on @pad, this function will call any setcaps function
(see gst_pad_set_setcaps_function()) installed on @pad. If the new caps
are not acceptable for @pad, this function returns #GST_FLOW_NOT_NEGOTIATED.
The function proceeds calling the chainlist function installed on @pad (see
gst_pad_set_chain_list_function()) and the return value of that function is
returned to the caller. #GST_FLOW_NOT_SUPPORTED is returned if @pad has no
chainlist function.
In all cases, success or failure, the caller loses its reference to @list
after calling this function.
MT safe."
              version="0.10.24">
        <return-value transfer-ownership="full">
          <type name="FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <parameter name="list" transfer-ownership="none">
            <type name="BufferList" c:type="GstBufferList*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_range"
              c:identifier="gst_pad_get_range"
              doc="When @pad is flushing this function returns #GST_FLOW_WRONG_STATE
immediatly.
Calls the getrange function of @pad, see #GstPadGetRangeFunction for a
description of a getrange function. If @pad has no getrange function
installed (see gst_pad_set_getrange_function()) this function returns
#GST_FLOW_NOT_SUPPORTED.
This is a lowlevel function. Usualy gst_pad_pull_range() is used.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <parameter name="offset" transfer-ownership="none">
            <type name="uint64" c:type="guint64"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="buffer" transfer-ownership="none">
            <type name="Buffer" c:type="GstBuffer**"/>
          </parameter>
        </parameters>
      </method>
      <method name="send_event"
              c:identifier="gst_pad_send_event"
              doc="Sends the event to the pad. This function can be used
by applications to send events in the pipeline.
If @pad is a source pad, @event should be an upstream event. If @pad is a
sink pad, @event should be a downstream event. For example, you would not
send a #GST_EVENT_EOS on a src pad; EOS events only propagate downstream.
Furthermore, some downstream events have to be serialized with data flow,
like EOS, while some can travel out-of-band, like #GST_EVENT_FLUSH_START. If
the event needs to be serialized with data flow, this function will take the
pad&apos;s stream lock while calling its event function.
To find out whether an event type is upstream, downstream, or downstream and
serialized, see #GstEventTypeFlags, gst_event_type_get_flags(),
#GST_EVENT_IS_UPSTREAM, #GST_EVENT_IS_DOWNSTREAM, and
#GST_EVENT_IS_SERIALIZED. Note that in practice that an application or
plugin doesn&apos;t need to bother itself with this information; the core handles
all necessary locks and checks.
This function takes owership of the provided event so you should
gst_event_ref() it if you want to reuse the event after this call.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="event" transfer-ownership="none">
            <type name="Event" c:type="GstEvent*"/>
          </parameter>
        </parameters>
      </method>
      <method name="start_task"
              c:identifier="gst_pad_start_task"
              doc="Starts a task that repeatedly calls @func with @data. This function
is mostly used in pad activation functions to start the dataflow.
The #GST_PAD_STREAM_LOCK of @pad will automatically be acquired
before @func is called.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="TaskFunction" c:type="GstTaskFunction"/>
          </parameter>
          <parameter name="data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="pause_task"
              c:identifier="gst_pad_pause_task"
              doc="Pause the task of @pad. This function will also wait until the
function executed by the task is finished if this function is not
called from the task function.
has no task.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="stop_task"
              c:identifier="gst_pad_stop_task"
              doc="Stop the task of @pad. This function will also make sure that the
function executed by the task will effectively stop if not called
from the GstTaskFunction.
This function will deadlock if called from the GstTaskFunction of
the task. Use gst_task_pause() instead.
Regardless of whether the pad has a task, the stream lock is acquired and
released so as to ensure that streaming through this pad has finished.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="set_internal_link_function"
              c:identifier="gst_pad_set_internal_link_function"
              doc="Sets the given internal link function for the pad."
              deprecated="Use the thread-safe gst_pad_set_iterate_internal_links_function()">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="intlink" transfer-ownership="none" scope="call">
            <type name="PadIntLinkFunction" c:type="GstPadIntLinkFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_internal_links"
              c:identifier="gst_pad_get_internal_links"
              doc="Gets a list of pads to which the given pad is linked to
inside of the parent element.
The caller must free this list after use.
Not MT safe.
could become invalid by the time the application accesses them. It&apos;s also
possible that the list changes while handling the pads, which the caller of
this function is unable to know. Use the thread-safe
gst_pad_iterate_internal_links() instead."
              deprecated="This function does not ref the pads in the list so that they">
        <return-value transfer-ownership="full">
          <type name="GLib.List" c:type="GList*"/>
        </return-value>
      </method>
      <method name="get_internal_links_default"
              c:identifier="gst_pad_get_internal_links_default"
              doc="Gets a list of pads to which the given pad is linked to
inside of the parent element.
This is the default handler, and thus returns a list of all of the
pads inside the parent element with opposite direction.
The caller must free this list after use with g_list_free().
Not MT safe.
could become invalid by the time the application accesses them. It&apos;s also
possible that the list changes while handling the pads, which the caller of
this function is unable to know. Use the thread-safe
gst_pad_iterate_internal_links_default() instead."
              deprecated="This function does not ref the pads in the list so that they">
        <return-value transfer-ownership="full">
          <type name="GLib.List" c:type="GList*"/>
        </return-value>
      </method>
      <method name="set_iterate_internal_links_function"
              c:identifier="gst_pad_set_iterate_internal_links_function"
              doc="Sets the given internal link iterator function for the pad."
              version="0.10.21">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="iterintlink" transfer-ownership="none" scope="call">
            <type name="PadIterIntLinkFunction"
                  c:type="GstPadIterIntLinkFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="iterate_internal_links"
              c:identifier="gst_pad_iterate_internal_links"
              doc="Gets an iterator for the pads to which the given pad is linked to inside
of the parent element.
Each #GstPad element yielded by the iterator will have its refcount increased,
so unref after use.
iterator function configured. Use gst_iterator_free() after usage."
              version="0.10.21">
        <return-value transfer-ownership="full">
          <type name="Iterator" c:type="GstIterator*"/>
        </return-value>
      </method>
      <method name="iterate_internal_links_default"
              c:identifier="gst_pad_iterate_internal_links_default"
              doc="Iterate the list of pads to which the given pad is linked to inside of
the parent element.
This is the default handler, and thus returns an iterator of all of the
pads inside the parent element with opposite direction.
The caller must free this iterator after use with gst_iterator_free().
returned pad with gst_object_unref()."
              version="0.10.21">
        <return-value transfer-ownership="full">
          <type name="Iterator" c:type="GstIterator*"/>
        </return-value>
      </method>
      <method name="set_query_type_function"
              c:identifier="gst_pad_set_query_type_function"
              doc="Set the given query type function for the pad.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="type_func" transfer-ownership="none" scope="call">
            <type name="PadQueryTypeFunction"
                  c:type="GstPadQueryTypeFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_query_types"
              c:identifier="gst_pad_get_query_types"
              doc="Get an array of supported queries that can be performed
on this pad.">
        <return-value transfer-ownership="none">
          <type name="QueryType" c:type="GstQueryType*"/>
        </return-value>
      </method>
      <method name="get_query_types_default"
              c:identifier="gst_pad_get_query_types_default"
              doc="Invoke the default dispatcher for the query types on
the pad.
internally-linked pads has a query types function.">
        <return-value transfer-ownership="none">
          <type name="QueryType" c:type="GstQueryType*"/>
        </return-value>
      </method>
      <method name="query"
              c:identifier="gst_pad_query"
              doc="Dispatches a query to a pad. The query should have been allocated by the
caller via one of the type-specific allocation functions in gstquery.h. The
element is responsible for filling the query with an appropriate response,
which should then be parsed with a type-specific query parsing function.
Again, the caller is responsible for both the allocation and deallocation of
the query structure.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="query" transfer-ownership="none">
            <type name="Query" c:type="GstQuery*"/>
          </parameter>
        </parameters>
      </method>
      <method name="peer_query"
              c:identifier="gst_pad_peer_query"
              doc="Performs gst_pad_query() on the peer of @pad.
The caller is responsible for both the allocation and deallocation of
the query structure.
if @pad has no peer."
              version="0.10.15">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="query" transfer-ownership="none">
            <type name="Query" c:type="GstQuery*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_query_function"
              c:identifier="gst_pad_set_query_function"
              doc="Set the given query function for the pad.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="query" transfer-ownership="none" scope="call">
            <type name="PadQueryFunction" c:type="GstPadQueryFunction"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_default"
              c:identifier="gst_pad_query_default"
              doc="Invokes the default query handler for the given pad.
The query is sent to all pads internally linked to @pad. Note that
if there are many possible sink pads that are internally linked to
Multi-sinkpad elements should implement custom query handlers.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="query" transfer-ownership="none">
            <type name="Query" c:type="GstQuery*"/>
          </parameter>
        </parameters>
      </method>
      <method name="dispatcher"
              c:identifier="gst_pad_dispatcher"
              doc="Invokes the given dispatcher function on each respective peer of
all pads that are internally linked to the given pad.
The GstPadDispatcherFunction should return TRUE when no further pads
need to be processed.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="dispatch"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="PadDispatcherFunction"
                  c:type="GstPadDispatcherFunction"/>
          </parameter>
          <parameter name="data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="use_fixed_caps"
              c:identifier="gst_pad_use_fixed_caps"
              doc="A helper function you can use that sets the
pad. This way the function will always return the negotiated caps
or in case the pad is not negotiated, the padtemplate caps.
Use this function on a pad that, once gst_pad_set_caps() has been called
on it, cannot be renegotiated to something else.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="get_fixed_caps_func"
              c:identifier="gst_pad_get_fixed_caps_func"
              doc="A helper function you can use as a GetCaps function that
will return the currently negotiated caps or the padtemplate
when NULL.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </method>
      <method name="proxy_getcaps"
              c:identifier="gst_pad_proxy_getcaps"
              doc="Calls gst_pad_get_allowed_caps() for every other pad belonging to the
same element as @pad, and returns the intersection of the results.
This function is useful as a default getcaps function for an element
that can handle any stream format, but requires all its pads to have
the same caps.  Two such elements are tee and adder.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </method>
      <method name="proxy_setcaps" c:identifier="gst_pad_proxy_setcaps">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="caps" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_parent_element"
              c:identifier="gst_pad_get_parent_element"
              doc="Gets the parent of @pad, cast to a #GstElement. If a @pad has no parent or
its parent is not an element, return NULL.
unref when you&apos;re finished with it.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Element" c:type="GstElement*"/>
        </return-value>
      </method>
      <method name="query_position"
              c:identifier="gst_pad_query_position"
              doc="Queries a pad for the stream position.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="format"
                     direction="inout"
                     caller-allocates="0"
                     transfer-ownership="full"
                     doc="a pointer to the #GstFormat asked for. On return contains the #GstFormat used.">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="cur"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     doc="A location in which to store the current position, or NULL.">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_duration"
              c:identifier="gst_pad_query_duration"
              doc="Queries a pad for the total stream duration.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="format"
                     transfer-ownership="none"
                     doc=" On return contains the #GstFormat used.">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="duration"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_convert"
              c:identifier="gst_pad_query_convert"
              doc="Queries a pad to convert @src_val in @src_format to @dest_format.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="src_format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="src_val" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="dest_format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="dest_val"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_peer_position"
              c:identifier="gst_pad_query_peer_position"
              doc="Queries the peer of a given sink pad for the stream position.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="format"
                     transfer-ownership="none"
                     doc=" On return contains the #GstFormat used.">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="cur"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_peer_duration"
              c:identifier="gst_pad_query_peer_duration"
              doc="Queries the peer pad of a given sink pad for the total stream duration.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="format"
                     transfer-ownership="none"
                     doc=" On return contains the #GstFormat used.">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="duration"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_peer_convert"
              c:identifier="gst_pad_query_peer_convert"
              doc="Queries the peer pad of a given sink pad to convert @src_val in @src_format
to @dest_format.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="src_format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="src_val" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="dest_format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="dest_val"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_data_probe"
              c:identifier="gst_pad_add_data_probe"
              doc="Adds a &quot;data probe&quot; to a pad. This function will be called whenever data
passes through a pad. In this case data means both events and buffers. The
probe will be called with the data as an argument, meaning @handler should
have the same callback signature as the #GstPad::have-data signal.
Note that the data will have a reference count greater than 1, so it will
be immutable -- you must not change it.
For source pads, the probe will be called after the blocking function, if any
(see gst_pad_set_blocked_async()), but before looking up the peer to chain
to. For sink pads, the probe function will be called before configuring the
sink with new caps, if any, and before calling the pad&apos;s chain function.
Your data probe should return TRUE to let the data continue to flow, or FALSE
to drop it. Dropping data is rarely useful, but occasionally comes in handy
with events.
Although probes are implemented internally by connecting @handler to the
have-data signal on the pad, if you want to remove a probe it is insufficient
to only call g_signal_handler_disconnect on the returned handler id. To
remove a probe, use the appropriate function, such as
gst_pad_remove_data_probe().">
        <return-value transfer-ownership="none">
          <type name="ulong" c:type="gulong"/>
        </return-value>
        <parameters>
          <parameter name="handler"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="GObject.Callback" c:type="GCallback"/>
          </parameter>
          <parameter name="data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_data_probe_full"
              c:identifier="gst_pad_add_data_probe_full"
              doc="Adds a &quot;data probe&quot; to a pad. This function will be called whenever data
passes through a pad. In this case data means both events and buffers. The
probe will be called with the data as an argument, meaning @handler should
have the same callback signature as the #GstPad::have-data signal.
Note that the data will have a reference count greater than 1, so it will
be immutable -- you must not change it.
For source pads, the probe will be called after the blocking function, if any
(see gst_pad_set_blocked_async()), but before looking up the peer to chain
to. For sink pads, the probe function will be called before configuring the
sink with new caps, if any, and before calling the pad&apos;s chain function.
Your data probe should return TRUE to let the data continue to flow, or FALSE
to drop it. Dropping data is rarely useful, but occasionally comes in handy
with events.
Although probes are implemented internally by connecting @handler to the
have-data signal on the pad, if you want to remove a probe it is insufficient
to only call g_signal_handler_disconnect on the returned handler id. To
remove a probe, use the appropriate function, such as
gst_pad_remove_data_probe().
The @notify function is called when the probe is disconnected and usually
used to free @data."
              version="0.10.20">
        <return-value transfer-ownership="none">
          <type name="ulong" c:type="gulong"/>
        </return-value>
        <parameters>
          <parameter name="handler"
                     transfer-ownership="none"
                     scope="notified"
                     closure="2"
                     destroy="3">
            <type name="GObject.Callback" c:type="GCallback"/>
          </parameter>
          <parameter name="data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
          <parameter name="notify" transfer-ownership="none" scope="call">
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_data_probe"
              c:identifier="gst_pad_remove_data_probe"
              doc="Removes a data probe from @pad.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="handler_id" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_event_probe"
              c:identifier="gst_pad_add_event_probe"
              doc="Adds a probe that will be called for all events passing through a pad. See
gst_pad_add_data_probe() for more information.">
        <return-value transfer-ownership="none">
          <type name="ulong" c:type="gulong"/>
        </return-value>
        <parameters>
          <parameter name="handler"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="GObject.Callback" c:type="GCallback"/>
          </parameter>
          <parameter name="data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_event_probe_full"
              c:identifier="gst_pad_add_event_probe_full"
              doc="Adds a probe that will be called for all events passing through a pad. See
gst_pad_add_data_probe() for more information.
The @notify function is called when the probe is disconnected and usually
used to free @data."
              version="0.10.20">
        <return-value transfer-ownership="none">
          <type name="ulong" c:type="gulong"/>
        </return-value>
        <parameters>
          <parameter name="handler"
                     transfer-ownership="none"
                     scope="notified"
                     closure="2"
                     destroy="3">
            <type name="GObject.Callback" c:type="GCallback"/>
          </parameter>
          <parameter name="data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
          <parameter name="notify" transfer-ownership="none" scope="call">
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_event_probe"
              c:identifier="gst_pad_remove_event_probe"
              doc="Removes an event probe from @pad.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="handler_id" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_buffer_probe"
              c:identifier="gst_pad_add_buffer_probe"
              doc="Adds a probe that will be called for all buffers passing through a pad. See
gst_pad_add_data_probe() for more information.">
        <return-value transfer-ownership="none">
          <type name="ulong" c:type="gulong"/>
        </return-value>
        <parameters>
          <parameter name="handler"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="GObject.Callback" c:type="GCallback"/>
          </parameter>
          <parameter name="data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_buffer_probe_full"
              c:identifier="gst_pad_add_buffer_probe_full"
              doc="Adds a probe that will be called for all buffers passing through a pad. See
gst_pad_add_data_probe() for more information.
The @notify function is called when the probe is disconnected and usually
used to free @data."
              version="0.10.20">
        <return-value transfer-ownership="none">
          <type name="ulong" c:type="gulong"/>
        </return-value>
        <parameters>
          <parameter name="handler"
                     transfer-ownership="none"
                     scope="notified"
                     closure="2"
                     destroy="3">
            <type name="GObject.Callback" c:type="GCallback"/>
          </parameter>
          <parameter name="data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
          <parameter name="notify" transfer-ownership="none" scope="call">
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_buffer_probe"
              c:identifier="gst_pad_remove_buffer_probe"
              doc="Removes a buffer probe from @pad.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="handler_id" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <property name="caps">
        <type name="Caps" c:type="GstCaps"/>
      </property>
      <property name="direction" writable="1" construct-only="1">
        <type name="PadDirection" c:type="GstPadDirection"/>
      </property>
      <property name="template" writable="1">
        <type name="PadTemplate" c:type="GstPadTemplate"/>
      </property>
      <field name="object">
        <type name="Object" c:type="GstObject"/>
      </field>
      <field name="element_private">
        <type name="any" c:type="gpointer"/>
      </field>
      <field name="padtemplate">
        <type name="PadTemplate" c:type="GstPadTemplate*"/>
      </field>
      <field name="direction">
        <type name="PadDirection" c:type="GstPadDirection"/>
      </field>
      <field name="stream_rec_lock">
        <type name="GLib.StaticRecMutex" c:type="GStaticRecMutex*"/>
      </field>
      <field name="task">
        <type name="Task" c:type="GstTask*"/>
      </field>
      <field name="preroll_lock">
        <type name="GLib.Mutex" c:type="GMutex*"/>
      </field>
      <field name="preroll_cond">
        <type name="GLib.Cond" c:type="GCond*"/>
      </field>
      <field name="block_cond">
        <type name="GLib.Cond" c:type="GCond*"/>
      </field>
      <field name="block_callback">
        <type name="PadBlockCallback" c:type="GstPadBlockCallback"/>
      </field>
      <field name="block_data">
        <type name="any" c:type="gpointer"/>
      </field>
      <field name="caps">
        <type name="Caps" c:type="GstCaps*"/>
      </field>
      <field name="getcapsfunc">
        <type name="PadGetCapsFunction" c:type="GstPadGetCapsFunction"/>
      </field>
      <field name="setcapsfunc">
        <type name="PadSetCapsFunction" c:type="GstPadSetCapsFunction"/>
      </field>
      <field name="acceptcapsfunc">
        <type name="PadAcceptCapsFunction" c:type="GstPadAcceptCapsFunction"/>
      </field>
      <field name="fixatecapsfunc">
        <type name="PadFixateCapsFunction" c:type="GstPadFixateCapsFunction"/>
      </field>
      <field name="activatefunc">
        <type name="PadActivateFunction" c:type="GstPadActivateFunction"/>
      </field>
      <field name="activatepushfunc">
        <type name="PadActivateModeFunction"
              c:type="GstPadActivateModeFunction"/>
      </field>
      <field name="activatepullfunc">
        <type name="PadActivateModeFunction"
              c:type="GstPadActivateModeFunction"/>
      </field>
      <field name="linkfunc">
        <type name="PadLinkFunction" c:type="GstPadLinkFunction"/>
      </field>
      <field name="unlinkfunc">
        <type name="PadUnlinkFunction" c:type="GstPadUnlinkFunction"/>
      </field>
      <field name="peer">
        <type name="Pad" c:type="GstPad*"/>
      </field>
      <field name="sched_private">
        <type name="any" c:type="gpointer"/>
      </field>
      <field name="chainfunc">
        <type name="PadChainFunction" c:type="GstPadChainFunction"/>
      </field>
      <field name="checkgetrangefunc">
        <type name="PadCheckGetRangeFunction"
              c:type="GstPadCheckGetRangeFunction"/>
      </field>
      <field name="getrangefunc">
        <type name="PadGetRangeFunction" c:type="GstPadGetRangeFunction"/>
      </field>
      <field name="eventfunc">
        <type name="PadEventFunction" c:type="GstPadEventFunction"/>
      </field>
      <field name="mode">
        <type name="ActivateMode" c:type="GstActivateMode"/>
      </field>
      <field name="querytypefunc">
        <type name="PadQueryTypeFunction" c:type="GstPadQueryTypeFunction"/>
      </field>
      <field name="queryfunc">
        <type name="PadQueryFunction" c:type="GstPadQueryFunction"/>
      </field>
      <field name="intlinkfunc">
        <type name="PadIntLinkFunction" c:type="GstPadIntLinkFunction"/>
      </field>
      <field name="bufferallocfunc">
        <type name="PadBufferAllocFunction"
              c:type="GstPadBufferAllocFunction"/>
      </field>
      <field name="do_buffer_signals">
        <type name="int" c:type="gint"/>
      </field>
      <field name="do_event_signals">
        <type name="int" c:type="gint"/>
      </field>
      <field name="iterintlinkfunc">
        <type name="PadIterIntLinkFunction"
              c:type="GstPadIterIntLinkFunction"/>
      </field>
      <field name="block_destroy_data">
        <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
      </field>
      <union name="abidata" c:type="abidata">
        <record name="ABI" c:type="ABI">
          <field name="block_callback_called" writable="1">
            <type name="boolean" c:type="gboolean"/>
          </field>
          <field name="priv" writable="1">
            <type name="PadPrivate" c:type="GstPadPrivate*"/>
          </field>
        </record>
        <field name="_gst_reserved" writable="1">
          <array zero-terminated="0" c:type="gpointer" fixed-size="2">
            <type name="any"/>
          </array>
        </field>
      </union>
      <glib:signal name="have-data"
                   doc="Signals that new data is available on the pad. This signal is used
internally for implementing pad probes.
See gst_pad_add_*_probe functions.">
        <return-value transfer-ownership="full">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="mini_obj" transfer-ownership="none">
            <type name="MiniObject" c:type="GstMiniObject"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="linked"
                   doc="Signals that a pad has been linked to the peer pad.">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="peer" transfer-ownership="none">
            <type name="Pad" c:type="GstPad"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="request-link"
                   doc="Signals that a pad connection has been requested.">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="unlinked"
                   doc="Signals that a pad has been unlinked from the peer pad.">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="peer" transfer-ownership="none">
            <type name="Pad" c:type="GstPad"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <callback name="PadAcceptCapsFunction"
              c:type="GstPadAcceptCapsFunction"
              doc="Check if @pad can accept @caps. By default this function will see if @caps
intersect with the result from gst_pad_get_caps() by can be overridden to
perform extra checks.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
        <parameter name="caps" transfer-ownership="none">
          <type name="Caps" c:type="GstCaps*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="PadActivateFunction"
              c:type="GstPadActivateFunction"
              doc="This function is called when the pad is activated during the element
READY to PAUSED state change. By default this function will call the
activate function that puts the pad in push mode but elements can
override this function to activate the pad in pull mode if they wish.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="PadActivateModeFunction"
              c:type="GstPadActivateModeFunction"
              doc="The prototype of the push and pull activate functions.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
        <parameter name="active" transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="PadBlockCallback"
              c:type="GstPadBlockCallback"
              doc="Callback used by gst_pad_set_blocked_async(). Gets called when the blocking
operation succeeds.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
        <parameter name="blocked" transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="2">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="PadBufferAllocFunction"
              c:type="GstPadBufferAllocFunction"
              doc="Ask the sinkpad @pad to allocate a buffer with @offset, @size and @caps.
The result will be stored in @buf.
The purpose of this function is to allocate a buffer that is optimal to
be processed by @pad. The function is mostly overridden by elements that can
provide a hardware buffer in order to avoid additional memcpy operations.
The function can return a buffer that has caps different from the requested
new caps.
If a format change was requested, the returned buffer will be one to hold
the data of said new caps, so its size might be different from the requested
When this function returns anything else than #GST_FLOW_OK, the buffer allocation
failed and @buf does not contain valid data. If the function returns #GST_FLOW_OK and
the @buf is NULL, a #GstBuffer will be created with @caps, @offset and @size.
By default this function returns a new buffer of @size and with @caps containing
purely malloced data. The buffer should be freed with gst_buffer_unref()
after usage.
value means @buf does not hold a valid buffer.">
      <return-value transfer-ownership="full">
        <type name="FlowReturn" c:type="GstFlowReturn"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
        <parameter name="offset" transfer-ownership="none">
          <type name="uint64" c:type="guint64"/>
        </parameter>
        <parameter name="size" transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </parameter>
        <parameter name="caps" transfer-ownership="none">
          <type name="Caps" c:type="GstCaps*"/>
        </parameter>
        <parameter name="buf" transfer-ownership="none">
          <type name="Buffer" c:type="GstBuffer**"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="PadChainFunction"
              c:type="GstPadChainFunction"
              doc="A function that will be called on sinkpads when chaining buffers.
The function typically processes the data contained in the buffer and
either consumes the data or passes it on to the internally linked pad(s).
The implementer of this function receives a refcount to @buffer and should
gst_buffer_unref() when the buffer is no longer needed.
When a chain function detects an error in the data stream, it must post an
error on the bus and return an appropriate #GstFlowReturn value.">
      <return-value transfer-ownership="full">
        <type name="FlowReturn" c:type="GstFlowReturn"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
        <parameter name="buffer" transfer-ownership="none">
          <type name="Buffer" c:type="GstBuffer*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="PadChainListFunction"
              c:type="GstPadChainListFunction"
              doc="A function that will be called on sinkpads when chaining buffer lists.
The function typically processes the data contained in the buffer list and
either consumes the data or passes it on to the internally linked pad(s).
The implementer of this function receives a refcount to @list and
should gst_buffer_list_unref() when the list is no longer needed.
When a chainlist function detects an error in the data stream, it must
post an error on the bus and return an appropriate #GstFlowReturn value.">
      <return-value transfer-ownership="full">
        <type name="FlowReturn" c:type="GstFlowReturn"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
        <parameter name="list" transfer-ownership="none">
          <type name="BufferList" c:type="GstBufferList*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="PadCheckGetRangeFunction"
              c:type="GstPadCheckGetRangeFunction"
              doc="Check if @pad can be activated in pull mode.
This function will be deprecated after 0.10; use the seeking query to check
if a pad can support random access.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
      </parameters>
    </callback>
    <record name="PadClass"
            c:type="GstPadClass"
            glib:is-gtype-struct-for="Pad">
      <field name="parent_class">
        <type name="ObjectClass" c:type="GstObjectClass"/>
      </field>
      <field name="linked">
        <callback name="linked" c:type="linked">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="pad" transfer-ownership="none">
              <type name="Pad" c:type="GstPad*"/>
            </parameter>
            <parameter name="peer" transfer-ownership="none">
              <type name="Pad" c:type="GstPad*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="unlinked">
        <callback name="unlinked" c:type="unlinked">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="pad" transfer-ownership="none">
              <type name="Pad" c:type="GstPad*"/>
            </parameter>
            <parameter name="peer" transfer-ownership="none">
              <type name="Pad" c:type="GstPad*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="request_link">
        <callback name="request_link" c:type="request_link">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="pad" transfer-ownership="none">
              <type name="Pad" c:type="GstPad*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="have_data">
        <callback name="have_data" c:type="have_data">
          <return-value transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="pad" transfer-ownership="none">
              <type name="Pad" c:type="GstPad*"/>
            </parameter>
            <parameter name="data" transfer-ownership="none">
              <type name="MiniObject" c:type="GstMiniObject*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <enumeration name="PadDirection"
                 doc="The direction of a pad."
                 c:type="GstPadDirection">
      <member name="unknown" value="0" c:identifier="GST_PAD_UNKNOWN"/>
      <member name="src" value="1" c:identifier="GST_PAD_SRC"/>
      <member name="sink" value="2" c:identifier="GST_PAD_SINK"/>
    </enumeration>
    <callback name="PadDispatcherFunction"
              c:type="GstPadDispatcherFunction"
              doc="A dispatcher function is called for all internally linked pads, see
gst_pad_dispatcher().">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="PadEventFunction"
              c:type="GstPadEventFunction"
              doc="Function signature to handle an event for the pad.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
        <parameter name="event" transfer-ownership="none">
          <type name="Event" c:type="GstEvent*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="PadFixateCapsFunction"
              c:type="GstPadFixateCapsFunction"
              doc="Given possibly unfixed caps @caps, let @pad use its default prefered
format to make a fixed caps. @caps should be writable. By default this
function will pick the first value of any ranges or lists in the caps but
elements can override this function to perform other behaviour.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
        <parameter name="caps" transfer-ownership="none">
          <type name="Caps" c:type="GstCaps*"/>
        </parameter>
      </parameters>
    </callback>
    <bitfield name="PadFlags" doc="Pad state flags" c:type="GstPadFlags">
      <member name="blocked" value="16" c:identifier="GST_PAD_BLOCKED"/>
      <member name="flushing" value="32" c:identifier="GST_PAD_FLUSHING"/>
      <member name="in_getcaps" value="64" c:identifier="GST_PAD_IN_GETCAPS"/>
      <member name="in_setcaps" value="128" c:identifier="GST_PAD_IN_SETCAPS"/>
      <member name="blocking" value="256" c:identifier="GST_PAD_BLOCKING"/>
      <member name="flag_last" value="4096" c:identifier="GST_PAD_FLAG_LAST"/>
    </bitfield>
    <callback name="PadGetCapsFunction"
              c:type="GstPadGetCapsFunction"
              doc="Returns a copy of the capabilities of the specified pad. By default this
function will return the pad template capabilities, but can optionally
be overridden by elements.">
      <return-value transfer-ownership="full">
        <type name="Caps" c:type="GstCaps*"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="PadGetRangeFunction"
              c:type="GstPadGetRangeFunction"
              doc="This function will be called on source pads when a peer element
request a buffer at the specified @offset and @length. If this function
returns #GST_FLOW_OK, the result buffer will be stored in @buffer. The
contents of @buffer is invalid for any other return value.
This function is installed on a source pad with
gst_pad_set_getrange_function() and can only be called on source pads after
they are successfully activated with gst_pad_activate_pull().
between 0 and the length in bytes of the data available on @pad. The
length (duration in bytes) can be retrieved with a #GST_QUERY_DURATION or with a
#GST_QUERY_SEEKING.
Any @offset larger or equal than the length will make the function return
#GST_FLOW_UNEXPECTED, which corresponds to EOS. In this case @buffer does not
contain a valid buffer.
The buffer size of @buffer might be smaller than @length when @offset is near
the end of the stream.
It is allowed to call this function with a 0 @length and valid @offset, in
which case @buffer will contain a 0-sized buffer and the function returns
#GST_FLOW_OK.
When this function is called with a -1 @offset, the sequentially next buffer
of length @length in the stream is returned.
When this function is called with a -1 @length, a buffer with a default
optimal length is returned in @buffer. The length might depend on the value
of @offset.">
      <return-value transfer-ownership="full">
        <type name="FlowReturn" c:type="GstFlowReturn"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
        <parameter name="offset" transfer-ownership="none">
          <type name="uint64" c:type="guint64"/>
        </parameter>
        <parameter name="length" transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </parameter>
        <parameter name="buffer" transfer-ownership="none">
          <type name="Buffer" c:type="GstBuffer**"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="PadIntLinkFunction"
              c:type="GstPadIntLinkFunction"
              doc="The signature of the internal pad link function.
the inside of the parent element.
The caller must call g_list_free() on it after use."
              deprecated="use the threadsafe #GstPadIterIntLinkFunction instead.">
      <return-value transfer-ownership="full">
        <type name="GLib.List" c:type="GList*"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="PadIterIntLinkFunction"
              c:type="GstPadIterIntLinkFunction"
              doc="The signature of the internal pad link iterator function.
linked to the given pad on the inside of the parent element.
the caller must call gst_iterator_free() after usage.
Since 0.10.21">
      <return-value transfer-ownership="full">
        <type name="Iterator" c:type="GstIterator*"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="PadLinkFunction" c:type="GstPadLinkFunction">
      <return-value transfer-ownership="full">
        <type name="PadLinkReturn" c:type="GstPadLinkReturn"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
        <parameter name="peer" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
      </parameters>
    </callback>
    <enumeration name="PadLinkReturn"
                 doc="Result values from gst_pad_link and friends."
                 c:type="GstPadLinkReturn">
      <member name="ok" value="0" c:identifier="GST_PAD_LINK_OK"/>
      <member name="wrong_hierarchy"
              value="-1"
              c:identifier="GST_PAD_LINK_WRONG_HIERARCHY"/>
      <member name="was_linked"
              value="-2"
              c:identifier="GST_PAD_LINK_WAS_LINKED"/>
      <member name="wrong_direction"
              value="-3"
              c:identifier="GST_PAD_LINK_WRONG_DIRECTION"/>
      <member name="noformat" value="-4" c:identifier="GST_PAD_LINK_NOFORMAT"/>
      <member name="nosched" value="-5" c:identifier="GST_PAD_LINK_NOSCHED"/>
      <member name="refused" value="-6" c:identifier="GST_PAD_LINK_REFUSED"/>
    </enumeration>
    <enumeration name="PadPresence"
                 doc="Indicates when this pad will become available."
                 c:type="GstPadPresence">
      <member name="always" value="0" c:identifier="GST_PAD_ALWAYS"/>
      <member name="sometimes" value="1" c:identifier="GST_PAD_SOMETIMES"/>
      <member name="request" value="2" c:identifier="GST_PAD_REQUEST"/>
    </enumeration>
    <record name="PadPrivate" c:type="GstPadPrivate">
    </record>
    <callback name="PadQueryFunction"
              c:type="GstPadQueryFunction"
              doc="The signature of the query function.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
        <parameter name="query" transfer-ownership="none">
          <type name="Query" c:type="GstQuery*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="PadQueryTypeFunction"
              c:type="GstPadQueryTypeFunction"
              doc="The signature of the query types function.">
      <return-value transfer-ownership="none">
        <type name="QueryType" c:type="GstQueryType*"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="PadSetCapsFunction"
              c:type="GstPadSetCapsFunction"
              doc="Set @caps on @pad. By default this function updates the caps of the
pad but the function can be overriden by elements to perform extra
actions or verifications.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
        <parameter name="caps" transfer-ownership="none">
          <type name="Caps" c:type="GstCaps*"/>
        </parameter>
      </parameters>
    </callback>
    <class name="PadTemplate"
           c:type="GstPadTemplate"
           doc="The padtemplate object."
           parent="Object"
           glib:type-name="GstPadTemplate"
           glib:get-type="gst_pad_template_get_type"
           glib:type-struct="PadTemplateClass">
      <constructor name="new"
                   c:identifier="gst_pad_template_new"
                   doc="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.">
        <return-value transfer-ownership="full">
          <type name="PadTemplate" c:type="GstPadTemplate*"/>
        </return-value>
        <parameters>
          <parameter name="name_template" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="direction" transfer-ownership="none">
            <type name="PadDirection" c:type="GstPadDirection"/>
          </parameter>
          <parameter name="presence" transfer-ownership="none">
            <type name="PadPresence" c:type="GstPadPresence"/>
          </parameter>
          <parameter name="caps" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get_caps"
              c:identifier="gst_pad_template_get_caps"
              doc="Gets the capabilities of the pad template.
the caps, take a ref (see gst_caps_ref ()).">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </method>
      <method name="pad_created"
              c:identifier="gst_pad_template_pad_created"
              doc="Emit the pad-created signal for this template when created by this pad.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="pad" transfer-ownership="none">
            <type name="Pad" c:type="GstPad*"/>
          </parameter>
        </parameters>
      </method>
      <property name="caps" writable="1" construct-only="1">
        <type name="Caps" c:type="GstCaps"/>
      </property>
      <property name="direction" writable="1" construct-only="1">
        <type name="PadDirection" c:type="GstPadDirection"/>
      </property>
      <property name="name-template" writable="1" construct-only="1">
        <type name="utf8" c:type="gchararray"/>
      </property>
      <property name="presence" writable="1" construct-only="1">
        <type name="PadPresence" c:type="GstPadPresence"/>
      </property>
      <field name="object">
        <type name="Object" c:type="GstObject"/>
      </field>
      <field name="name_template">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="direction">
        <type name="PadDirection" c:type="GstPadDirection"/>
      </field>
      <field name="presence">
        <type name="PadPresence" c:type="GstPadPresence"/>
      </field>
      <field name="caps">
        <type name="Caps" c:type="GstCaps*"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
      <glib:signal name="pad-created"
                   doc="This signal is fired when an element creates a pad from this template.">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="pad" transfer-ownership="none">
            <type name="Pad" c:type="GstPad"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="PadTemplateClass"
            c:type="GstPadTemplateClass"
            glib:is-gtype-struct-for="PadTemplate">
      <field name="parent_class">
        <type name="ObjectClass" c:type="GstObjectClass"/>
      </field>
      <field name="pad_created">
        <callback name="pad_created" c:type="pad_created">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="templ" transfer-ownership="none">
              <type name="PadTemplate" c:type="GstPadTemplate*"/>
            </parameter>
            <parameter name="pad" transfer-ownership="none">
              <type name="Pad" c:type="GstPad*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <bitfield name="PadTemplateFlags"
              doc="Flags for the padtemplate"
              c:type="GstPadTemplateFlags">
      <member name="fixed" value="16" c:identifier="GST_PAD_TEMPLATE_FIXED"/>
      <member name="flag_last"
              value="256"
              c:identifier="GST_PAD_TEMPLATE_FLAG_LAST"/>
    </bitfield>
    <callback name="PadUnlinkFunction" c:type="GstPadUnlinkFunction">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
      </parameters>
    </callback>
    <record name="ParamSpecFraction"
            c:type="GstParamSpecFraction"
            doc="A GParamSpec derived structure that contains the meta data for fractional
properties.">
      <field name="parent_instance" writable="1">
        <type name="GObject.ParamSpec" c:type="GParamSpec"/>
      </field>
      <field name="min_num" writable="1">
        <type name="int" c:type="gint"/>
      </field>
      <field name="min_den" writable="1">
        <type name="int" c:type="gint"/>
      </field>
      <field name="max_num" writable="1">
        <type name="int" c:type="gint"/>
      </field>
      <field name="max_den" writable="1">
        <type name="int" c:type="gint"/>
      </field>
      <field name="def_num" writable="1">
        <type name="int" c:type="gint"/>
      </field>
      <field name="def_den" writable="1">
        <type name="int" c:type="gint"/>
      </field>
    </record>
    <record name="ParamSpecMiniObject"
            c:type="GstParamSpecMiniObject"
            doc="A %GParamSpec derived structure that contains the meta data
for %GstMiniObject properties.">
      <field name="parent_instance" writable="1">
        <type name="GObject.ParamSpec" c:type="GParamSpec"/>
      </field>
    </record>
    <record name="ParseContext"
            c:type="GstParseContext"
            doc="Opaque structure."
            version="0.10.20">
      <constructor name="new"
                   c:identifier="gst_parse_context_new"
                   doc="Allocates a parse context for use with gst_parse_launch_full() or
gst_parse_launchv_full().
when no longer needed."
                   version="0.10.20">
        <return-value transfer-ownership="full">
          <type name="ParseContext" c:type="GstParseContext*"/>
        </return-value>
      </constructor>
      <method name="get_missing_elements"
              c:identifier="gst_parse_context_get_missing_elements"
              doc="Retrieve missing elements from a previous run of gst_parse_launch_full()
or gst_parse_launchv_full(). Will only return results if an error code
of %GST_PARSE_ERROR_NO_SUCH_ELEMENT was returned.
missing elements. Free with g_strfreev() when no longer needed."
              version="0.10.20">
        <return-value transfer-ownership="full">
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </return-value>
      </method>
      <method name="free"
              c:identifier="gst_parse_context_free"
              doc="Frees a parse context previously allocated with gst_parse_context_new()."
              version="0.10.20">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
    </record>
    <enumeration name="ParseError"
                 doc="The different parsing errors that can occur."
                 c:type="GstParseError"
                 glib:error-quark="gst_parse_error_quark">
      <member name="syntax" value="0" c:identifier="GST_PARSE_ERROR_SYNTAX"/>
      <member name="no_such_element"
              value="1"
              c:identifier="GST_PARSE_ERROR_NO_SUCH_ELEMENT"/>
      <member name="no_such_property"
              value="2"
              c:identifier="GST_PARSE_ERROR_NO_SUCH_PROPERTY"/>
      <member name="link" value="3" c:identifier="GST_PARSE_ERROR_LINK"/>
      <member name="could_not_set_property"
              value="4"
              c:identifier="GST_PARSE_ERROR_COULD_NOT_SET_PROPERTY"/>
      <member name="empty_bin"
              value="5"
              c:identifier="GST_PARSE_ERROR_EMPTY_BIN"/>
      <member name="empty" value="6" c:identifier="GST_PARSE_ERROR_EMPTY"/>
    </enumeration>
    <bitfield name="ParseFlags"
              doc="Parsing options."
              version="0.10.20"
              c:type="GstParseFlags">
      <member name="none" value="0" c:identifier="GST_PARSE_FLAG_NONE"/>
      <member name="fatal_errors"
              value="1"
              c:identifier="GST_PARSE_FLAG_FATAL_ERRORS"/>
    </bitfield>
    <class name="Pipeline"
           c:type="GstPipeline"
           doc="The #GstPipeline structure."
           parent="Bin"
           glib:type-name="GstPipeline"
           glib:get-type="gst_pipeline_get_type"
           glib:type-struct="PipelineClass">
      <implements name="ChildProxy"/>
      <constructor name="new"
                   c:identifier="gst_pipeline_new"
                   doc="Create a new pipeline with the given name.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Pipeline" c:type="GstElement*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get_bus"
              c:identifier="gst_pipeline_get_bus"
              doc="Gets the #GstBus of @pipeline. The bus allows applications to receive
#GstMessage packets.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Bus" c:type="GstBus*"/>
        </return-value>
      </method>
      <method name="set_new_stream_time"
              c:identifier="gst_pipeline_set_new_stream_time"
              doc="Set the new start time of @pipeline to @time. The start time is used to
set the base time on the elements (see gst_element_set_base_time())
in the PAUSED-&gt;PLAYING state transition.
Setting @time to #GST_CLOCK_TIME_NONE will disable the pipeline&apos;s management
of element base time. The application will then be responsible for
performing base time distribution. This is sometimes useful if you want to
synchronize capture from multiple pipelines, and you can also ensure that the
pipelines have the same clock.
MT safe.
gst_element_set_start_time()."
              deprecated="This function has the wrong name and is equivalent to">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="time" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_last_stream_time"
              c:identifier="gst_pipeline_get_last_stream_time"
              doc="Gets the last running time of @pipeline. If the pipeline is PLAYING,
the returned time is the running time used to configure the element&apos;s
base time in the PAUSED-&gt;PLAYING state. If the pipeline is PAUSED, the
returned time is the running time when the pipeline was paused.
This function returns #GST_CLOCK_TIME_NONE if the pipeline was
configured to not handle the management of the element&apos;s base time
(see gst_pipeline_set_new_stream_time()).
MT safe.
gst_element_get_start_time()."
              deprecated="This function has the wrong name and is equivalent to">
        <return-value transfer-ownership="full">
          <type name="ClockTime" c:type="GstClockTime"/>
        </return-value>
      </method>
      <method name="use_clock"
              c:identifier="gst_pipeline_use_clock"
              doc="Force @pipeline to use the given @clock. The pipeline will
always use the given clock even if new clock providers are added
to this pipeline.
If @clock is NULL all clocking will be disabled which will make
the pipeline run as fast as possible.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="clock" transfer-ownership="none">
            <type name="Clock" c:type="GstClock*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_clock"
              c:identifier="gst_pipeline_set_clock"
              doc="Set the clock for @pipeline. The clock will be distributed
to all the elements managed by the pipeline.
some element did not accept the clock.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="clock" transfer-ownership="none">
            <type name="Clock" c:type="GstClock*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_clock"
              c:identifier="gst_pipeline_get_clock"
              doc="Gets the current clock used by @pipeline.">
        <return-value transfer-ownership="full">
          <type name="Clock" c:type="GstClock*"/>
        </return-value>
      </method>
      <method name="auto_clock"
              c:identifier="gst_pipeline_auto_clock"
              doc="Let @pipeline select a clock automatically. This is the default
behaviour.
Use this function if you previous forced a fixed clock with
gst_pipeline_use_clock() and want to restore the default
pipeline clock selection algorithm.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="set_delay"
              c:identifier="gst_pipeline_set_delay"
              doc="Set the expected delay needed for all elements to perform the
PAUSED to PLAYING state change. @delay will be added to the
base time of the elements so that they wait an additional @delay
amount of time before starting to process buffers and cannot be
#GST_CLOCK_TIME_NONE.
This option is used for tuning purposes and should normally not be
used.
MT safe."
              version="0.10.5">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="delay" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_delay"
              c:identifier="gst_pipeline_get_delay"
              doc="Get the configured delay (see gst_pipeline_set_delay()).
MT safe."
              version="0.10.5">
        <return-value transfer-ownership="full">
          <type name="ClockTime" c:type="GstClockTime"/>
        </return-value>
      </method>
      <method name="set_auto_flush_bus"
              c:identifier="gst_pipeline_set_auto_flush_bus"
              doc="Usually, when a pipeline goes from READY to NULL state, it automatically
flushes all pending messages on the bus, which is done for refcounting
purposes, to break circular references.
This means that applications that update state using (async) bus messages
(e.g. do certain things when a pipeline goes from PAUSED to READY) might
not get to see messages when the pipeline is shut down, because they might
be flushed before they can be dispatched in the main thread. This behaviour
can be disabled using this function.
It is important that all messages on the bus are handled when the
automatic flushing is disabled else memory leaks will be introduced.
MT safe."
              version="0.10.4">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="auto_flush"
                     transfer-ownership="none"
                     doc=" the pipeline goes from READY to NULL state">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_auto_flush_bus"
              c:identifier="gst_pipeline_get_auto_flush_bus"
              doc="Check if @pipeline will automatically flush messages when going to
the NULL state.
going from READY to NULL state or not.
MT safe."
              version="0.10.4">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <property name="auto-flush-bus"
                version="0.10.4"
                writable="1"
                doc="Whether or not to automatically flush all messages on the
pipeline&apos;s bus when going from READY to NULL state. Please see
gst_pipeline_set_auto_flush_bus() for more information on this option.">
        <type name="boolean" c:type="gboolean"/>
      </property>
      <property name="delay" writable="1">
        <type name="uint64" c:type="guint64"/>
      </property>
      <field name="bin">
        <type name="Bin" c:type="GstBin"/>
      </field>
      <field name="fixed_clock">
        <type name="Clock" c:type="GstClock*"/>
      </field>
      <field name="stream_time">
        <type name="ClockTime" c:type="GstClockTime"/>
      </field>
      <field name="delay">
        <type name="ClockTime" c:type="GstClockTime"/>
      </field>
      <field name="priv">
        <type name="PipelinePrivate" c:type="GstPipelinePrivate*"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="3">
          <type name="any"/>
        </array>
      </field>
    </class>
    <record name="PipelineClass"
            c:type="GstPipelineClass"
            glib:is-gtype-struct-for="Pipeline">
      <field name="parent_class">
        <type name="BinClass" c:type="GstBinClass"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <bitfield name="PipelineFlags"
              doc="Pipeline flags"
              c:type="GstPipelineFlags">
      <member name="fixed_clock"
              value="33554432"
              c:identifier="GST_PIPELINE_FLAG_FIXED_CLOCK"/>
      <member name="last"
              value="536870912"
              c:identifier="GST_PIPELINE_FLAG_LAST"/>
    </bitfield>
    <record name="PipelinePrivate" c:type="GstPipelinePrivate">
    </record>
    <class name="Plugin"
           c:type="GstPlugin"
           doc="The plugin object"
           parent="Object"
           glib:type-name="GstPlugin"
           glib:get-type="gst_plugin_get_type"
           glib:type-struct="PluginClass">
      <function name="register_static"
                c:identifier="gst_plugin_register_static"
                doc="Registers a static plugin, ie. a plugin which is private to an application
or library and contained within the application or library (as opposed to
being shipped as a separate module file).
You must make sure that GStreamer has been initialised (with gst_init() or
via gst_init_get_option_group()) before calling this function."
                version="0.10.16">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="major_version"
                     transfer-ownership="none"
                     doc=" plugin was compiled for, you can just use GST_VERSION_MAJOR here">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="minor_version"
                     transfer-ownership="none"
                     doc=" plugin was compiled for, you can just use GST_VERSION_MINOR here">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="name"
                     transfer-ownership="none"
                     doc=" library-specific namespace prefix in order to avoid name conflicts in case a similar plugin with the same name ever gets added to GStreamer)">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="description" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="init_func" transfer-ownership="none" scope="call">
            <type name="PluginInitFunc" c:type="GstPluginInitFunc"/>
          </parameter>
          <parameter name="version" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="license"
                     transfer-ownership="none"
                     doc=" (see #GstPluginDesc above) or the plugin will not be registered.">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="source" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="package" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="origin" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </function>
      <function name="register_static_full"
                c:identifier="gst_plugin_register_static_full"
                doc="Registers a static plugin, ie. a plugin which is private to an application
or library and contained within the application or library (as opposed to
being shipped as a separate module file) with a #GstPluginInitFullFunc
which allows user data to be passed to the callback function (useful
for bindings).
You must make sure that GStreamer has been initialised (with gst_init() or
via gst_init_get_option_group()) before calling this function."
                version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="major_version"
                     transfer-ownership="none"
                     doc=" plugin was compiled for, you can just use GST_VERSION_MAJOR here">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="minor_version"
                     transfer-ownership="none"
                     doc=" plugin was compiled for, you can just use GST_VERSION_MINOR here">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="name"
                     transfer-ownership="none"
                     doc=" library-specific namespace prefix in order to avoid name conflicts in case a similar plugin with the same name ever gets added to GStreamer)">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="description" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="init_full_func"
                     transfer-ownership="none"
                     scope="call">
            <type name="PluginInitFullFunc" c:type="GstPluginInitFullFunc"/>
          </parameter>
          <parameter name="version" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="license"
                     transfer-ownership="none"
                     doc=" (see #GstPluginDesc above) or the plugin will not be registered.">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="source" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="package" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="origin" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </function>
      <function name="load_file"
                c:identifier="gst_plugin_load_file"
                doc="Loads the given plugin and refs it.  Caller needs to unref after use.
newly-loaded GstPlugin, or NULL if an error occurred."
                throws="1">
        <return-value transfer-ownership="full">
          <type name="Plugin" c:type="GstPlugin*"/>
        </return-value>
        <parameters>
          <parameter name="filename" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </function>
      <function name="load_by_name"
                c:identifier="gst_plugin_load_by_name"
                doc="Load the named plugin. Refs the plugin.">
        <return-value transfer-ownership="full">
          <type name="Plugin" c:type="GstPlugin*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </function>
      <function name="list_free"
                c:identifier="gst_plugin_list_free"
                doc="Unrefs each member of @list, then frees the list.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="list" transfer-ownership="none">
            <type name="GLib.List" c:type="GList*"/>
          </parameter>
        </parameters>
      </function>
      <method name="get_name"
              c:identifier="gst_plugin_get_name"
              doc="Get the short name of the plugin">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="get_description"
              c:identifier="gst_plugin_get_description"
              doc="Get the long descriptive name of the plugin">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="get_filename"
              c:identifier="gst_plugin_get_filename"
              doc="get the filename of the plugin">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="get_version"
              c:identifier="gst_plugin_get_version"
              doc="get the version of the plugin">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="get_license"
              c:identifier="gst_plugin_get_license"
              doc="get the license of the plugin">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="get_source"
              c:identifier="gst_plugin_get_source"
              doc="get the source module the plugin belongs to.">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="get_package"
              c:identifier="gst_plugin_get_package"
              doc="get the package the plugin belongs to.">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="get_origin"
              c:identifier="gst_plugin_get_origin"
              doc="get the URL where the plugin comes from">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="get_cache_data"
              c:identifier="gst_plugin_get_cache_data"
              doc="Gets the plugin specific data cache. If it is %NULL there is no cached data
stored. This is the case when the registry is getting rebuilt."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="Structure" c:type="GstStructure*"/>
        </return-value>
      </method>
      <method name="set_cache_data"
              c:identifier="gst_plugin_set_cache_data"
              doc="Adds plugin specific data to cache. Passes the ownership of the structure to
the @plugin.
The cache is flushed every time the registry is rebuilt."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="cache_data" transfer-ownership="none">
            <type name="Structure" c:type="GstStructure*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_module"
              c:identifier="gst_plugin_get_module"
              doc="Gets the #GModule of the plugin. If the plugin isn&apos;t loaded yet, NULL is
returned.
loaded yet.">
        <return-value transfer-ownership="full">
          <type name="GModule.Module" c:type="GModule*"/>
        </return-value>
      </method>
      <method name="is_loaded"
              c:identifier="gst_plugin_is_loaded"
              doc="queries if the plugin is loaded into memory">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="name_filter"
              c:identifier="gst_plugin_name_filter"
              doc="A standard filter that returns TRUE when the plugin is of the
given name.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="load"
              c:identifier="gst_plugin_load"
              doc="Loads @plugin. Note that the *return value* is the loaded plugin; @plugin is
untouched. The normal use pattern of this function goes like this:
&lt;programlisting&gt;
GstPlugin *loaded_plugin;
loaded_plugin = gst_plugin_load (plugin);
// presumably, we&apos;re no longer interested in the potentially-unloaded plugin
gst_object_unref (plugin);
plugin = loaded_plugin;
&lt;/programlisting&gt;">
        <return-value transfer-ownership="full">
          <type name="Plugin" c:type="GstPlugin*"/>
        </return-value>
      </method>
      <method name="add_dependency"
              c:identifier="gst_plugin_add_dependency"
              doc="Make GStreamer aware of external dependencies which affect the feature
set of this plugin (ie. the elements or typefinders associated with it).
GStreamer will re-inspect plugins with external dependencies whenever any
of the external dependencies change. This is useful for plugins which wrap
other plugin systems, e.g. a plugin which wraps a plugin-based visualisation
library and makes visualisations available as GStreamer elements, or a
codec loader which exposes elements and/or caps dependent on what external
codec libraries are currently installed."
              version="0.10.22">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="env_vars"
                     transfer-ownership="none"
                     doc=" feature set of the plugin (e.g. an environment variable containing paths where to look for additional modules/plugins of a library), or NULL. Environment variable names may be followed by a path component which will be added to the content of the environment variable, e.g. &quot;HOME/.mystuff/plugins&quot;.">
            <array c:type="gchar**">
              <type name="utf8"/>
            </array>
          </parameter>
          <parameter name="paths" transfer-ownership="none" doc=" may be.">
            <array c:type="gchar**">
              <type name="utf8"/>
            </array>
          </parameter>
          <parameter name="names"
                     transfer-ownership="none"
                     doc=" depending on @flags) to be used in combination with the paths from">
            <array c:type="gchar**">
              <type name="utf8"/>
            </array>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <type name="PluginDependencyFlags"
                  c:type="GstPluginDependencyFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_dependency_simple"
              c:identifier="gst_plugin_add_dependency_simple"
              doc="Make GStreamer aware of external dependencies which affect the feature
set of this plugin (ie. the elements or typefinders associated with it).
GStreamer will re-inspect plugins with external dependencies whenever any
of the external dependencies change. This is useful for plugins which wrap
other plugin systems, e.g. a plugin which wraps a plugin-based visualisation
library and makes visualisations available as GStreamer elements, or a
codec loader which exposes elements and/or caps dependent on what external
codec libraries are currently installed.
Convenience wrapper function for gst_plugin_add_dependency() which
takes simple strings as arguments instead of string arrays, with multiple
arguments separated by predefined delimiters (see above)."
              version="0.10.22">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="env_vars"
                     transfer-ownership="none"
                     doc=" or NULL. Environment variable names may be followed by a path component which will be added to the content of the environment variable, e.g. &quot;HOME/.mystuff/plugins:MYSTUFF_PLUGINS_PATH&quot;">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="paths" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="names" transfer-ownership="none" doc=" or NULL">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <type name="PluginDependencyFlags"
                  c:type="GstPluginDependencyFlags"/>
          </parameter>
        </parameters>
      </method>
      <field name="object">
        <type name="Object" c:type="GstObject"/>
      </field>
      <field name="desc">
        <type name="PluginDesc" c:type="GstPluginDesc"/>
      </field>
      <field name="orig_desc">
        <type name="PluginDesc" c:type="GstPluginDesc*"/>
      </field>
      <field name="flags">
        <type name="uint" c:type="unsigned"/>
      </field>
      <field name="filename">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="basename">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="module">
        <type name="GModule.Module" c:type="GModule*"/>
      </field>
      <field name="file_size">
        <type name="size_t" c:type="off_t"/>
      </field>
      <field name="file_mtime">
        <type name="time_t" c:type="time_t"/>
      </field>
      <field name="registered">
        <type name="boolean" c:type="gboolean"/>
      </field>
      <field name="priv">
        <type name="PluginPrivate" c:type="GstPluginPrivate*"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="3">
          <type name="any"/>
        </array>
      </field>
    </class>
    <record name="PluginClass"
            c:type="GstPluginClass"
            glib:is-gtype-struct-for="Plugin">
      <field name="object_class">
        <type name="ObjectClass" c:type="GstObjectClass"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <bitfield name="PluginDependencyFlags"
              doc="Flags used in connection with gst_plugin_add_dependency()."
              version="0.10.22"
              c:type="GstPluginDependencyFlags">
      <member name="none"
              value="0"
              c:identifier="GST_PLUGIN_DEPENDENCY_FLAG_NONE"/>
      <member name="recurse"
              value="1"
              c:identifier="GST_PLUGIN_DEPENDENCY_FLAG_RECURSE"/>
      <member name="paths_are_default_only"
              value="2"
              c:identifier="GST_PLUGIN_DEPENDENCY_FLAG_PATHS_ARE_DEFAULT_ONLY"/>
      <member name="file_name_is_suffix"
              value="4"
              c:identifier="GST_PLUGIN_DEPENDENCY_FLAG_FILE_NAME_IS_SUFFIX"/>
    </bitfield>
    <record name="PluginDesc"
            c:type="GstPluginDesc"
            doc="A plugin should export a variable of this type called plugin_desc. The plugin
loader will use the data provided there to initialize the plugin.
BSD, MIT/X11, Proprietary, unknown.">
      <field name="major_version" writable="1">
        <type name="int" c:type="gint"/>
      </field>
      <field name="minor_version" writable="1">
        <type name="int" c:type="gint"/>
      </field>
      <field name="name" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="description" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="plugin_init" writable="1">
        <type name="PluginInitFunc" c:type="GstPluginInitFunc"/>
      </field>
      <field name="version" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="license" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="source" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="package" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="origin" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="_gst_reserved" writable="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <enumeration name="PluginError"
                 doc="The plugin loading errors"
                 c:type="GstPluginError"
                 glib:error-quark="gst_plugin_error_quark">
      <member name="module" value="0" c:identifier="GST_PLUGIN_ERROR_MODULE"/>
      <member name="dependencies"
              value="1"
              c:identifier="GST_PLUGIN_ERROR_DEPENDENCIES"/>
      <member name="name_mismatch"
              value="2"
              c:identifier="GST_PLUGIN_ERROR_NAME_MISMATCH"/>
    </enumeration>
    <class name="PluginFeature"
           c:type="GstPluginFeature"
           doc="Opaque #GstPluginFeature structure."
           parent="Object"
           abstract="1"
           glib:type-name="GstPluginFeature"
           glib:get-type="gst_plugin_feature_get_type"
           glib:type-struct="PluginFeatureClass">
      <function name="list_free"
                c:identifier="gst_plugin_feature_list_free"
                doc="Unrefs each member of @list, then frees the list.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="list" transfer-ownership="none">
            <type name="GLib.List" c:type="GList*"/>
          </parameter>
        </parameters>
      </function>
      <function name="list_copy"
                c:identifier="gst_plugin_feature_list_copy"
                doc="Copies the list of features. Caller should call @gst_plugin_feature_list_free
when done with the list."
                version="0.10.26">
        <return-value transfer-ownership="full">
          <type name="GLib.List" c:type="GList*"/>
        </return-value>
        <parameters>
          <parameter name="list" transfer-ownership="none">
            <type name="GLib.List" c:type="GList*"/>
          </parameter>
        </parameters>
      </function>
      <method name="load"
              c:identifier="gst_plugin_feature_load"
              doc="Loads the plugin containing @feature if it&apos;s not already loaded. @feature is
unaffected; use the return value instead.
Normally this function is used like this:
|[
GstPluginFeature *loaded_feature;
loaded_feature = gst_plugin_feature_load (feature);
// presumably, we&apos;re no longer interested in the potentially-unloaded feature
gst_object_unref (feature);
feature = loaded_feature;
]|">
        <return-value transfer-ownership="full">
          <type name="PluginFeature" c:type="GstPluginFeature*"/>
        </return-value>
      </method>
      <method name="type_name_filter"
              c:identifier="gst_plugin_feature_type_name_filter"
              doc="Compares type and name of plugin feature. Can be used with gst_filter_run().">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="data" transfer-ownership="none">
            <type name="TypeNameData" c:type="GstTypeNameData*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_rank"
              c:identifier="gst_plugin_feature_set_rank"
              doc="Specifies a rank for a plugin feature, so that autoplugging uses
the most appropriate feature.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="rank" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_name"
              c:identifier="gst_plugin_feature_set_name"
              doc="Sets the name of a plugin feature. The name uniquely identifies a feature
within all features of the same type. Renaming a plugin feature is not
allowed. A copy is made of the name so you should free the supplied @name
after calling this function.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_rank"
              c:identifier="gst_plugin_feature_get_rank"
              doc="Gets the rank of a plugin feature.">
        <return-value transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </return-value>
      </method>
      <method name="get_name"
              c:identifier="gst_plugin_feature_get_name"
              doc="Gets the name of a plugin feature.">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="check_version"
              c:identifier="gst_plugin_feature_check_version"
              doc="Checks whether the given plugin feature is at least
the required version
the required version, otherwise #FALSE.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="min_major" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="min_minor" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="min_micro" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <field name="object">
        <type name="Object" c:type="GstObject"/>
      </field>
      <field name="loaded">
        <type name="boolean" c:type="gboolean"/>
      </field>
      <field name="name">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="rank">
        <type name="uint" c:type="guint"/>
      </field>
      <field name="plugin_name">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </class>
    <record name="PluginFeatureClass"
            c:type="GstPluginFeatureClass"
            glib:is-gtype-struct-for="PluginFeature">
      <field name="parent_class">
        <type name="ObjectClass" c:type="GstObjectClass"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <callback name="PluginFeatureFilter"
              c:type="GstPluginFeatureFilter"
              doc="A function that can be used with e.g. gst_registry_feature_filter()
to get a list of pluginfeature that match certain criteria.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="feature" transfer-ownership="none">
          <type name="PluginFeature" c:type="GstPluginFeature*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   closure="1"
                   doc=" gst_registry_feature_filter()">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="PluginFilter"
              c:type="GstPluginFilter"
              doc="A function that can be used with e.g. gst_registry_plugin_filter()
to get a list of plugins that match certain criteria.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="plugin" transfer-ownership="none">
          <type name="Plugin" c:type="GstPlugin*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="1">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <bitfield name="PluginFlags"
              doc="The plugin loading state"
              c:type="GstPluginFlags">
      <member name="cached" value="1" c:identifier="GST_PLUGIN_FLAG_CACHED"/>
      <member name="blacklisted"
              value="2"
              c:identifier="GST_PLUGIN_FLAG_BLACKLISTED"/>
    </bitfield>
    <callback name="PluginInitFullFunc"
              c:type="GstPluginInitFullFunc"
              doc="A plugin should provide a pointer to a function of either #GstPluginInitFunc
or this type in the plugin_desc struct.
The function will be called by the loader at startup. One would then
register each #GstPluginFeature. This version allows
user data to be passed to init function (useful for bindings)."
              version="0.10.24">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="plugin" transfer-ownership="none">
          <type name="Plugin" c:type="GstPlugin*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="1">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="PluginInitFunc"
              c:type="GstPluginInitFunc"
              doc="A plugin should provide a pointer to a function of this type in the
plugin_desc struct.
This function will be called by the loader at startup. One would then
register each #GstPluginFeature.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="plugin" transfer-ownership="none">
          <type name="Plugin" c:type="GstPlugin*"/>
        </parameter>
      </parameters>
    </callback>
    <record name="PluginPrivate" c:type="GstPluginPrivate">
    </record>
    <record name="Poll"
            c:type="GstPoll"
            doc="A set of file/network descriptors.">
      <constructor name="new"
                   c:identifier="gst_poll_new"
                   doc="Create a new file descriptor set. If @controllable, it
is possible to restart or flush a call to gst_poll_wait() with
gst_poll_restart() and gst_poll_set_flushing() respectively.
gst_poll_free()."
                   version="0.10.18">
        <return-value transfer-ownership="full">
          <type name="Poll" c:type="GstPoll*"/>
        </return-value>
        <parameters>
          <parameter name="controllable" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_timer"
                   c:identifier="gst_poll_new_timer"
                   doc="Create a new poll object that can be used for scheduling cancellable
timeouts.
A timeout is performed with gst_poll_wait(). Multiple timeouts can be
performed from different threads.
gst_poll_free()."
                   version="0.10.23">
        <return-value transfer-ownership="full">
          <type name="Poll" c:type="GstPoll*"/>
        </return-value>
      </constructor>
      <method name="free"
              c:identifier="gst_poll_free"
              doc="Free a file descriptor set."
              version="0.10.18">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="add_fd"
              c:identifier="gst_poll_add_fd"
              doc="Add a file descriptor to the file descriptor set."
              version="0.10.18">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fd" transfer-ownership="none">
            <type name="PollFD" c:type="GstPollFD*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_fd"
              c:identifier="gst_poll_remove_fd"
              doc="Remove a file descriptor from the file descriptor set."
              version="0.10.18">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fd" transfer-ownership="none">
            <type name="PollFD" c:type="GstPollFD*"/>
          </parameter>
        </parameters>
      </method>
      <method name="fd_ctl_write"
              c:identifier="gst_poll_fd_ctl_write"
              doc="Control whether the descriptor @fd in @set will be monitored for
writability."
              version="0.10.18">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fd" transfer-ownership="none">
            <type name="PollFD" c:type="GstPollFD*"/>
          </parameter>
          <parameter name="active" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="fd_ctl_read"
              c:identifier="gst_poll_fd_ctl_read"
              doc="Control whether the descriptor @fd in @set will be monitored for
readability."
              version="0.10.18">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fd" transfer-ownership="none">
            <type name="PollFD" c:type="GstPollFD*"/>
          </parameter>
          <parameter name="active" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="fd_ignored"
              c:identifier="gst_poll_fd_ignored"
              doc="Mark @fd as ignored so that the next call to gst_poll_wait() will yield
the same result for @fd as last time. This function must be called if no
operation (read/write/recv/send/etc.) will be performed on @fd before
the next call to gst_poll_wait().
The reason why this is needed is because the underlying implementation
might not allow querying the fd more than once between calls to one of
the re-enabling operations."
              version="0.10.18">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="fd" transfer-ownership="none">
            <type name="PollFD" c:type="GstPollFD*"/>
          </parameter>
        </parameters>
      </method>
      <method name="fd_has_closed"
              c:identifier="gst_poll_fd_has_closed"
              doc="Check if @fd in @set has closed the connection."
              version="0.10.18">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fd" transfer-ownership="none">
            <type name="PollFD" c:type="GstPollFD*"/>
          </parameter>
        </parameters>
      </method>
      <method name="fd_has_error"
              c:identifier="gst_poll_fd_has_error"
              doc="Check if @fd in @set has an error."
              version="0.10.18">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fd" transfer-ownership="none">
            <type name="PollFD" c:type="GstPollFD*"/>
          </parameter>
        </parameters>
      </method>
      <method name="fd_can_read"
              c:identifier="gst_poll_fd_can_read"
              doc="Check if @fd in @set has data to be read."
              version="0.10.18">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fd" transfer-ownership="none">
            <type name="PollFD" c:type="GstPollFD*"/>
          </parameter>
        </parameters>
      </method>
      <method name="fd_can_write"
              c:identifier="gst_poll_fd_can_write"
              doc="Check if @fd in @set can be used for writing."
              version="0.10.18">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fd" transfer-ownership="none">
            <type name="PollFD" c:type="GstPollFD*"/>
          </parameter>
        </parameters>
      </method>
      <method name="wait"
              c:identifier="gst_poll_wait"
              doc="Wait for activity on the file descriptors in @set. This function waits up to
the specified @timeout.  A timeout of #GST_CLOCK_TIME_NONE waits forever.
For #GstPoll objects created with gst_poll_new(), this function can only be
called from a single thread at a time.  If called from multiple threads,
-1 will be returned with errno set to EPERM.
This is not true for timer #GstPoll objects created with
gst_poll_new_timer(), where it is allowed to have multiple threads waiting
simultaneously.
activity was detected after @timeout. If an error occurs, -1 is returned
and errno is set."
              version="0.10.18">
        <return-value transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </return-value>
        <parameters>
          <parameter name="timeout" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_controllable"
              c:identifier="gst_poll_set_controllable"
              doc="When @controllable is %TRUE, this function ensures that future calls to
gst_poll_wait() will be affected by gst_poll_restart() and
gst_poll_set_flushing()."
              version="0.10.18">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="controllable" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="restart"
              c:identifier="gst_poll_restart"
              doc="Restart any gst_poll_wait() that is in progress. This function is typically
used after adding or removing descriptors to @set.
If @set is not controllable, then this call will have no effect."
              version="0.10.18">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="set_flushing"
              c:identifier="gst_poll_set_flushing"
              doc="When @flushing is %TRUE, this function ensures that current and future calls
to gst_poll_wait() will return -1, with errno set to EBUSY.
Unsetting the flushing state will restore normal operation of @set."
              version="0.10.18">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="flushing" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="write_control"
              c:identifier="gst_poll_write_control"
              doc="Write a byte to the control socket of the controllable @set.
This function is mostly useful for timer #GstPoll objects created with
gst_poll_new_timer().
It will make any current and future gst_poll_wait() function return with
1, meaning the control socket is set. After an equal amount of calls to
gst_poll_read_control() have been performed, calls to gst_poll_wait() will
block again until their timeout expired.
byte could not be written."
              version="0.10.23">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="read_control"
              c:identifier="gst_poll_read_control"
              doc="Read a byte from the control socket of the controllable @set.
This function is mostly useful for timer #GstPoll objects created with
gst_poll_new_timer().
was no byte to read."
              version="0.10.23">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
    </record>
    <record name="PollFD" c:type="GstPollFD" doc="A file descriptor object.">
      <field name="fd" writable="1">
        <type name="int" c:type="int"/>
      </field>
      <field name="idx" writable="1">
        <type name="int" c:type="gint"/>
      </field>
      <method name="init"
              c:identifier="gst_poll_fd_init"
              doc="Initializes @fd. Alternatively you can initialize it with
#GST_POLL_FD_INIT."
              version="0.10.18">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
    </record>
    <interface name="Preset"
               c:type="GstPreset"
               doc="Opaque #GstPreset data structure."
               glib:type-name="GstPreset"
               glib:get-type="gst_preset_get_type"
               glib:type-struct="PresetInterface">
      <virtual-method name="get_preset_names" invoker="get_preset_names">
        <return-value transfer-ownership="full">
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </return-value>
      </virtual-method>
      <virtual-method name="get_property_names" invoker="get_property_names">
        <return-value transfer-ownership="full">
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </return-value>
      </virtual-method>
      <virtual-method name="load_preset" invoker="load_preset">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="save_preset" invoker="save_preset">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="rename_preset" invoker="rename_preset">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="old_name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="new_name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="delete_preset" invoker="delete_preset">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="set_meta" invoker="set_meta">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_meta" invoker="get_meta">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <array c:type="gchar**">
              <type name="utf8"/>
            </array>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="get_preset_names"
              c:identifier="gst_preset_get_preset_names"
              doc="Get a copy of preset names as a NULL terminated string array."
              version="0.10.20">
        <return-value transfer-ownership="full" doc="after usage.">
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </return-value>
      </method>
      <method name="get_property_names"
              c:identifier="gst_preset_get_property_names"
              doc="Get a the names of the GObject properties that can be used for presets."
              version="0.10.20">
        <return-value transfer-ownership="full" doc="after use.">
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </return-value>
      </method>
      <method name="load_preset"
              c:identifier="gst_preset_load_preset"
              doc="Load the given preset."
              version="0.10.20">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="save_preset"
              c:identifier="gst_preset_save_preset"
              doc="Save the current object settings as a preset under the given name. If there
is already a preset by this @name it will be overwritten."
              version="0.10.20">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="rename_preset"
              c:identifier="gst_preset_rename_preset"
              doc="Renames a preset. If there is already a preset by the @new_name it will be
overwritten."
              version="0.10.20">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="old_name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="new_name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="delete_preset"
              c:identifier="gst_preset_delete_preset"
              doc="Delete the given preset."
              version="0.10.20">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_meta"
              c:identifier="gst_preset_set_meta"
              doc="Sets a new @value for an existing meta data item or adds a new item. Meta
data @tag names can be something like e.g. &quot;comment&quot;. Supplying %NULL for the"
              version="0.10.20">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_meta"
              c:identifier="gst_preset_get_meta"
              doc="Gets the @value for an existing meta data @tag. Meta data @tag names can be
something like e.g. &quot;comment&quot;. Returned values need to be released when done.
or no value for the given @tag"
              version="0.10.20">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <array c:type="gchar**">
              <type name="utf8"/>
            </array>
          </parameter>
        </parameters>
      </method>
    </interface>
    <record name="PresetInterface"
            c:type="GstPresetInterface"
            glib:is-gtype-struct-for="Preset"
            doc="#GstPreset interface.">
      <field name="parent">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
      <field name="get_preset_names">
        <callback name="get_preset_names" c:type="get_preset_names">
          <return-value transfer-ownership="full">
            <array c:type="gchar**">
              <type name="utf8"/>
            </array>
          </return-value>
          <parameters>
            <parameter name="preset" transfer-ownership="none">
              <type name="Preset" c:type="GstPreset*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_property_names">
        <callback name="get_property_names" c:type="get_property_names">
          <return-value transfer-ownership="full">
            <array c:type="gchar**">
              <type name="utf8"/>
            </array>
          </return-value>
          <parameters>
            <parameter name="preset" transfer-ownership="none">
              <type name="Preset" c:type="GstPreset*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="load_preset">
        <callback name="load_preset" c:type="load_preset">
          <return-value transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="preset" transfer-ownership="none">
              <type name="Preset" c:type="GstPreset*"/>
            </parameter>
            <parameter name="name" transfer-ownership="none">
              <type name="utf8" c:type="gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="save_preset">
        <callback name="save_preset" c:type="save_preset">
          <return-value transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="preset" transfer-ownership="none">
              <type name="Preset" c:type="GstPreset*"/>
            </parameter>
            <parameter name="name" transfer-ownership="none">
              <type name="utf8" c:type="gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="rename_preset">
        <callback name="rename_preset" c:type="rename_preset">
          <return-value transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="preset" transfer-ownership="none">
              <type name="Preset" c:type="GstPreset*"/>
            </parameter>
            <parameter name="old_name" transfer-ownership="none">
              <type name="utf8" c:type="gchar*"/>
            </parameter>
            <parameter name="new_name" transfer-ownership="none">
              <type name="utf8" c:type="gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="delete_preset">
        <callback name="delete_preset" c:type="delete_preset">
          <return-value transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="preset" transfer-ownership="none">
              <type name="Preset" c:type="GstPreset*"/>
            </parameter>
            <parameter name="name" transfer-ownership="none">
              <type name="utf8" c:type="gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="set_meta">
        <callback name="set_meta" c:type="set_meta">
          <return-value transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="preset" transfer-ownership="none">
              <type name="Preset" c:type="GstPreset*"/>
            </parameter>
            <parameter name="name" transfer-ownership="none">
              <type name="utf8" c:type="gchar*"/>
            </parameter>
            <parameter name="tag" transfer-ownership="none">
              <type name="utf8" c:type="gchar*"/>
            </parameter>
            <parameter name="value" transfer-ownership="none">
              <type name="utf8" c:type="gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_meta">
        <callback name="get_meta" c:type="get_meta">
          <return-value transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="preset" transfer-ownership="none">
              <type name="Preset" c:type="GstPreset*"/>
            </parameter>
            <parameter name="name" transfer-ownership="none">
              <type name="utf8" c:type="gchar*"/>
            </parameter>
            <parameter name="tag" transfer-ownership="none">
              <type name="utf8" c:type="gchar*"/>
            </parameter>
            <parameter name="value" transfer-ownership="none">
              <array c:type="gchar**">
                <type name="utf8"/>
              </array>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <class name="ProxyPad"
           c:type="GstProxyPad"
           parent="Pad"
           glib:type-name="GstProxyPad"
           glib:get-type="gst_proxy_pad_get_type"
           glib:type-struct="ProxyPadClass">
      <field name="pad">
        <type name="Pad" c:type="GstPad"/>
      </field>
      <field name="priv">
        <type name="ProxyPadPrivate" c:type="GstProxyPadPrivate*"/>
      </field>
    </class>
    <record name="ProxyPadClass"
            c:type="GstProxyPadClass"
            glib:is-gtype-struct-for="ProxyPad">
      <field name="parent_class">
        <type name="PadClass" c:type="GstPadClass"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="1">
          <type name="any"/>
        </array>
      </field>
    </record>
    <record name="ProxyPadPrivate" c:type="GstProxyPadPrivate">
    </record>
    <record name="Query" c:type="GstQuery" doc="The #GstQuery structure.">
      <field name="mini_object" writable="1">
        <type name="MiniObject" c:type="GstMiniObject"/>
      </field>
      <field name="type" writable="1">
        <type name="QueryType" c:type="GstQueryType"/>
      </field>
      <field name="structure" writable="1">
        <type name="Structure" c:type="GstStructure*"/>
      </field>
      <field name="_gst_reserved" writable="1">
        <type name="any" c:type="gpointer"/>
      </field>
      <constructor name="new_position"
                   c:identifier="gst_query_new_position"
                   doc="Constructs a new query stream position query object. Use gst_query_unref()
when done with it. A position query is used to query the current position
of playback in the streams, in some format.">
        <return-value transfer-ownership="full">
          <type name="Query" c:type="GstQuery*"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_duration"
                   c:identifier="gst_query_new_duration"
                   doc="Constructs a new stream duration query object to query in the given format.
Use gst_query_unref() when done with it. A duration query will give the
total length of the stream.">
        <return-value transfer-ownership="full">
          <type name="Query" c:type="GstQuery*"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_latency"
                   c:identifier="gst_query_new_latency"
                   doc="Constructs a new latency query object.
Use gst_query_unref() when done with it. A latency query is usually performed
by sinks to compensate for additional latency introduced by elements in the
pipeline."
                   version="0.10.12">
        <return-value transfer-ownership="full">
          <type name="Query" c:type="GstQuery*"/>
        </return-value>
      </constructor>
      <constructor name="new_convert"
                   c:identifier="gst_query_new_convert"
                   doc="Constructs a new convert query object. Use gst_query_unref()
when done with it. A convert query is used to ask for a conversion between
one format and another.">
        <return-value transfer-ownership="full">
          <type name="Query" c:type="GstQuery*"/>
        </return-value>
        <parameters>
          <parameter name="src_format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="dest_format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_segment"
                   c:identifier="gst_query_new_segment"
                   doc="Constructs a new segment query object. Use gst_query_unref()
when done with it. A segment query is used to discover information about the
currently configured segment for playback.">
        <return-value transfer-ownership="full">
          <type name="Query" c:type="GstQuery*"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_application"
                   c:identifier="gst_query_new_application"
                   doc="Constructs a new custom application query object. Use gst_query_unref()
when done with it.">
        <return-value transfer-ownership="full">
          <type name="Query" c:type="GstQuery*"/>
        </return-value>
        <parameters>
          <parameter name="type" transfer-ownership="none">
            <type name="QueryType" c:type="GstQueryType"/>
          </parameter>
          <parameter name="structure" transfer-ownership="none">
            <type name="Structure" c:type="GstStructure*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_seeking"
                   c:identifier="gst_query_new_seeking"
                   doc="Constructs a new query object for querying seeking properties of
the stream.">
        <return-value transfer-ownership="full">
          <type name="Query" c:type="GstQuery*"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_formats"
                   c:identifier="gst_query_new_formats"
                   doc="Constructs a new query object for querying formats of
the stream."
                   version="0.10.4">
        <return-value transfer-ownership="full">
          <type name="Query" c:type="GstQuery*"/>
        </return-value>
      </constructor>
      <constructor name="new_buffering" c:identifier="gst_query_new_buffering">
        <return-value transfer-ownership="full">
          <type name="Query" c:type="GstQuery*"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_uri"
                   c:identifier="gst_query_new_uri"
                   doc="Constructs a new query URI query object. Use gst_query_unref()
when done with it. An URI query is used to query the current URI
that is used by the source or sink."
                   version="0.10.22">
        <return-value transfer-ownership="full">
          <type name="Query" c:type="GstQuery*"/>
        </return-value>
      </constructor>
      <method name="set_position"
              c:identifier="gst_query_set_position"
              doc="Answer a position query by setting the requested value in the given format.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="cur" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_position"
              c:identifier="gst_query_parse_position"
              doc="Parse a position query, writing the format into @format, and the position
into @cur, if the respective parameters are non-NULL.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="cur"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_duration"
              c:identifier="gst_query_set_duration"
              doc="Answer a duration query by setting the requested value in the given format.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="duration" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_duration"
              c:identifier="gst_query_parse_duration"
              doc="Parse a duration query answer. Write the format of the duration into @format,
and the value into @duration, if the respective variables are non-NULL.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="duration"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_latency"
              c:identifier="gst_query_set_latency"
              doc="Answer a latency query by setting the requested values in the given format."
              version="0.10.12">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="live" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
          <parameter name="min_latency" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
          <parameter name="max_latency" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_latency"
              c:identifier="gst_query_parse_latency"
              doc="Parse a latency query answer."
              version="0.10.12">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="live"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
          <parameter name="min_latency" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime*"/>
          </parameter>
          <parameter name="max_latency" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_convert"
              c:identifier="gst_query_set_convert"
              doc="Answer a convert query by setting the requested values.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="src_format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="src_value" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="dest_format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="dest_value" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_convert"
              c:identifier="gst_query_parse_convert"
              doc="Parse a convert query answer. Any of @src_format, @src_value, @dest_format,
and @dest_value may be NULL, in which case that value is omitted.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="src_format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="src_value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
          <parameter name="dest_format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="dest_value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_segment"
              c:identifier="gst_query_set_segment"
              doc="Answer a segment query by setting the requested values. The normal
playback segment of a pipeline is 0 to duration at the default rate of
1.0. If a seek was performed on the pipeline to play a different
segment, this query will return the range specified in the last seek.
playback range start and stop values expressed in @format.
The values are always between 0 and the duration of the media and
negative rates, playback will actually happen from @stop_value to">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="rate" transfer-ownership="none">
            <type name="double" c:type="gdouble"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="start_value" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="stop_value" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_segment"
              c:identifier="gst_query_parse_segment"
              doc="Parse a segment query answer. Any of @rate, @format, @start_value, and
See gst_query_set_segment() for an explanation of the function arguments.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="rate"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="double" c:type="gdouble*"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="start_value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
          <parameter name="stop_value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_structure"
              c:identifier="gst_query_get_structure"
              doc="Get the structure of a query.
by the query and will therefore be freed when the query is unreffed.">
        <return-value transfer-ownership="full">
          <type name="Structure" c:type="GstStructure*"/>
        </return-value>
      </method>
      <method name="set_seeking"
              c:identifier="gst_query_set_seeking"
              doc="Set the seeking query result fields in @query.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="seekable" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
          <parameter name="segment_start" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="segment_end" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_seeking"
              c:identifier="gst_query_parse_seeking"
              doc="Parse a seeking query, writing the format into @format, and
other results into the passed parameters, if the respective parameters
are non-NULL">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="seekable"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
          <parameter name="segment_start"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
          <parameter name="segment_end"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_formats"
              c:identifier="gst_query_set_formats"
              doc="Set the formats query result fields in @query. The number of formats passed
must be equal to @n_formats.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="n_formats" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="set_formatsv"
              c:identifier="gst_query_set_formatsv"
              doc="Set the formats query result fields in @query. The number of formats passed
in the @formats array must be equal to @n_formats."
              version="0.10.4">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="n_formats" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="formats" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_formats_length"
              c:identifier="gst_query_parse_formats_length"
              doc="Parse the number of formats in the formats @query."
              version="0.10.4">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="n_formats"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="uint" c:type="guint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_formats_nth"
              c:identifier="gst_query_parse_formats_nth"
              doc="Parse the format query and retrieve the @nth format from it into
set to GST_FORMAT_UNDEFINED."
              version="0.10.4">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="nth" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_buffering_percent"
              c:identifier="gst_query_set_buffering_percent">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="busy" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
          <parameter name="percent" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_buffering_percent"
              c:identifier="gst_query_parse_buffering_percent">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="busy"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
          <parameter name="percent"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int" c:type="gint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_buffering_stats"
              c:identifier="gst_query_set_buffering_stats"
              doc="Configures the buffering stats values in @query."
              version="0.10.20">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="mode" transfer-ownership="none">
            <type name="BufferingMode" c:type="GstBufferingMode"/>
          </parameter>
          <parameter name="avg_in" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="avg_out" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="buffering_left" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_buffering_stats"
              c:identifier="gst_query_parse_buffering_stats"
              doc="Extracts the buffering stats values from @query."
              version="0.10.20">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="mode" transfer-ownership="none">
            <type name="BufferingMode" c:type="GstBufferingMode*"/>
          </parameter>
          <parameter name="avg_in"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int" c:type="gint*"/>
          </parameter>
          <parameter name="avg_out"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int" c:type="gint*"/>
          </parameter>
          <parameter name="buffering_left"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_buffering_range"
              c:identifier="gst_query_set_buffering_range"
              doc="Set the available query result fields in @query."
              version="0.10.20">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="start" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="stop" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="estimated_total" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_buffering_range"
              c:identifier="gst_query_parse_buffering_range"
              doc="Parse an available query, writing the format into @format, and
other results into the passed parameters, if the respective parameters
are non-NULL"
              version="0.10.20">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat*"/>
          </parameter>
          <parameter name="start"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
          <parameter name="stop"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
          <parameter name="estimated_total"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_uri"
              c:identifier="gst_query_parse_uri"
              doc="Parse an URI query, writing the URI into @uri as a newly
allocated string, if the respective parameters are non-NULL.
Free the string with g_free() after usage."
              version="0.10.22">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="uri" transfer-ownership="none">
            <array c:type="gchar**">
              <type name="utf8"/>
            </array>
          </parameter>
        </parameters>
      </method>
      <method name="set_uri"
              c:identifier="gst_query_set_uri"
              doc="Answer a URI query by setting the requested URI."
              version="0.10.22">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="uri" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
    </record>
    <record name="QueryClass" c:type="GstQueryClass">
      <field name="mini_object_class" writable="1">
        <type name="MiniObjectClass" c:type="GstMiniObjectClass"/>
      </field>
      <field name="_gst_reserved" writable="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <enumeration name="QueryType"
                 doc="Standard predefined Query types"
                 c:type="GstQueryType">
      <member name="none" value="0" c:identifier="GST_QUERY_NONE"/>
      <member name="position" value="1" c:identifier="GST_QUERY_POSITION"/>
      <member name="duration" value="2" c:identifier="GST_QUERY_DURATION"/>
      <member name="latency" value="3" c:identifier="GST_QUERY_LATENCY"/>
      <member name="jitter" value="4" c:identifier="GST_QUERY_JITTER"/>
      <member name="rate" value="5" c:identifier="GST_QUERY_RATE"/>
      <member name="seeking" value="6" c:identifier="GST_QUERY_SEEKING"/>
      <member name="segment" value="7" c:identifier="GST_QUERY_SEGMENT"/>
      <member name="convert" value="8" c:identifier="GST_QUERY_CONVERT"/>
      <member name="formats" value="9" c:identifier="GST_QUERY_FORMATS"/>
      <member name="buffering" value="10" c:identifier="GST_QUERY_BUFFERING"/>
      <member name="custom" value="11" c:identifier="GST_QUERY_CUSTOM"/>
      <member name="uri" value="12" c:identifier="GST_QUERY_URI"/>
    </enumeration>
    <record name="QueryTypeDefinition"
            c:type="GstQueryTypeDefinition"
            doc="A Query Type definition">
      <field name="value" writable="1">
        <type name="QueryType" c:type="GstQueryType"/>
      </field>
      <field name="nick" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="description" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="quark" writable="1">
        <type name="GLib.Quark" c:type="GQuark"/>
      </field>
    </record>
    <enumeration name="Rank"
                 doc="Element priority ranks. Defines the order in which the autoplugger (or
similar rank-picking mechanisms, such as e.g. gst_element_make_from_uri())
will choose this element over an alternative one with the same function.
These constants serve as a rough guidance for defining the rank of a
#GstPluginFeature. Any value is valid, including values bigger than"
                 c:type="GstRank">
      <member name="none" value="0" c:identifier="GST_RANK_NONE"/>
      <member name="marginal" value="64" c:identifier="GST_RANK_MARGINAL"/>
      <member name="secondary" value="128" c:identifier="GST_RANK_SECONDARY"/>
      <member name="primary" value="256" c:identifier="GST_RANK_PRIMARY"/>
    </enumeration>
    <class name="Registry"
           c:type="GstRegistry"
           doc="Opaque #GstRegistry structure."
           parent="Object"
           glib:type-name="GstRegistry"
           glib:get-type="gst_registry_get_type"
           glib:type-struct="RegistryClass">
      <function name="get_default"
                c:identifier="gst_registry_get_default"
                doc="Retrieves the default registry. The caller does not own a reference on the
registry, as it is alive as long as GStreamer is initialized.">
        <return-value transfer-ownership="full">
          <type name="Registry" c:type="GstRegistry*"/>
        </return-value>
      </function>
      <function name="fork_is_enabled"
                c:identifier="gst_registry_fork_is_enabled"
                doc="By default GStreamer will perform scanning and rebuilding of the
registry file using a helper child process.
Applications might want to disable this behaviour with the
gst_registry_fork_set_enabled() function, in which case new plugins
are scanned (and loaded) into the application process.
rebuilding the registry."
                version="0.10.10">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </function>
      <function name="fork_set_enabled"
                c:identifier="gst_registry_fork_set_enabled"
                doc="Applications might want to disable/enable spawning of a child helper process
when rebuilding the registry. See gst_registry_fork_is_enabled() for more
information."
                version="0.10.10">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="enabled" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </function>
      <method name="scan_path"
              c:identifier="gst_registry_scan_path"
              doc="Scan the given path for plugins to add to the registry. The syntax of the
path is specific to the registry.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="path" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_path"
              c:identifier="gst_registry_add_path"
              doc="Add the given path to the registry. The syntax of the
path is specific to the registry. If the path has already been
added, do nothing.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="path" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_path_list"
              c:identifier="gst_registry_get_path_list"
              doc="Get the list of paths for the given registry.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="GLib.List" c:type="GList*"/>
        </return-value>
      </method>
      <method name="add_plugin"
              c:identifier="gst_registry_add_plugin"
              doc="Add the plugin to the registry. The plugin-added signal will be emitted.
This function will sink @plugin.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="plugin" transfer-ownership="none">
            <type name="Plugin" c:type="GstPlugin*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_plugin"
              c:identifier="gst_registry_remove_plugin"
              doc="Remove the plugin from the registry.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="plugin" transfer-ownership="none">
            <type name="Plugin" c:type="GstPlugin*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_feature"
              c:identifier="gst_registry_add_feature"
              doc="Add the feature to the registry. The feature-added signal will be emitted.
This function sinks @feature.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="feature" transfer-ownership="none">
            <type name="PluginFeature" c:type="GstPluginFeature*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_feature"
              c:identifier="gst_registry_remove_feature"
              doc="Remove the feature from the registry.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="feature" transfer-ownership="none">
            <type name="PluginFeature" c:type="GstPluginFeature*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_plugin_list"
              c:identifier="gst_registry_get_plugin_list"
              doc="Get a copy of all plugins registered in the given registry. The refcount
of each element in the list in incremented.
MT safe.">
        <return-value transfer-ownership="full" doc="after usage.">
          <type name="GLib.List" c:type="GList*"/>
        </return-value>
      </method>
      <method name="plugin_filter"
              c:identifier="gst_registry_plugin_filter"
              doc="Runs a filter against all plugins in the registry and returns a #GList with
the results. If the first flag is set, only the first match is
returned (as a list with a single object).
Every plugin is reffed; use gst_plugin_list_free() after use, which
will unref again.
MT safe.">
        <return-value transfer-ownership="full" doc="after usage.">
          <type name="GLib.List" c:type="GList*"/>
        </return-value>
        <parameters>
          <parameter name="filter" transfer-ownership="none" scope="call">
            <type name="PluginFilter" c:type="GstPluginFilter"/>
          </parameter>
          <parameter name="first" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="feature_filter"
              c:identifier="gst_registry_feature_filter"
              doc="Runs a filter against all features of the plugins in the registry
and returns a GList with the results.
If the first flag is set, only the first match is
returned (as a list with a single object).
after usage.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="GLib.List" c:type="GList*"/>
        </return-value>
        <parameters>
          <parameter name="filter" transfer-ownership="none" scope="call">
            <type name="PluginFeatureFilter" c:type="GstPluginFeatureFilter"/>
          </parameter>
          <parameter name="first" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_feature_list"
              c:identifier="gst_registry_get_feature_list"
              doc="Retrieves a #GList of #GstPluginFeature of @type.
gst_plugin_feature_list_free() after usage.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="GLib.List" c:type="GList*"/>
        </return-value>
        <parameters>
          <parameter name="type" transfer-ownership="none">
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_feature_list_by_plugin"
              c:identifier="gst_registry_get_feature_list_by_plugin"
              doc="Retrieves a #GList of features of the plugin with name @name.
after usage.">
        <return-value transfer-ownership="full">
          <type name="GLib.List" c:type="GList*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_feature_list_cookie"
              c:identifier="gst_registry_get_feature_list_cookie"
              doc="Returns the registrys feature list cookie. This changes
every time a feature is added or removed from the registry."
              version="0.10.26">
        <return-value transfer-ownership="none">
          <type name="uint32" c:type="guint32"/>
        </return-value>
      </method>
      <method name="find_plugin"
              c:identifier="gst_registry_find_plugin"
              doc="Find the plugin with the given name in the registry.
The plugin will be reffed; caller is responsible for unreffing.
gst_object_unref() after usage.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Plugin" c:type="GstPlugin*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="find_feature"
              c:identifier="gst_registry_find_feature"
              doc="Find the pluginfeature with the given name and type in the registry.
if the plugin was not found. gst_object_unref() after usage.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="PluginFeature" c:type="GstPluginFeature*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </method>
      <method name="lookup"
              c:identifier="gst_registry_lookup"
              doc="Look up a plugin in the given registry with the given filename.
If found, plugin is reffed.
after usage.">
        <return-value transfer-ownership="full">
          <type name="Plugin" c:type="GstPlugin*"/>
        </return-value>
        <parameters>
          <parameter name="filename" transfer-ownership="none">
            <type name="utf8" c:type="char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="lookup_feature"
              c:identifier="gst_registry_lookup_feature"
              doc="Find a #GstPluginFeature with @name in @registry.
gst_object_unref() after usage.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="PluginFeature" c:type="GstPluginFeature*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="xml_read_cache" c:identifier="gst_registry_xml_read_cache">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="location" transfer-ownership="none">
            <type name="utf8" c:type="char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="xml_write_cache"
              c:identifier="gst_registry_xml_write_cache">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="location" transfer-ownership="none">
            <type name="utf8" c:type="char*"/>
          </parameter>
        </parameters>
      </method>
      <field name="object">
        <type name="Object" c:type="GstObject"/>
      </field>
      <field name="plugins">
        <type name="GLib.List" c:type="GList*"/>
      </field>
      <field name="features">
        <type name="GLib.List" c:type="GList*"/>
      </field>
      <field name="paths">
        <type name="GLib.List" c:type="GList*"/>
      </field>
      <field name="cache_file">
        <type name="int" c:type="int"/>
      </field>
      <field name="feature_hash">
        <type name="GLib.HashTable" c:type="GHashTable*"/>
      </field>
      <field name="basename_hash">
        <type name="GLib.HashTable" c:type="GHashTable*"/>
      </field>
      <field name="priv">
        <type name="RegistryPrivate" c:type="GstRegistryPrivate*"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="1">
          <type name="any"/>
        </array>
      </field>
      <glib:signal name="feature-added"
                   doc="Signals that a feature has been added to the registry (possibly
replacing a previously-added one by the same name)">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="feature" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="plugin-added"
                   doc="Signals that a plugin has been added to the registry (possibly
replacing a previously-added one by the same name)">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="plugin" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="RegistryClass"
            c:type="GstRegistryClass"
            glib:is-gtype-struct-for="Registry">
      <field name="parent_class">
        <type name="ObjectClass" c:type="GstObjectClass"/>
      </field>
      <field name="plugin_added">
        <callback name="plugin_added" c:type="plugin_added">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="registry" transfer-ownership="none">
              <type name="Registry" c:type="GstRegistry*"/>
            </parameter>
            <parameter name="plugin" transfer-ownership="none">
              <type name="Plugin" c:type="GstPlugin*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="feature_added">
        <callback name="feature_added" c:type="feature_added">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="registry" transfer-ownership="none">
              <type name="Registry" c:type="GstRegistry*"/>
            </parameter>
            <parameter name="feature" transfer-ownership="none">
              <type name="PluginFeature" c:type="GstPluginFeature*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <record name="RegistryPrivate" c:type="GstRegistryPrivate">
    </record>
    <enumeration name="ResourceError"
                 doc="Resource errors are for any resource used by an element:
memory, files, network connections, process space, ...
They&apos;re typically used by source and sink elements."
                 c:type="GstResourceError"
                 glib:error-quark="gst_resource_error_quark">
      <member name="failed"
              value="1"
              c:identifier="GST_RESOURCE_ERROR_FAILED"/>
      <member name="too_lazy"
              value="2"
              c:identifier="GST_RESOURCE_ERROR_TOO_LAZY"/>
      <member name="not_found"
              value="3"
              c:identifier="GST_RESOURCE_ERROR_NOT_FOUND"/>
      <member name="busy" value="4" c:identifier="GST_RESOURCE_ERROR_BUSY"/>
      <member name="open_read"
              value="5"
              c:identifier="GST_RESOURCE_ERROR_OPEN_READ"/>
      <member name="open_write"
              value="6"
              c:identifier="GST_RESOURCE_ERROR_OPEN_WRITE"/>
      <member name="open_read_write"
              value="7"
              c:identifier="GST_RESOURCE_ERROR_OPEN_READ_WRITE"/>
      <member name="close" value="8" c:identifier="GST_RESOURCE_ERROR_CLOSE"/>
      <member name="read" value="9" c:identifier="GST_RESOURCE_ERROR_READ"/>
      <member name="write" value="10" c:identifier="GST_RESOURCE_ERROR_WRITE"/>
      <member name="seek" value="11" c:identifier="GST_RESOURCE_ERROR_SEEK"/>
      <member name="sync" value="12" c:identifier="GST_RESOURCE_ERROR_SYNC"/>
      <member name="settings"
              value="13"
              c:identifier="GST_RESOURCE_ERROR_SETTINGS"/>
      <member name="no_space_left"
              value="14"
              c:identifier="GST_RESOURCE_ERROR_NO_SPACE_LEFT"/>
      <member name="num_errors"
              value="15"
              c:identifier="GST_RESOURCE_ERROR_NUM_ERRORS"/>
    </enumeration>
    <constant name="SECOND" value="0">
      <type name="int"/>
    </constant>
    <enumeration name="SearchMode"
                 doc="The different search modes."
                 version="0.10.23"
                 c:type="GstSearchMode">
      <member name="exact" value="0" c:identifier="GST_SEARCH_MODE_EXACT"/>
      <member name="before" value="1" c:identifier="GST_SEARCH_MODE_BEFORE"/>
      <member name="after" value="2" c:identifier="GST_SEARCH_MODE_AFTER"/>
    </enumeration>
    <bitfield name="SeekFlags"
              doc="Flags to be used with gst_element_seek() or gst_event_new_seek(). All flags
can be used together.
A non flushing seek might take some time to perform as the currently
playing data in the pipeline will not be cleared.
An accurate seek might be slower for formats that don&apos;t have any indexes
or timestamp markers in the stream. Specifying this flag might require a
complete scan of the file in those cases.
no EOS will be emmited by the element that performed the seek, but a
#GST_MESSAGE_SEGMENT_DONE message will be posted on the bus by the element.
When this message is posted, it is possible to send a new seek event to
continue playback. With this seek method it is possible to perform seemless
looping or simple linear editing.
When doing fast forward (rate &gt; 1.0) or fast reverse (rate &lt; -1.0) trickmode
playback, the @GST_SEEK_FLAG_SKIP flag can be used to instruct decoders
and demuxers to adjust the playback rate by skipping frames. This can improve
performance and decrease CPU usage because not all frames need to be decoded."
              c:type="GstSeekFlags">
      <member name="none" value="0" c:identifier="GST_SEEK_FLAG_NONE"/>
      <member name="flush" value="1" c:identifier="GST_SEEK_FLAG_FLUSH"/>
      <member name="accurate" value="2" c:identifier="GST_SEEK_FLAG_ACCURATE"/>
      <member name="key_unit" value="4" c:identifier="GST_SEEK_FLAG_KEY_UNIT"/>
      <member name="segment" value="8" c:identifier="GST_SEEK_FLAG_SEGMENT"/>
      <member name="skip" value="16" c:identifier="GST_SEEK_FLAG_SKIP"/>
    </bitfield>
    <enumeration name="SeekType"
                 doc="The different types of seek events. When constructing a seek event with
gst_event_new_seek(), a format, a seek method and optional flags are to
be provided. The seek event is then inserted into the graph with
gst_pad_send_event() or gst_element_send_event()."
                 c:type="GstSeekType">
      <member name="none" value="0" c:identifier="GST_SEEK_TYPE_NONE"/>
      <member name="cur" value="1" c:identifier="GST_SEEK_TYPE_CUR"/>
      <member name="set" value="2" c:identifier="GST_SEEK_TYPE_SET"/>
      <member name="end" value="3" c:identifier="GST_SEEK_TYPE_END"/>
    </enumeration>
    <record name="Segment"
            c:type="GstSegment"
            doc="A helper structure that holds the configured region of
interest in a media file."
            glib:type-name="GstSegment"
            glib:get-type="gst_segment_get_type">
      <field name="rate" writable="1">
        <type name="double" c:type="gdouble"/>
      </field>
      <field name="abs_rate" writable="1">
        <type name="double" c:type="gdouble"/>
      </field>
      <field name="format" writable="1">
        <type name="Format" c:type="GstFormat"/>
      </field>
      <field name="flags" writable="1">
        <type name="SeekFlags" c:type="GstSeekFlags"/>
      </field>
      <field name="start" writable="1">
        <type name="int64" c:type="gint64"/>
      </field>
      <field name="stop" writable="1">
        <type name="int64" c:type="gint64"/>
      </field>
      <field name="time" writable="1">
        <type name="int64" c:type="gint64"/>
      </field>
      <field name="accum" writable="1">
        <type name="int64" c:type="gint64"/>
      </field>
      <field name="last_stop" writable="1">
        <type name="int64" c:type="gint64"/>
      </field>
      <field name="duration" writable="1">
        <type name="int64" c:type="gint64"/>
      </field>
      <field name="applied_rate" writable="1">
        <type name="double" c:type="gdouble"/>
      </field>
      <field name="_gst_reserved" writable="1">
        <array zero-terminated="0" c:type="guint8" fixed-size="0">
          <type name="uint8"/>
        </array>
      </field>
      <constructor name="new"
                   c:identifier="gst_segment_new"
                   doc="Allocate a new #GstSegment structure and initialize it using
gst_segment_init().">
        <return-value transfer-ownership="full">
          <type name="Segment" c:type="GstSegment*"/>
        </return-value>
      </constructor>
      <method name="copy"
              c:identifier="gst_segment_copy"
              doc="Create a copy of given @segment."
              version="0.10.20">
        <return-value transfer-ownership="full">
          <type name="Segment" c:type="GstSegment*"/>
        </return-value>
      </method>
      <method name="free"
              c:identifier="gst_segment_free"
              doc="Free the allocated segment @segment.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="init"
              c:identifier="gst_segment_init"
              doc="The start/last_stop positions are set to 0 and the stop/duration
fields are set to -1 (unknown). The default rate of 1.0 and no
flags are set.
Initialize @segment to its default values.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_duration"
              c:identifier="gst_segment_set_duration"
              doc="Set the duration of the segment to @duration. This function is mainly
used by elements that perform seeking and know the total duration of the
segment.
This field should be set to allow seeking requests relative to the
duration.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="duration" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_last_stop"
              c:identifier="gst_segment_set_last_stop"
              doc="Set the last observed stop position in the segment to @position.
This field should be set to allow seeking requests relative to the
current playing position.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="position" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_seek"
              c:identifier="gst_segment_set_seek"
              doc="Update the segment structure with the field values of a seek event (see
gst_event_new_seek()).
After calling this method, the segment field last_stop and time will
contain the requested new position in the segment. The new requested
position in the segment depends on @rate and @start_type and @stop_type.
For positive @rate, the new position in the segment is the new @segment
start field when it was updated with a @start_type different from
#GST_SEEK_TYPE_NONE. If no update was performed on @segment start position
(#GST_SEEK_TYPE_NONE), @start is ignored and @segment last_stop is
unmodified.
For negative @rate, the new position in the segment is the new @segment
stop field when it was updated with a @stop_type different from
#GST_SEEK_TYPE_NONE. If no stop was previously configured in the segment, the
duration of the segment will be used to update the stop position.
If no update was performed on @segment stop position (#GST_SEEK_TYPE_NONE),
The applied rate of the segment will be set to 1.0 by default.
If the caller can apply a rate change, it should update @segment
rate and applied_rate after calling this function.
last_stop field. This field can be FALSE if, for example, only the @rate
has been changed but not the playback position.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="rate" transfer-ownership="none">
            <type name="double" c:type="gdouble"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <type name="SeekFlags" c:type="GstSeekFlags"/>
          </parameter>
          <parameter name="start_type" transfer-ownership="none">
            <type name="SeekType" c:type="GstSeekType"/>
          </parameter>
          <parameter name="start" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="stop_type" transfer-ownership="none">
            <type name="SeekType" c:type="GstSeekType"/>
          </parameter>
          <parameter name="stop" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="update"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_newsegment"
              c:identifier="gst_segment_set_newsegment"
              doc="Update the segment structure with the field values of a new segment event and
with a default applied_rate of 1.0."
              version="0.10.6">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="update" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
          <parameter name="rate" transfer-ownership="none">
            <type name="double" c:type="gdouble"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="start" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="stop" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="time" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_newsegment_full"
              c:identifier="gst_segment_set_newsegment_full"
              doc="Update the segment structure with the field values of a new segment event.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="update" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
          <parameter name="rate" transfer-ownership="none">
            <type name="double" c:type="gdouble"/>
          </parameter>
          <parameter name="applied_rate" transfer-ownership="none">
            <type name="double" c:type="gdouble"/>
          </parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="start" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="stop" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="time" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="to_stream_time"
              c:identifier="gst_segment_to_stream_time"
              doc="Translate @position to stream time using the currently configured
segment. The @position value must be between @segment start and
stop value.
This function is typically used by elements that need to operate on
the stream time of the buffers it receives, such as effect plugins.
In those use cases, @position is typically the buffer timestamp or
clock time that one wants to convert to the stream time.
The stream time is always between 0 and the total duration of the
media stream.
was given.">
        <return-value transfer-ownership="none">
          <type name="int64" c:type="gint64"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="position" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="to_running_time"
              c:identifier="gst_segment_to_running_time"
              doc="Translate @position to the total running time using the currently configured
and previously accumulated segments. Position is a value between @segment
start and stop time.
This function is typically used by elements that need to synchronize to the
global clock in a pipeline. The runnning time is a constantly increasing value
starting from 0. When gst_segment_init() is called, this value will reset to
0.
This function returns -1 if the position is outside of @segment start and stop.
was given.">
        <return-value transfer-ownership="none">
          <type name="int64" c:type="gint64"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="position" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="to_position"
              c:identifier="gst_segment_to_position"
              doc="Convert @running_time into a position in the segment so that
gst_segment_to_running_time() with that position returns @running_time.
-1 when @running_time is -1 or when it is not inside @segment."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="int64" c:type="gint64"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="running_time" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="clip"
              c:identifier="gst_segment_clip"
              doc="Clip the given @start and @stop values to the segment boundaries given
in @segment. @start and @stop are compared and clipped to @segment
start and stop values.
If the function returns FALSE, @start and @stop are known to fall
outside of @segment and @clip_start and @clip_stop are not updated.
When the function returns TRUE, @clip_start and @clip_stop will be
updated. If @clip_start or @clip_stop are different from @start or @stop
respectively, the region fell partially in the segment.
Note that when @stop is -1, @clip_stop will be set to the end of the
segment. Depending on the use case, this may or may not be what you want.
completely in @segment, FALSE if the values are completely outside
of the segment.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="start" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="stop" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="clip_start"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
          <parameter name="clip_stop"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_running_time"
              c:identifier="gst_segment_set_running_time"
              doc="Adjust the start/stop and accum values of @segment such that the next valid
buffer will be one with @running_time.
returned, @running_time is -1 or not in @segment."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="running_time" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
    </record>
    <enumeration name="State"
                 doc="The possible states an element can be in. States can be changed using
gst_element_set_state() and checked using gst_element_get_state()."
                 c:type="GstState">
      <member name="void_pending"
              value="0"
              c:identifier="GST_STATE_VOID_PENDING"/>
      <member name="null" value="1" c:identifier="GST_STATE_NULL"/>
      <member name="ready" value="2" c:identifier="GST_STATE_READY"/>
      <member name="paused" value="3" c:identifier="GST_STATE_PAUSED"/>
      <member name="playing" value="4" c:identifier="GST_STATE_PLAYING"/>
    </enumeration>
    <bitfield name="StateChange"
              doc="These are the different state changes an element goes through.
%GST_STATE_NULL &amp;rArr; %GST_STATE_PLAYING is called an upwards state change
and %GST_STATE_PLAYING &amp;rArr; %GST_STATE_NULL a downwards state change."
              c:type="GstStateChange">
      <member name="null_to_ready"
              value="10"
              c:identifier="GST_STATE_CHANGE_NULL_TO_READY"/>
      <member name="ready_to_paused"
              value="19"
              c:identifier="GST_STATE_CHANGE_READY_TO_PAUSED"/>
      <member name="paused_to_playing"
              value="28"
              c:identifier="GST_STATE_CHANGE_PAUSED_TO_PLAYING"/>
      <member name="playing_to_paused"
              value="35"
              c:identifier="GST_STATE_CHANGE_PLAYING_TO_PAUSED"/>
      <member name="paused_to_ready"
              value="26"
              c:identifier="GST_STATE_CHANGE_PAUSED_TO_READY"/>
      <member name="ready_to_null"
              value="17"
              c:identifier="GST_STATE_CHANGE_READY_TO_NULL"/>
    </bitfield>
    <enumeration name="StateChangeReturn"
                 doc="The possible return values from a state change function. Only"
                 c:type="GstStateChangeReturn">
      <member name="failure"
              value="0"
              c:identifier="GST_STATE_CHANGE_FAILURE"/>
      <member name="success"
              value="1"
              c:identifier="GST_STATE_CHANGE_SUCCESS"/>
      <member name="async" value="2" c:identifier="GST_STATE_CHANGE_ASYNC"/>
      <member name="no_preroll"
              value="3"
              c:identifier="GST_STATE_CHANGE_NO_PREROLL"/>
    </enumeration>
    <record name="StaticCaps"
            c:type="GstStaticCaps"
            doc="Datastructure to initialize #GstCaps from a string description usually
used in conjunction with GST_STATIC_CAPS() and gst_static_caps_get() to
instantiate a #GstCaps.">
      <field name="caps" writable="1">
        <type name="Caps" c:type="GstCaps"/>
      </field>
      <field name="string" writable="1">
        <type name="utf8" c:type="char*"/>
      </field>
      <field name="_gst_reserved" writable="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
      <method name="get"
              c:identifier="gst_static_caps_get"
              doc="Converts a #GstStaticCaps to a #GstCaps.
core holds an additional ref to the returned caps,
use gst_caps_make_writable() on the returned caps to modify it.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </method>
    </record>
    <record name="StaticPadTemplate" c:type="GstStaticPadTemplate">
      <field name="name_template" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="direction" writable="1">
        <type name="PadDirection" c:type="GstPadDirection"/>
      </field>
      <field name="presence" writable="1">
        <type name="PadPresence" c:type="GstPadPresence"/>
      </field>
      <field name="static_caps" writable="1">
        <type name="StaticCaps" c:type="GstStaticCaps"/>
      </field>
      <method name="get"
              c:identifier="gst_static_pad_template_get"
              doc="Converts a #GstStaticPadTemplate into a #GstPadTemplate.">
        <return-value transfer-ownership="full">
          <type name="PadTemplate" c:type="GstPadTemplate*"/>
        </return-value>
      </method>
      <method name="get_caps"
              c:identifier="gst_static_pad_template_get_caps"
              doc="Gets the capabilities of the static pad template.
Unref after usage. Since the core holds an additional
ref to the returned caps, use gst_caps_make_writable()
on the returned caps to modify it.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </method>
    </record>
    <enumeration name="StreamError"
                 doc="Stream errors are for anything related to the stream being processed:
format errors, media type errors, ...
They&apos;re typically used by decoders, demuxers, converters, ..."
                 c:type="GstStreamError"
                 glib:error-quark="gst_stream_error_quark">
      <member name="failed" value="1" c:identifier="GST_STREAM_ERROR_FAILED"/>
      <member name="too_lazy"
              value="2"
              c:identifier="GST_STREAM_ERROR_TOO_LAZY"/>
      <member name="not_implemented"
              value="3"
              c:identifier="GST_STREAM_ERROR_NOT_IMPLEMENTED"/>
      <member name="type_not_found"
              value="4"
              c:identifier="GST_STREAM_ERROR_TYPE_NOT_FOUND"/>
      <member name="wrong_type"
              value="5"
              c:identifier="GST_STREAM_ERROR_WRONG_TYPE"/>
      <member name="codec_not_found"
              value="6"
              c:identifier="GST_STREAM_ERROR_CODEC_NOT_FOUND"/>
      <member name="decode" value="7" c:identifier="GST_STREAM_ERROR_DECODE"/>
      <member name="encode" value="8" c:identifier="GST_STREAM_ERROR_ENCODE"/>
      <member name="demux" value="9" c:identifier="GST_STREAM_ERROR_DEMUX"/>
      <member name="mux" value="10" c:identifier="GST_STREAM_ERROR_MUX"/>
      <member name="format" value="11" c:identifier="GST_STREAM_ERROR_FORMAT"/>
      <member name="decrypt"
              value="12"
              c:identifier="GST_STREAM_ERROR_DECRYPT"/>
      <member name="decrypt_nokey"
              value="13"
              c:identifier="GST_STREAM_ERROR_DECRYPT_NOKEY"/>
      <member name="num_errors"
              value="14"
              c:identifier="GST_STREAM_ERROR_NUM_ERRORS"/>
    </enumeration>
    <enumeration name="StreamStatusType"
                 doc="The type of a %GST_MESSAGE_STREAM_STATUS. The stream status messages inform the
application of new streaming threads and their status."
                 version="0.10.24"
                 c:type="GstStreamStatusType">
      <member name="create"
              value="0"
              c:identifier="GST_STREAM_STATUS_TYPE_CREATE"/>
      <member name="enter"
              value="1"
              c:identifier="GST_STREAM_STATUS_TYPE_ENTER"/>
      <member name="leave"
              value="2"
              c:identifier="GST_STREAM_STATUS_TYPE_LEAVE"/>
      <member name="destroy"
              value="3"
              c:identifier="GST_STREAM_STATUS_TYPE_DESTROY"/>
      <member name="start"
              value="8"
              c:identifier="GST_STREAM_STATUS_TYPE_START"/>
      <member name="pause"
              value="9"
              c:identifier="GST_STREAM_STATUS_TYPE_PAUSE"/>
      <member name="stop"
              value="10"
              c:identifier="GST_STREAM_STATUS_TYPE_STOP"/>
    </enumeration>
    <record name="Structure"
            c:type="GstStructure"
            doc="The GstStructure object. Most fields are private."
            glib:type-name="GstStructure"
            glib:get-type="gst_structure_get_type">
      <field name="type" writable="1">
        <type name="GType" c:type="GType"/>
      </field>
      <field name="name" writable="1">
        <type name="GLib.Quark" c:type="GQuark"/>
      </field>
      <field name="parent_refcount" writable="1">
        <type name="any" c:type="gint*"/>
      </field>
      <field name="fields" writable="1">
        <type name="GLib.Array" c:type="GArray*"/>
      </field>
      <field name="_gst_reserved" writable="1">
        <type name="any" c:type="gpointer"/>
      </field>
      <constructor name="new"
                   c:identifier="gst_structure_new"
                   doc="Creates a new #GstStructure with the given name.  Parses the
list of variable arguments and sets fields to the values listed.
Variable arguments should be passed as field name, field type,
and value.  Last variable argument should be NULL.">
        <return-value transfer-ownership="full">
          <type name="Structure" c:type="GstStructure*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="firstfield" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </constructor>
      <method name="copy"
              c:identifier="gst_structure_copy"
              doc="Duplicates a #GstStructure and all its fields and values.">
        <return-value transfer-ownership="full">
          <type name="Structure" c:type="GstStructure*"/>
        </return-value>
      </method>
      <method name="set_parent_refcount"
              c:identifier="gst_structure_set_parent_refcount"
              doc="Sets the parent_refcount field of #GstStructure. This field is used to
determine whether a structure is mutable or not. This function should only be
called by code implementing parent objects of #GstStructure, as described in
the MT Refcounting section of the design documents.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="refcount"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int" c:type="gint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="free"
              c:identifier="gst_structure_free"
              doc="Frees a #GstStructure and all its fields and values. The structure must not
have a parent when this function is called.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="get_name"
              c:identifier="gst_structure_get_name"
              doc="Get the name of @structure as a string.">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="get_name_id"
              c:identifier="gst_structure_get_name_id"
              doc="Get the name of @structure as a GQuark.">
        <return-value transfer-ownership="full">
          <type name="GLib.Quark" c:type="GQuark"/>
        </return-value>
      </method>
      <method name="has_name"
              c:identifier="gst_structure_has_name"
              doc="Checks if the structure has the given name">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_name"
              c:identifier="gst_structure_set_name"
              doc="Sets the name of the structure to the given @name.  The string
provided is copied before being used. It must not be empty, start with a
letter and can be followed by letters, numbers and any of &quot;/-_.:&quot;.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="id_set_value"
              c:identifier="gst_structure_id_set_value"
              doc="Sets the field with the given GQuark @field to @value.  If the field
does not exist, it is created.  If the field exists, the previous
value is replaced and freed.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="field" transfer-ownership="none">
            <type name="GLib.Quark" c:type="GQuark"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_value"
              c:identifier="gst_structure_set_value"
              doc="Sets the field with the given name @field to @value.  If the field
does not exist, it is created.  If the field exists, the previous
value is replaced and freed.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set"
              c:identifier="gst_structure_set"
              doc="Parses the variable arguments and sets fields accordingly.
Variable arguments should be in the form field name, field type
(as a GType), value(s).  The last variable argument should be NULL.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="id_set"
              c:identifier="gst_structure_id_set"
              doc="Identical to gst_structure_set, except that field names are
passed using the GQuark for the field name. This allows more efficient
setting of the structure if the caller already knows the associated
quark values.
The last variable argument must be NULL."
              version="0.10.10">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="GLib.Quark" c:type="GQuark"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="get"
              c:identifier="gst_structure_get"
              doc="Parses the variable arguments and reads fields from @structure accordingly.
Variable arguments should be in the form field name, field type
(as a GType), pointer(s) to a variable(s) to hold the return value(s).
The last variable argument should be NULL.
For refcounted (mini)objects you will acquire your own reference which
you must release with a suitable _unref() when no longer needed. For
strings and boxed types you will acquire a copy which you will need to
release with either g_free() or the suiteable function for the boxed type.
because the field requested did not exist, or was of a type other
than the type specified), otherwise TRUE."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="first_fieldname" transfer-ownership="none">
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="id_get"
              c:identifier="gst_structure_id_get"
              doc="Parses the variable arguments and reads fields from @structure accordingly.
Variable arguments should be in the form field id quark, field type
(as a GType), pointer(s) to a variable(s) to hold the return value(s).
The last variable argument should be NULL (technically it should be a
0 quark, but we require NULL so compilers that support it can check for
the NULL terminator and warn if it&apos;s not there).
This function is just like gst_structure_get() only that it is slightly
more efficient since it saves the string-to-quark lookup in the global
quark hashtable.
For refcounted (mini)objects you will acquire your own reference which
you must release with a suitable _unref() when no longer needed. For
strings and boxed types you will acquire a copy which you will need to
release with either g_free() or the suiteable function for the boxed type.
because the field requested did not exist, or was of a type other
than the type specified), otherwise TRUE."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="first_field_id" transfer-ownership="none">
            <type name="GLib.Quark" c:type="GQuark"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="id_get_value"
              c:identifier="gst_structure_id_get_value"
              doc="Get the value of the field with GQuark @field.
identifier.">
        <return-value transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </return-value>
        <parameters>
          <parameter name="field" transfer-ownership="none">
            <type name="GLib.Quark" c:type="GQuark"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_value"
              c:identifier="gst_structure_get_value"
              doc="Get the value of the field with name @fieldname.">
        <return-value transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_field"
              c:identifier="gst_structure_remove_field"
              doc="Removes the field with the given name.  If the field with the given
name does not exist, the structure is unchanged.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_fields"
              c:identifier="gst_structure_remove_fields"
              doc="Removes the fields with the given names. If a field does not exist, the
argument is ignored.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="remove_all_fields"
              c:identifier="gst_structure_remove_all_fields"
              doc="Removes all fields in a GstStructure.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="get_field_type"
              c:identifier="gst_structure_get_field_type"
              doc="Finds the field with the given name, and returns the type of the
value it contains.  If the field is not found, G_TYPE_INVALID is
returned.">
        <return-value transfer-ownership="none">
          <type name="GType" c:type="GType"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="foreach"
              c:identifier="gst_structure_foreach"
              doc="Calls the provided function once for each field in the #GstStructure. The
function must not modify the fields. Also see gst_structure_map_in_place().
FALSE otherwise.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="StructureForeachFunc"
                  c:type="GstStructureForeachFunc"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="map_in_place"
              c:identifier="gst_structure_map_in_place"
              doc="Calls the provided function once for each field in the #GstStructure. In
contrast to gst_structure_foreach(), the function may modify but not delete the
fields. The structure must be mutable.
FALSE otherwise.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="StructureMapFunc" c:type="GstStructureMapFunc"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="n_fields"
              c:identifier="gst_structure_n_fields"
              doc="Get the number of fields in the structure.">
        <return-value transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </return-value>
      </method>
      <method name="nth_field_name"
              c:identifier="gst_structure_nth_field_name"
              doc="Get the name of the given field number, counting from 0 onwards.">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="id_has_field"
              c:identifier="gst_structure_id_has_field"
              doc="Check if @structure contains a field named @field."
              version="0.10.26">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="field" transfer-ownership="none">
            <type name="GLib.Quark" c:type="GQuark"/>
          </parameter>
        </parameters>
      </method>
      <method name="id_has_field_typed"
              c:identifier="gst_structure_id_has_field_typed"
              doc="Check if @structure contains a field named @field and with GType @type."
              version="0.10.26">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="field" transfer-ownership="none">
            <type name="GLib.Quark" c:type="GQuark"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </method>
      <method name="has_field"
              c:identifier="gst_structure_has_field"
              doc="Check if @structure contains a field named @fieldname.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="has_field_typed"
              c:identifier="gst_structure_has_field_typed"
              doc="Check if @structure contains a field named @fieldname and with GType @type.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_boolean"
              c:identifier="gst_structure_get_boolean"
              doc="Sets the boolean pointed to by @value corresponding to the value of the
given field.  Caller is responsible for making sure the field exists
and has the correct type.
with @fieldname or the existing field did not contain a boolean, this
function returns FALSE.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_int"
              c:identifier="gst_structure_get_int"
              doc="Sets the int pointed to by @value corresponding to the value of the
given field.  Caller is responsible for making sure the field exists
and has the correct type.
with @fieldname or the existing field did not contain an int, this function
returns %FALSE.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int" c:type="gint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_uint"
              c:identifier="gst_structure_get_uint"
              doc="Sets the uint pointed to by @value corresponding to the value of the
given field.  Caller is responsible for making sure the field exists
and has the correct type.
with @fieldname or the existing field did not contain a uint, this function
returns %FALSE."
              version="0.10.15">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="uint" c:type="guint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_fourcc"
              c:identifier="gst_structure_get_fourcc"
              doc="Sets the Fourcc pointed to by @value corresponding to the value of the
given field.  Caller is responsible for making sure the field exists
and has the correct type.
with @fieldname or the existing field did not contain a fourcc, this function
returns FALSE.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="uint32" c:type="guint32*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_double"
              c:identifier="gst_structure_get_double"
              doc="Sets the double pointed to by @value corresponding to the value of the
given field.  Caller is responsible for making sure the field exists
and has the correct type.
with @fieldname or the existing field did not contain a double, this
function returns FALSE.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="double" c:type="gdouble*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_date"
              c:identifier="gst_structure_get_date"
              doc="Sets the date pointed to by @value corresponding to the date of the
given field.  Caller is responsible for making sure the field exists
and has the correct type.
On success @value will point to a newly-allocated copy of the date which
inconsistent with e.g. gst_structure_get_string() which doesn&apos;t return a
copy of the string).
with @fieldname or the existing field did not contain a data, this function
returns FALSE.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="GLib.Date" c:type="GDate**"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_clock_time"
              c:identifier="gst_structure_get_clock_time"
              doc="Sets the clock time pointed to by @value corresponding to the clock time
of the given field.  Caller is responsible for making sure the field exists
and has the correct type.
with @fieldname or the existing field did not contain a #GstClockTime, this
function returns FALSE.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="ClockTime" c:type="GstClockTime*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_string"
              c:identifier="gst_structure_get_string"
              doc="Finds the field corresponding to @fieldname, and returns the string
contained in the field&apos;s value.  Caller is responsible for making
sure the field exists and has the correct type.
The string should not be modified, and remains valid until the next
call to a gst_structure_*() function with the given structure.
or did not contain a string.">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_enum"
              c:identifier="gst_structure_get_enum"
              doc="Sets the int pointed to by @value corresponding to the value of the
given field.  Caller is responsible for making sure the field exists,
has the correct type and that the enumtype is correct.
with @fieldname or the existing field did not contain an enum of the given
type, this function returns FALSE.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="enumtype" transfer-ownership="none">
            <type name="GType" c:type="GType"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int" c:type="gint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_fraction"
              c:identifier="gst_structure_get_fraction"
              doc="Sets the integers pointed to by @value_numerator and @value_denominator
corresponding to the value of the given field.  Caller is responsible
for making sure the field exists and has the correct type.
with @fieldname or the existing field did not contain a GstFraction, this
function returns FALSE.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value_numerator"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int" c:type="gint*"/>
          </parameter>
          <parameter name="value_denominator"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int" c:type="gint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="to_string"
              c:identifier="gst_structure_to_string"
              doc="Converts @structure to a human-readable string representation.
For debugging purposes its easier to do something like this:
|[
GST_LOG (&quot;structure is %&quot; GST_PTR_FORMAT, structure);
]|
This prints the structure in human readble form.
usage.">
        <return-value transfer-ownership="full" doc="after">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="fixate_field_nearest_int"
              c:identifier="gst_structure_fixate_field_nearest_int"
              doc="Fixates a #GstStructure by changing the given field to the nearest
integer to @target that is a subset of the existing field.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="field_name" transfer-ownership="none">
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="target" transfer-ownership="none">
            <type name="int" c:type="int"/>
          </parameter>
        </parameters>
      </method>
      <method name="fixate_field_nearest_double"
              c:identifier="gst_structure_fixate_field_nearest_double"
              doc="Fixates a #GstStructure by changing the given field to the nearest
double to @target that is a subset of the existing field.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="field_name" transfer-ownership="none">
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="target" transfer-ownership="none">
            <type name="double" c:type="double"/>
          </parameter>
        </parameters>
      </method>
      <method name="fixate_field_boolean"
              c:identifier="gst_structure_fixate_field_boolean"
              doc="Fixates a #GstStructure by changing the given @field_name field to the given">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="field_name" transfer-ownership="none">
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="target" transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="fixate_field_nearest_fraction"
              c:identifier="gst_structure_fixate_field_nearest_fraction"
              doc="Fixates a #GstStructure by changing the given field to the nearest
fraction to @target_numerator/@target_denominator that is a subset
of the existing field.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="field_name" transfer-ownership="none">
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="target_numerator" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
          <parameter name="target_denominator" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
    </record>
    <enumeration name="StructureChangeType"
                 doc="The type of a %GST_MESSAGE_STRUCTURE_CHANGE."
                 version="0.10.22"
                 c:type="GstStructureChangeType">
      <member name="link"
              value="0"
              c:identifier="GST_STRUCTURE_CHANGE_TYPE_PAD_LINK"/>
      <member name="unlink"
              value="1"
              c:identifier="GST_STRUCTURE_CHANGE_TYPE_PAD_UNLINK"/>
    </enumeration>
    <callback name="StructureForeachFunc"
              c:type="GstStructureForeachFunc"
              doc="A function that will be called in gst_structure_foreach(). The function may
not modify @value.
the foreach operation should stop with FALSE.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="field_id" transfer-ownership="none">
          <type name="GLib.Quark" c:type="GQuark"/>
        </parameter>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="2">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="StructureMapFunc"
              c:type="GstStructureMapFunc"
              doc="A function that will be called in gst_structure_map_in_place(). The function
may modify @value.
the map operation should stop with FALSE.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="field_id" transfer-ownership="none">
          <type name="GLib.Quark" c:type="GQuark"/>
        </parameter>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="2">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <class name="SystemClock"
           c:type="GstSystemClock"
           doc="The default implementation of a #GstClock that uses the system time."
           parent="Clock"
           glib:type-name="GstSystemClock"
           glib:get-type="gst_system_clock_get_type"
           glib:type-struct="SystemClockClass">
      <function name="obtain"
                c:identifier="gst_system_clock_obtain"
                doc="Get a handle to the default system clock. The refcount of the
clock will be increased so you need to unref the clock after
usage.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Clock" c:type="GstClock*"/>
        </return-value>
      </function>
      <property name="clock-type" writable="1">
        <type name="ClockType" c:type="GstClockType"/>
      </property>
      <field name="clock">
        <type name="Clock" c:type="GstClock"/>
      </field>
      <field name="thread">
        <type name="GLib.Thread" c:type="GThread*"/>
      </field>
      <field name="stopping">
        <type name="boolean" c:type="gboolean"/>
      </field>
      <field name="priv">
        <type name="SystemClockPrivate" c:type="GstSystemClockPrivate*"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="3">
          <type name="any"/>
        </array>
      </field>
    </class>
    <record name="SystemClockClass"
            c:type="GstSystemClockClass"
            glib:is-gtype-struct-for="SystemClock">
      <field name="parent_class">
        <type name="ClockClass" c:type="GstClockClass"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <record name="SystemClockPrivate" c:type="GstSystemClockPrivate">
    </record>
    <constant name="TAG_ALBUM" value="album">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_ALBUM_ARTIST" value="album-artist">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_ALBUM_ARTIST_SORTNAME" value="album-artist-sortname">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_ALBUM_GAIN" value="replaygain-album-gain">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_ALBUM_PEAK" value="replaygain-album-peak">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_ALBUM_SORTNAME" value="album-sortname">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_ALBUM_VOLUME_COUNT" value="album-disc-count">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_ALBUM_VOLUME_NUMBER" value="album-disc-number">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_ARTIST" value="artist">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_ARTIST_SORTNAME" value="musicbrainz-sortname">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_ATTACHMENT" value="attachment">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_AUDIO_CODEC" value="audio-codec">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_BEATS_PER_MINUTE" value="beats-per-minute">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_BITRATE" value="bitrate">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_CODEC" value="codec">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_COMMENT" value="comment">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_COMPOSER" value="composer">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_COMPOSER_SORTNAME" value="composer-sortname">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_CONTACT" value="contact">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_CONTAINER_FORMAT" value="container-format">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_COPYRIGHT" value="copyright">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_COPYRIGHT_URI" value="copyright-uri">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_DATE" value="date">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_DESCRIPTION" value="description">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_DURATION" value="duration">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_ENCODER" value="encoder">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_ENCODER_VERSION" value="encoder-version">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_EXTENDED_COMMENT" value="extended-comment">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_GENRE" value="genre">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_GEO_LOCATION_CITY" value="geo-location-city">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_GEO_LOCATION_COUNTRY" value="geo-location-country">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_GEO_LOCATION_ELEVATION" value="geo-location-elevation">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_GEO_LOCATION_LATITUDE" value="geo-location-latitude">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_GEO_LOCATION_LONGITUDE" value="geo-location-longitude">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_GEO_LOCATION_NAME" value="geo-location-name">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_GEO_LOCATION_SUBLOCATION"
              value="geo-location-sublocation">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_GROUPING" value="grouping">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_HOMEPAGE" value="homepage">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_IMAGE" value="image">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_ISRC" value="isrc">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_KEYWORDS" value="keywords">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_LANGUAGE_CODE" value="language-code">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_LICENSE" value="license">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_LICENSE_URI" value="license-uri">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_LOCATION" value="location">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_LYRICS" value="lyrics">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_MAXIMUM_BITRATE" value="maximum-bitrate">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_MINIMUM_BITRATE" value="minimum-bitrate">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_NOMINAL_BITRATE" value="nominal-bitrate">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_ORGANIZATION" value="organization">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_PERFORMER" value="performer">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_PREVIEW_IMAGE" value="preview-image">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_REFERENCE_LEVEL" value="replaygain-reference-level">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_SERIAL" value="serial">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_SHOW_EPISODE_NUMBER" value="show-episode-number">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_SHOW_NAME" value="show-name">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_SHOW_SEASON_NUMBER" value="show-season-number">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_SHOW_SORTNAME" value="show-sortname">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_SUBTITLE_CODEC" value="subtitle-codec">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_TITLE" value="title">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_TITLE_SORTNAME" value="title-sortname">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_TRACK_COUNT" value="track-count">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_TRACK_GAIN" value="replaygain-track-gain">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_TRACK_NUMBER" value="track-number">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_TRACK_PEAK" value="replaygain-track-peak">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_USER_RATING" value="user-rating">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_VERSION" value="version">
      <type name="utf8"/>
    </constant>
    <constant name="TAG_VIDEO_CODEC" value="video-codec">
      <type name="utf8"/>
    </constant>
    <constant name="TIME_FORMAT" value="u:%02u:%02u.%09u">
      <type name="utf8"/>
    </constant>
    <enumeration name="TagFlag"
                 doc="Extra tag flags used when registering tags."
                 c:type="GstTagFlag">
      <member name="undefined"
              value="0"
              c:identifier="GST_TAG_FLAG_UNDEFINED"/>
      <member name="meta" value="1" c:identifier="GST_TAG_FLAG_META"/>
      <member name="encoded" value="2" c:identifier="GST_TAG_FLAG_ENCODED"/>
      <member name="decoded" value="3" c:identifier="GST_TAG_FLAG_DECODED"/>
      <member name="count" value="4" c:identifier="GST_TAG_FLAG_COUNT"/>
    </enumeration>
    <callback name="TagForeachFunc"
              c:type="GstTagForeachFunc"
              doc="A function that will be called in gst_tag_list_foreach(). The function may
not modify the tag list.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="list" transfer-ownership="none">
          <type name="TagList" c:type="GstTagList*"/>
        </parameter>
        <parameter name="tag" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="2">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <record name="TagList"
            c:type="GstTagList"
            doc="Opaque #GstTagList data structure."
            glib:type-name="GstTagList"
            glib:get-type="gst_tag_list_get_type">
      <constructor name="new"
                   c:identifier="gst_tag_list_new"
                   doc="Creates a new empty GstTagList.">
        <return-value transfer-ownership="full">
          <type name="TagList" c:type="GstTagList*"/>
        </return-value>
      </constructor>
      <constructor name="new_full"
                   c:identifier="gst_tag_list_new_full"
                   doc="Creates a new taglist and appends the values for the given tags. It expects
tag-value pairs like gst_tag_list_add(), and a NULL terminator after the
last pair. The type of the values is implicit and is documented in the API
reference, but can also be queried at runtime with gst_tag_get_type(). It
is an error to pass a value of a type not matching the tag type into this
function. The tag list will make copies of any arguments passed
(e.g. strings, buffers).
needed."
                   version="0.10.24">
        <return-value transfer-ownership="full" doc="when no longer">
          <type name="TagList" c:type="GstTagList*"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </constructor>
      <method name="copy"
              c:identifier="gst_tag_list_copy"
              doc="Copies a given #GstTagList.">
        <return-value transfer-ownership="full">
          <type name="TagList" c:type="GstTagList*"/>
        </return-value>
      </method>
      <method name="is_empty"
              c:identifier="gst_tag_list_is_empty"
              doc="Checks if the given taglist is empty."
              version="0.10.11">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="insert"
              c:identifier="gst_tag_list_insert"
              doc="Inserts the tags of the @from list into the first list using the given mode.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="from" transfer-ownership="none">
            <type name="TagList" c:type="GstTagList*"/>
          </parameter>
          <parameter name="mode" transfer-ownership="none">
            <type name="TagMergeMode" c:type="GstTagMergeMode"/>
          </parameter>
        </parameters>
      </method>
      <method name="merge"
              c:identifier="gst_tag_list_merge"
              doc="Merges the two given lists into a new list. If one of the lists is NULL, a
copy of the other is returned. If both lists are NULL, NULL is returned.">
        <return-value transfer-ownership="full">
          <type name="TagList" c:type="GstTagList*"/>
        </return-value>
        <parameters>
          <parameter name="list2" transfer-ownership="none">
            <type name="TagList" c:type="GstTagList*"/>
          </parameter>
          <parameter name="mode" transfer-ownership="none">
            <type name="TagMergeMode" c:type="GstTagMergeMode"/>
          </parameter>
        </parameters>
      </method>
      <method name="free"
              c:identifier="gst_tag_list_free"
              doc="Frees the given list and all associated values.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="get_tag_size"
              c:identifier="gst_tag_list_get_tag_size"
              doc="Checks how many value are stored in this tag list for the given tag.">
        <return-value transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add"
              c:identifier="gst_tag_list_add"
              doc="Sets the values for the given tags using the specified mode.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="mode" transfer-ownership="none">
            <type name="TagMergeMode" c:type="GstTagMergeMode"/>
          </parameter>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="add_values"
              c:identifier="gst_tag_list_add_values"
              doc="Sets the GValues for the given tags using the specified mode.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="mode" transfer-ownership="none">
            <type name="TagMergeMode" c:type="GstTagMergeMode"/>
          </parameter>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="add_value"
              c:identifier="gst_tag_list_add_value"
              doc="Sets the GValue for a given tag using the specified mode."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="mode" transfer-ownership="none">
            <type name="TagMergeMode" c:type="GstTagMergeMode"/>
          </parameter>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_tag"
              c:identifier="gst_tag_list_remove_tag"
              doc="Removes the given tag from the taglist.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="foreach"
              c:identifier="gst_tag_list_foreach"
              doc="Calls the given function for each tag inside the tag list. Note that if there
is no tag, the function won&apos;t be called at all.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="TagForeachFunc" c:type="GstTagForeachFunc"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_value_index"
              c:identifier="gst_tag_list_get_value_index"
              doc="Gets the value that is at the given index for the given tag in the given
list.
available or the tag doesn&apos;t have as many entries">
        <return-value transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_char"
              c:identifier="gst_tag_list_get_char"
              doc="Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="full">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_char_index"
              c:identifier="gst_tag_list_get_char_index"
              doc="Gets the value that is at the given index for the given tag in the given
list.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="value" transfer-ownership="full">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_uchar"
              c:identifier="gst_tag_list_get_uchar"
              doc="Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <array c:type="guchar*">
              <type name="uint8"/>
            </array>
          </parameter>
        </parameters>
      </method>
      <method name="get_uchar_index"
              c:identifier="gst_tag_list_get_uchar_index"
              doc="Gets the value that is at the given index for the given tag in the given
list.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <array c:type="guchar*">
              <type name="uint8"/>
            </array>
          </parameter>
        </parameters>
      </method>
      <method name="get_boolean"
              c:identifier="gst_tag_list_get_boolean"
              doc="Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_boolean_index"
              c:identifier="gst_tag_list_get_boolean_index"
              doc="Gets the value that is at the given index for the given tag in the given
list.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="boolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_int"
              c:identifier="gst_tag_list_get_int"
              doc="Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int" c:type="gint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_int_index"
              c:identifier="gst_tag_list_get_int_index"
              doc="Gets the value that is at the given index for the given tag in the given
list.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int" c:type="gint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_uint"
              c:identifier="gst_tag_list_get_uint"
              doc="Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="uint" c:type="guint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_uint_index"
              c:identifier="gst_tag_list_get_uint_index"
              doc="Gets the value that is at the given index for the given tag in the given
list.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="uint" c:type="guint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_long"
              c:identifier="gst_tag_list_get_long"
              doc="Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="long" c:type="glong*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_long_index"
              c:identifier="gst_tag_list_get_long_index"
              doc="Gets the value that is at the given index for the given tag in the given
list.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="long" c:type="glong*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_ulong"
              c:identifier="gst_tag_list_get_ulong"
              doc="Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="ulong" c:type="gulong*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_ulong_index"
              c:identifier="gst_tag_list_get_ulong_index"
              doc="Gets the value that is at the given index for the given tag in the given
list.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="ulong" c:type="gulong*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_int64"
              c:identifier="gst_tag_list_get_int64"
              doc="Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_int64_index"
              c:identifier="gst_tag_list_get_int64_index"
              doc="Gets the value that is at the given index for the given tag in the given
list.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="int64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_uint64"
              c:identifier="gst_tag_list_get_uint64"
              doc="Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="uint64" c:type="guint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_uint64_index"
              c:identifier="gst_tag_list_get_uint64_index"
              doc="Gets the value that is at the given index for the given tag in the given
list.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="uint64" c:type="guint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_float"
              c:identifier="gst_tag_list_get_float"
              doc="Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="float" c:type="gfloat*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_float_index"
              c:identifier="gst_tag_list_get_float_index"
              doc="Gets the value that is at the given index for the given tag in the given
list.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="float" c:type="gfloat*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_double"
              c:identifier="gst_tag_list_get_double"
              doc="Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="double" c:type="gdouble*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_double_index"
              c:identifier="gst_tag_list_get_double_index"
              doc="Gets the value that is at the given index for the given tag in the given
list.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <type name="double" c:type="gdouble*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_string"
              c:identifier="gst_tag_list_get_string"
              doc="Copies the contents for the given tag into the value, possibly merging
multiple values into one if multiple values are associated with the tag.
Use gst_tag_list_get_string_index (list, tag, 0, value) if you want
to retrieve the first string associated with this tag unmodified.
The resulting string in @value will be in UTF-8 encoding and should be
freed by the caller using g_free when no longer needed. Since 0.10.24 the
returned string is also guaranteed to be non-NULL and non-empty.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <array c:type="gchar**">
              <type name="utf8"/>
            </array>
          </parameter>
        </parameters>
      </method>
      <method name="get_string_index"
              c:identifier="gst_tag_list_get_string_index"
              doc="Gets the value that is at the given index for the given tag in the given
list.
The resulting string in @value will be in UTF-8 encoding and should be
freed by the caller using g_free when no longer needed. Since 0.10.24 the
returned string is also guaranteed to be non-NULL and non-empty.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <array c:type="gchar**">
              <type name="utf8"/>
            </array>
          </parameter>
        </parameters>
      </method>
      <method name="get_pointer"
              c:identifier="gst_tag_list_get_pointer"
              doc="Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="any" c:type="gpointer*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_pointer_index"
              c:identifier="gst_tag_list_get_pointer_index"
              doc="Gets the value that is at the given index for the given tag in the given
list.
given list.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="any" c:type="gpointer*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_date"
              c:identifier="gst_tag_list_get_date"
              doc="Copies the first date for the given tag in the taglist into the variable
pointed to by @value. Free the date with g_date_free() when it is no longer
needed.
given list or if it was #NULL.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="GLib.Date" c:type="GDate**"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_date_index"
              c:identifier="gst_tag_list_get_date_index"
              doc="Gets the date that is at the given index for the given tag in the given
list and copies it into the variable pointed to by @value. Free the date
with g_date_free() when it is no longer needed.
given list or if it was #NULL.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="GLib.Date" c:type="GDate**"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_buffer"
              c:identifier="gst_tag_list_get_buffer"
              doc="Copies the first buffer for the given tag in the taglist into the variable
pointed to by @value. Free the buffer with gst_buffer_unref() when it is
no longer needed.
given list or if it was #NULL."
              version="0.10.23">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="Buffer" c:type="GstBuffer**"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_buffer_index"
              c:identifier="gst_tag_list_get_buffer_index"
              doc="Gets the buffer that is at the given index for the given tag in the given
list and copies it into the variable pointed to by @value. Free the buffer
with gst_buffer_unref() when it is no longer needed.
given list or if it was #NULL."
              version="0.10.23">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="Buffer" c:type="GstBuffer**"/>
          </parameter>
        </parameters>
      </method>
    </record>
    <callback name="TagMergeFunc"
              c:type="GstTagMergeFunc"
              doc="A function for merging multiple values of a tag used when registering
tags.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="dest" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="src" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </callback>
    <enumeration name="TagMergeMode"
                 doc="The different tag merging modes are basically replace, overwrite and append,
already in the element and (B) the ones that are supplied to the element (
e.g. via gst_tag_setter_merge_tags() / gst_tag_setter_add_tags() or a
%GST_EVENT_TAG), how are these tags merged?
In the table below this is shown for the cases that a tag exists in the list
(A) or does not exists (!A) and combinations thereof.
&lt;table frame=&quot;all&quot; colsep=&quot;1&quot; rowsep=&quot;1&quot;&gt;
&lt;title&gt;merge mode&lt;/title&gt;
&lt;tgroup cols=&apos;5&apos; align=&apos;left&apos;&gt;
&lt;thead&gt;
&lt;row&gt;
&lt;entry&gt;merge mode&lt;/entry&gt;
&lt;entry&gt;A + B&lt;/entry&gt;
&lt;entry&gt;A + !B&lt;/entry&gt;
&lt;entry&gt;!A + B&lt;/entry&gt;
&lt;entry&gt;!A + !B&lt;/entry&gt;
&lt;/row&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;row&gt;
&lt;entry&gt;REPLACE_ALL&lt;/entry&gt;
&lt;entry&gt;B&lt;/entry&gt;
&lt;entry&gt;-&lt;/entry&gt;
&lt;entry&gt;B&lt;/entry&gt;
&lt;entry&gt;-&lt;/entry&gt;
&lt;/row&gt;
&lt;row&gt;
&lt;entry&gt;REPLACE&lt;/entry&gt;
&lt;entry&gt;B&lt;/entry&gt;
&lt;entry&gt;A&lt;/entry&gt;
&lt;entry&gt;B&lt;/entry&gt;
&lt;entry&gt;-&lt;/entry&gt;
&lt;/row&gt;
&lt;row&gt;
&lt;entry&gt;APPEND&lt;/entry&gt;
&lt;entry&gt;A, B&lt;/entry&gt;
&lt;entry&gt;A&lt;/entry&gt;
&lt;entry&gt;B&lt;/entry&gt;
&lt;entry&gt;-&lt;/entry&gt;
&lt;/row&gt;
&lt;row&gt;
&lt;entry&gt;PREPEND&lt;/entry&gt;
&lt;entry&gt;B, A&lt;/entry&gt;
&lt;entry&gt;A&lt;/entry&gt;
&lt;entry&gt;B&lt;/entry&gt;
&lt;entry&gt;-&lt;/entry&gt;
&lt;/row&gt;
&lt;row&gt;
&lt;entry&gt;KEEP&lt;/entry&gt;
&lt;entry&gt;A&lt;/entry&gt;
&lt;entry&gt;A&lt;/entry&gt;
&lt;entry&gt;B&lt;/entry&gt;
&lt;entry&gt;-&lt;/entry&gt;
&lt;/row&gt;
&lt;row&gt;
&lt;entry&gt;KEEP_ALL&lt;/entry&gt;
&lt;entry&gt;A&lt;/entry&gt;
&lt;entry&gt;A&lt;/entry&gt;
&lt;entry&gt;-&lt;/entry&gt;
&lt;entry&gt;-&lt;/entry&gt;
&lt;/row&gt;
&lt;/tbody&gt;
&lt;/tgroup&gt;
&lt;/table&gt;"
                 c:type="GstTagMergeMode">
      <member name="undefined"
              value="0"
              c:identifier="GST_TAG_MERGE_UNDEFINED"/>
      <member name="replace_all"
              value="1"
              c:identifier="GST_TAG_MERGE_REPLACE_ALL"/>
      <member name="replace" value="2" c:identifier="GST_TAG_MERGE_REPLACE"/>
      <member name="append" value="3" c:identifier="GST_TAG_MERGE_APPEND"/>
      <member name="prepend" value="4" c:identifier="GST_TAG_MERGE_PREPEND"/>
      <member name="keep" value="5" c:identifier="GST_TAG_MERGE_KEEP"/>
      <member name="keep_all" value="6" c:identifier="GST_TAG_MERGE_KEEP_ALL"/>
      <member name="count" value="7" c:identifier="GST_TAG_MERGE_COUNT"/>
    </enumeration>
    <interface name="TagSetter"
               c:type="GstTagSetter"
               doc="Opaque #GstTagSetter data structure."
               glib:type-name="GstTagSetter"
               glib:get-type="gst_tag_setter_get_type">
      <prerequisite name="Element"/>
      <method name="reset_tags"
              c:identifier="gst_tag_setter_reset_tags"
              doc="Reset the internal taglist. Elements should call this from within the
state-change handler."
              version="0.10.22">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="merge_tags"
              c:identifier="gst_tag_setter_merge_tags"
              doc="Merges the given list into the setter&apos;s list using the given mode.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="list" transfer-ownership="none">
            <type name="TagList" c:type="GstTagList*"/>
          </parameter>
          <parameter name="mode" transfer-ownership="none">
            <type name="TagMergeMode" c:type="GstTagMergeMode"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_tags"
              c:identifier="gst_tag_setter_add_tags"
              doc="Adds the given tag / value pairs on the setter using the given merge mode.
The list must be terminated with NULL.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="mode" transfer-ownership="none">
            <type name="TagMergeMode" c:type="GstTagMergeMode"/>
          </parameter>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="add_tag_values"
              c:identifier="gst_tag_setter_add_tag_values"
              doc="Adds the given tag / GValue pairs on the setter using the given merge mode.
The list must be terminated with NULL.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="mode" transfer-ownership="none">
            <type name="TagMergeMode" c:type="GstTagMergeMode"/>
          </parameter>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="add_tag_value"
              c:identifier="gst_tag_setter_add_tag_value"
              doc="Adds the given tag / GValue pair on the setter using the given merge mode."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="mode" transfer-ownership="none">
            <type name="TagMergeMode" c:type="GstTagMergeMode"/>
          </parameter>
          <parameter name="tag" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_tag_list"
              c:identifier="gst_tag_setter_get_tag_list"
              doc="Returns the current list of tags the setter uses.  The list should not be
modified or freed.
or NULL if none is used.">
        <return-value transfer-ownership="none">
          <type name="TagList" c:type="GstTagList*"/>
        </return-value>
      </method>
      <method name="set_tag_merge_mode"
              c:identifier="gst_tag_setter_set_tag_merge_mode"
              doc="Sets the given merge mode that is used for adding tags from events to tags
specified by this interface. The default is #GST_TAG_MERGE_KEEP, which keeps
the tags set with this interface and discards tags from events.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="mode" transfer-ownership="none">
            <type name="TagMergeMode" c:type="GstTagMergeMode"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_tag_merge_mode"
              c:identifier="gst_tag_setter_get_tag_merge_mode"
              doc="Queries the mode by which tags inside the setter are overwritten by tags
from events">
        <return-value transfer-ownership="full">
          <type name="TagMergeMode" c:type="GstTagMergeMode"/>
        </return-value>
      </method>
    </interface>
    <record name="TagSetterIFace"
            c:type="GstTagSetterIFace"
            doc="#GstTagSetterIFace interface.">
      <field name="g_iface" writable="1">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
    </record>
    <class name="Task"
           c:type="GstTask"
           doc="The #GstTask object."
           parent="Object"
           glib:type-name="GstTask"
           glib:get-type="gst_task_get_type"
           glib:type-struct="TaskClass">
      <function name="cleanup_all"
                c:identifier="gst_task_cleanup_all"
                doc="Wait for all tasks to be stopped. This is mainly used internally
to ensure proper cleanup of internal data structures in test suites.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </function>
      <function name="create"
                c:identifier="gst_task_create"
                doc="Create a new Task that will repeatedly call the provided @func
with @data as a parameter. Typically the task will run in
a new thread.
The function cannot be changed after the task has been created. You
must create a new #GstTask to change the function.
This function will not yet create and start a thread. Use gst_task_start() or
gst_task_pause() to create and start the GThread.
Before the task can be used, a #GStaticRecMutex must be configured using the
gst_task_set_lock() function. This lock will always be acquired while
MT safe.">
        <return-value transfer-ownership="full">
          <type name="Task" c:type="GstTask*"/>
        </return-value>
        <parameters>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="call"
                     closure="1">
            <type name="TaskFunction" c:type="GstTaskFunction"/>
          </parameter>
          <parameter name="data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </function>
      <method name="set_lock"
              c:identifier="gst_task_set_lock"
              doc="Set the mutex used by the task. The mutex will be acquired before
calling the #GstTaskFunction.
This function has to be called before calling gst_task_pause() or
gst_task_start().
MT safe.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="mutex" transfer-ownership="none">
            <type name="GLib.StaticRecMutex" c:type="GStaticRecMutex*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_priority"
              c:identifier="gst_task_set_priority"
              doc="Changes the priority of @task to @priority.
MT safe."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="priority" transfer-ownership="none">
            <type name="GLib.ThreadPriority" c:type="GThreadPriority"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_pool"
              c:identifier="gst_task_get_pool"
              doc="Get the #GstTaskPool that this task will use for its streaming
threads.
MT safe.
after usage."
              version="0.10.24">
        <return-value transfer-ownership="full">
          <type name="TaskPool" c:type="GstTaskPool*"/>
        </return-value>
      </method>
      <method name="set_pool"
              c:identifier="gst_task_set_pool"
              doc="Set @pool as the new GstTaskPool for @task. Any new streaming threads that
will be created by @task will now use @pool.
MT safe."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="pool" transfer-ownership="none">
            <type name="TaskPool" c:type="GstTaskPool*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_thread_callbacks"
              c:identifier="gst_task_set_thread_callbacks"
              doc="Set callbacks which will be executed when a new thread is needed, the thread
function is entered and left and when the thread is joined.
By default a thread for @task will be created from a default thread pool.
Objects can use custom GThreads or can perform additional configuration of
the threads (such as changing the thread priority) by installing callbacks.
MT safe."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="callbacks" transfer-ownership="none">
            <type name="TaskThreadCallbacks" c:type="GstTaskThreadCallbacks*"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
          <parameter name="notify" transfer-ownership="none" scope="call">
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_state"
              c:identifier="gst_task_get_state"
              doc="Get the current state of the task.
MT safe.">
        <return-value transfer-ownership="full">
          <type name="TaskState" c:type="GstTaskState"/>
        </return-value>
      </method>
      <method name="set_state"
              c:identifier="gst_task_set_state"
              doc="Sets the state of @task to @state.
The @task must have a lock associated with it using
gst_task_set_lock() when going to GST_TASK_STARTED or GST_TASK_PAUSED or
this function will return %FALSE.
MT safe."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="state" transfer-ownership="none">
            <type name="TaskState" c:type="GstTaskState"/>
          </parameter>
        </parameters>
      </method>
      <method name="start"
              c:identifier="gst_task_start"
              doc="Starts @task. The @task must have a lock associated with it using
gst_task_set_lock() or this function will return %FALSE.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="stop"
              c:identifier="gst_task_stop"
              doc="Stops @task. This method merely schedules the task to stop and
will not wait for the task to have completely stopped. Use
gst_task_join() to stop and wait for completion.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="pause"
              c:identifier="gst_task_pause"
              doc="Pauses @task. This method can also be called on a task in the
stopped state, in which case a thread will be started and will remain
in the paused state. This function does not wait for the task to complete
the paused state.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="join"
              c:identifier="gst_task_join"
              doc="Joins @task. After this call, it is safe to unref the task
and clean up the lock set with gst_task_set_lock().
The task will automatically be stopped with this call.
This function cannot be called from within a task function as this
would cause a deadlock. The function will detect this and print a
g_warning.
MT safe.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
      </method>
      <field name="object">
        <type name="Object" c:type="GstObject"/>
      </field>
      <field name="state">
        <type name="TaskState" c:type="GstTaskState"/>
      </field>
      <field name="cond">
        <type name="GLib.Cond" c:type="GCond*"/>
      </field>
      <field name="lock">
        <type name="GLib.StaticRecMutex" c:type="GStaticRecMutex*"/>
      </field>
      <field name="func">
        <type name="TaskFunction" c:type="GstTaskFunction"/>
      </field>
      <field name="data">
        <type name="any" c:type="gpointer"/>
      </field>
      <field name="running">
        <type name="boolean" c:type="gboolean"/>
      </field>
      <union name="abidata" c:type="abidata">
        <record name="ABI" c:type="ABI">
          <field name="thread" writable="1">
            <type name="GLib.Thread" c:type="GThread*"/>
          </field>
        </record>
        <field name="_gst_reserved" writable="1">
          <array zero-terminated="0" c:type="gpointer" fixed-size="3">
            <type name="any"/>
          </array>
        </field>
      </union>
      <field name="priv">
        <type name="TaskPrivate" c:type="GstTaskPrivate*"/>
      </field>
    </class>
    <record name="TaskClass"
            c:type="GstTaskClass"
            glib:is-gtype-struct-for="Task">
      <field name="parent_class">
        <type name="ObjectClass" c:type="GstObjectClass"/>
      </field>
      <field name="pool">
        <type name="TaskPool" c:type="GstTaskPool*"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <callback name="TaskFunction"
              c:type="GstTaskFunction"
              doc="A function that will repeatedly be called in the thread created by
a #GstTask.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="data" transfer-ownership="none">
          <type name="any" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <class name="TaskPool"
           c:type="GstTaskPool"
           doc="The #GstTaskPool object."
           parent="Object"
           glib:type-name="GstTaskPool"
           glib:get-type="gst_task_pool_get_type"
           glib:type-struct="TaskPoolClass">
      <constructor name="new"
                   c:identifier="gst_task_pool_new"
                   doc="Create a new default task pool. The default task pool will use a regular
GThreadPool for threads."
                   version="0.10.24">
        <return-value transfer-ownership="full" doc="after usage.">
          <type name="TaskPool" c:type="GstTaskPool*"/>
        </return-value>
      </constructor>
      <virtual-method name="prepare" invoker="prepare" throws="1">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </virtual-method>
      <virtual-method name="cleanup" invoker="cleanup">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </virtual-method>
      <virtual-method name="push" invoker="push" throws="1">
        <return-value transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </return-value>
        <parameters>
          <parameter name="func" transfer-ownership="none">
            <type name="TaskPoolFunction" c:type="GstTaskPoolFunction"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none" closure="2">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="join" invoker="join">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="prepare"
              c:identifier="gst_task_pool_prepare"
              doc="Prepare the taskpool for accepting gst_task_pool_push() operations.
MT safe."
              version="0.10.24"
              throws="1">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="push"
              c:identifier="gst_task_pool_push"
              doc="Start the execution of a new thread from @pool.
function. This pointer can be NULL, you must check @error to detect
errors."
              version="0.10.24"
              throws="1">
        <return-value transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </return-value>
        <parameters>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <type name="TaskPoolFunction" c:type="GstTaskPoolFunction"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="join"
              c:identifier="gst_task_pool_join"
              doc="Join a task and/or return it to the pool. @id is the id obtained from
gst_task_pool_push()."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="cleanup"
              c:identifier="gst_task_pool_cleanup"
              doc="Wait for all tasks to be stopped. This is mainly used internally
to ensure proper cleanup of internal data structures in test suites.
MT safe."
              version="0.10.24">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <field name="object">
        <type name="Object" c:type="GstObject"/>
      </field>
      <field name="pool">
        <type name="GLib.ThreadPool" c:type="GThreadPool*"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </class>
    <record name="TaskPoolClass"
            c:type="GstTaskPoolClass"
            glib:is-gtype-struct-for="TaskPool"
            doc="The #GstTaskPoolClass object.">
      <field name="parent_class">
        <type name="ObjectClass" c:type="GstObjectClass"/>
      </field>
      <field name="prepare">
        <callback name="prepare" c:type="prepare" throws="1">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="pool" transfer-ownership="none">
              <type name="TaskPool" c:type="GstTaskPool*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="cleanup">
        <callback name="cleanup" c:type="cleanup">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="pool" transfer-ownership="none">
              <type name="TaskPool" c:type="GstTaskPool*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="push">
        <callback name="push" c:type="push" throws="1">
          <return-value transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </return-value>
          <parameters>
            <parameter name="pool" transfer-ownership="none">
              <type name="TaskPool" c:type="GstTaskPool*"/>
            </parameter>
            <parameter name="func" transfer-ownership="none">
              <type name="TaskPoolFunction" c:type="GstTaskPoolFunction"/>
            </parameter>
            <parameter name="user_data" transfer-ownership="none" closure="2">
              <type name="any" c:type="gpointer"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="join">
        <callback name="join" c:type="join">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="pool" transfer-ownership="none">
              <type name="TaskPool" c:type="GstTaskPool*"/>
            </parameter>
            <parameter name="id" transfer-ownership="none">
              <type name="any" c:type="gpointer"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <callback name="TaskPoolFunction"
              c:type="GstTaskPoolFunction"
              doc="Task function, see gst_task_pool_push()."
              version="0.10.24">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="data" transfer-ownership="none">
          <type name="any" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <record name="TaskPrivate" c:type="GstTaskPrivate">
    </record>
    <enumeration name="TaskState"
                 doc="The different states a task can be in"
                 c:type="GstTaskState">
      <member name="started" value="0" c:identifier="GST_TASK_STARTED"/>
      <member name="stopped" value="1" c:identifier="GST_TASK_STOPPED"/>
      <member name="paused" value="2" c:identifier="GST_TASK_PAUSED"/>
    </enumeration>
    <record name="TaskThreadCallbacks"
            c:type="GstTaskThreadCallbacks"
            doc="Custom GstTask thread callback functions that can be installed."
            version="0.10.24">
      <field name="enter_thread">
        <type name="any" c:type="pointer"/>
      </field>
      <field name="leave_thread">
        <type name="any" c:type="pointer"/>
      </field>
      <field name="_gst_reserved" writable="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <record name="Trace" c:type="GstTrace" doc="Opaque #GstTrace structure.">
      <field name="filename" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="fd" writable="1">
        <type name="int" c:type="int"/>
      </field>
      <field name="buf" writable="1">
        <type name="TraceEntry" c:type="GstTraceEntry*"/>
      </field>
      <field name="bufsize" writable="1">
        <type name="int" c:type="gint"/>
      </field>
      <field name="bufoffset" writable="1">
        <type name="int" c:type="gint"/>
      </field>
      <constructor name="new"
                   c:identifier="gst_trace_new"
                   doc="Create a ringbuffer of @size in the file with @filename to
store trace results in.">
        <return-value transfer-ownership="full">
          <type name="Trace" c:type="GstTrace*"/>
        </return-value>
        <parameters>
          <parameter name="filename" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <type name="int" c:type="gint"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="destroy"
              c:identifier="gst_trace_destroy"
              doc="Flush an close the previously allocated @trace.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="flush"
              c:identifier="gst_trace_flush"
              doc="Flush any pending trace entries in @trace to the trace file.
flushed.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="text_flush"
              c:identifier="gst_trace_text_flush"
              doc="Flush any pending trace entries in @trace to the trace file,
formatted as a text line with timestamp and sequence numbers.
flushed.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="set_default"
              c:identifier="gst_trace_set_default"
              doc="Set the default #GstTrace to @trace.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
    </record>
    <record name="TraceEntry" c:type="GstTraceEntry">
      <field name="timestamp" writable="1">
        <type name="int64" c:type="gint64"/>
      </field>
      <field name="sequence" writable="1">
        <type name="uint32" c:type="guint32"/>
      </field>
      <field name="data" writable="1">
        <type name="uint32" c:type="guint32"/>
      </field>
      <field name="message" writable="1">
        <array zero-terminated="0" c:type="gchar" fixed-size="112">
          <type name="int8"/>
        </array>
      </field>
    </record>
    <record name="TypeFind"
            c:type="GstTypeFind"
            doc="Object that stores typefind callbacks. To use with #GstTypeFindFactory.">
      <field name="peek">
        <type name="any" c:type="pointer"/>
      </field>
      <field name="suggest">
        <type name="any" c:type="pointer"/>
      </field>
      <field name="data" writable="1">
        <type name="any" c:type="gpointer"/>
      </field>
      <field name="get_length">
        <type name="any" c:type="pointer"/>
      </field>
      <field name="_gst_reserved" writable="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
      <method name="peek"
              c:identifier="gst_type_find_peek"
              doc="Returns the @size bytes of the stream to identify beginning at offset. If
offset is a positive number, the offset is relative to the beginning of the
stream, if offset is a negative number the offset is relative to the end of
the stream. The returned memory is valid until the typefinding function
returns and must not be freed.">
        <return-value transfer-ownership="full">
          <array c:type="guint8*">
            <type name="uint8"/>
          </array>
        </return-value>
        <parameters>
          <parameter name="offset" transfer-ownership="none">
            <type name="int64" c:type="gint64"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="suggest"
              c:identifier="gst_type_find_suggest"
              doc="If a #GstTypeFindFunction calls this function it suggests the caps with the
given probability. A #GstTypeFindFunction may supply different suggestions
in one call.
It is up to the caller of the #GstTypeFindFunction to interpret these values.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="probability" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="caps" transfer-ownership="none">
            <type name="Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="suggest_simple"
              c:identifier="gst_type_find_suggest_simple"
              doc="If a #GstTypeFindFunction calls this function it suggests the caps with the
given probability. A #GstTypeFindFunction may supply different suggestions
in one call. It is up to the caller of the #GstTypeFindFunction to interpret
these values.
This function is similar to gst_type_find_suggest(), only that instead of
passing a #GstCaps argument you can create the caps on the fly in the same
way as you can with gst_caps_new_simple().
Make sure you terminate the list of arguments with a NULL argument and that
the values passed have the correct type (in terms of width in bytes when
passed to the vararg function - this applies particularly to gdouble and
guint64 arguments)."
              version="0.10.20">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="probability" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="media_type" transfer-ownership="none">
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="fieldname" transfer-ownership="none">
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="get_length"
              c:identifier="gst_type_find_get_length"
              doc="Get the length of the data stream.">
        <return-value transfer-ownership="none">
          <type name="uint64" c:type="guint64"/>
        </return-value>
      </method>
    </record>
    <class name="TypeFindFactory"
           c:type="GstTypeFindFactory"
           doc="Object that stores information about a typefind function."
           parent="PluginFeature"
           glib:type-name="GstTypeFindFactory"
           glib:get-type="gst_type_find_factory_get_type"
           glib:type-struct="TypeFindFactoryClass">
      <function name="get_list"
                c:identifier="gst_type_find_factory_get_list"
                doc="Gets the list of all registered typefind factories. You must free the
list using gst_plugin_feature_list_free.
The returned factories are sorted by highest rank first, and then by
factory name. (behaviour change since 0.10.26)">
        <return-value transfer-ownership="full">
          <type name="GLib.List" c:type="GList*"/>
        </return-value>
      </function>
      <method name="get_extensions"
              c:identifier="gst_type_find_factory_get_extensions"
              doc="Gets the extensions associated with a #GstTypeFindFactory. The returned
array should not be changed. If you need to change stuff in it, you should
copy it using g_strdupv().  This function may return NULL to indicate
a 0-length list.">
        <return-value transfer-ownership="full">
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </return-value>
      </method>
      <method name="get_caps"
              c:identifier="gst_type_find_factory_get_caps"
              doc="Gets the #GstCaps associated with a typefind factory.">
        <return-value transfer-ownership="full">
          <type name="Caps" c:type="GstCaps*"/>
        </return-value>
      </method>
      <method name="call_function"
              c:identifier="gst_type_find_factory_call_function"
              doc="Calls the #GstTypeFindFunction associated with this factory.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="find"
                     transfer-ownership="none"
                     doc=" members must be set.">
            <type name="TypeFind" c:type="GstTypeFind*"/>
          </parameter>
        </parameters>
      </method>
      <field name="feature">
        <type name="PluginFeature" c:type="GstPluginFeature"/>
      </field>
      <field name="function">
        <type name="TypeFindFunction" c:type="GstTypeFindFunction"/>
      </field>
      <field name="extensions">
        <type name="utf8" c:type="gchar**"/>
      </field>
      <field name="caps">
        <type name="Caps" c:type="GstCaps*"/>
      </field>
      <field name="user_data">
        <type name="any" c:type="gpointer"/>
      </field>
      <field name="user_data_notify">
        <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </class>
    <record name="TypeFindFactoryClass"
            c:type="GstTypeFindFactoryClass"
            glib:is-gtype-struct-for="TypeFindFactory">
      <field name="parent">
        <type name="PluginFeatureClass" c:type="GstPluginFeatureClass"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <callback name="TypeFindFunction"
              c:type="GstTypeFindFunction"
              doc="A function that will be called by typefinding.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="find" transfer-ownership="none">
          <type name="TypeFind" c:type="GstTypeFind*"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <enumeration name="TypeFindProbability"
                 doc="The probability of the typefind function. Higher values have more certainty
in doing a reliable typefind."
                 c:type="GstTypeFindProbability">
      <member name="minimum" value="1" c:identifier="GST_TYPE_FIND_MINIMUM"/>
      <member name="possible"
              value="50"
              c:identifier="GST_TYPE_FIND_POSSIBLE"/>
      <member name="likely" value="80" c:identifier="GST_TYPE_FIND_LIKELY"/>
      <member name="nearly_certain"
              value="99"
              c:identifier="GST_TYPE_FIND_NEARLY_CERTAIN"/>
      <member name="maximum" value="100" c:identifier="GST_TYPE_FIND_MAXIMUM"/>
    </enumeration>
    <record name="TypeNameData"
            c:type="GstTypeNameData"
            doc="Structure used for filtering based on @name and @type.">
      <field name="name" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="type" writable="1">
        <type name="GType" c:type="GType"/>
      </field>
    </record>
    <interface name="URIHandler"
               c:type="GstURIHandler"
               doc="Opaque #GstURIHandler structure."
               glib:type-name="GstURIHandler"
               glib:get-type="gst_uri_handler_get_type"
               glib:type-struct="URIHandlerInterface">
      <virtual-method name="get_uri" invoker="get_uri">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </virtual-method>
      <virtual-method name="set_uri" invoker="set_uri">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="uri" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="get_uri_type"
              c:identifier="gst_uri_handler_get_uri_type"
              doc="Gets the type of the given URI handler
Returns #GST_URI_UNKNOWN if the @handler isn&apos;t implemented correctly.">
        <return-value transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </return-value>
      </method>
      <method name="get_protocols"
              c:identifier="gst_uri_handler_get_protocols"
              doc="Gets the list of protocols supported by @handler. This list may not be
modified.
Returns NULL if the @handler isn&apos;t implemented properly, or the @handler
doesn&apos;t support any protocols.">
        <return-value transfer-ownership="full">
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </return-value>
      </method>
      <method name="get_uri"
              c:identifier="gst_uri_handler_get_uri"
              doc="Gets the currently handled URI.
Returns NULL if there are no URI currently handled. The returned
string must not be modified or freed.">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
      </method>
      <method name="set_uri"
              c:identifier="gst_uri_handler_set_uri"
              doc="Tries to set the URI of the given handler.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="uri" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="new_uri"
              c:identifier="gst_uri_handler_new_uri"
              doc="Emits the new-uri signal for a given handler, when that handler has a new URI.
This function should only be called by URI handlers themselves.">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="uri" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <glib:signal name="new-uri"
                   doc="The URI of the given @handler has changed.">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="uri" transfer-ownership="none">
            <type name="utf8" c:type="gchararray"/>
          </parameter>
        </parameters>
      </glib:signal>
    </interface>
    <record name="URIHandlerInterface"
            c:type="GstURIHandlerInterface"
            glib:is-gtype-struct-for="URIHandler"
            doc="Any #GstElement using this interface should implement these methods.">
      <field name="parent">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
      <field name="new_uri">
        <callback name="new_uri" c:type="new_uri">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="handler" transfer-ownership="none">
              <type name="URIHandler" c:type="GstURIHandler*"/>
            </parameter>
            <parameter name="uri" transfer-ownership="none">
              <type name="utf8" c:type="gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_type">
        <callback name="get_type" c:type="get_type">
          <return-value transfer-ownership="full">
            <type name="URIType" c:type="GstURIType"/>
          </return-value>
        </callback>
      </field>
      <field name="get_protocols">
        <callback name="get_protocols" c:type="get_protocols">
          <return-value transfer-ownership="full">
            <array c:type="gchar**">
              <type name="utf8"/>
            </array>
          </return-value>
        </callback>
      </field>
      <field name="get_uri">
        <callback name="get_uri" c:type="get_uri">
          <return-value transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </return-value>
          <parameters>
            <parameter name="handler" transfer-ownership="none">
              <type name="URIHandler" c:type="GstURIHandler*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="set_uri">
        <callback name="set_uri" c:type="set_uri">
          <return-value transfer-ownership="none">
            <type name="boolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="handler" transfer-ownership="none">
              <type name="URIHandler" c:type="GstURIHandler*"/>
            </parameter>
            <parameter name="uri" transfer-ownership="none">
              <type name="utf8" c:type="gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_type_full">
        <callback name="get_type_full" c:type="get_type_full">
          <return-value transfer-ownership="full">
            <type name="URIType" c:type="GstURIType"/>
          </return-value>
          <parameters>
            <parameter name="type" transfer-ownership="none">
              <type name="GType" c:type="GType"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_protocols_full">
        <callback name="get_protocols_full" c:type="get_protocols_full">
          <return-value transfer-ownership="full">
            <array c:type="gchar**">
              <type name="utf8"/>
            </array>
          </return-value>
          <parameters>
            <parameter name="type" transfer-ownership="none">
              <type name="GType" c:type="GType"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="2">
          <type name="any"/>
        </array>
      </field>
    </record>
    <enumeration name="URIType"
                 doc="The different types of URI direction."
                 c:type="GstURIType">
      <member name="unknown" value="0" c:identifier="GST_URI_UNKNOWN"/>
      <member name="sink" value="1" c:identifier="GST_URI_SINK"/>
      <member name="src" value="2" c:identifier="GST_URI_SRC"/>
    </enumeration>
    <constant name="USECOND" value="0">
      <type name="int"/>
    </constant>
    <constant name="VALUE_EQUAL" value="0">
      <type name="int"/>
    </constant>
    <constant name="VALUE_GREATER_THAN" value="1">
      <type name="int"/>
    </constant>
    <constant name="VALUE_LESS_THAN" value="-1">
      <type name="int"/>
    </constant>
    <constant name="VALUE_UNORDERED" value="2">
      <type name="int"/>
    </constant>
    <callback name="ValueCompareFunc"
              c:type="GstValueCompareFunc"
              doc="Used together with gst_value_compare() to compare #GValue items.
or GST_VALUE_UNORDERED">
      <return-value transfer-ownership="none">
        <type name="int" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="value1" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="value2" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="ValueDeserializeFunc"
              c:type="GstValueDeserializeFunc"
              doc="Used by gst_value_deserialize() to parse a non-binary form into the #GValue.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="dest" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="s" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="ValueIntersectFunc"
              c:type="GstValueIntersectFunc"
              doc="Used by gst_value_intersect() to perform intersection for a specific #GValue
type. If the intersection is non-empty, the result is
placed in @dest and TRUE is returned.  If the intersection is
empty, @dest is unmodified and FALSE is returned.
Register a new implementation with gst_value_register_intersect_func().">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="dest" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="value1" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="value2" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="ValueSerializeFunc"
              c:type="GstValueSerializeFunc"
              doc="Used by gst_value_serialize() to obtain a non-binary form of the #GValue.">
      <return-value transfer-ownership="full">
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="value1" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="ValueSubtractFunc"
              c:type="GstValueSubtractFunc"
              doc="Used by gst_value_subtract() to perform subtraction for a specific #GValue
type. Register a new implementation with gst_value_register_subtract_func().">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="dest" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="minuend" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="subtrahend" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </callback>
    <record name="ValueTable"
            c:type="GstValueTable"
            doc="VTable for the #GValue @type.">
      <field name="type" writable="1">
        <type name="GType" c:type="GType"/>
      </field>
      <field name="compare" writable="1">
        <type name="ValueCompareFunc" c:type="GstValueCompareFunc"/>
      </field>
      <field name="serialize" writable="1">
        <type name="ValueSerializeFunc" c:type="GstValueSerializeFunc"/>
      </field>
      <field name="deserialize" writable="1">
        <type name="ValueDeserializeFunc" c:type="GstValueDeserializeFunc"/>
      </field>
      <field name="_gst_reserved" writable="1">
        <array zero-terminated="0" c:type="void*" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <callback name="ValueUnionFunc"
              c:type="GstValueUnionFunc"
              doc="Used by gst_value_union() to perform unification for a specific #GValue
type. Register a new implementation with gst_value_register_union_func().">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="dest" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="value1" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="value2" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </callback>
    <class name="XML"
           c:type="GstXML"
           doc="XML parser object"
           parent="Object"
           glib:type-name="GstXML"
           glib:get-type="gst_xml_get_type"
           glib:type-struct="XMLClass">
      <constructor name="new"
                   c:identifier="gst_xml_new"
                   doc="Create a new GstXML parser object.">
        <return-value transfer-ownership="full">
          <type name="XML" c:type="GstXML*"/>
        </return-value>
      </constructor>
      <function name="write"
                c:identifier="gst_xml_write"
                doc="Converts the given element into an XML presentation.">
        <return-value transfer-ownership="full">
          <type name="libxml2.DocPtr" c:type="xmlDocPtr"/>
        </return-value>
        <parameters>
          <parameter name="element" transfer-ownership="none">
            <type name="Element" c:type="GstElement*"/>
          </parameter>
        </parameters>
      </function>
      <function name="make_element"
                c:identifier="gst_xml_make_element"
                doc="Load the element from the XML description">
        <return-value transfer-ownership="full">
          <type name="Element" c:type="GstElement*"/>
        </return-value>
        <parameters>
          <parameter name="cur" transfer-ownership="none">
            <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
          </parameter>
          <parameter name="parent" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
        </parameters>
      </function>
      <virtual-method name="object_saved">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="self" transfer-ownership="none">
            <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="parse_doc"
              c:identifier="gst_xml_parse_doc"
              doc="Fills the GstXML object with the elements from the
xmlDocPtr.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="doc" transfer-ownership="none">
            <type name="libxml2.DocPtr" c:type="xmlDocPtr"/>
          </parameter>
          <parameter name="root" transfer-ownership="none">
            <array c:type="guchar*">
              <type name="uint8"/>
            </array>
          </parameter>
        </parameters>
      </method>
      <method name="parse_file"
              c:identifier="gst_xml_parse_file"
              doc="Fills the GstXML object with the corresponding elements from
the XML file fname. Optionally it will only build the element from
the element node root (if it is not NULL). This feature is useful
if you only want to build a specific element from an XML file
but not the pipeline it is embedded in.
Pass &quot;-&quot; as fname to read from stdin. You can also pass a URI
of any format that libxml supports, including http.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="fname" transfer-ownership="none">
            <array c:type="guchar*">
              <type name="uint8"/>
            </array>
          </parameter>
          <parameter name="root" transfer-ownership="none">
            <array c:type="guchar*">
              <type name="uint8"/>
            </array>
          </parameter>
        </parameters>
      </method>
      <method name="parse_memory"
              c:identifier="gst_xml_parse_memory"
              doc="Fills the GstXML object with the corresponding elements from
an in memory XML buffer.">
        <return-value transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="buffer" transfer-ownership="none">
            <array c:type="guchar*">
              <type name="uint8"/>
            </array>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <type name="uint" c:type="guint"/>
          </parameter>
          <parameter name="root" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_element"
              c:identifier="gst_xml_get_element"
              doc="This function is used to get a pointer to the GstElement corresponding
to name in the pipeline description. You would use this if you have
to do anything to the element after loading.">
        <return-value transfer-ownership="full">
          <type name="Element" c:type="GstElement*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <array c:type="guchar*">
              <type name="uint8"/>
            </array>
          </parameter>
        </parameters>
      </method>
      <method name="get_topelements"
              c:identifier="gst_xml_get_topelements"
              doc="Retrieve a list of toplevel elements.
of the list and must not free or modify the list. The caller also does not
own a reference to any of the elements in the list and should obtain its own
reference using gst_object_ref() if necessary.">
        <return-value transfer-ownership="full">
          <type name="GLib.List" c:type="GList*"/>
        </return-value>
      </method>
      <field name="object">
        <type name="Object" c:type="GstObject"/>
      </field>
      <field name="topelements">
        <type name="GLib.List" c:type="GList*"/>
      </field>
      <field name="ns">
        <type name="libxml2.NsPtr" c:type="xmlNsPtr"/>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
      <glib:signal name="object-loaded"
                   doc="Signals that a new object has been deserialized.">
        <return-value transfer-ownership="full">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="Object" c:type="GstObject"/>
          </parameter>
          <parameter name="xml_node" transfer-ownership="none">
            <type name="any" c:type="gpointer"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="XMLClass"
            c:type="GstXMLClass"
            glib:is-gtype-struct-for="XML">
      <field name="parent_class">
        <type name="ObjectClass" c:type="GstObjectClass"/>
      </field>
      <field name="object_loaded">
        <callback name="object_loaded" c:type="object_loaded">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="xml" transfer-ownership="none">
              <type name="XML" c:type="GstXML*"/>
            </parameter>
            <parameter name="object" transfer-ownership="none">
              <type name="Object" c:type="GstObject*"/>
            </parameter>
            <parameter name="self" transfer-ownership="none">
              <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="object_saved">
        <callback name="object_saved" c:type="object_saved">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="xml" transfer-ownership="none">
              <type name="XML" c:type="GstXML*"/>
            </parameter>
            <parameter name="object" transfer-ownership="none">
              <type name="Object" c:type="GstObject*"/>
            </parameter>
            <parameter name="self" transfer-ownership="none">
              <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="any"/>
        </array>
      </field>
    </record>
    <function name="alloc_trace_available"
              c:identifier="gst_alloc_trace_available"
              doc="Check if alloc tracing was compiled into the core
tracing enabled.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
    </function>
    <function name="alloc_trace_get"
              c:identifier="gst_alloc_trace_get"
              doc="Get the named alloc trace object.
no alloc tracer was registered with that name.">
      <return-value transfer-ownership="full">
        <type name="AllocTrace" c:type="GstAllocTrace*"/>
      </return-value>
      <parameters>
        <parameter name="name" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="alloc_trace_list"
              c:identifier="gst_alloc_trace_list"
              doc="Get a list of all registered alloc trace objects.">
      <return-value transfer-ownership="none">
        <type name="GLib.List" c:type="GList*"/>
      </return-value>
    </function>
    <function name="alloc_trace_live_all"
              c:identifier="gst_alloc_trace_live_all"
              doc="Get the total number of live registered alloc trace objects.">
      <return-value transfer-ownership="none">
        <type name="int" c:type="int"/>
      </return-value>
    </function>
    <function name="alloc_trace_print_all"
              c:identifier="gst_alloc_trace_print_all"
              doc="Print the status of all registered alloc trace objects.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
    </function>
    <function name="alloc_trace_print_live"
              c:identifier="gst_alloc_trace_print_live"
              doc="Print the status of all registered alloc trace objects, ignoring those
without live objects.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
    </function>
    <function name="alloc_trace_set_flags_all"
              c:identifier="gst_alloc_trace_set_flags_all"
              doc="Enable the specified options on all registered alloc trace
objects.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="flags" transfer-ownership="none">
          <type name="AllocTraceFlags" c:type="GstAllocTraceFlags"/>
        </parameter>
      </parameters>
    </function>
    <function name="atomic_int_set"
              c:identifier="gst_atomic_int_set"
              doc="Unconditionally sets the atomic integer to @value."
              deprecated="Use g_atomic_int_set().">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="atomic_int"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="int" c:type="gint*"/>
        </parameter>
        <parameter name="value" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_try_new_and_alloc"
              c:identifier="gst_buffer_try_new_and_alloc"
              doc="Tries to create a newly allocated buffer with data of the given size. If
the requested amount of memory can&apos;t be allocated, NULL will be returned.
The buffer memory is not cleared.
Note that when @size == 0, the buffer data pointer will be NULL.
MT safe."
              version="0.10.13">
      <return-value transfer-ownership="full">
        <type name="Buffer" c:type="GstBuffer*"/>
      </return-value>
      <parameters>
        <parameter name="size" transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="caps_from_string"
              c:identifier="gst_caps_from_string"
              doc="Converts @caps from a string representation.">
      <return-value transfer-ownership="full">
        <type name="Caps" c:type="GstCaps*"/>
      </return-value>
      <parameters>
        <parameter name="string" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="caps_load_thyself"
              c:identifier="gst_caps_load_thyself"
              doc="Creates a #GstCaps from its XML serialization.">
      <return-value transfer-ownership="full">
        <type name="Caps" c:type="GstCaps*"/>
      </return-value>
      <parameters>
        <parameter name="parent" transfer-ownership="none">
          <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
        </parameter>
      </parameters>
    </function>
    <function name="child_proxy_child_added"
              c:identifier="gst_child_proxy_child_added"
              doc="Emits the &quot;child-added&quot; signal.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="object" transfer-ownership="none">
          <type name="Object" c:type="GstObject*"/>
        </parameter>
        <parameter name="child" transfer-ownership="none">
          <type name="Object" c:type="GstObject*"/>
        </parameter>
      </parameters>
    </function>
    <function name="child_proxy_child_removed"
              c:identifier="gst_child_proxy_child_removed"
              doc="Emits the &quot;child-removed&quot; signal.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="object" transfer-ownership="none">
          <type name="Object" c:type="GstObject*"/>
        </parameter>
        <parameter name="child" transfer-ownership="none">
          <type name="Object" c:type="GstObject*"/>
        </parameter>
      </parameters>
    </function>
    <function name="child_proxy_get"
              c:identifier="gst_child_proxy_get"
              doc="Gets properties of the parent object and its children.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="object" transfer-ownership="none">
          <type name="Object" c:type="GstObject*"/>
        </parameter>
        <parameter name="first_property_name" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter transfer-ownership="none">
          <varargs>
          </varargs>
        </parameter>
      </parameters>
    </function>
    <function name="child_proxy_get_property"
              c:identifier="gst_child_proxy_get_property"
              doc="Gets a single property using the GstChildProxy mechanism.
You are responsible for for freeing it by calling g_value_unset()">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="object" transfer-ownership="none">
          <type name="Object" c:type="GstObject*"/>
        </parameter>
        <parameter name="name" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="child_proxy_lookup"
              c:identifier="gst_child_proxy_lookup"
              doc="Looks up which object and #GParamSpec would be effected by the given @name.
case the values for @pspec and @target are not modified. Unref @target after
usage.
MT safe.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="object" transfer-ownership="none">
          <type name="Object" c:type="GstObject*"/>
        </parameter>
        <parameter name="name" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="target" transfer-ownership="none">
          <type name="Object" c:type="GstObject**"/>
        </parameter>
        <parameter name="pspec" transfer-ownership="none">
          <type name="GObject.ParamSpec" c:type="GParamSpec**"/>
        </parameter>
      </parameters>
    </function>
    <function name="child_proxy_set"
              c:identifier="gst_child_proxy_set"
              doc="Sets properties of the parent object and its children.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="object" transfer-ownership="none">
          <type name="Object" c:type="GstObject*"/>
        </parameter>
        <parameter name="first_property_name" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter transfer-ownership="none">
          <varargs>
          </varargs>
        </parameter>
      </parameters>
    </function>
    <function name="child_proxy_set_property"
              c:identifier="gst_child_proxy_set_property"
              doc="Sets a single property using the GstChildProxy mechanism.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="object" transfer-ownership="none">
          <type name="Object" c:type="GstObject*"/>
        </parameter>
        <parameter name="name" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="class_signal_connect"
              c:identifier="gst_class_signal_connect">
      <return-value transfer-ownership="none">
        <type name="uint" c:type="guint"/>
      </return-value>
      <parameters>
        <parameter name="klass" transfer-ownership="none">
          <type name="ObjectClass" c:type="GstObjectClass*"/>
        </parameter>
        <parameter name="name" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="func" transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </parameter>
        <parameter name="func_data" transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </function>
    <function name="class_signal_emit_by_name"
              c:identifier="gst_class_signal_emit_by_name"
              doc="emits the named class signal.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="object" transfer-ownership="none">
          <type name="Object" c:type="GstObject*"/>
        </parameter>
        <parameter name="name" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="self" transfer-ownership="none">
          <type name="libxml2.NodePtr" c:type="xmlNodePtr"/>
        </parameter>
      </parameters>
    </function>
    <function name="debug_add_log_function"
              c:identifier="gst_debug_add_log_function"
              doc="Adds the logging function to the list of logging functions.
Be sure to use G_GNUC_NO_INSTRUMENT on that function, it is needed.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="call"
                   closure="1">
          <type name="LogFunction" c:type="GstLogFunction"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </function>
    <function name="debug_construct_term_color"
              c:identifier="gst_debug_construct_term_color"
              doc="Constructs a string that can be used for getting the desired color in color
terminals.
You need to free the string after use.">
      <return-value transfer-ownership="full">
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="colorinfo" transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="debug_construct_win_color"
              c:identifier="gst_debug_construct_win_color"
              doc="Constructs an integer that can be used for getting the desired color in
windows&apos; terminals (cmd.exe). As there is no mean to underline, we simply
ignore this attribute.
This function returns 0 on non-windows machines."
              version="0.10.23">
      <return-value transfer-ownership="none">
        <type name="int" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="colorinfo" transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="debug_get_all_categories"
              c:identifier="gst_debug_get_all_categories"
              doc="Returns a snapshot of a all categories that are currently in use . This list
may change anytime.
The caller has to free the list after use.">
      <return-value transfer-ownership="full">
        <type name="GLib.SList" c:type="GSList*"/>
      </return-value>
    </function>
    <function name="debug_get_default_threshold"
              c:identifier="gst_debug_get_default_threshold"
              doc="Returns the default threshold that is used for new categories.">
      <return-value transfer-ownership="full">
        <type name="DebugLevel" c:type="GstDebugLevel"/>
      </return-value>
    </function>
    <function name="debug_is_active"
              c:identifier="gst_debug_is_active"
              doc="Checks if debugging output is activated.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
    </function>
    <function name="debug_is_colored"
              c:identifier="gst_debug_is_colored"
              doc="Checks if the debugging output should be colored.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
    </function>
    <function name="debug_level_get_name"
              c:identifier="gst_debug_level_get_name"
              doc="Get the string representation of a debugging level">
      <return-value transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="level" transfer-ownership="none">
          <type name="DebugLevel" c:type="GstDebugLevel"/>
        </parameter>
      </parameters>
    </function>
    <function name="debug_log"
              c:identifier="gst_debug_log"
              doc="Logs the given message using the currently registered debugging handlers.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="category" transfer-ownership="none">
          <type name="DebugCategory" c:type="GstDebugCategory*"/>
        </parameter>
        <parameter name="level" transfer-ownership="none">
          <type name="DebugLevel" c:type="GstDebugLevel"/>
        </parameter>
        <parameter name="file" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="function" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="line" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="object" transfer-ownership="none">
          <type name="GObject.Object" c:type="GObject*"/>
        </parameter>
        <parameter name="format" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter transfer-ownership="none">
          <varargs>
          </varargs>
        </parameter>
      </parameters>
    </function>
    <function name="debug_log_default"
              c:identifier="gst_debug_log_default"
              doc="The default logging handler used by GStreamer. Logging functions get called
whenever a macro like GST_DEBUG or similar is used. This function outputs the
message and additional info using the glib error handler.
You can add other handlers by using gst_debug_add_log_function().
And you can remove this handler by calling
gst_debug_remove_log_function(gst_debug_log_default);">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="category" transfer-ownership="none">
          <type name="DebugCategory" c:type="GstDebugCategory*"/>
        </parameter>
        <parameter name="level" transfer-ownership="none">
          <type name="DebugLevel" c:type="GstDebugLevel"/>
        </parameter>
        <parameter name="file" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="function" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="line" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="object" transfer-ownership="none">
          <type name="GObject.Object" c:type="GObject*"/>
        </parameter>
        <parameter name="message" transfer-ownership="none">
          <type name="DebugMessage" c:type="GstDebugMessage*"/>
        </parameter>
        <parameter name="unused" transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </function>
    <function name="debug_print_stack_trace"
              c:identifier="gst_debug_print_stack_trace"
              doc="If GST_ENABLE_FUNC_INSTRUMENTATION is defined a stacktrace is available for
gstreamer code, which can be printed with this function.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
    </function>
    <function name="debug_remove_log_function"
              c:identifier="gst_debug_remove_log_function"
              doc="Removes all registered instances of the given logging functions.">
      <return-value transfer-ownership="none">
        <type name="uint" c:type="guint"/>
      </return-value>
      <parameters>
        <parameter name="func" transfer-ownership="none" scope="call">
          <type name="LogFunction" c:type="GstLogFunction"/>
        </parameter>
      </parameters>
    </function>
    <function name="debug_remove_log_function_by_data"
              c:identifier="gst_debug_remove_log_function_by_data"
              doc="Removes all registered instances of log functions with the given user data.">
      <return-value transfer-ownership="none">
        <type name="uint" c:type="guint"/>
      </return-value>
      <parameters>
        <parameter name="data" transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </function>
    <function name="debug_set_active"
              c:identifier="gst_debug_set_active"
              doc="If activated, debugging messages are sent to the debugging
handlers.
It makes sense to deactivate it for speed issues.
&lt;note&gt;&lt;para&gt;This function is not threadsafe. It makes sense to only call it
during initialization.&lt;/para&gt;&lt;/note&gt;">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="active" transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </parameter>
      </parameters>
    </function>
    <function name="debug_set_colored"
              c:identifier="gst_debug_set_colored"
              doc="Sets or unsets the use of coloured debugging output.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="colored" transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </parameter>
      </parameters>
    </function>
    <function name="debug_set_default_threshold"
              c:identifier="gst_debug_set_default_threshold"
              doc="Sets the default threshold to the given level and updates all categories to
use this threshold.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="level" transfer-ownership="none">
          <type name="DebugLevel" c:type="GstDebugLevel"/>
        </parameter>
      </parameters>
    </function>
    <function name="debug_set_threshold_for_name"
              c:identifier="gst_debug_set_threshold_for_name"
              doc="Sets all categories which match the given glob style pattern to the given
level.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="name" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="level" transfer-ownership="none">
          <type name="DebugLevel" c:type="GstDebugLevel"/>
        </parameter>
      </parameters>
    </function>
    <function name="debug_unset_threshold_for_name"
              c:identifier="gst_debug_unset_threshold_for_name"
              doc="Resets all categories with the given name back to the default level.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="name" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="default_registry_check_feature_version"
              c:identifier="gst_default_registry_check_feature_version"
              doc="Checks whether a plugin feature by the given name exists in the
default registry and whether its version is at least the
version required.
the same as the required version or newer, and #FALSE otherwise.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="feature_name" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="min_major" transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </parameter>
        <parameter name="min_minor" transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </parameter>
        <parameter name="min_micro" transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="deinit"
              c:identifier="gst_deinit"
              doc="Clean up any resources created by GStreamer in gst_init().
It is normally not needed to call this function in a normal application
as the resources will automatically be freed when the program terminates.
This function is therefore mostly used by testsuites and other memory
profiling tools.
After this call GStreamer (including this method) should not be used anymore.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
    </function>
    <function name="error_get_message"
              c:identifier="gst_error_get_message"
              doc="Get a string describing the error message in the current locale.
current locale.">
      <return-value transfer-ownership="full">
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="domain" transfer-ownership="none">
          <type name="GLib.Quark" c:type="GQuark"/>
        </parameter>
        <parameter name="code" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="event_type_get_flags"
              c:identifier="gst_event_type_get_flags"
              doc="Gets the #GstEventTypeFlags associated with @type.">
      <return-value transfer-ownership="full">
        <type name="EventTypeFlags" c:type="GstEventTypeFlags"/>
      </return-value>
      <parameters>
        <parameter name="type" transfer-ownership="none">
          <type name="EventType" c:type="GstEventType"/>
        </parameter>
      </parameters>
    </function>
    <function name="event_type_get_name"
              c:identifier="gst_event_type_get_name"
              doc="Get a printable name for the given event type. Do not modify or free.">
      <return-value transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="type" transfer-ownership="none">
          <type name="EventType" c:type="GstEventType"/>
        </parameter>
      </parameters>
    </function>
    <function name="event_type_to_quark"
              c:identifier="gst_event_type_to_quark"
              doc="Get the unique quark for the given event type.">
      <return-value transfer-ownership="full">
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
      <parameters>
        <parameter name="type" transfer-ownership="none">
          <type name="EventType" c:type="GstEventType"/>
        </parameter>
      </parameters>
    </function>
    <function name="filter_run"
              c:identifier="gst_filter_run"
              doc="Iterates over the elements in @list, calling @func with the
list item data for each item.  If @func returns TRUE, @data is
prepended to the list of results returned.  If @first is true,
the search is halted after the first result is found.
Since gst_filter_run() knows nothing about the type of @data, no
reference will be taken (if @data refers to an object) and no copy of
results.
(the data contained in the list is a flat copy and does need to be
unreferenced or freed).">
      <return-value transfer-ownership="full" doc="when no longer needed">
        <type name="GLib.List" c:type="GList*"/>
      </return-value>
      <parameters>
        <parameter name="list" transfer-ownership="none">
          <type name="GLib.List" c:type="GList*"/>
        </parameter>
        <parameter name="func" transfer-ownership="none" scope="call">
          <type name="FilterFunc" c:type="GstFilterFunc"/>
        </parameter>
        <parameter name="first" transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </function>
    <function name="flow_get_name"
              c:identifier="gst_flow_get_name"
              doc="Gets a string representing the given flow return.">
      <return-value transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="ret" transfer-ownership="none">
          <type name="FlowReturn" c:type="GstFlowReturn"/>
        </parameter>
      </parameters>
    </function>
    <function name="flow_to_quark"
              c:identifier="gst_flow_to_quark"
              doc="Get the unique quark for the given GstFlowReturn.
invalid return was specified.">
      <return-value transfer-ownership="full">
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
      <parameters>
        <parameter name="ret" transfer-ownership="none">
          <type name="FlowReturn" c:type="GstFlowReturn"/>
        </parameter>
      </parameters>
    </function>
    <function name="format_get_by_nick"
              c:identifier="gst_format_get_by_nick"
              doc="Return the format registered with the given nick.
if the format was not registered.">
      <return-value transfer-ownership="full">
        <type name="Format" c:type="GstFormat"/>
      </return-value>
      <parameters>
        <parameter name="nick" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="format_get_details"
              c:identifier="gst_format_get_details"
              doc="Get details about the given format.
MT safe.">
      <return-value transfer-ownership="none">
        <type name="FormatDefinition" c:type="GstFormatDefinition*"/>
      </return-value>
      <parameters>
        <parameter name="format" transfer-ownership="none">
          <type name="Format" c:type="GstFormat"/>
        </parameter>
      </parameters>
    </function>
    <function name="format_get_name"
              c:identifier="gst_format_get_name"
              doc="Get a printable name for the given format. Do not modify or free.
the format is unknown.">
      <return-value transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="format" transfer-ownership="none">
          <type name="Format" c:type="GstFormat"/>
        </parameter>
      </parameters>
    </function>
    <function name="format_iterate_definitions"
              c:identifier="gst_format_iterate_definitions"
              doc="Iterate all the registered formats. The format definition is read
only.">
      <return-value transfer-ownership="full">
        <type name="Iterator" c:type="GstIterator*"/>
      </return-value>
    </function>
    <function name="format_register"
              c:identifier="gst_format_register"
              doc="Create a new GstFormat based on the nick or return an
already registered format with that nick.
with the same nick.
MT safe.">
      <return-value transfer-ownership="full">
        <type name="Format" c:type="GstFormat"/>
      </return-value>
      <parameters>
        <parameter name="nick" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="description" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="format_to_quark"
              c:identifier="gst_format_to_quark"
              doc="Get the unique quark for the given format.
is unknown.">
      <return-value transfer-ownership="full">
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
      <parameters>
        <parameter name="format" transfer-ownership="none">
          <type name="Format" c:type="GstFormat"/>
        </parameter>
      </parameters>
    </function>
    <function name="formats_contains"
              c:identifier="gst_formats_contains"
              doc="See if the given format is inside the format array.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="formats" transfer-ownership="none">
          <type name="Format" c:type="GstFormat*"/>
        </parameter>
        <parameter name="format" transfer-ownership="none">
          <type name="Format" c:type="GstFormat"/>
        </parameter>
      </parameters>
    </function>
    <function name="implements_interface_cast"
              c:identifier="gst_implements_interface_cast"
              doc="cast a given object to an interface type, and check whether this
interface is supported for this specific instance.">
      <return-value transfer-ownership="none">
        <type name="any" c:type="gpointer"/>
      </return-value>
      <parameters>
        <parameter name="from"
                   transfer-ownership="none"
                   doc="from which to cast to the interface">
          <type name="any" c:type="gpointer"/>
        </parameter>
        <parameter name="type" transfer-ownership="none">
          <type name="GType" c:type="GType"/>
        </parameter>
      </parameters>
    </function>
    <function name="implements_interface_check"
              c:identifier="gst_implements_interface_check"
              doc="check a given object for an interface implementation, and check
whether this interface is supported for this specific instance.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="from"
                   transfer-ownership="none"
                   doc="from which to check from for the interface">
          <type name="any" c:type="gpointer"/>
        </parameter>
        <parameter name="type" transfer-ownership="none">
          <type name="GType" c:type="GType"/>
        </parameter>
      </parameters>
    </function>
    <function name="init"
              c:identifier="gst_init"
              doc="Initializes the GStreamer library, setting up internal path lists,
registering built-in elements, and loading standard plugins.
Unless the plugin registry is disabled at compile time, the registry will be
loaded. By default this will also check if the registry cache needs to be
updated and rescan all plugins if needed. See gst_update_registry() for
details and section
&lt;link linkend=&quot;gst-running&quot;&gt;Running GStreamer Applications&lt;/link&gt;
for how to disable automatic registry updates.
This function should be called before calling any other GLib functions. If
this is not an option, your program must initialise the GLib thread system
using g_thread_init() before any other GLib functions are called.
&lt;note&gt;&lt;para&gt;
This function will terminate your program if it was unable to initialize
GStreamer for some reason.  If you want your program to fall back,
use gst_init_check() instead.
&lt;/para&gt;&lt;/note&gt;
functions in other glib-style libraries, such as gtk_init().  In
particular, unknown command line options cause this function to
abort program execution.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="argc"
                   direction="inout"
                   caller-allocates="0"
                   transfer-ownership="full"
                   doc="pointer to application&apos;s argc">
          <type name="int" c:type="int*"/>
        </parameter>
        <parameter name="argv"
                   direction="inout"
                   caller-allocates="0"
                   transfer-ownership="full"
                   allow-none="1"
                   doc="pointer to application&apos;s argv">
          <array length="0" c:type="char**">
            <type name="utf8"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="init_check"
              c:identifier="gst_init_check"
              doc="Initializes the GStreamer library, setting up internal path lists,
registering built-in elements, and loading standard plugins.
This function will return %FALSE if GStreamer could not be initialized
for some reason.  If you want your program to fail fatally,
use gst_init() instead.
This function should be called before calling any other GLib functions. If
this is not an option, your program must initialise the GLib thread system
using g_thread_init() before any other GLib functions are called."
              throws="1">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="argc"
                   direction="inout"
                   caller-allocates="0"
                   transfer-ownership="full"
                   doc="pointer to application&apos;s argc">
          <type name="int" c:type="int*"/>
        </parameter>
        <parameter name="argv"
                   direction="inout"
                   caller-allocates="0"
                   transfer-ownership="full"
                   allow-none="1"
                   doc="pointer to application&apos;s argv">
          <array length="0" c:type="char**">
            <type name="utf8"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="init_get_option_group"
              c:identifier="gst_init_get_option_group"
              doc="Returns a #GOptionGroup with GStreamer&apos;s argument specifications. The
group is set up to use standard GOption callbacks, so when using this
group in combination with GOption parsing methods, all argument parsing
and initialization is automated.
This function is useful if you want to integrate GStreamer with other
libraries that use GOption (see g_option_context_add_group() ).
If you use this function, you should make sure you initialise the GLib
threading system as one of the very first things in your program
(see the example at the beginning of this section).">
      <return-value transfer-ownership="full">
        <type name="GLib.OptionGroup" c:type="GOptionGroup*"/>
      </return-value>
    </function>
    <function name="is_tag_list"
              c:identifier="gst_is_tag_list"
              doc="Checks if the given pointer is a taglist.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="p" transfer-ownership="none">
          <type name="any" c:type="gconstpointer"/>
        </parameter>
      </parameters>
    </function>
    <function name="message_type_get_name"
              c:identifier="gst_message_type_get_name"
              doc="Get a printable name for the given message type. Do not modify or free.">
      <return-value transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="type" transfer-ownership="none">
          <type name="MessageType" c:type="GstMessageType"/>
        </parameter>
      </parameters>
    </function>
    <function name="message_type_to_quark"
              c:identifier="gst_message_type_to_quark"
              doc="Get the unique quark for the given message type.">
      <return-value transfer-ownership="full">
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
      <parameters>
        <parameter name="type" transfer-ownership="none">
          <type name="MessageType" c:type="GstMessageType"/>
        </parameter>
      </parameters>
    </function>
    <function name="param_spec_fraction"
              c:identifier="gst_param_spec_fraction"
              doc="This function creates a fraction GParamSpec for use by objects/elements
that want to expose properties of fraction type. This function is typically
used in connection with g_object_class_install_property() in a GObjects&apos;s
instance_init function."
              version="0.10.14">
      <return-value transfer-ownership="full">
        <type name="GObject.ParamSpec" c:type="GParamSpec*"/>
      </return-value>
      <parameters>
        <parameter name="name" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="nick" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="blurb" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="min_num" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="min_denom" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="max_num" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="max_denom" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="default_num" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="default_denom" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="flags" transfer-ownership="none">
          <type name="GObject.ParamFlags" c:type="GParamFlags"/>
        </parameter>
      </parameters>
    </function>
    <function name="param_spec_mini_object"
              c:identifier="gst_param_spec_mini_object"
              doc="Creates a new #GParamSpec instance that hold #GstMiniObject references.">
      <return-value transfer-ownership="full">
        <type name="GObject.ParamSpec" c:type="GParamSpec*"/>
      </return-value>
      <parameters>
        <parameter name="name" transfer-ownership="none">
          <type name="utf8" c:type="char*"/>
        </parameter>
        <parameter name="nick" transfer-ownership="none">
          <type name="utf8" c:type="char*"/>
        </parameter>
        <parameter name="blurb" transfer-ownership="none">
          <type name="utf8" c:type="char*"/>
        </parameter>
        <parameter name="object_type" transfer-ownership="none">
          <type name="GType" c:type="GType"/>
        </parameter>
        <parameter name="flags" transfer-ownership="none">
          <type name="GObject.ParamFlags" c:type="GParamFlags"/>
        </parameter>
      </parameters>
    </function>
    <function name="parse_bin_from_description"
              c:identifier="gst_parse_bin_from_description"
              doc="This is a convenience wrapper around gst_parse_launch() to create a
#GstBin from a gst-launch-style pipeline description. See
gst_parse_launch() and the gst-launch man page for details about the
syntax. Ghost pads on the bin for unlinked source or sink pads
within the bin can automatically be created (but only a maximum of
one ghost pad for each direction will be created; if you expect
multiple unlinked source pads or multiple unlinked sink pads
and want them all ghosted, you will have to create the ghost pads
yourself)."
              version="0.10.3"
              throws="1">
      <return-value transfer-ownership="full">
        <type name="Element" c:type="GstElement*"/>
      </return-value>
      <parameters>
        <parameter name="bin_description" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="ghost_unlinked_pads"
                   transfer-ownership="none"
                   doc=" for unlinked source or sink pads within the bin">
          <type name="boolean" c:type="gboolean"/>
        </parameter>
      </parameters>
    </function>
    <function name="parse_bin_from_description_full"
              c:identifier="gst_parse_bin_from_description_full"
              doc="This is a convenience wrapper around gst_parse_launch() to create a
#GstBin from a gst-launch-style pipeline description. See
gst_parse_launch() and the gst-launch man page for details about the
syntax. Ghost pads on the bin for unlinked source or sink pads
within the bin can automatically be created (but only a maximum of
one ghost pad for each direction will be created; if you expect
multiple unlinked source pads or multiple unlinked sink pads
and want them all ghosted, you will have to create the ghost pads
yourself)."
              version="0.10.20"
              throws="1">
      <return-value transfer-ownership="full">
        <type name="Element" c:type="GstElement*"/>
      </return-value>
      <parameters>
        <parameter name="bin_description" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="ghost_unlinked_pads"
                   transfer-ownership="none"
                   doc=" for unlinked source or sink pads within the bin">
          <type name="boolean" c:type="gboolean"/>
        </parameter>
        <parameter name="context" transfer-ownership="none" doc="or %NULL">
          <type name="ParseContext" c:type="GstParseContext*"/>
        </parameter>
        <parameter name="flags" transfer-ownership="none">
          <type name="ParseFlags" c:type="GstParseFlags"/>
        </parameter>
      </parameters>
    </function>
    <function name="parse_launch"
              c:identifier="gst_parse_launch"
              doc="Create a new pipeline based on command line syntax.
Please note that you might get a return value that is not %NULL even though
the @error is set. In this case there was a recoverable parsing error and you
can try to play the pipeline.
element is specified by the @pipeline_description, all elements are put into
a #GstPipeline, which than is returned."
              throws="1">
      <return-value transfer-ownership="full">
        <type name="Element" c:type="GstElement*"/>
      </return-value>
      <parameters>
        <parameter name="pipeline_description" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="parse_launch_full"
              c:identifier="gst_parse_launch_full"
              doc="Create a new pipeline based on command line syntax.
Please note that you might get a return value that is not %NULL even though
the @error is set. In this case there was a recoverable parsing error and you
can try to play the pipeline.
element is specified by the @pipeline_description, all elements are put into
a #GstPipeline, which then is returned."
              version="0.10.20"
              throws="1">
      <return-value transfer-ownership="full">
        <type name="Element" c:type="GstElement*"/>
      </return-value>
      <parameters>
        <parameter name="pipeline_description" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="context" transfer-ownership="none" doc="or %NULL">
          <type name="ParseContext" c:type="GstParseContext*"/>
        </parameter>
        <parameter name="flags" transfer-ownership="none">
          <type name="ParseFlags" c:type="GstParseFlags"/>
        </parameter>
      </parameters>
    </function>
    <function name="parse_launchv"
              c:identifier="gst_parse_launchv"
              doc="Create a new element based on command line syntax.
An error does not mean that the pipeline could not be constructed."
              throws="1">
      <return-value transfer-ownership="full">
        <type name="Element" c:type="GstElement*"/>
      </return-value>
      <parameters>
        <parameter name="argv" transfer-ownership="none">
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="parse_launchv_full"
              c:identifier="gst_parse_launchv_full"
              doc="Create a new element based on command line syntax.
An error does not mean that the pipeline could not be constructed.
partially-constructed bin or element will be returned and @error will be set
(unless you passed #GST_PARSE_FLAG_FATAL_ERRORS in @flags, then %NULL will
always be returned on failure)"
              version="0.10.20"
              throws="1">
      <return-value transfer-ownership="full">
        <type name="Element" c:type="GstElement*"/>
      </return-value>
      <parameters>
        <parameter name="argv" transfer-ownership="none">
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </parameter>
        <parameter name="context" transfer-ownership="none" doc="or %NULL">
          <type name="ParseContext" c:type="GstParseContext*"/>
        </parameter>
        <parameter name="flags" transfer-ownership="none">
          <type name="ParseFlags" c:type="GstParseFlags"/>
        </parameter>
      </parameters>
    </function>
    <function name="print_element_args"
              c:identifier="gst_print_element_args"
              doc="Print the element argument in a human readable format in the given
GString.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buf" transfer-ownership="none">
          <type name="GLib.String" c:type="GString*"/>
        </parameter>
        <parameter name="indent" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="element" transfer-ownership="none">
          <type name="Element" c:type="GstElement*"/>
        </parameter>
      </parameters>
    </function>
    <function name="print_pad_caps"
              c:identifier="gst_print_pad_caps"
              doc="Write the pad capabilities in a human readable format into
the given GString.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buf" transfer-ownership="none">
          <type name="GLib.String" c:type="GString*"/>
        </parameter>
        <parameter name="indent" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="pad" transfer-ownership="none">
          <type name="Pad" c:type="GstPad*"/>
        </parameter>
      </parameters>
    </function>
    <function name="query_type_get_by_nick"
              c:identifier="gst_query_type_get_by_nick"
              doc="Get the query type registered with @nick.
if the query was not registered.">
      <return-value transfer-ownership="full">
        <type name="QueryType" c:type="GstQueryType"/>
      </return-value>
      <parameters>
        <parameter name="nick" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="query_type_get_details"
              c:identifier="gst_query_type_get_details"
              doc="Get details about the given #GstQueryType.">
      <return-value transfer-ownership="none">
        <type name="QueryTypeDefinition" c:type="GstQueryTypeDefinition*"/>
      </return-value>
      <parameters>
        <parameter name="type" transfer-ownership="none">
          <type name="QueryType" c:type="GstQueryType"/>
        </parameter>
      </parameters>
    </function>
    <function name="query_type_get_name"
              c:identifier="gst_query_type_get_name"
              doc="Get a printable name for the given query type. Do not modify or free.">
      <return-value transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="query" transfer-ownership="none">
          <type name="QueryType" c:type="GstQueryType"/>
        </parameter>
      </parameters>
    </function>
    <function name="query_type_iterate_definitions"
              c:identifier="gst_query_type_iterate_definitions"
              doc="Get a #GstIterator of all the registered query types. The definitions
iterated over are read only.">
      <return-value transfer-ownership="full">
        <type name="Iterator" c:type="GstIterator*"/>
      </return-value>
    </function>
    <function name="query_type_register"
              c:identifier="gst_query_type_register"
              doc="Create a new GstQueryType based on the nick or return an
already registered query with that nick
with the same nick.">
      <return-value transfer-ownership="full">
        <type name="QueryType" c:type="GstQueryType"/>
      </return-value>
      <parameters>
        <parameter name="nick" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="description" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="query_type_to_quark"
              c:identifier="gst_query_type_to_quark"
              doc="Get the unique quark for the given query type.">
      <return-value transfer-ownership="full">
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
      <parameters>
        <parameter name="query" transfer-ownership="none">
          <type name="QueryType" c:type="GstQueryType"/>
        </parameter>
      </parameters>
    </function>
    <function name="query_types_contains"
              c:identifier="gst_query_types_contains"
              doc="See if the given #GstQueryType is inside the @types query types array.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="types" transfer-ownership="none">
          <type name="QueryType" c:type="GstQueryType*"/>
        </parameter>
        <parameter name="type" transfer-ownership="none">
          <type name="QueryType" c:type="GstQueryType"/>
        </parameter>
      </parameters>
    </function>
    <function name="segtrap_is_enabled"
              c:identifier="gst_segtrap_is_enabled"
              doc="Some functions in the GStreamer core might install a custom SIGSEGV handler
to better catch and report errors to the application. Currently this feature
is enabled by default when loading plugins.
Applications might want to disable this behaviour with the
gst_segtrap_set_enabled() function. This is typically done if the application
wants to install its own handler without GStreamer interfering."
              version="0.10.10">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
    </function>
    <function name="segtrap_set_enabled"
              c:identifier="gst_segtrap_set_enabled"
              doc="Applications might want to disable/enable the SIGSEGV handling of
the GStreamer core. See gst_segtrap_is_enabled() for more information."
              version="0.10.10">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="enabled" transfer-ownership="none">
          <type name="boolean" c:type="gboolean"/>
        </parameter>
      </parameters>
    </function>
    <function name="structure_empty_new"
              c:identifier="gst_structure_empty_new"
              doc="Creates a new, empty #GstStructure with the given @name.
See gst_structure_set_name() for constraints on the @name parameter.">
      <return-value transfer-ownership="full">
        <type name="Structure" c:type="GstStructure*"/>
      </return-value>
      <parameters>
        <parameter name="name" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="structure_from_string"
              c:identifier="gst_structure_from_string"
              doc="Creates a #GstStructure from a string representation.
If end is not NULL, a pointer to the place inside the given string
where parsing ended will be returned.
be parsed. Free with gst_structure_free() after use.">
      <return-value transfer-ownership="full">
        <type name="Structure" c:type="GstStructure*"/>
      </return-value>
      <parameters>
        <parameter name="string" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="end" transfer-ownership="none">
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="structure_id_empty_new"
              c:identifier="gst_structure_id_empty_new"
              doc="Creates a new, empty #GstStructure with the given name as a GQuark.">
      <return-value transfer-ownership="full">
        <type name="Structure" c:type="GstStructure*"/>
      </return-value>
      <parameters>
        <parameter name="quark" transfer-ownership="none">
          <type name="GLib.Quark" c:type="GQuark"/>
        </parameter>
      </parameters>
    </function>
    <function name="structure_id_new"
              c:identifier="gst_structure_id_new"
              doc="Creates a new #GstStructure with the given name as a GQuark, followed by
fieldname quark, GType, argument(s) &quot;triplets&quot; in the same format as
gst_structure_id_set(). Basically a convenience wrapper around
gst_structure_id_empty_new() and gst_structure_id_set().
The last variable argument must be NULL (or 0)."
              version="0.10.24">
      <return-value transfer-ownership="full">
        <type name="Structure" c:type="GstStructure*"/>
      </return-value>
      <parameters>
        <parameter name="name_quark" transfer-ownership="none">
          <type name="GLib.Quark" c:type="GQuark"/>
        </parameter>
        <parameter name="field_quark" transfer-ownership="none">
          <type name="GLib.Quark" c:type="GQuark"/>
        </parameter>
        <parameter transfer-ownership="none">
          <varargs>
          </varargs>
        </parameter>
      </parameters>
    </function>
    <function name="tag_exists"
              c:identifier="gst_tag_exists"
              doc="Checks if the given type is already registered.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="tag" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="tag_get_description"
              c:identifier="gst_tag_get_description"
              doc="Returns the human-readable description of this tag, You must not change or
free this string.">
      <return-value transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="tag" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="tag_get_flag"
              c:identifier="gst_tag_get_flag"
              doc="Gets the flag of @tag.">
      <return-value transfer-ownership="full">
        <type name="TagFlag" c:type="GstTagFlag"/>
      </return-value>
      <parameters>
        <parameter name="tag" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="tag_get_nick" c:identifier="gst_tag_get_nick">
      <return-value transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="tag" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="tag_get_type"
              c:identifier="gst_tag_get_type"
              doc="Gets the #GType used for this tag.">
      <return-value transfer-ownership="none">
        <type name="GType" c:type="GType"/>
      </return-value>
      <parameters>
        <parameter name="tag" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="tag_is_fixed"
              c:identifier="gst_tag_is_fixed"
              doc="Checks if the given tag is fixed. A fixed tag can only contain one value.
Unfixed tags can contain lists of values.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="tag" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="tag_list_copy_value"
              c:identifier="gst_tag_list_copy_value"
              doc="Copies the contents for the given tag into the value,
merging multiple values into one if multiple values are associated
with the tag.
You must g_value_unset() the value after use.
given list.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="dest" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="list" transfer-ownership="none">
          <type name="TagList" c:type="GstTagList*"/>
        </parameter>
        <parameter name="tag" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="tag_merge_strings_with_comma"
              c:identifier="gst_tag_merge_strings_with_comma"
              doc="This is a convenience function for the func argument of gst_tag_register().
It concatenates all given strings using a comma. The tag must be registered
as a G_TYPE_STRING or this function will fail.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="dest" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="src" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="tag_merge_use_first"
              c:identifier="gst_tag_merge_use_first"
              doc="This is a convenience function for the func argument of gst_tag_register().
It creates a copy of the first value from the list.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="dest" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="src" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="tag_register"
              c:identifier="gst_tag_register"
              doc="Registers a new tag type for the use with GStreamer&apos;s type system. If a type
with that name is already registered, that one is used.
The old registration may have used a different type however. So don&apos;t rely
on your supplied values.
that there can only be one single value for this tag in a tag list and
any additional values will silenty be discarded when being added (unless
#GST_TAG_MERGE_REPLACE, #GST_TAG_MERGE_REPLACE_ALL, or
#GST_TAG_MERGE_PREPEND is used as merge mode, in which case the new
value will replace the old one in the list).
The merge function will be called from gst_tag_list_copy_value() when
it is required that one or more values for a tag be condensed into
one single value. This may happen from gst_tag_list_get_string(),
gst_tag_list_get_int(), gst_tag_list_get_double() etc. What will happen
exactly in that case depends on how the tag was registered and if a
merge function was supplied and if so which one.
gst_tag_merge_strings_with_comma().">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="name" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="flag" transfer-ownership="none">
          <type name="TagFlag" c:type="GstTagFlag"/>
        </parameter>
        <parameter name="type" transfer-ownership="none">
          <type name="GType" c:type="GType"/>
        </parameter>
        <parameter name="nick" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="blurb" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="func" transfer-ownership="none" scope="call">
          <type name="TagMergeFunc" c:type="GstTagMergeFunc"/>
        </parameter>
      </parameters>
    </function>
    <function name="trace_read_tsc"
              c:identifier="gst_trace_read_tsc"
              doc="Read a platform independent timer value that can be used in
benchmarks.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="dst"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="int64" c:type="gint64*"/>
        </parameter>
      </parameters>
    </function>
    <function name="type_find_register"
              c:identifier="gst_type_find_register"
              doc="Registers a new typefind function to be used for typefinding. After
registering this function will be available for typefinding.
This function is typically called during an element&apos;s plugin initialization.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="plugin"
                   transfer-ownership="none"
                   doc=" passing NULL only works in GStreamer 0.10.16 and later)">
          <type name="Plugin" c:type="GstPlugin*"/>
        </parameter>
        <parameter name="name" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="rank"
                   transfer-ownership="none"
                   doc="of this typefind function">
          <type name="uint" c:type="guint"/>
        </parameter>
        <parameter name="func" transfer-ownership="none" scope="call">
          <type name="TypeFindFunction" c:type="GstTypeFindFunction"/>
        </parameter>
        <parameter name="extensions" transfer-ownership="none">
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </parameter>
        <parameter name="possible_caps"
                   transfer-ownership="none"
                   doc=" succeeds">
          <type name="Caps" c:type="GstCaps*"/>
        </parameter>
        <parameter name="data" transfer-ownership="none" doc=" is unloaded.">
          <type name="any" c:type="gpointer"/>
        </parameter>
        <parameter name="data_notify"
                   transfer-ownership="none"
                   scope="call"
                   doc=" is unloaded.">
          <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
        </parameter>
      </parameters>
    </function>
    <function name="type_register_static_full"
              c:identifier="gst_type_register_static_full"
              doc="Helper function which constructs a #GTypeInfo structure and registers a
GType, but which generates less linker overhead than a static const
#GTypeInfo structure. For further details of the parameters, please see
#GTypeInfo in the GLib documentation.
Registers type_name as the name of a new static type derived from
parent_type. The value of flags determines the nature (e.g. abstract or
not) of the type. It works by filling a GTypeInfo struct and calling
g_type_register_static()."
              version="0.10.14">
      <return-value transfer-ownership="none">
        <type name="GType" c:type="GType"/>
      </return-value>
      <parameters>
        <parameter name="parent_type"
                   transfer-ownership="none"
                   doc=" derive from">
          <type name="GType" c:type="GType"/>
        </parameter>
        <parameter name="type_name" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="class_size" transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </parameter>
        <parameter name="base_init" transfer-ownership="none" scope="call">
          <type name="GObject.BaseInitFunc" c:type="GBaseInitFunc"/>
        </parameter>
        <parameter name="base_finalize" transfer-ownership="none" scope="call">
          <type name="GObject.BaseFinalizeFunc" c:type="GBaseFinalizeFunc"/>
        </parameter>
        <parameter name="class_init"
                   transfer-ownership="none"
                   scope="call"
                   doc=" Location of the default vtable inititalization function for interface types. (optional)">
          <type name="GObject.ClassInitFunc" c:type="GClassInitFunc"/>
        </parameter>
        <parameter name="class_finalize"
                   transfer-ownership="none"
                   scope="call"
                   closure="7"
                   doc=" Location of the default vtable finalization function for interface types. (optional)">
          <type name="GObject.ClassFinalizeFunc" c:type="GClassFinalizeFunc"/>
        </parameter>
        <parameter name="class_data" transfer-ownership="none">
          <type name="any" c:type="gconstpointer"/>
        </parameter>
        <parameter name="instance_size"
                   transfer-ownership="none"
                   doc="structure (required for instantiatable types only).">
          <type name="uint" c:type="guint"/>
        </parameter>
        <parameter name="n_preallocs"
                   transfer-ownership="none"
                   doc="instances to reserve memory for (0 indicates no caching). Ignored on recent GLib&apos;s.">
          <type name="uint16" c:type="guint16"/>
        </parameter>
        <parameter name="instance_init"
                   transfer-ownership="none"
                   scope="call"
                   doc=" for instantiatable types only).">
          <type name="GObject.InstanceInitFunc" c:type="GInstanceInitFunc"/>
        </parameter>
        <parameter name="value_table"
                   transfer-ownership="none"
                   doc=" GValues of this type (usually only useful for fundamental types).">
          <type name="GObject.TypeValueTable" c:type="GTypeValueTable*"/>
        </parameter>
        <parameter name="flags" transfer-ownership="none">
          <type name="GObject.TypeFlags" c:type="GTypeFlags"/>
        </parameter>
      </parameters>
    </function>
    <function name="update_registry"
              c:identifier="gst_update_registry"
              doc="Forces GStreamer to re-scan its plugin paths and update the default
plugin registry.
Applications will almost never need to call this function, it is only
useful if the application knows new plugins have been installed (or old
ones removed) since the start of the application (or, to be precise, the
first call to gst_init()) and the application wants to make use of any
newly-installed plugins without restarting the application.
Applications should assume that the registry update is neither atomic nor
thread-safe and should therefore not have any dynamic pipelines running
(including the playbin and decodebin elements) and should also not create
any elements or access the GStreamer registry while the update is in
progress.
Note that this function may block for a significant amount of time.
imply that there were changes), otherwise %FALSE."
              version="0.10.12">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
    </function>
    <function name="uri_construct"
              c:identifier="gst_uri_construct"
              doc="Constructs a URI for a given valid protocol and location.
is not valid, or the given location is NULL.">
      <return-value transfer-ownership="full">
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="protocol" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="location" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="uri_get_location"
              c:identifier="gst_uri_get_location"
              doc="Extracts the location out of a given valid URI, ie. the protocol and &quot;://&quot;
are stripped from the URI, which means that the location returned includes
the hostname if one is specified. The returned string must be freed using
g_free().
the URI does not contain a location, an empty string is returned.">
      <return-value transfer-ownership="full">
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="uri" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="uri_get_protocol"
              c:identifier="gst_uri_get_protocol"
              doc="Extracts the protocol out of a given valid URI. The returned string must be
freed using g_free().">
      <return-value transfer-ownership="full">
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="uri" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="uri_has_protocol"
              c:identifier="gst_uri_has_protocol"
              doc="Checks if the protocol of a given valid URI matches @protocol."
              version="0.10.4">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="uri" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="protocol" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="uri_is_valid"
              c:identifier="gst_uri_is_valid"
              doc="Tests if the given string is a valid URI identifier. URIs start with a valid
scheme followed by &quot;:&quot; and maybe a string identifying the location.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="uri" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="uri_protocol_is_supported"
              c:identifier="gst_uri_protocol_is_supported"
              doc="Checks if an element exists that supports the given URI protocol. Note
that a positive return value does not imply that a subsequent call to
gst_element_make_from_uri() is guaranteed to work."
              version="0.10.13">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="type" transfer-ownership="none">
          <type name="URIType" c:type="GstURIType"/>
        </parameter>
        <parameter name="protocol" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="uri_protocol_is_valid"
              c:identifier="gst_uri_protocol_is_valid"
              doc="Tests if the given string is a valid protocol identifier. Protocols
must consist of alphanumeric characters, &apos;+&apos;, &apos;-&apos; and &apos;.&apos; and must
start with a alphabetic character. See RFC 3986 Section 3.1.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="protocol" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_array_binary_search"
              c:identifier="gst_util_array_binary_search"
              doc="Searches inside @array for @search_data by using the comparison function
As @search_data is always passed as second argument to @search_func it&apos;s
not required that @search_data has the same type as the array elements.
The complexity of this search function is O(log (num_elements))."
              version="0.10.23">
      <return-value transfer-ownership="none">
        <type name="any" c:type="gpointer"/>
      </return-value>
      <parameters>
        <parameter name="array" transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </parameter>
        <parameter name="num_elements" transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </parameter>
        <parameter name="element_size" transfer-ownership="none">
          <type name="size_t" c:type="gsize"/>
        </parameter>
        <parameter name="search_func" transfer-ownership="none" scope="call">
          <type name="GLib.CompareDataFunc" c:type="GCompareDataFunc"/>
        </parameter>
        <parameter name="mode" transfer-ownership="none">
          <type name="SearchMode" c:type="GstSearchMode"/>
        </parameter>
        <parameter name="search_data" transfer-ownership="none">
          <type name="any" c:type="gconstpointer"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="any" c:type="gpointer"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_double_to_fraction"
              c:identifier="gst_util_double_to_fraction"
              doc="Transforms a #gdouble to a fraction and simplifies
the result."
              version="0.10.26">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="src" transfer-ownership="none">
          <type name="double" c:type="gdouble"/>
        </parameter>
        <parameter name="dest_n"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="int" c:type="gint*"/>
        </parameter>
        <parameter name="dest_d"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="int" c:type="gint*"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_dump_mem"
              c:identifier="gst_util_dump_mem"
              doc="Dumps the memory block into a hex representation. Useful for debugging.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="mem" transfer-ownership="none">
          <array c:type="guchar*">
            <type name="uint8"/>
          </array>
        </parameter>
        <parameter name="size" transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_fraction_add"
              c:identifier="gst_util_fraction_add"
              doc="Adds the fractions @a_n/@a_d and @b_n/@b_d and stores
the result in @res_n and @res_d."
              version="0.10.26">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="a_n" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="a_d" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="b_n" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="b_d" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="res_n"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="int" c:type="gint*"/>
        </parameter>
        <parameter name="res_d"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="int" c:type="gint*"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_fraction_multiply"
              c:identifier="gst_util_fraction_multiply"
              doc="Multiplies the fractions @a_n/@a_d and @b_n/@b_d and stores
the result in @res_n and @res_d."
              version="0.10.26">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="a_n" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="a_d" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="b_n" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="b_d" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="res_n"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="int" c:type="gint*"/>
        </parameter>
        <parameter name="res_d"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="int" c:type="gint*"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_fraction_to_double"
              c:identifier="gst_util_fraction_to_double"
              doc="Transforms a #gdouble to a fraction and simplifies the result."
              version="0.10.26">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="src_n" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="src_d" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="dest"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="double" c:type="gdouble*"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_gdouble_to_guint64"
              c:identifier="gst_util_gdouble_to_guint64">
      <return-value transfer-ownership="none">
        <type name="uint64" c:type="guint64"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="double" c:type="gdouble"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_get_timestamp"
              c:identifier="gst_util_get_timestamp"
              doc="Get a timestamp as GstClockTime to be used for interval meassurements.
The timestamp should not be interpreted in any other way."
              version="0.10.16">
      <return-value transfer-ownership="full">
        <type name="ClockTime" c:type="GstClockTime"/>
      </return-value>
    </function>
    <function name="util_greatest_common_divisor"
              c:identifier="gst_util_greatest_common_divisor"
              doc="Calculates the greatest common divisor of @a
and @b."
              version="0.10.26">
      <return-value transfer-ownership="none">
        <type name="int" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="a" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="b" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_guint64_to_gdouble"
              c:identifier="gst_util_guint64_to_gdouble">
      <return-value transfer-ownership="none">
        <type name="double" c:type="gdouble"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="uint64" c:type="guint64"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_seqnum_compare"
              c:identifier="gst_util_seqnum_compare"
              doc="Compare two sequence numbers, handling wraparound.
The current implementation just returns (gint32)(@s1 - @s2).
positive number if @s1 is after @s2."
              version="0.10.22">
      <return-value transfer-ownership="none">
        <type name="int32" c:type="gint32"/>
      </return-value>
      <parameters>
        <parameter name="s1" transfer-ownership="none">
          <type name="uint32" c:type="guint32"/>
        </parameter>
        <parameter name="s2" transfer-ownership="none">
          <type name="uint32" c:type="guint32"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_seqnum_next"
              c:identifier="gst_util_seqnum_next"
              doc="Return a constantly incrementing sequence number.
This function is used internally to GStreamer to be able to determine which
events and messages are &quot;the same&quot;. For example, elements may set the seqnum
on a segment-done message to be the same as that of the last seek event, to
indicate that event and the message correspond to the same segment.
overflow back to 0 at some point. Use gst_util_seqnum_compare() to make sure
you handle wraparound correctly."
              version="0.10.22">
      <return-value transfer-ownership="none">
        <type name="uint32" c:type="guint32"/>
      </return-value>
    </function>
    <function name="util_set_object_arg"
              c:identifier="gst_util_set_object_arg"
              doc="Convertes the string value to the type of the objects argument and
sets the argument with it.
Note that this function silently returns if @object has no property named">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="object" transfer-ownership="none">
          <type name="GObject.Object" c:type="GObject*"/>
        </parameter>
        <parameter name="name" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
        <parameter name="value" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_set_value_from_string"
              c:identifier="gst_util_set_value_from_string"
              doc="Converts the string to the type of the value and
sets the value with it.
Note that this function is dangerous as it does not return any indication
if the conversion worked or not.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="value_str" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_uint64_scale"
              c:identifier="gst_util_uint64_scale"
              doc="Scale @val by the rational number @num / @denom, avoiding overflows and
underflows and without loss of precision.
This function can potentially be very slow if val and num are both
greater than G_MAXUINT32.
function returns G_MAXUINT64.  If the result is not exactly
representable as an integer it is truncated.  See also
gst_util_uint64_scale_round(), gst_util_uint64_scale_ceil(),
gst_util_uint64_scale_int(), gst_util_uint64_scale_int_round(),
gst_util_uint64_scale_int_ceil().">
      <return-value transfer-ownership="none">
        <type name="uint64" c:type="guint64"/>
      </return-value>
      <parameters>
        <parameter name="val" transfer-ownership="none">
          <type name="uint64" c:type="guint64"/>
        </parameter>
        <parameter name="num" transfer-ownership="none">
          <type name="uint64" c:type="guint64"/>
        </parameter>
        <parameter name="denom" transfer-ownership="none">
          <type name="uint64" c:type="guint64"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_uint64_scale_ceil"
              c:identifier="gst_util_uint64_scale_ceil"
              doc="Scale @val by the rational number @num / @denom, avoiding overflows and
underflows and without loss of precision.
This function can potentially be very slow if val and num are both
greater than G_MAXUINT32.
function returns G_MAXUINT64.  If the result is not exactly
representable as an integer, it is rounded up.  See also
gst_util_uint64_scale(), gst_util_uint64_scale_round(),
gst_util_uint64_scale_int(), gst_util_uint64_scale_int_round(),
gst_util_uint64_scale_int_ceil().">
      <return-value transfer-ownership="none">
        <type name="uint64" c:type="guint64"/>
      </return-value>
      <parameters>
        <parameter name="val" transfer-ownership="none">
          <type name="uint64" c:type="guint64"/>
        </parameter>
        <parameter name="num" transfer-ownership="none">
          <type name="uint64" c:type="guint64"/>
        </parameter>
        <parameter name="denom" transfer-ownership="none">
          <type name="uint64" c:type="guint64"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_uint64_scale_int"
              c:identifier="gst_util_uint64_scale_int"
              doc="Scale @val by the rational number @num / @denom, avoiding overflows and
underflows and without loss of precision.  @num must be non-negative and
function returns G_MAXUINT64.  If the result is not exactly
representable as an integer, it is truncated.  See also
gst_util_uint64_scale_int_round(), gst_util_uint64_scale_int_ceil(),
gst_util_uint64_scale(), gst_util_uint64_scale_round(),
gst_util_uint64_scale_ceil().">
      <return-value transfer-ownership="none">
        <type name="uint64" c:type="guint64"/>
      </return-value>
      <parameters>
        <parameter name="val" transfer-ownership="none" doc="to scale.">
          <type name="uint64" c:type="guint64"/>
        </parameter>
        <parameter name="num" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="denom" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_uint64_scale_int_ceil"
              c:identifier="gst_util_uint64_scale_int_ceil"
              doc="Scale @val by the rational number @num / @denom, avoiding overflows and
underflows and without loss of precision.  @num must be non-negative and
function returns G_MAXUINT64.  If the result is not exactly
representable as an integer, it is rounded up.  See also
gst_util_uint64_scale_int(), gst_util_uint64_scale_int_round(),
gst_util_uint64_scale(), gst_util_uint64_scale_round(),
gst_util_uint64_scale_ceil().">
      <return-value transfer-ownership="none">
        <type name="uint64" c:type="guint64"/>
      </return-value>
      <parameters>
        <parameter name="val" transfer-ownership="none" doc="to scale.">
          <type name="uint64" c:type="guint64"/>
        </parameter>
        <parameter name="num" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="denom" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_uint64_scale_int_round"
              c:identifier="gst_util_uint64_scale_int_round"
              doc="Scale @val by the rational number @num / @denom, avoiding overflows and
underflows and without loss of precision.  @num must be non-negative and
function returns G_MAXUINT64.  If the result is not exactly
representable as an integer, it is rounded to the nearest integer
(half-way cases are rounded up).  See also gst_util_uint64_scale_int(),
gst_util_uint64_scale_int_ceil(), gst_util_uint64_scale(),
gst_util_uint64_scale_round(), gst_util_uint64_scale_ceil().">
      <return-value transfer-ownership="none">
        <type name="uint64" c:type="guint64"/>
      </return-value>
      <parameters>
        <parameter name="val" transfer-ownership="none" doc="to scale.">
          <type name="uint64" c:type="guint64"/>
        </parameter>
        <parameter name="num" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="denom" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_uint64_scale_round"
              c:identifier="gst_util_uint64_scale_round"
              doc="Scale @val by the rational number @num / @denom, avoiding overflows and
underflows and without loss of precision.
This function can potentially be very slow if val and num are both
greater than G_MAXUINT32.
function returns G_MAXUINT64.  If the result is not exactly
representable as an integer, it is rounded to the nearest integer
(half-way cases are rounded up).  See also gst_util_uint64_scale(),
gst_util_uint64_scale_ceil(), gst_util_uint64_scale_int(),
gst_util_uint64_scale_int_round(), gst_util_uint64_scale_int_ceil().">
      <return-value transfer-ownership="none">
        <type name="uint64" c:type="guint64"/>
      </return-value>
      <parameters>
        <parameter name="val" transfer-ownership="none">
          <type name="uint64" c:type="guint64"/>
        </parameter>
        <parameter name="num" transfer-ownership="none">
          <type name="uint64" c:type="guint64"/>
        </parameter>
        <parameter name="denom" transfer-ownership="none">
          <type name="uint64" c:type="guint64"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_array_append_value"
              c:identifier="gst_value_array_append_value"
              doc="Appends @append_value to the GstValueArray in @value.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="append_value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_array_get_size"
              c:identifier="gst_value_array_get_size"
              doc="Gets the number of values contained in @value.">
      <return-value transfer-ownership="none">
        <type name="uint" c:type="guint"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_array_get_value"
              c:identifier="gst_value_array_get_value"
              doc="Gets the value that is a member of the array contained in @value and
has the index @index.">
      <return-value transfer-ownership="none">
        <type name="GObject.Value" c:type="GValue*"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="index" transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_array_prepend_value"
              c:identifier="gst_value_array_prepend_value"
              doc="Prepends @prepend_value to the GstValueArray in @value.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="prepend_value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_can_compare"
              c:identifier="gst_value_can_compare"
              doc="Determines if @value1 and @value2 can be compared.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="value1" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="value2" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_can_intersect"
              c:identifier="gst_value_can_intersect"
              doc="Determines if intersecting two values will produce a valid result.
Two values will produce a valid intersection if they have the same
type, or if there is a method (registered by
gst_value_register_intersect_func()) to calculate the intersection.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="value1" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="value2" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_can_subtract"
              c:identifier="gst_value_can_subtract"
              doc="Checks if it&apos;s possible to subtract @subtrahend from @minuend.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="minuend" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="subtrahend" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_can_union"
              c:identifier="gst_value_can_union"
              doc="Determines if @value1 and @value2 can be non-trivially unioned.
Any two values can be trivially unioned by adding both of them
to a GstValueList.  However, certain types have the possibility
to be unioned in a simpler way.  For example, an integer range
and an integer can be unioned if the integer is a subset of the
integer range.  If there is the possibility that two values can
be unioned, this function returns TRUE.
be unioned.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="value1" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="value2" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_compare"
              c:identifier="gst_value_compare"
              doc="Compares @value1 and @value2.  If @value1 and @value2 cannot be
compared, the function returns GST_VALUE_UNORDERED.  Otherwise,
if @value1 is greater than @value2, GST_VALUE_GREATER_THAN is returned.
If @value1 is less than @value2, GST_VALUE_LESS_THAN is returned.
If the values are equal, GST_VALUE_EQUAL is returned.">
      <return-value transfer-ownership="none">
        <type name="int" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="value1" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="value2" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_deserialize"
              c:identifier="gst_value_deserialize"
              doc="Tries to deserialize a string into the type specified by the given GValue.
If the operation succeeds, TRUE is returned, FALSE otherwise.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="dest" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="src" transfer-ownership="none">
          <type name="utf8" c:type="gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_dup_mini_object"
              c:identifier="gst_value_dup_mini_object"
              doc="Get the contents of a %GST_TYPE_MINI_OBJECT derived #GValue,
increasing its reference count."
              version="0.10.20">
      <return-value transfer-ownership="full">
        <type name="MiniObject" c:type="GstMiniObject*"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_fraction_multiply"
              c:identifier="gst_value_fraction_multiply"
              doc="Multiplies the two #GValue items containing a #GST_TYPE_FRACTION and sets">
      <return-value transfer-ownership="none" doc="TRUE otherwise.">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="product" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="factor1" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="factor2" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_fraction_subtract"
              c:identifier="gst_value_fraction_subtract"
              doc="Subtracts the @subtrahend from the @minuend and sets @dest to the result.">
      <return-value transfer-ownership="none" doc="TRUE otherwise.">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="dest" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="minuend" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="subtrahend" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_get_caps"
              c:identifier="gst_value_get_caps"
              doc="Gets the contents of @value.">
      <return-value transfer-ownership="none">
        <type name="Caps" c:type="GstCaps*"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_get_date"
              c:identifier="gst_value_get_date"
              doc="Gets the contents of @value.">
      <return-value transfer-ownership="none">
        <type name="GLib.Date" c:type="GDate*"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_get_double_range_max"
              c:identifier="gst_value_get_double_range_max"
              doc="Gets the maximum of the range specified by @value.">
      <return-value transfer-ownership="none">
        <type name="double" c:type="gdouble"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_get_double_range_min"
              c:identifier="gst_value_get_double_range_min"
              doc="Gets the minimum of the range specified by @value.">
      <return-value transfer-ownership="none">
        <type name="double" c:type="gdouble"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_get_fourcc"
              c:identifier="gst_value_get_fourcc"
              doc="Gets the #guint32 fourcc contained in @value.">
      <return-value transfer-ownership="none">
        <type name="uint32" c:type="guint32"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_get_fraction_denominator"
              c:identifier="gst_value_get_fraction_denominator"
              doc="Gets the denominator of the fraction specified by @value.">
      <return-value transfer-ownership="none">
        <type name="int" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_get_fraction_numerator"
              c:identifier="gst_value_get_fraction_numerator"
              doc="Gets the numerator of the fraction specified by @value.">
      <return-value transfer-ownership="none">
        <type name="int" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_get_fraction_range_max"
              c:identifier="gst_value_get_fraction_range_max"
              doc="Gets the maximum of the range specified by @value.">
      <return-value transfer-ownership="none">
        <type name="GObject.Value" c:type="GValue*"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_get_fraction_range_min"
              c:identifier="gst_value_get_fraction_range_min"
              doc="Gets the minimum of the range specified by @value.">
      <return-value transfer-ownership="none">
        <type name="GObject.Value" c:type="GValue*"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_get_int_range_max"
              c:identifier="gst_value_get_int_range_max"
              doc="Gets the maximum of the range specified by @value.">
      <return-value transfer-ownership="none">
        <type name="int" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_get_int_range_min"
              c:identifier="gst_value_get_int_range_min"
              doc="Gets the minimum of the range specified by @value.">
      <return-value transfer-ownership="none">
        <type name="int" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_get_mini_object"
              c:identifier="gst_value_get_mini_object"
              doc="Get the contents of a %GST_TYPE_MINI_OBJECT derived #GValue.
Does not increase the refcount of the returned object.">
      <return-value transfer-ownership="full">
        <type name="MiniObject" c:type="GstMiniObject*"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_get_structure"
              c:identifier="gst_value_get_structure"
              doc="Gets the contents of @value."
              version="0.10.15">
      <return-value transfer-ownership="none">
        <type name="Structure" c:type="GstStructure*"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_init_and_copy"
              c:identifier="gst_value_init_and_copy"
              doc="Initialises the target value to be of the same type as source and then copies
the contents from source to target.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="dest" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="src" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_intersect"
              c:identifier="gst_value_intersect"
              doc="Calculates the intersection of two values.  If the values have
a non-empty intersection, the value representing the intersection
is placed in @dest.  If the intersection is non-empty, @dest is
not modified.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="dest"
                   transfer-ownership="none"
                   doc=" intersection value">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="value1" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="value2" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_is_fixed"
              c:identifier="gst_value_is_fixed"
              doc="Tests if the given GValue, if available in a GstStructure (or any other
ranges) value.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_list_append_value"
              c:identifier="gst_value_list_append_value"
              doc="Appends @append_value to the GstValueList in @value.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="append_value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_list_concat"
              c:identifier="gst_value_list_concat"
              doc="Concatenates copies of @value1 and @value2 into a list.  Values that are not
of type #GST_TYPE_LIST are treated as if they were lists of length 1.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="dest" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="value1" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="value2" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_list_get_size"
              c:identifier="gst_value_list_get_size"
              doc="Gets the number of values contained in @value.">
      <return-value transfer-ownership="none">
        <type name="uint" c:type="guint"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_list_get_value"
              c:identifier="gst_value_list_get_value"
              doc="Gets the value that is a member of the list contained in @value and
has the index @index.">
      <return-value transfer-ownership="none">
        <type name="GObject.Value" c:type="GValue*"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="index" transfer-ownership="none">
          <type name="uint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_list_prepend_value"
              c:identifier="gst_value_list_prepend_value"
              doc="Prepends @prepend_value to the GstValueList in @value.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="prepend_value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_register"
              c:identifier="gst_value_register"
              doc="Registers functions to perform calculations on #GValue items of a given
type. Each type can only be added once.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="table" transfer-ownership="none">
          <type name="ValueTable" c:type="GstValueTable*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_register_intersect_func"
              c:identifier="gst_value_register_intersect_func"
              doc="Registers a function that is called to calculate the intersection
of the values having the types @type1 and @type2.
Intersect functions should be registered at startup before any pipelines are
started, as gst_value_register_intersect_func() is not thread-safe and
cannot be used at the same time as gst_value_intersect() or
gst_value_can_intersect().">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="type1" transfer-ownership="none">
          <type name="GType" c:type="GType"/>
        </parameter>
        <parameter name="type2" transfer-ownership="none">
          <type name="GType" c:type="GType"/>
        </parameter>
        <parameter name="func" transfer-ownership="none" scope="call">
          <type name="ValueIntersectFunc" c:type="GstValueIntersectFunc"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_register_subtract_func"
              c:identifier="gst_value_register_subtract_func"
              doc="Registers @func as a function capable of subtracting the values of
Subtract functions should be registered at startup before any pipelines are
started, as gst_value_register_subtract_func() is not thread-safe and
cannot be used at the same time as gst_value_subtract().">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="minuend_type" transfer-ownership="none">
          <type name="GType" c:type="GType"/>
        </parameter>
        <parameter name="subtrahend_type" transfer-ownership="none">
          <type name="GType" c:type="GType"/>
        </parameter>
        <parameter name="func" transfer-ownership="none" scope="call">
          <type name="ValueSubtractFunc" c:type="GstValueSubtractFunc"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_register_union_func"
              c:identifier="gst_value_register_union_func"
              doc="Registers a union function that can create a union between #GValue items
of the type @type1 and @type2.
Union functions should be registered at startup before any pipelines are
started, as gst_value_register_union_func() is not thread-safe and cannot
be used at the same time as gst_value_union() or gst_value_can_union().">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="type1" transfer-ownership="none">
          <type name="GType" c:type="GType"/>
        </parameter>
        <parameter name="type2" transfer-ownership="none">
          <type name="GType" c:type="GType"/>
        </parameter>
        <parameter name="func" transfer-ownership="none" scope="call">
          <type name="ValueUnionFunc" c:type="GstValueUnionFunc"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_serialize"
              c:identifier="gst_value_serialize"
              doc="tries to transform the given @value into a string representation that allows
getting back this string later on using gst_value_deserialize().">
      <return-value transfer-ownership="full">
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_set_caps"
              c:identifier="gst_value_set_caps"
              doc="Sets the contents of @value to @caps.  The actual
#GstCaps structure is copied before it is used.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="caps" transfer-ownership="none">
          <type name="Caps" c:type="GstCaps*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_set_date"
              c:identifier="gst_value_set_date"
              doc="Sets the contents of @value to coorespond to @date.  The actual
#GDate structure is copied before it is used.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="date" transfer-ownership="none">
          <type name="GLib.Date" c:type="GDate*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_set_double_range"
              c:identifier="gst_value_set_double_range"
              doc="Sets @value to the range specified by @start and @end.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="start" transfer-ownership="none">
          <type name="double" c:type="gdouble"/>
        </parameter>
        <parameter name="end" transfer-ownership="none">
          <type name="double" c:type="gdouble"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_set_fourcc"
              c:identifier="gst_value_set_fourcc"
              doc="Sets @value to @fourcc.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="fourcc" transfer-ownership="none">
          <type name="uint32" c:type="guint32"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_set_fraction"
              c:identifier="gst_value_set_fraction"
              doc="Sets @value to the fraction specified by @numerator over @denominator.
The fraction gets reduced to the smallest numerator and denominator,
and if necessary the sign is moved to the numerator.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="numerator" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="denominator" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_set_fraction_range"
              c:identifier="gst_value_set_fraction_range"
              doc="Sets @value to the range specified by @start and @end.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="start" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="end" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_set_fraction_range_full"
              c:identifier="gst_value_set_fraction_range_full"
              doc="Sets @value to the range specified by @numerator_start/@denominator_start
and @numerator_end/@denominator_end.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="numerator_start" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="denominator_start" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="numerator_end" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="denominator_end" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_set_int_range"
              c:identifier="gst_value_set_int_range"
              doc="Sets @value to the range specified by @start and @end.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="start" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
        <parameter name="end" transfer-ownership="none">
          <type name="int" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_set_mini_object"
              c:identifier="gst_value_set_mini_object"
              doc="Set the contents of a %GST_TYPE_MINI_OBJECT derived #GValue to
The caller retains ownership of the reference.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="mini_object" transfer-ownership="none">
          <type name="MiniObject" c:type="GstMiniObject*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_set_structure"
              c:identifier="gst_value_set_structure"
              doc="Sets the contents of @value to @structure.  The actual"
              version="0.10.15">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="structure" transfer-ownership="none">
          <type name="Structure" c:type="GstStructure*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_subtract"
              c:identifier="gst_value_subtract"
              doc="Subtracts @subtrahend from @minuend and stores the result in @dest.
Note that this means subtraction as in sets, not as in mathematics.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="dest" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="minuend" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="subtrahend" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_take_mini_object"
              c:identifier="gst_value_take_mini_object"
              doc="Set the contents of a %GST_TYPE_MINI_OBJECT derived #GValue to
Takes over the ownership of the caller&apos;s reference to @mini_object;
the caller doesn&apos;t have to unref it any more.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="value" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="mini_object" transfer-ownership="none">
          <type name="MiniObject" c:type="GstMiniObject*"/>
        </parameter>
      </parameters>
    </function>
    <function name="value_union"
              c:identifier="gst_value_union"
              doc="Creates a GValue corresponding to the union of @value1 and @value2.">
      <return-value transfer-ownership="none">
        <type name="boolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="dest" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="value1" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="value2" transfer-ownership="none">
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
      </parameters>
    </function>
    <function name="version"
              c:identifier="gst_version"
              doc="Gets the version number of the GStreamer library.">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="major"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="uint" c:type="guint*"/>
        </parameter>
        <parameter name="minor"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="uint" c:type="guint*"/>
        </parameter>
        <parameter name="micro"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="uint" c:type="guint*"/>
        </parameter>
        <parameter name="nano"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="uint" c:type="guint*"/>
        </parameter>
      </parameters>
    </function>
    <function name="version_string"
              c:identifier="gst_version_string"
              doc="This function returns a string that is useful for describing this version">
      <return-value transfer-ownership="full">
        <type name="utf8" c:type="gchar*"/>
      </return-value>
    </function>
  </namespace>
</repository>
