<?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.2"
            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="Gst" version="1.0"/>
  <include name="GstBase" version="1.0"/>
  <package name="gstreamer-video-1.0"/>
  <c:include name="gst/video/colorbalance.h"/>
  <c:include name="gst/video/colorbalancechannel.h"/>
  <c:include name="gst/video/gstvideodecoder.h"/>
  <c:include name="gst/video/gstvideoencoder.h"/>
  <c:include name="gst/video/gstvideofilter.h"/>
  <c:include name="gst/video/gstvideometa.h"/>
  <c:include name="gst/video/gstvideopool.h"/>
  <c:include name="gst/video/gstvideosink.h"/>
  <c:include name="gst/video/gstvideoutils.h"/>
  <c:include name="gst/video/navigation.h"/>
  <c:include name="gst/video/video-blend.h"/>
  <c:include name="gst/video/video-color.h"/>
  <c:include name="gst/video/video-enumtypes.h"/>
  <c:include name="gst/video/video-event.h"/>
  <c:include name="gst/video/video-format.h"/>
  <c:include name="gst/video/video-frame.h"/>
  <c:include name="gst/video/video-info.h"/>
  <c:include name="gst/video/video-overlay-composition.h"/>
  <c:include name="gst/video/video.h"/>
  <c:include name="gst/video/videoorientation.h"/>
  <c:include name="gst/video/videooverlay.h"/>
  <namespace name="GstVideo"
             version="1.0"
             shared-library="libgstvideo-1.0.so.0"
             c:identifier-prefixes="Gst"
             c:symbol-prefixes="gst">
    <constant name="BUFFER_POOL_OPTION_VIDEO_ALIGNMENT"
              value="GstBufferPoolOptionVideoAlignment"
              c:type="GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT">
      <doc xml:space="preserve">A bufferpool option to enable extra padding. When a bufferpool supports this
option, gst_buffer_pool_config_set_video_alignment() can be called.

When this option is enabled on the bufferpool,
#GST_BUFFER_POOL_OPTION_VIDEO_META should also be enabled.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="BUFFER_POOL_OPTION_VIDEO_META"
              value="GstBufferPoolOptionVideoMeta"
              c:type="GST_BUFFER_POOL_OPTION_VIDEO_META">
      <doc xml:space="preserve">An option that can be activated on bufferpool to request video metadata
on buffers from the pool.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <interface name="ColorBalance"
               c:symbol-prefix="color_balance"
               c:type="GstColorBalance"
               glib:type-name="GstColorBalance"
               glib:get-type="gst_color_balance_get_type"
               glib:type-struct="ColorBalanceInterface">
      <doc xml:space="preserve">&lt;refsect2&gt;&lt;para&gt;
This interface is implemented by elements which can perform some color
balance operation on video frames they process. For example, modifying
the brightness, contrast, hue or saturation.
&lt;/para&gt;&lt;para&gt;
Example elements are 'xvimagesink' and 'colorbalance'
&lt;/para&gt;
&lt;/refsect2&gt;</doc>
      <virtual-method name="get_balance_type" invoker="get_balance_type">
        <doc xml:space="preserve">Get the #GstColorBalanceType of this implementation.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">A the #GstColorBalanceType.</doc>
          <type name="ColorBalanceType" c:type="GstColorBalanceType"/>
        </return-value>
        <parameters>
          <instance-parameter name="balance" transfer-ownership="none">
            <type name="ColorBalance" c:type="GstColorBalance*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_value" invoker="get_value">
        <doc xml:space="preserve">Retrieve the current value of the indicated channel, between min_value
and max_value.

See Also: The #GstColorBalanceChannel.min_value and
        #GstColorBalanceChannel.max_value members of the
        #GstColorBalanceChannel object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The current value of the channel.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="balance" transfer-ownership="none">
            <type name="ColorBalance" c:type="GstColorBalance*"/>
          </instance-parameter>
          <parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">A #GstColorBalanceChannel instance</doc>
            <type name="ColorBalanceChannel" c:type="GstColorBalanceChannel*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="list_channels"
                      invoker="list_channels"
                      introspectable="0">
        <doc xml:space="preserve">Retrieve a list of the available channels.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">A GList containing pointers to #GstColorBalanceChannel objects. The list is owned by the #GstColorBalance instance and must not be freed.</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="gpointer" c:type="gpointer"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="balance" transfer-ownership="none">
            <type name="ColorBalance" c:type="GstColorBalance*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="set_value" invoker="set_value">
        <doc xml:space="preserve">Sets the current value of the channel to the passed value, which must
be between min_value and max_value.

See Also: The #GstColorBalanceChannel.min_value and
        #GstColorBalanceChannel.max_value members of the
        #GstColorBalanceChannel object.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="balance" transfer-ownership="none">
            <type name="ColorBalance" c:type="GstColorBalance*"/>
          </instance-parameter>
          <parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">A #GstColorBalanceChannel instance</doc>
            <type name="ColorBalanceChannel" c:type="GstColorBalanceChannel*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">The new value for the channel.</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="value_changed" invoker="value_changed">
        <doc xml:space="preserve">A helper function called by implementations of the GstColorBalance
interface. It fires the #GstColorBalance::value-changed signal on the
instance, and the #GstColorBalanceChannel::value-changed signal on the
channel object.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="balance" transfer-ownership="none">
            <type name="ColorBalance" c:type="GstColorBalance*"/>
          </instance-parameter>
          <parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">A #GstColorBalanceChannel whose value has changed</doc>
            <type name="ColorBalanceChannel" c:type="GstColorBalanceChannel*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">The new value of the channel</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="get_balance_type"
              c:identifier="gst_color_balance_get_balance_type">
        <doc xml:space="preserve">Get the #GstColorBalanceType of this implementation.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">A the #GstColorBalanceType.</doc>
          <type name="ColorBalanceType" c:type="GstColorBalanceType"/>
        </return-value>
        <parameters>
          <instance-parameter name="balance" transfer-ownership="none">
            <doc xml:space="preserve">The #GstColorBalance implementation</doc>
            <type name="ColorBalance" c:type="GstColorBalance*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_value" c:identifier="gst_color_balance_get_value">
        <doc xml:space="preserve">Retrieve the current value of the indicated channel, between min_value
and max_value.

See Also: The #GstColorBalanceChannel.min_value and
        #GstColorBalanceChannel.max_value members of the
        #GstColorBalanceChannel object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The current value of the channel.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="balance" transfer-ownership="none">
            <doc xml:space="preserve">A #GstColorBalance instance</doc>
            <type name="ColorBalance" c:type="GstColorBalance*"/>
          </instance-parameter>
          <parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">A #GstColorBalanceChannel instance</doc>
            <type name="ColorBalanceChannel" c:type="GstColorBalanceChannel*"/>
          </parameter>
        </parameters>
      </method>
      <method name="list_channels"
              c:identifier="gst_color_balance_list_channels"
              introspectable="0">
        <doc xml:space="preserve">Retrieve a list of the available channels.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">A GList containing pointers to #GstColorBalanceChannel objects. The list is owned by the #GstColorBalance instance and must not be freed.</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="gpointer" c:type="gpointer"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="balance" transfer-ownership="none">
            <doc xml:space="preserve">A #GstColorBalance instance</doc>
            <type name="ColorBalance" c:type="GstColorBalance*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_value" c:identifier="gst_color_balance_set_value">
        <doc xml:space="preserve">Sets the current value of the channel to the passed value, which must
be between min_value and max_value.

See Also: The #GstColorBalanceChannel.min_value and
        #GstColorBalanceChannel.max_value members of the
        #GstColorBalanceChannel object.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="balance" transfer-ownership="none">
            <doc xml:space="preserve">A #GstColorBalance instance</doc>
            <type name="ColorBalance" c:type="GstColorBalance*"/>
          </instance-parameter>
          <parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">A #GstColorBalanceChannel instance</doc>
            <type name="ColorBalanceChannel" c:type="GstColorBalanceChannel*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">The new value for the channel.</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="value_changed"
              c:identifier="gst_color_balance_value_changed">
        <doc xml:space="preserve">A helper function called by implementations of the GstColorBalance
interface. It fires the #GstColorBalance::value-changed signal on the
instance, and the #GstColorBalanceChannel::value-changed signal on the
channel object.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="balance" transfer-ownership="none">
            <doc xml:space="preserve">A #GstColorBalance instance</doc>
            <type name="ColorBalance" c:type="GstColorBalance*"/>
          </instance-parameter>
          <parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">A #GstColorBalanceChannel whose value has changed</doc>
            <type name="ColorBalanceChannel" c:type="GstColorBalanceChannel*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">The new value of the channel</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <glib:signal name="value-changed" when="last">
        <doc xml:space="preserve">Fired when the value of the indicated channel has changed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">The #GstColorBalanceChannel</doc>
            <type name="ColorBalanceChannel"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">The new value</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
    </interface>
    <class name="ColorBalanceChannel"
           c:symbol-prefix="color_balance_channel"
           c:type="GstColorBalanceChannel"
           parent="GObject.Object"
           glib:type-name="GstColorBalanceChannel"
           glib:get-type="gst_color_balance_channel_get_type"
           glib:type-struct="ColorBalanceChannelClass">
      <doc xml:space="preserve">&lt;refsect2&gt;&lt;para&gt;The #GstColorBalanceChannel object represents a parameter
for modifying the color balance implemented by an element providing the
#GstColorBalance interface. For example, Hue or Saturation.
&lt;/para&gt;&lt;/refsect2&gt;</doc>
      <virtual-method name="value_changed">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="ColorBalanceChannel" c:type="GstColorBalanceChannel*"/>
          </instance-parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="label">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="min_value">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="max_value">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="_gst_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
      <glib:signal name="value-changed" when="last">
        <doc xml:space="preserve">Fired when the value of the indicated channel has changed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">The new value</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="ColorBalanceChannelClass"
            c:type="GstColorBalanceChannelClass"
            glib:is-gtype-struct-for="ColorBalanceChannel">
      <doc xml:space="preserve">Color-balance channel class.</doc>
      <field name="parent">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="value_changed">
        <callback name="value_changed">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="ColorBalanceChannel"
                    c:type="GstColorBalanceChannel*"/>
            </parameter>
            <parameter name="value" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <record name="ColorBalanceInterface"
            c:type="GstColorBalanceInterface"
            glib:is-gtype-struct-for="ColorBalance">
      <doc xml:space="preserve">Color-balance interface.</doc>
      <field name="iface">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
      <field name="list_channels" introspectable="0">
        <callback name="list_channels" introspectable="0">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">A GList containing pointers to #GstColorBalanceChannel objects. The list is owned by the #GstColorBalance instance and must not be freed.</doc>
            <type name="GLib.List" c:type="const GList*">
              <type name="gpointer" c:type="gpointer"/>
            </type>
          </return-value>
          <parameters>
            <parameter name="balance" transfer-ownership="none">
              <type name="ColorBalance" c:type="GstColorBalance*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="set_value">
        <callback name="set_value">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="balance" transfer-ownership="none">
              <type name="ColorBalance" c:type="GstColorBalance*"/>
            </parameter>
            <parameter name="channel" transfer-ownership="none">
              <doc xml:space="preserve">A #GstColorBalanceChannel instance</doc>
              <type name="ColorBalanceChannel"
                    c:type="GstColorBalanceChannel*"/>
            </parameter>
            <parameter name="value" transfer-ownership="none">
              <doc xml:space="preserve">The new value for the channel.</doc>
              <type name="gint" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_value">
        <callback name="get_value">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">The current value of the channel.</doc>
            <type name="gint" c:type="gint"/>
          </return-value>
          <parameters>
            <parameter name="balance" transfer-ownership="none">
              <type name="ColorBalance" c:type="GstColorBalance*"/>
            </parameter>
            <parameter name="channel" transfer-ownership="none">
              <doc xml:space="preserve">A #GstColorBalanceChannel instance</doc>
              <type name="ColorBalanceChannel"
                    c:type="GstColorBalanceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_balance_type">
        <callback name="get_balance_type">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">A the #GstColorBalanceType.</doc>
            <type name="ColorBalanceType" c:type="GstColorBalanceType"/>
          </return-value>
          <parameters>
            <parameter name="balance" transfer-ownership="none">
              <type name="ColorBalance" c:type="GstColorBalance*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="value_changed">
        <callback name="value_changed">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="balance" transfer-ownership="none">
              <type name="ColorBalance" c:type="GstColorBalance*"/>
            </parameter>
            <parameter name="channel" transfer-ownership="none">
              <doc xml:space="preserve">A #GstColorBalanceChannel whose value has changed</doc>
              <type name="ColorBalanceChannel"
                    c:type="GstColorBalanceChannel*"/>
            </parameter>
            <parameter name="value" transfer-ownership="none">
              <doc xml:space="preserve">The new value of the channel</doc>
              <type name="gint" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <enumeration name="ColorBalanceType"
                 glib:type-name="GstColorBalanceType"
                 glib:get-type="gst_color_balance_type_get_type"
                 c:type="GstColorBalanceType">
      <doc xml:space="preserve">An enumeration indicating whether an element implements color balancing
operations in software or in dedicated hardware. In general, dedicated
hardware implementations (such as those provided by xvimagesink) are
preferred.</doc>
      <member name="hardware"
              value="0"
              c:identifier="GST_COLOR_BALANCE_HARDWARE"
              glib:nick="hardware">
        <doc xml:space="preserve">Color balance is implemented with dedicated hardware.</doc>
      </member>
      <member name="software"
              value="1"
              c:identifier="GST_COLOR_BALANCE_SOFTWARE"
              glib:nick="software">
        <doc xml:space="preserve">Color balance is implemented via software processing.</doc>
      </member>
    </enumeration>
    <interface name="Navigation"
               c:symbol-prefix="navigation"
               c:type="GstNavigation"
               glib:type-name="GstNavigation"
               glib:get-type="gst_navigation_get_type"
               glib:type-struct="NavigationInterface">
      <doc xml:space="preserve">The Navigation interface is used for creating and injecting navigation related
events such as mouse button presses, cursor motion and key presses. The associated
library also provides methods for parsing received events, and for sending and
receiving navigation related bus events. One main usecase is DVD menu navigation.

The main parts of the API are:
&lt;itemizedlist&gt;
&lt;listitem&gt;
&lt;para&gt;
The GstNavigation interface, implemented by elements which provide an application
with the ability to create and inject navigation events into the pipeline.
&lt;/para&gt;
&lt;/listitem&gt;
&lt;listitem&gt;
&lt;para&gt;
GstNavigation event handling API. GstNavigation events are created in response to
calls on a GstNavigation interface implementation, and sent in the pipeline. Upstream
elements can use the navigation event API functions to parse the contents of received
messages.
&lt;/para&gt;
&lt;/listitem&gt;
&lt;listitem&gt;
&lt;para&gt;
GstNavigation message handling API. GstNavigation messages may be sent on the message
bus to inform applications of navigation related changes in the pipeline, such as the
mouse moving over a clickable region, or the set of available angles changing.
&lt;/para&gt;&lt;para&gt;
The GstNavigation message functions provide functions for creating and parsing
custom bus messages for signaling GstNavigation changes.
&lt;/para&gt;
&lt;/listitem&gt;
&lt;/itemizedlist&gt;</doc>
      <function name="event_get_type"
                c:identifier="gst_navigation_event_get_type">
        <doc xml:space="preserve">Inspect a #GstEvent and return the #GstNavigationEventType of the event, or
#GST_NAVIGATION_EVENT_INVALID if the event is not a #GstNavigation event.</doc>
        <return-value transfer-ownership="none">
          <type name="NavigationEventType" c:type="GstNavigationEventType"/>
        </return-value>
        <parameters>
          <parameter name="event" transfer-ownership="none">
            <doc xml:space="preserve">A #GstEvent to inspect.</doc>
            <type name="Gst.Event" c:type="GstEvent*"/>
          </parameter>
        </parameters>
      </function>
      <function name="event_parse_command"
                c:identifier="gst_navigation_event_parse_command">
        <doc xml:space="preserve">Inspect a #GstNavigation command event and retrieve the enum value of the
associated command.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if the navigation command could be extracted, otherwise FALSE.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="event" transfer-ownership="none">
            <doc xml:space="preserve">A #GstEvent to inspect.</doc>
            <type name="Gst.Event" c:type="GstEvent*"/>
          </parameter>
          <parameter name="command" transfer-ownership="none">
            <doc xml:space="preserve">Pointer to GstNavigationCommand to receive the type of the navigation event.</doc>
            <type name="NavigationCommand" c:type="GstNavigationCommand*"/>
          </parameter>
        </parameters>
      </function>
      <function name="event_parse_key_event"
                c:identifier="gst_navigation_event_parse_key_event">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="event" transfer-ownership="none">
            <doc xml:space="preserve">A #GstEvent to inspect.</doc>
            <type name="Gst.Event" c:type="GstEvent*"/>
          </parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">A pointer to a location to receive the string identifying the key press. The returned string is owned by the event, and valid only until the event is unreffed.</doc>
            <type name="utf8" c:type="const gchar**"/>
          </parameter>
        </parameters>
      </function>
      <function name="event_parse_mouse_button_event"
                c:identifier="gst_navigation_event_parse_mouse_button_event">
        <doc xml:space="preserve">Retrieve the details of either a #GstNavigation mouse button press event or
a mouse button release event. Determine which type the event is using
gst_navigation_event_get_type() to retrieve the #GstNavigationEventType.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if the button number and both coordinates could be extracted, otherwise FALSE.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="event" transfer-ownership="none">
            <doc xml:space="preserve">A #GstEvent to inspect.</doc>
            <type name="Gst.Event" c:type="GstEvent*"/>
          </parameter>
          <parameter name="button" transfer-ownership="none">
            <doc xml:space="preserve">Pointer to a gint that will receive the button number associated with the event.</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
          <parameter name="x" transfer-ownership="none">
            <doc xml:space="preserve">Pointer to a gdouble to receive the x coordinate of the mouse button event.</doc>
            <type name="gdouble" c:type="gdouble*"/>
          </parameter>
          <parameter name="y" transfer-ownership="none">
            <doc xml:space="preserve">Pointer to a gdouble to receive the y coordinate of the mouse button event.</doc>
            <type name="gdouble" c:type="gdouble*"/>
          </parameter>
        </parameters>
      </function>
      <function name="event_parse_mouse_move_event"
                c:identifier="gst_navigation_event_parse_mouse_move_event">
        <doc xml:space="preserve">Inspect a #GstNavigation mouse movement event and extract the coordinates
of the event.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if both coordinates could be extracted, otherwise FALSE.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="event" transfer-ownership="none">
            <doc xml:space="preserve">A #GstEvent to inspect.</doc>
            <type name="Gst.Event" c:type="GstEvent*"/>
          </parameter>
          <parameter name="x" transfer-ownership="none">
            <doc xml:space="preserve">Pointer to a gdouble to receive the x coordinate of the mouse movement.</doc>
            <type name="gdouble" c:type="gdouble*"/>
          </parameter>
          <parameter name="y" transfer-ownership="none">
            <doc xml:space="preserve">Pointer to a gdouble to receive the y coordinate of the mouse movement.</doc>
            <type name="gdouble" c:type="gdouble*"/>
          </parameter>
        </parameters>
      </function>
      <function name="message_get_type"
                c:identifier="gst_navigation_message_get_type">
        <doc xml:space="preserve">Check a bus message to see if it is a #GstNavigation event, and return
the #GstNavigationMessageType identifying the type of the message if so.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The type of the #GstMessage, or #GST_NAVIGATION_MESSAGE_INVALID if the message is not a #GstNavigation notification.</doc>
          <type name="NavigationMessageType"
                c:type="GstNavigationMessageType"/>
        </return-value>
        <parameters>
          <parameter name="message" transfer-ownership="none">
            <doc xml:space="preserve">A #GstMessage to inspect.</doc>
            <type name="Gst.Message" c:type="GstMessage*"/>
          </parameter>
        </parameters>
      </function>
      <function name="message_new_angles_changed"
                c:identifier="gst_navigation_message_new_angles_changed">
        <doc xml:space="preserve">Creates a new #GstNavigation message with type
#GST_NAVIGATION_MESSAGE_ANGLES_CHANGED for notifying an application
that the current angle, or current number of angles available in a
multiangle video has changed.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">The new #GstMessage.</doc>
          <type name="Gst.Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <doc xml:space="preserve">A #GstObject to set as source of the new message.</doc>
            <type name="Gst.Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="cur_angle" transfer-ownership="none">
            <doc xml:space="preserve">The currently selected angle.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="n_angles" transfer-ownership="none">
            <doc xml:space="preserve">The number of viewing angles now available.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </function>
      <function name="message_new_commands_changed"
                c:identifier="gst_navigation_message_new_commands_changed">
        <doc xml:space="preserve">Creates a new #GstNavigation message with type
#GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">The new #GstMessage.</doc>
          <type name="Gst.Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <doc xml:space="preserve">A #GstObject to set as source of the new message.</doc>
            <type name="Gst.Object" c:type="GstObject*"/>
          </parameter>
        </parameters>
      </function>
      <function name="message_new_mouse_over"
                c:identifier="gst_navigation_message_new_mouse_over">
        <doc xml:space="preserve">Creates a new #GstNavigation message with type
#GST_NAVIGATION_MESSAGE_MOUSE_OVER.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">The new #GstMessage.</doc>
          <type name="Gst.Message" c:type="GstMessage*"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <doc xml:space="preserve">A #GstObject to set as source of the new message.</doc>
            <type name="Gst.Object" c:type="GstObject*"/>
          </parameter>
          <parameter name="active" transfer-ownership="none">
            <doc xml:space="preserve">%TRUE if the mouse has entered a clickable area of the display. %FALSE if it over a non-clickable area.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </function>
      <function name="message_parse_angles_changed"
                c:identifier="gst_navigation_message_parse_angles_changed">
        <doc xml:space="preserve">Parse a #GstNavigation message of type GST_NAVIGATION_MESSAGE_ANGLES_CHANGED
and extract the @cur_angle and @n_angles parameters.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the message could be successfully parsed. %FALSE if not.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="message" transfer-ownership="none">
            <doc xml:space="preserve">A #GstMessage to inspect.</doc>
            <type name="Gst.Message" c:type="GstMessage*"/>
          </parameter>
          <parameter name="cur_angle" transfer-ownership="none">
            <doc xml:space="preserve">A pointer to a #guint to receive the new current angle number, or NULL</doc>
            <type name="guint" c:type="guint*"/>
          </parameter>
          <parameter name="n_angles" transfer-ownership="none">
            <doc xml:space="preserve">A pointer to a #guint to receive the new angle count, or NULL.</doc>
            <type name="guint" c:type="guint*"/>
          </parameter>
        </parameters>
      </function>
      <function name="message_parse_mouse_over"
                c:identifier="gst_navigation_message_parse_mouse_over">
        <doc xml:space="preserve">Parse a #GstNavigation message of type #GST_NAVIGATION_MESSAGE_MOUSE_OVER
and extract the active/inactive flag. If the mouse over event is marked
active, it indicates that the mouse is over a clickable area.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the message could be successfully parsed. %FALSE if not.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="message" transfer-ownership="none">
            <doc xml:space="preserve">A #GstMessage to inspect.</doc>
            <type name="Gst.Message" c:type="GstMessage*"/>
          </parameter>
          <parameter name="active" transfer-ownership="none">
            <doc xml:space="preserve">A pointer to a gboolean to receive the active/inactive state, or NULL.</doc>
            <type name="gboolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </function>
      <function name="query_get_type"
                c:identifier="gst_navigation_query_get_type">
        <doc xml:space="preserve">Inspect a #GstQuery and return the #GstNavigationQueryType associated with
it if it is a #GstNavigation query.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The #GstNavigationQueryType of the query, or #GST_NAVIGATION_QUERY_INVALID</doc>
          <type name="NavigationQueryType" c:type="GstNavigationQueryType"/>
        </return-value>
        <parameters>
          <parameter name="query" transfer-ownership="none">
            <doc xml:space="preserve">The query to inspect</doc>
            <type name="Gst.Query" c:type="GstQuery*"/>
          </parameter>
        </parameters>
      </function>
      <function name="query_new_angles"
                c:identifier="gst_navigation_query_new_angles">
        <doc xml:space="preserve">Create a new #GstNavigation angles query. When executed, it will
query the pipeline for the set of currently available angles, which may be
greater than one in a multiangle video.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">The new query.</doc>
          <type name="Gst.Query" c:type="GstQuery*"/>
        </return-value>
      </function>
      <function name="query_new_commands"
                c:identifier="gst_navigation_query_new_commands">
        <doc xml:space="preserve">Create a new #GstNavigation commands query. When executed, it will
query the pipeline for the set of currently available commands.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">The new query.</doc>
          <type name="Gst.Query" c:type="GstQuery*"/>
        </return-value>
      </function>
      <function name="query_parse_angles"
                c:identifier="gst_navigation_query_parse_angles">
        <doc xml:space="preserve">Parse the current angle number in the #GstNavigation angles @query into the
#guint pointed to by the @cur_angle variable, and the number of available
angles into the #guint pointed to by the @n_angles variable.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the query could be successfully parsed. %FALSE if not.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="query" transfer-ownership="none">
            <doc xml:space="preserve">a #GstQuery</doc>
            <type name="Gst.Query" c:type="GstQuery*"/>
          </parameter>
          <parameter name="cur_angle" transfer-ownership="none">
            <doc xml:space="preserve">Pointer to a #guint into which to store the currently selected angle value from the query, or NULL</doc>
            <type name="guint" c:type="guint*"/>
          </parameter>
          <parameter name="n_angles" transfer-ownership="none">
            <doc xml:space="preserve">Pointer to a #guint into which to store the number of angles value from the query, or NULL</doc>
            <type name="guint" c:type="guint*"/>
          </parameter>
        </parameters>
      </function>
      <function name="query_parse_commands_length"
                c:identifier="gst_navigation_query_parse_commands_length">
        <doc xml:space="preserve">Parse the number of commands in the #GstNavigation commands @query.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the query could be successfully parsed. %FALSE if not.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="query" transfer-ownership="none">
            <doc xml:space="preserve">a #GstQuery</doc>
            <type name="Gst.Query" c:type="GstQuery*"/>
          </parameter>
          <parameter name="n_cmds" transfer-ownership="none">
            <doc xml:space="preserve">the number of commands in this query.</doc>
            <type name="guint" c:type="guint*"/>
          </parameter>
        </parameters>
      </function>
      <function name="query_parse_commands_nth"
                c:identifier="gst_navigation_query_parse_commands_nth">
        <doc xml:space="preserve">Parse the #GstNavigation command query and retrieve the @nth command from
it into @cmd. If the list contains less elements than @nth, @cmd will be
set to #GST_NAVIGATION_COMMAND_INVALID.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the query could be successfully parsed. %FALSE if not.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="query" transfer-ownership="none">
            <doc xml:space="preserve">a #GstQuery</doc>
            <type name="Gst.Query" c:type="GstQuery*"/>
          </parameter>
          <parameter name="nth" transfer-ownership="none">
            <doc xml:space="preserve">the nth command to retrieve.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="cmd" transfer-ownership="none">
            <doc xml:space="preserve">a pointer to store the nth command into.</doc>
            <type name="NavigationCommand" c:type="GstNavigationCommand*"/>
          </parameter>
        </parameters>
      </function>
      <function name="query_set_angles"
                c:identifier="gst_navigation_query_set_angles">
        <doc xml:space="preserve">Set the #GstNavigation angles query result field in @query.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="query" transfer-ownership="none">
            <doc xml:space="preserve">a #GstQuery</doc>
            <type name="Gst.Query" c:type="GstQuery*"/>
          </parameter>
          <parameter name="cur_angle" transfer-ownership="none">
            <doc xml:space="preserve">the current viewing angle to set.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="n_angles" transfer-ownership="none">
            <doc xml:space="preserve">the number of viewing angles to set.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </function>
      <function name="query_set_commands"
                c:identifier="gst_navigation_query_set_commands"
                introspectable="0">
        <doc xml:space="preserve">Set the #GstNavigation command query result fields in @query. The number
of commands passed must be equal to @n_commands.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="query" transfer-ownership="none">
            <doc xml:space="preserve">a #GstQuery</doc>
            <type name="Gst.Query" c:type="GstQuery*"/>
          </parameter>
          <parameter name="n_cmds" transfer-ownership="none">
            <doc xml:space="preserve">the number of commands to set.</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="arg2" transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </function>
      <function name="query_set_commandsv"
                c:identifier="gst_navigation_query_set_commandsv">
        <doc xml:space="preserve">Set the #GstNavigation command query result fields in @query. The number
of commands passed must be equal to @n_commands.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="query" transfer-ownership="none">
            <doc xml:space="preserve">a #GstQuery</doc>
            <type name="Gst.Query" c:type="GstQuery*"/>
          </parameter>
          <parameter name="n_cmds" transfer-ownership="none">
            <doc xml:space="preserve">the number of commands to set.</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="cmds" transfer-ownership="none">
            <doc xml:space="preserve">An array containing @n_cmds @GstNavigationCommand values.</doc>
            <type name="NavigationCommand" c:type="GstNavigationCommand*"/>
          </parameter>
        </parameters>
      </function>
      <virtual-method name="send_event" invoker="send_event">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="navigation" transfer-ownership="none">
            <type name="Navigation" c:type="GstNavigation*"/>
          </instance-parameter>
          <parameter name="structure" transfer-ownership="none">
            <type name="Gst.Structure" c:type="GstStructure*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="send_command" c:identifier="gst_navigation_send_command">
        <doc xml:space="preserve">Sends the indicated command to the navigation interface.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="navigation" transfer-ownership="none">
            <doc xml:space="preserve">The navigation interface instance</doc>
            <type name="Navigation" c:type="GstNavigation*"/>
          </instance-parameter>
          <parameter name="command" transfer-ownership="none">
            <doc xml:space="preserve">The command to issue</doc>
            <type name="NavigationCommand" c:type="GstNavigationCommand"/>
          </parameter>
        </parameters>
      </method>
      <method name="send_event" c:identifier="gst_navigation_send_event">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="navigation" transfer-ownership="none">
            <type name="Navigation" c:type="GstNavigation*"/>
          </instance-parameter>
          <parameter name="structure" transfer-ownership="none">
            <type name="Gst.Structure" c:type="GstStructure*"/>
          </parameter>
        </parameters>
      </method>
      <method name="send_key_event"
              c:identifier="gst_navigation_send_key_event">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="navigation" transfer-ownership="none">
            <doc xml:space="preserve">The navigation interface instance</doc>
            <type name="Navigation" c:type="GstNavigation*"/>
          </instance-parameter>
          <parameter name="event" transfer-ownership="none">
            <doc xml:space="preserve">The type of the key event. Recognised values are "key-press" and "key-release"</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">Character representation of the key. This is typically as produced by XKeysymToString.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="send_mouse_event"
              c:identifier="gst_navigation_send_mouse_event">
        <doc xml:space="preserve">Sends a mouse event to the navigation interface. Mouse event coordinates
are sent relative to the display space of the related output area. This is
usually the size in pixels of the window associated with the element
implementing the #GstNavigation interface.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="navigation" transfer-ownership="none">
            <doc xml:space="preserve">The navigation interface instance</doc>
            <type name="Navigation" c:type="GstNavigation*"/>
          </instance-parameter>
          <parameter name="event" transfer-ownership="none">
            <doc xml:space="preserve">The type of mouse event, as a text string. Recognised values are "mouse-button-press", "mouse-button-release" and "mouse-move".</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="button" transfer-ownership="none">
            <doc xml:space="preserve">The button number of the button being pressed or released. Pass 0 for mouse-move events.</doc>
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter name="x" transfer-ownership="none">
            <doc xml:space="preserve">The x coordinate of the mouse event.</doc>
            <type name="gdouble" c:type="double"/>
          </parameter>
          <parameter name="y" transfer-ownership="none">
            <doc xml:space="preserve">The y coordinate of the mouse event.</doc>
            <type name="gdouble" c:type="double"/>
          </parameter>
        </parameters>
      </method>
    </interface>
    <enumeration name="NavigationCommand"
                 glib:type-name="GstNavigationCommand"
                 glib:get-type="gst_navigation_command_get_type"
                 c:type="GstNavigationCommand">
      <doc xml:space="preserve">A set of commands that may be issued to an element providing the
#GstNavigation interface. The available commands can be queried via
the gst_navigation_query_new_commands() query.

For convenience in handling DVD navigation, the MENU commands are aliased as:
   GST_NAVIGATION_COMMAND_DVD_MENU            = @GST_NAVIGATION_COMMAND_MENU1
   GST_NAVIGATION_COMMAND_DVD_TITLE_MENU      = @GST_NAVIGATION_COMMAND_MENU2
   GST_NAVIGATION_COMMAND_DVD_ROOT_MENU       = @GST_NAVIGATION_COMMAND_MENU3
   GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU = @GST_NAVIGATION_COMMAND_MENU4
   GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU      = @GST_NAVIGATION_COMMAND_MENU5
   GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU      = @GST_NAVIGATION_COMMAND_MENU6
   GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU    = @GST_NAVIGATION_COMMAND_MENU7</doc>
      <member name="invalid"
              value="0"
              c:identifier="GST_NAVIGATION_COMMAND_INVALID"
              glib:nick="invalid">
        <doc xml:space="preserve">An invalid command entry</doc>
      </member>
      <member name="menu1"
              value="1"
              c:identifier="GST_NAVIGATION_COMMAND_MENU1"
              glib:nick="menu1">
        <doc xml:space="preserve">Execute navigation menu command 1. For DVD, this enters the DVD root menu, or exits back to the title from the menu.</doc>
      </member>
      <member name="menu2"
              value="2"
              c:identifier="GST_NAVIGATION_COMMAND_MENU2"
              glib:nick="menu2">
        <doc xml:space="preserve">Execute navigation menu command 2. For DVD, this jumps to the DVD title menu.</doc>
      </member>
      <member name="menu3"
              value="3"
              c:identifier="GST_NAVIGATION_COMMAND_MENU3"
              glib:nick="menu3">
        <doc xml:space="preserve">Execute navigation menu command 3. For DVD, this jumps into the DVD root menu.</doc>
      </member>
      <member name="menu4"
              value="4"
              c:identifier="GST_NAVIGATION_COMMAND_MENU4"
              glib:nick="menu4">
        <doc xml:space="preserve">Execute navigation menu command 4. For DVD, this jumps to the Subpicture menu.</doc>
      </member>
      <member name="menu5"
              value="5"
              c:identifier="GST_NAVIGATION_COMMAND_MENU5"
              glib:nick="menu5">
        <doc xml:space="preserve">Execute navigation menu command 5. For DVD, the jumps to the audio menu.</doc>
      </member>
      <member name="menu6"
              value="6"
              c:identifier="GST_NAVIGATION_COMMAND_MENU6"
              glib:nick="menu6">
        <doc xml:space="preserve">Execute navigation menu command 6. For DVD, this jumps to the angles menu.</doc>
      </member>
      <member name="menu7"
              value="7"
              c:identifier="GST_NAVIGATION_COMMAND_MENU7"
              glib:nick="menu7">
        <doc xml:space="preserve">Execute navigation menu command 7. For DVD, this jumps to the chapter menu.</doc>
      </member>
      <member name="left"
              value="20"
              c:identifier="GST_NAVIGATION_COMMAND_LEFT"
              glib:nick="left">
        <doc xml:space="preserve">Select the next button to the left in a menu, if such a button exists.</doc>
      </member>
      <member name="right"
              value="21"
              c:identifier="GST_NAVIGATION_COMMAND_RIGHT"
              glib:nick="right">
        <doc xml:space="preserve">Select the next button to the right in a menu, if such a button exists.</doc>
      </member>
      <member name="up"
              value="22"
              c:identifier="GST_NAVIGATION_COMMAND_UP"
              glib:nick="up">
        <doc xml:space="preserve">Select the button above the current one in a menu, if such a button exists.</doc>
      </member>
      <member name="down"
              value="23"
              c:identifier="GST_NAVIGATION_COMMAND_DOWN"
              glib:nick="down">
        <doc xml:space="preserve">Select the button below the current one in a menu, if such a button exists.</doc>
      </member>
      <member name="activate"
              value="24"
              c:identifier="GST_NAVIGATION_COMMAND_ACTIVATE"
              glib:nick="activate">
        <doc xml:space="preserve">Activate (click) the currently selected button in a menu, if such a button exists.</doc>
      </member>
      <member name="prev_angle"
              value="30"
              c:identifier="GST_NAVIGATION_COMMAND_PREV_ANGLE"
              glib:nick="prev-angle">
        <doc xml:space="preserve">Switch to the previous angle in a multiangle feature.</doc>
      </member>
      <member name="next_angle"
              value="31"
              c:identifier="GST_NAVIGATION_COMMAND_NEXT_ANGLE"
              glib:nick="next-angle">
        <doc xml:space="preserve">Switch to the next angle in a multiangle feature.</doc>
      </member>
    </enumeration>
    <enumeration name="NavigationEventType"
                 glib:type-name="GstNavigationEventType"
                 glib:get-type="gst_navigation_event_type_get_type"
                 c:type="GstNavigationEventType">
      <doc xml:space="preserve">Enum values for the various events that an element implementing the
GstNavigation interface might send up the pipeline.</doc>
      <member name="invalid"
              value="0"
              c:identifier="GST_NAVIGATION_EVENT_INVALID"
              glib:nick="invalid">
        <doc xml:space="preserve">Returned from gst_navigation_event_get_type() when the passed event is not a navigation event.</doc>
      </member>
      <member name="key_press"
              value="1"
              c:identifier="GST_NAVIGATION_EVENT_KEY_PRESS"
              glib:nick="key-press">
        <doc xml:space="preserve">A key press event. Use gst_navigation_event_parse_key_event() to extract the details from the event.</doc>
      </member>
      <member name="key_release"
              value="2"
              c:identifier="GST_NAVIGATION_EVENT_KEY_RELEASE"
              glib:nick="key-release">
        <doc xml:space="preserve">A key release event. Use gst_navigation_event_parse_key_event() to extract the details from the event.</doc>
      </member>
      <member name="mouse_button_press"
              value="3"
              c:identifier="GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS"
              glib:nick="mouse-button-press">
        <doc xml:space="preserve">A mouse button press event. Use gst_navigation_event_parse_mouse_button_event() to extract the details from the event.</doc>
      </member>
      <member name="mouse_button_release"
              value="4"
              c:identifier="GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE"
              glib:nick="mouse-button-release">
        <doc xml:space="preserve">A mouse button release event. Use gst_navigation_event_parse_mouse_button_event() to extract the details from the event.</doc>
      </member>
      <member name="mouse_move"
              value="5"
              c:identifier="GST_NAVIGATION_EVENT_MOUSE_MOVE"
              glib:nick="mouse-move">
        <doc xml:space="preserve">A mouse movement event. Use gst_navigation_event_parse_mouse_move_event() to extract the details from the event.</doc>
      </member>
      <member name="command"
              value="6"
              c:identifier="GST_NAVIGATION_EVENT_COMMAND"
              glib:nick="command">
        <doc xml:space="preserve">A navigation command event. Use gst_navigation_event_parse_command() to extract the details from the event.</doc>
      </member>
    </enumeration>
    <record name="NavigationInterface"
            c:type="GstNavigationInterface"
            glib:is-gtype-struct-for="Navigation">
      <doc xml:space="preserve">Navigation interface.</doc>
      <field name="iface">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
      <field name="send_event">
        <callback name="send_event">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="navigation" transfer-ownership="none">
              <type name="Navigation" c:type="GstNavigation*"/>
            </parameter>
            <parameter name="structure" transfer-ownership="none">
              <type name="Gst.Structure" c:type="GstStructure*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <enumeration name="NavigationMessageType"
                 glib:type-name="GstNavigationMessageType"
                 glib:get-type="gst_navigation_message_type_get_type"
                 c:type="GstNavigationMessageType">
      <doc xml:space="preserve">A set of notifications that may be received on the bus when navigation
related status changes.</doc>
      <member name="invalid"
              value="0"
              c:identifier="GST_NAVIGATION_MESSAGE_INVALID"
              glib:nick="invalid">
        <doc xml:space="preserve">Returned from gst_navigation_message_get_type() when the passed message is not a navigation message.</doc>
      </member>
      <member name="mouse_over"
              value="1"
              c:identifier="GST_NAVIGATION_MESSAGE_MOUSE_OVER"
              glib:nick="mouse-over">
        <doc xml:space="preserve">Sent when the mouse moves over or leaves a clickable region of the output, such as a DVD menu button.</doc>
      </member>
      <member name="commands_changed"
              value="2"
              c:identifier="GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED"
              glib:nick="commands-changed">
        <doc xml:space="preserve">Sent when the set of available commands changes and should re-queried by interested applications.</doc>
      </member>
      <member name="angles_changed"
              value="3"
              c:identifier="GST_NAVIGATION_MESSAGE_ANGLES_CHANGED"
              glib:nick="angles-changed">
        <doc xml:space="preserve">Sent when display angles in a multi-angle feature (such as a multiangle DVD) change - either angles have appeared or disappeared.</doc>
      </member>
    </enumeration>
    <enumeration name="NavigationQueryType"
                 glib:type-name="GstNavigationQueryType"
                 glib:get-type="gst_navigation_query_type_get_type"
                 c:type="GstNavigationQueryType">
      <doc xml:space="preserve">Tyoes of navigation interface queries.</doc>
      <member name="invalid"
              value="0"
              c:identifier="GST_NAVIGATION_QUERY_INVALID"
              glib:nick="invalid">
        <doc xml:space="preserve">invalid query</doc>
      </member>
      <member name="commands"
              value="1"
              c:identifier="GST_NAVIGATION_QUERY_COMMANDS"
              glib:nick="commands">
        <doc xml:space="preserve">command query</doc>
      </member>
      <member name="angles"
              value="2"
              c:identifier="GST_NAVIGATION_QUERY_ANGLES"
              glib:nick="angles">
        <doc xml:space="preserve">viewing angle query</doc>
      </member>
    </enumeration>
    <constant name="VIDEO_COLORIMETRY_BT601"
              value="bt601"
              c:type="GST_VIDEO_COLORIMETRY_BT601">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="VIDEO_COLORIMETRY_BT709"
              value="bt709"
              c:type="GST_VIDEO_COLORIMETRY_BT709">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="VIDEO_COLORIMETRY_SMPTE240M"
              value="smpte240m"
              c:type="GST_VIDEO_COLORIMETRY_SMPTE240M">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="VIDEO_COMP_A" value="3" c:type="GST_VIDEO_COMP_A">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VIDEO_COMP_B" value="2" c:type="GST_VIDEO_COMP_B">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VIDEO_COMP_G" value="1" c:type="GST_VIDEO_COMP_G">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VIDEO_COMP_INDEX" value="0" c:type="GST_VIDEO_COMP_INDEX">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VIDEO_COMP_PALETTE"
              value="1"
              c:type="GST_VIDEO_COMP_PALETTE">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VIDEO_COMP_R" value="0" c:type="GST_VIDEO_COMP_R">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VIDEO_COMP_U" value="1" c:type="GST_VIDEO_COMP_U">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VIDEO_COMP_V" value="2" c:type="GST_VIDEO_COMP_V">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VIDEO_COMP_Y" value="0" c:type="GST_VIDEO_COMP_Y">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VIDEO_DECODER_MAX_ERRORS"
              value="10"
              c:type="GST_VIDEO_DECODER_MAX_ERRORS">
      <doc xml:space="preserve">Default maximum number of errors tolerated before signaling error.</doc>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VIDEO_DECODER_SINK_NAME"
              value="sink"
              c:type="GST_VIDEO_DECODER_SINK_NAME">
      <doc xml:space="preserve">The name of the templates for the sink pad.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="VIDEO_DECODER_SRC_NAME"
              value="src"
              c:type="GST_VIDEO_DECODER_SRC_NAME">
      <doc xml:space="preserve">The name of the templates for the source pad.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="VIDEO_ENCODER_SINK_NAME"
              value="sink"
              c:type="GST_VIDEO_ENCODER_SINK_NAME">
      <doc xml:space="preserve">The name of the templates for the sink pad.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="VIDEO_ENCODER_SRC_NAME"
              value="src"
              c:type="GST_VIDEO_ENCODER_SRC_NAME">
      <doc xml:space="preserve">The name of the templates for the source pad.</doc>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="VIDEO_FORMATS_ALL"
              value="{ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE }"
              c:type="GST_VIDEO_FORMATS_ALL">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="VIDEO_FPS_RANGE"
              value="(fraction) [ 0, max ]"
              c:type="GST_VIDEO_FPS_RANGE">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="VIDEO_MAX_COMPONENTS"
              value="4"
              c:type="GST_VIDEO_MAX_COMPONENTS">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VIDEO_MAX_PLANES" value="4" c:type="GST_VIDEO_MAX_PLANES">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VIDEO_SIZE_RANGE"
              value="(int) [ 1, max ]"
              c:type="GST_VIDEO_SIZE_RANGE">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <record name="VideoAlignment" c:type="GstVideoAlignment">
      <doc xml:space="preserve">Extra alignment paramters for the memory of video buffers. This
structure is usually used to configure the bufferpool if it supports the
#GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT.</doc>
      <field name="padding_top" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <field name="padding_bottom" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <field name="padding_left" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <field name="padding_right" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <field name="stride_align" writable="1">
        <array zero-terminated="0" c:type="guint" fixed-size="4">
          <type name="guint" c:type="guint"/>
        </array>
      </field>
      <method name="reset" c:identifier="gst_video_alignment_reset">
        <doc xml:space="preserve">Set @align to its default values with no padding and no alignment.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="align" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoAlignment</doc>
            <type name="VideoAlignment" c:type="GstVideoAlignment*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <bitfield name="VideoBufferFlags" c:type="GstVideoBufferFlags">
      <doc xml:space="preserve">Additional video buffer flags.</doc>
      <member name="interlaced"
              value="1048576"
              c:identifier="GST_VIDEO_BUFFER_FLAG_INTERLACED">
        <doc xml:space="preserve">If the #GstBuffer is interlaced. In mixed interlace-mode, this flags specifies if the frame is interlaced or progressive.</doc>
      </member>
      <member name="tff"
              value="2097152"
              c:identifier="GST_VIDEO_BUFFER_FLAG_TFF">
        <doc xml:space="preserve">If the #GstBuffer is interlaced, then the first field in the video frame is the top field.  If unset, the bottom field is first.</doc>
      </member>
      <member name="rff"
              value="4194304"
              c:identifier="GST_VIDEO_BUFFER_FLAG_RFF">
        <doc xml:space="preserve">If the #GstBuffer is interlaced, then the first field (as defined by the %GST_VIDEO_BUFFER_TFF flag setting) is repeated.</doc>
      </member>
      <member name="onefield"
              value="8388608"
              c:identifier="GST_VIDEO_BUFFER_FLAG_ONEFIELD">
        <doc xml:space="preserve">If the #GstBuffer is interlaced, then only the first field (as defined by the %GST_VIDEO_BUFFER_TFF flag setting) is to be displayed.</doc>
      </member>
      <member name="last"
              value="268435456"
              c:identifier="GST_VIDEO_BUFFER_FLAG_LAST">
      </member>
    </bitfield>
    <class name="VideoBufferPool"
           c:symbol-prefix="video_buffer_pool"
           c:type="GstVideoBufferPool"
           parent="Gst.BufferPool"
           glib:type-name="GstVideoBufferPool"
           glib:get-type="gst_video_buffer_pool_get_type"
           glib:type-struct="VideoBufferPoolClass">
      <constructor name="new" c:identifier="gst_video_buffer_pool_new">
        <doc xml:space="preserve">Create a new bufferpool that can allocate video frames. This bufferpool
supports all the video bufferpool options.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a new #GstBufferPool to allocate video frames</doc>
          <type name="Gst.BufferPool" c:type="GstBufferPool*"/>
        </return-value>
      </constructor>
      <field name="bufferpool">
        <type name="Gst.BufferPool" c:type="GstBufferPool"/>
      </field>
      <field name="priv">
        <type name="VideoBufferPoolPrivate"
              c:type="GstVideoBufferPoolPrivate*"/>
      </field>
    </class>
    <record name="VideoBufferPoolClass"
            c:type="GstVideoBufferPoolClass"
            glib:is-gtype-struct-for="VideoBufferPool">
      <field name="parent_class">
        <type name="Gst.BufferPoolClass" c:type="GstBufferPoolClass"/>
      </field>
    </record>
    <record name="VideoBufferPoolPrivate"
            c:type="GstVideoBufferPoolPrivate"
            disguised="1">
    </record>
    <bitfield name="VideoChromaSite"
              glib:type-name="GstVideoChromaSite"
              glib:get-type="gst_video_chroma_site_get_type"
              c:type="GstVideoChromaSite">
      <doc xml:space="preserve">Various Chroma sitings.</doc>
      <member name="unknown"
              value="0"
              c:identifier="GST_VIDEO_CHROMA_SITE_UNKNOWN"
              glib:nick="unknown">
        <doc xml:space="preserve">unknown cositing</doc>
      </member>
      <member name="none"
              value="1"
              c:identifier="GST_VIDEO_CHROMA_SITE_NONE"
              glib:nick="none">
        <doc xml:space="preserve">no cositing</doc>
      </member>
      <member name="h_cosited"
              value="2"
              c:identifier="GST_VIDEO_CHROMA_SITE_H_COSITED"
              glib:nick="h-cosited">
        <doc xml:space="preserve">chroma is horizontally cosited</doc>
      </member>
      <member name="v_cosited"
              value="4"
              c:identifier="GST_VIDEO_CHROMA_SITE_V_COSITED"
              glib:nick="v-cosited">
        <doc xml:space="preserve">chroma is vertically cosited</doc>
      </member>
      <member name="alt_line"
              value="8"
              c:identifier="GST_VIDEO_CHROMA_SITE_ALT_LINE"
              glib:nick="alt-line">
        <doc xml:space="preserve">choma samples are sited on alternate lines</doc>
      </member>
      <member name="cosited"
              value="6"
              c:identifier="GST_VIDEO_CHROMA_SITE_COSITED"
              glib:nick="cosited">
        <doc xml:space="preserve">chroma samples cosited with luma samples</doc>
      </member>
      <member name="jpeg"
              value="1"
              c:identifier="GST_VIDEO_CHROMA_SITE_JPEG"
              glib:nick="jpeg">
        <doc xml:space="preserve">jpeg style cositing, also for mpeg1 and mjpeg</doc>
      </member>
      <member name="mpeg2"
              value="2"
              c:identifier="GST_VIDEO_CHROMA_SITE_MPEG2"
              glib:nick="mpeg2">
        <doc xml:space="preserve">mpeg2 style cositing</doc>
      </member>
      <member name="dv"
              value="14"
              c:identifier="GST_VIDEO_CHROMA_SITE_DV"
              glib:nick="dv">
        <doc xml:space="preserve">DV style cositing</doc>
      </member>
    </bitfield>
    <record name="VideoCodecFrame"
            c:type="GstVideoCodecFrame"
            glib:type-name="GstVideoCodecFrame"
            glib:get-type="gst_video_codec_frame_get_type"
            c:symbol-prefix="video_codec_frame">
      <doc xml:space="preserve">A #GstVideoCodecFrame represents a video frame both in raw and
encoded form.</doc>
      <field name="ref_count" readable="0" private="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="flags" readable="0" private="1">
        <type name="guint32" c:type="guint32"/>
      </field>
      <field name="system_frame_number" writable="1">
        <type name="guint32" c:type="guint32"/>
      </field>
      <field name="decode_frame_number" writable="1">
        <type name="guint32" c:type="guint32"/>
      </field>
      <field name="presentation_frame_number" writable="1">
        <type name="guint32" c:type="guint32"/>
      </field>
      <field name="dts" writable="1">
        <type name="Gst.ClockTime" c:type="GstClockTime"/>
      </field>
      <field name="pts" writable="1">
        <type name="Gst.ClockTime" c:type="GstClockTime"/>
      </field>
      <field name="duration" writable="1">
        <type name="Gst.ClockTime" c:type="GstClockTime"/>
      </field>
      <field name="distance_from_sync" writable="1">
        <type name="gint" c:type="int"/>
      </field>
      <field name="input_buffer" writable="1">
        <type name="Gst.Buffer" c:type="GstBuffer*"/>
      </field>
      <field name="output_buffer" writable="1">
        <type name="Gst.Buffer" c:type="GstBuffer*"/>
      </field>
      <field name="deadline" writable="1">
        <type name="Gst.ClockTime" c:type="GstClockTime"/>
      </field>
      <field name="events" readable="0" private="1">
        <type name="GLib.List" c:type="GList*">
          <type name="gpointer" c:type="gpointer"/>
        </type>
      </field>
      <field name="user_data" readable="0" private="1">
        <type name="gpointer" c:type="gpointer"/>
      </field>
      <field name="user_data_destroy_notify" readable="0" private="1">
        <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
      </field>
      <union name="abidata" c:type="abidata">
        <record name="ABI" c:type="ABI">
          <field name="ts" writable="1">
            <type name="Gst.ClockTime" c:type="GstClockTime"/>
          </field>
          <field name="ts2" writable="1">
            <type name="Gst.ClockTime" c:type="GstClockTime"/>
          </field>
        </record>
        <field name="padding" writable="1">
          <array zero-terminated="0" c:type="void" fixed-size="20">
            <type name="gpointer" c:type="void*"/>
          </array>
        </field>
      </union>
      <method name="get_user_data"
              c:identifier="gst_video_codec_frame_get_user_data">
        <doc xml:space="preserve">Gets private data set on the frame by the subclass via
gst_video_codec_frame_set_user_data() previously.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The previously set user_data</doc>
          <type name="gpointer" c:type="gpointer"/>
        </return-value>
        <parameters>
          <instance-parameter name="frame" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoCodecFrame</doc>
            <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="gst_video_codec_frame_ref">
        <doc xml:space="preserve">Increases the refcount of the given frame by one.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">@buf</doc>
          <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
        </return-value>
        <parameters>
          <instance-parameter name="frame" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoCodecFrame</doc>
            <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_user_data"
              c:identifier="gst_video_codec_frame_set_user_data">
        <doc xml:space="preserve">Sets @user_data on the frame and the #GDestroyNotify that will be called when
the frame is freed. Allows to attach private data by the subclass to frames.

If a @user_data was previously set, then the previous set @notify will be called
before the @user_data is replaced.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="frame" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoCodecFrame</doc>
            <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
          </instance-parameter>
          <parameter name="user_data" transfer-ownership="none">
            <doc xml:space="preserve">private data</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="notify"
                     transfer-ownership="none"
                     scope="async"
                     closure="0">
            <doc xml:space="preserve">a #GDestroyNotify</doc>
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="gst_video_codec_frame_unref">
        <doc xml:space="preserve">Decreases the refcount of the frame. If the refcount reaches 0, the frame
will be freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="frame" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoCodecFrame</doc>
            <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <bitfield name="VideoCodecFrameFlags" c:type="GstVideoCodecFrameFlags">
      <doc xml:space="preserve">Flags for #GstVideoCodecFrame</doc>
      <member name="decode_only"
              value="1"
              c:identifier="GST_VIDEO_CODEC_FRAME_FLAG_DECODE_ONLY">
        <doc xml:space="preserve">is the frame only meant to be decoded</doc>
      </member>
      <member name="sync_point"
              value="2"
              c:identifier="GST_VIDEO_CODEC_FRAME_FLAG_SYNC_POINT">
        <doc xml:space="preserve">is the frame a synchronization point (keyframe)</doc>
      </member>
      <member name="force_keyframe"
              value="4"
              c:identifier="GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME">
        <doc xml:space="preserve">should the output frame be made a keyframe</doc>
      </member>
      <member name="force_keyframe_headers"
              value="8"
              c:identifier="GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS">
        <doc xml:space="preserve">should the encoder output stream headers</doc>
      </member>
    </bitfield>
    <record name="VideoCodecState"
            c:type="GstVideoCodecState"
            glib:type-name="GstVideoCodecState"
            glib:get-type="gst_video_codec_state_get_type"
            c:symbol-prefix="video_codec_state">
      <doc xml:space="preserve">Structure representing the state of an incoming or outgoing video
stream for encoders and decoders.

Decoders and encoders will receive such a state through their
respective @set_format vmethods.

Decoders and encoders can set the downstream state, by using the
@gst_video_decoder_set_output_state() or
@gst_video_encoder_set_output_state() methods.</doc>
      <field name="ref_count" readable="0" private="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="info" writable="1">
        <type name="VideoInfo" c:type="GstVideoInfo"/>
      </field>
      <field name="caps" writable="1">
        <type name="Gst.Caps" c:type="GstCaps*"/>
      </field>
      <field name="codec_data" writable="1">
        <type name="Gst.Buffer" c:type="GstBuffer*"/>
      </field>
      <field name="padding" readable="0" private="1">
        <array zero-terminated="0" c:type="void" fixed-size="20">
          <type name="gpointer" c:type="void*"/>
        </array>
      </field>
      <method name="ref" c:identifier="gst_video_codec_state_ref">
        <doc xml:space="preserve">Increases the refcount of the given state by one.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">@buf</doc>
          <type name="VideoCodecState" c:type="GstVideoCodecState*"/>
        </return-value>
        <parameters>
          <instance-parameter name="state" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoCodecState</doc>
            <type name="VideoCodecState" c:type="GstVideoCodecState*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="gst_video_codec_state_unref">
        <doc xml:space="preserve">Decreases the refcount of the state. If the refcount reaches 0, the state
will be freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="state" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoCodecState</doc>
            <type name="VideoCodecState" c:type="GstVideoCodecState*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <enumeration name="VideoColorMatrix"
                 glib:type-name="GstVideoColorMatrix"
                 glib:get-type="gst_video_color_matrix_get_type"
                 c:type="GstVideoColorMatrix">
      <doc xml:space="preserve">The color matrix is used to convert between Y'PbPr and
non-linear RGB (R'G'B')</doc>
      <member name="unknown"
              value="0"
              c:identifier="GST_VIDEO_COLOR_MATRIX_UNKNOWN"
              glib:nick="unknown">
        <doc xml:space="preserve">unknown matrix</doc>
      </member>
      <member name="rgb"
              value="1"
              c:identifier="GST_VIDEO_COLOR_MATRIX_RGB"
              glib:nick="rgb">
        <doc xml:space="preserve">identity matrix</doc>
      </member>
      <member name="fcc"
              value="2"
              c:identifier="GST_VIDEO_COLOR_MATRIX_FCC"
              glib:nick="fcc">
        <doc xml:space="preserve">FCC color matrix</doc>
      </member>
      <member name="bt709"
              value="3"
              c:identifier="GST_VIDEO_COLOR_MATRIX_BT709"
              glib:nick="bt709">
        <doc xml:space="preserve">ITU-R BT.709 color matrix</doc>
      </member>
      <member name="bt601"
              value="4"
              c:identifier="GST_VIDEO_COLOR_MATRIX_BT601"
              glib:nick="bt601">
        <doc xml:space="preserve">ITU-R BT.601 color matrix</doc>
      </member>
      <member name="smpte240m"
              value="5"
              c:identifier="GST_VIDEO_COLOR_MATRIX_SMPTE240M"
              glib:nick="smpte240m">
        <doc xml:space="preserve">SMPTE 240M color matrix</doc>
      </member>
    </enumeration>
    <enumeration name="VideoColorPrimaries"
                 glib:type-name="GstVideoColorPrimaries"
                 glib:get-type="gst_video_color_primaries_get_type"
                 c:type="GstVideoColorPrimaries">
      <doc xml:space="preserve">The color primaries define the how to transform linear RGB values to and from
the CIE XYZ colorspace.</doc>
      <member name="unknown"
              value="0"
              c:identifier="GST_VIDEO_COLOR_PRIMARIES_UNKNOWN"
              glib:nick="unknown">
        <doc xml:space="preserve">unknown color primaries</doc>
      </member>
      <member name="bt709"
              value="1"
              c:identifier="GST_VIDEO_COLOR_PRIMARIES_BT709"
              glib:nick="bt709">
        <doc xml:space="preserve">BT709 primaries</doc>
      </member>
      <member name="bt470m"
              value="2"
              c:identifier="GST_VIDEO_COLOR_PRIMARIES_BT470M"
              glib:nick="bt470m">
        <doc xml:space="preserve">BT470M primaries</doc>
      </member>
      <member name="bt470bg"
              value="3"
              c:identifier="GST_VIDEO_COLOR_PRIMARIES_BT470BG"
              glib:nick="bt470bg">
        <doc xml:space="preserve">BT470BG primaries</doc>
      </member>
      <member name="smpte170m"
              value="4"
              c:identifier="GST_VIDEO_COLOR_PRIMARIES_SMPTE170M"
              glib:nick="smpte170m">
        <doc xml:space="preserve">SMPTE170M primaries</doc>
      </member>
      <member name="smpte240m"
              value="5"
              c:identifier="GST_VIDEO_COLOR_PRIMARIES_SMPTE240M"
              glib:nick="smpte240m">
        <doc xml:space="preserve">SMPTE240M primaries</doc>
      </member>
      <member name="film"
              value="6"
              c:identifier="GST_VIDEO_COLOR_PRIMARIES_FILM"
              glib:nick="film">
        <doc xml:space="preserve">Generic film</doc>
      </member>
    </enumeration>
    <enumeration name="VideoColorRange"
                 glib:type-name="GstVideoColorRange"
                 glib:get-type="gst_video_color_range_get_type"
                 c:type="GstVideoColorRange">
      <doc xml:space="preserve">Possible color range values. These constants are defined for 8 bit color
values and can be scaled for other bit depths.</doc>
      <member name="unknown"
              value="0"
              c:identifier="GST_VIDEO_COLOR_RANGE_UNKNOWN"
              glib:nick="unknown">
        <doc xml:space="preserve">unknown range</doc>
      </member>
      <member name="0_255"
              value="1"
              c:identifier="GST_VIDEO_COLOR_RANGE_0_255"
              glib:nick="0-255">
        <doc xml:space="preserve">[0..255] for 8 bit components</doc>
      </member>
      <member name="16_235"
              value="2"
              c:identifier="GST_VIDEO_COLOR_RANGE_16_235"
              glib:nick="16-235">
        <doc xml:space="preserve">[16..235] for 8 bit components. Chroma has [16..240] range.</doc>
      </member>
      <function name="offsets" c:identifier="gst_video_color_range_offsets">
        <doc xml:space="preserve">Compute the offset and scale values for each component of @info. For each
component, (c[i] - offset[i]) / scale[i] will scale the component c[i] to the
range [0.0 .. 1.0].

The reverse operation (c[i] * scale[i]) + offset[i] can be used to convert
the component values in range [0.0 .. 1.0] back to their representation in
@info and @range.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="range" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoColorRange</doc>
            <type name="VideoColorRange" c:type="GstVideoColorRange"/>
          </parameter>
          <parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoFormatInfo</doc>
            <type name="VideoFormatInfo" c:type="const GstVideoFormatInfo*"/>
          </parameter>
          <parameter name="offset" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="scale"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve">output scale</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </function>
    </enumeration>
    <record name="VideoColorimetry" c:type="GstVideoColorimetry">
      <doc xml:space="preserve">Structure describing the color info.</doc>
      <field name="range" writable="1">
        <type name="VideoColorRange" c:type="GstVideoColorRange"/>
      </field>
      <field name="matrix" writable="1">
        <type name="VideoColorMatrix" c:type="GstVideoColorMatrix"/>
      </field>
      <field name="transfer" writable="1">
        <type name="VideoTransferFunction" c:type="GstVideoTransferFunction"/>
      </field>
      <field name="primaries" writable="1">
        <type name="VideoColorPrimaries" c:type="GstVideoColorPrimaries"/>
      </field>
      <method name="from_string"
              c:identifier="gst_video_colorimetry_from_string">
        <doc xml:space="preserve">Parse the colorimetry string and update @cinfo with the parsed
values.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">#TRUE if @color points to valid colorimetry info.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="cinfo" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoColorimetry</doc>
            <type name="VideoColorimetry" c:type="GstVideoColorimetry*"/>
          </instance-parameter>
          <parameter name="color" transfer-ownership="none">
            <doc xml:space="preserve">a colorimetry string</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="matches" c:identifier="gst_video_colorimetry_matches">
        <doc xml:space="preserve">Check if the colorimetry information in @info matches that of the
string @color.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">#TRUE if @color conveys the same colorimetry info as the color information in @info.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="cinfo" transfer-ownership="none">
            <type name="VideoColorimetry" c:type="GstVideoColorimetry*"/>
          </instance-parameter>
          <parameter name="color" transfer-ownership="none">
            <doc xml:space="preserve">a colorimetry string</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="to_string" c:identifier="gst_video_colorimetry_to_string">
        <doc xml:space="preserve">Make a string representation of @cinfo.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a string representation of @cinfo.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="cinfo" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoColorimetry</doc>
            <type name="VideoColorimetry" c:type="GstVideoColorimetry*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <callback name="VideoConvertSampleCallback"
              c:type="GstVideoConvertSampleCallback">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="sample" transfer-ownership="none">
          <type name="Gst.Sample" c:type="GstSample*"/>
        </parameter>
        <parameter name="error" transfer-ownership="none">
          <type name="GLib.Error" c:type="GError*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="2">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <record name="VideoCropMeta" c:type="GstVideoCropMeta">
      <doc xml:space="preserve">Extra buffer metadata describing image cropping.</doc>
      <field name="meta" writable="1">
        <type name="Gst.Meta" c:type="GstMeta"/>
      </field>
      <field name="x" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <field name="y" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <field name="width" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <field name="height" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <function name="get_info" c:identifier="gst_video_crop_meta_get_info">
        <return-value transfer-ownership="none">
          <type name="Gst.MetaInfo" c:type="const GstMetaInfo*"/>
        </return-value>
      </function>
    </record>
    <class name="VideoDecoder"
           c:symbol-prefix="video_decoder"
           c:type="GstVideoDecoder"
           parent="Gst.Element"
           abstract="1"
           glib:type-name="GstVideoDecoder"
           glib:get-type="gst_video_decoder_get_type"
           glib:type-struct="VideoDecoderClass">
      <doc xml:space="preserve">This base class is for video decoders turning encoded data into raw video
frames.

The GstVideoDecoder base class and derived subclasses should cooperate as follows:
&lt;orderedlist&gt;
&lt;listitem&gt;
  &lt;itemizedlist&gt;&lt;title&gt;Configuration&lt;/title&gt;
  &lt;listitem&gt;&lt;para&gt;
    Initially, GstVideoDecoder calls @start when the decoder element
    is activated, which allows the subclass to perform any global setup.
  &lt;/para&gt;&lt;/listitem&gt;
  &lt;listitem&gt;&lt;para&gt;
    GstVideoDecoder calls @set_format to inform the subclass of caps
    describing input video data that it is about to receive, including
    possibly configuration data.
    While unlikely, it might be called more than once, if changing input
    parameters require reconfiguration.
  &lt;/para&gt;&lt;/listitem&gt;
  &lt;listitem&gt;&lt;para&gt;
    Incoming data buffers are processed as needed, described in Data Processing below.
  &lt;/para&gt;&lt;/listitem&gt;
  &lt;listitem&gt;&lt;para&gt;
    GstVideoDecoder calls @stop at end of all processing.
  &lt;/para&gt;&lt;/listitem&gt;
  &lt;/itemizedlist&gt;
&lt;/listitem&gt;
&lt;listitem&gt;
  &lt;itemizedlist&gt;
  &lt;title&gt;Data processing&lt;/title&gt;
    &lt;listitem&gt;&lt;para&gt;
      The base class gathers input data, and optionally allows subclass
      to parse this into subsequently manageable chunks, typically
      corresponding to and referred to as 'frames'.
    &lt;/para&gt;&lt;/listitem&gt;
    &lt;listitem&gt;&lt;para&gt;
      Each input frame is provided in turn to the subclass' @handle_frame callback.
      The ownership of the frame is given to the @handle_frame callback.
    &lt;/para&gt;&lt;/listitem&gt;
    &lt;listitem&gt;&lt;para&gt;
      If codec processing results in decoded data, the subclass should call
      @gst_video_decoder_finish_frame to have decoded data pushed.
      downstream. Otherwise, the subclass must call @gst_video_decoder_drop_frame, to
      allow the base class to do timestamp and offset tracking, and possibly to
      requeue the frame for a later attempt in the case of reverse playback.
    &lt;/para&gt;&lt;/listitem&gt;
  &lt;/itemizedlist&gt;
&lt;/listitem&gt;
&lt;listitem&gt;
  &lt;itemizedlist&gt;&lt;title&gt;Shutdown phase&lt;/title&gt;
  &lt;listitem&gt;&lt;para&gt;
    The GstVideoDecoder class calls @stop to inform the subclass that data
    parsing will be stopped.
  &lt;/para&gt;&lt;/listitem&gt;
  &lt;/itemizedlist&gt;
&lt;/listitem&gt;
&lt;listitem&gt;
  &lt;itemizedlist&gt;&lt;title&gt;Additional Notes&lt;/title&gt;
  &lt;listitem&gt;
    &lt;itemizedlist&gt;&lt;title&gt;Seeking/Flushing&lt;/title&gt;
    &lt;listitem&gt;&lt;para&gt;
  When the pipeline is seeked or otherwise flushed, the subclass is informed via a call
  to its @reset callback, with the hard parameter set to true. This indicates the
  subclass should drop any internal data queues and timestamps and prepare for a fresh
  set of buffers to arrive for parsing and decoding.
    &lt;/para&gt;&lt;/listitem&gt;
    &lt;/itemizedlist&gt;
  &lt;/listitem&gt;
  &lt;listitem&gt;
    &lt;itemizedlist&gt;&lt;title&gt;End Of Stream&lt;/title&gt;
    &lt;listitem&gt;&lt;para&gt;
  At end-of-stream, the subclass @parse function may be called some final times with the 
  at_eos parameter set to true, indicating that the element should not expect any more data
  to be arriving, and it should parse and remaining frames and call
  gst_video_decoder_have_frame() if possible.
    &lt;/para&gt;&lt;/listitem&gt;
    &lt;/itemizedlist&gt;
  &lt;/listitem&gt;
  &lt;/itemizedlist&gt;
&lt;/listitem&gt;
&lt;/orderedlist&gt;

The subclass is responsible for providing pad template caps for
source and sink pads. The pads need to be named "sink" and "src". It also
needs to provide information about the ouptput caps, when they are known.
This may be when the base class calls the subclass' @set_format function,
though it might be during decoding, before calling
@gst_video_decoder_finish_frame. This is done via
@gst_video_decoder_set_output_state

The subclass is also responsible for providing (presentation) timestamps
(likely based on corresponding input ones).  If that is not applicable
or possible, the base class provides limited framerate based interpolation.

Similarly, the base class provides some limited (legacy) seeking support
if specifically requested by the subclass, as full-fledged support
should rather be left to upstream demuxer, parser or alike.  This simple
approach caters for seeking and duration reporting using estimated input
bitrates. To enable it, a subclass should call
@gst_video_decoder_set_estimate_rate to enable handling of incoming byte-streams.

The base class provides some support for reverse playback, in particular
in case incoming data is not packetized or upstream does not provide
fragments on keyframe boundaries.  However, the subclass should then be prepared
for the parsing and frame processing stage to occur separately (in normal
forward processing, the latter immediately follows the former),
The subclass also needs to ensure the parsing stage properly marks keyframes,
unless it knows the upstream elements will do so properly for incoming data.

The bare minimum that a functional subclass needs to implement is:
&lt;itemizedlist&gt;
  &lt;listitem&gt;&lt;para&gt;Provide pad templates&lt;/para&gt;&lt;/listitem&gt;
  &lt;listitem&gt;&lt;para&gt;
     Inform the base class of output caps via @gst_video_decoder_set_output_state
  &lt;/para&gt;&lt;/listitem&gt;
  &lt;listitem&gt;&lt;para&gt;
     Parse input data, if it is not considered packetized from upstream
     Data will be provided to @parse which should invoke @gst_video_decoder_add_to_frame and
     @gst_video_decoder_have_frame to separate the data belonging to each video frame.
  &lt;/para&gt;&lt;/listitem&gt;
  &lt;listitem&gt;&lt;para&gt;
     Accept data in @handle_frame and provide decoded results to
     @gst_video_decoder_finish_frame, or call @gst_video_decoder_drop_frame.
  &lt;/para&gt;&lt;/listitem&gt;
&lt;/itemizedlist&gt;</doc>
      <virtual-method name="close">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="decide_allocation">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="query" transfer-ownership="none">
            <type name="Gst.Query" c:type="GstQuery*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="finish">
        <return-value transfer-ownership="none">
          <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="handle_frame">
        <return-value transfer-ownership="none">
          <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="frame" transfer-ownership="none">
            <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="negotiate" invoker="negotiate">
        <doc xml:space="preserve">Negotiate with downstreame elements to currently configured #GstVideoCodecState.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">#TRUE if the negotiation succeeded, else #FALSE.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="open">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="parse">
        <return-value transfer-ownership="none">
          <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="frame" transfer-ownership="none">
            <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
          </parameter>
          <parameter name="adapter" transfer-ownership="none">
            <type name="GstBase.Adapter" c:type="GstAdapter*"/>
          </parameter>
          <parameter name="at_eos" transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="propose_allocation">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="query" transfer-ownership="none">
            <type name="Gst.Query" c:type="GstQuery*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="reset">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="hard" transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="set_format">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="state" transfer-ownership="none">
            <type name="VideoCodecState" c:type="GstVideoCodecState*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="sink_event">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="event" transfer-ownership="none">
            <type name="Gst.Event" c:type="GstEvent*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="src_event">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="event" transfer-ownership="none">
            <type name="Gst.Event" c:type="GstEvent*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="start">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="stop">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <method name="add_to_frame"
              c:identifier="gst_video_decoder_add_to_frame">
        <doc xml:space="preserve">Removes next @n_bytes of input data and adds it to currently parsed frame.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="n_bytes" transfer-ownership="none">
            <doc xml:space="preserve">the number of bytes to add</doc>
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </method>
      <method name="allocate_output_buffer"
              c:identifier="gst_video_decoder_allocate_output_buffer">
        <doc xml:space="preserve">Helper function that allocates a buffer to hold a video frame for @decoder's
current #GstVideoCodecState.

You should use gst_video_decoder_allocate_output_frame() instead of this
function, if possible at all.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">allocated buffer, or NULL if no buffer could be allocated (e.g. when downstream is flushing or shutting down)</doc>
          <type name="Gst.Buffer" c:type="GstBuffer*"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="allocate_output_frame"
              c:identifier="gst_video_decoder_allocate_output_frame">
        <doc xml:space="preserve">Helper function that allocates a buffer to hold a video frame for @decoder's
current #GstVideoCodecState.  Subclass should already have configured video
state and set src pad caps.

The buffer allocated here is owned by the frame and you should only
keep references to the frame, not the buffer.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%GST_FLOW_OK if an output buffer could be allocated</doc>
          <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="frame" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoCodecFrame</doc>
            <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
          </parameter>
        </parameters>
      </method>
      <method name="drop_frame" c:identifier="gst_video_decoder_drop_frame">
        <doc xml:space="preserve">Similar to gst_video_decoder_finish_frame(), but drops @frame in any
case and posts a QoS message with the frame's details on the bus.
In any case, the frame is considered finished and released.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GstFlowReturn, usually GST_FLOW_OK.</doc>
          <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <instance-parameter name="dec" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="frame" transfer-ownership="full">
            <doc xml:space="preserve">the #GstVideoCodecFrame to drop</doc>
            <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
          </parameter>
        </parameters>
      </method>
      <method name="finish_frame"
              c:identifier="gst_video_decoder_finish_frame">
        <doc xml:space="preserve">@frame should have a valid decoded data buffer, whose metadata fields
are then appropriately set according to frame data and pushed downstream.
If no output data is provided, @frame is considered skipped.
In any case, the frame is considered finished and released.

After calling this function the output buffer of the frame is to be
considered read-only. This function will also change the metadata
of the buffer.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GstFlowReturn resulting from sending data downstream</doc>
          <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="frame" transfer-ownership="full">
            <doc xml:space="preserve">a decoded #GstVideoCodecFrame</doc>
            <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_allocator"
              c:identifier="gst_video_decoder_get_allocator">
        <doc xml:space="preserve">Lets #GstVideoDecoder sub-classes to know the memory @allocator
used by the base class and its @params.

Unref the @allocator after use it.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="allocator"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     allow-none="1">
            <doc xml:space="preserve">the #GstAllocator used</doc>
            <type name="Gst.Allocator" c:type="GstAllocator**"/>
          </parameter>
          <parameter name="params"
                     direction="out"
                     caller-allocates="1"
                     transfer-ownership="full"
                     allow-none="1">
            <doc xml:space="preserve">the #GstAllocatorParams of @allocator</doc>
            <type name="Gst.AllocationParams" c:type="GstAllocationParams*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_buffer_pool"
              c:identifier="gst_video_decoder_get_buffer_pool">
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the instance of the #GstBufferPool used by the decoder; free it after use it</doc>
          <type name="Gst.BufferPool" c:type="GstBufferPool*"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_estimate_rate"
              c:identifier="gst_video_decoder_get_estimate_rate">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">currently configured byte to time conversion setting</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="dec" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_frame" c:identifier="gst_video_decoder_get_frame">
        <doc xml:space="preserve">Get a pending unfinished #GstVideoCodecFrame</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">pending unfinished #GstVideoCodecFrame identified by @frame_number.</doc>
          <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="frame_number" transfer-ownership="none">
            <doc xml:space="preserve">system_frame_number of a frame</doc>
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_frames" c:identifier="gst_video_decoder_get_frames">
        <doc xml:space="preserve">Get all pending unfinished #GstVideoCodecFrame</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">pending unfinished #GstVideoCodecFrame.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="VideoCodecFrame"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_latency" c:identifier="gst_video_decoder_get_latency">
        <doc xml:space="preserve">Query the configured decoder latency. Results will be returned via
@min_latency and @max_latency.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="min_latency"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     allow-none="1">
            <doc xml:space="preserve">address of variable in which to store the configured minimum latency, or %NULL</doc>
            <type name="Gst.ClockTime" c:type="GstClockTime*"/>
          </parameter>
          <parameter name="max_latency"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     allow-none="1">
            <doc xml:space="preserve">address of variable in which to store the configured mximum latency, or %NULL</doc>
            <type name="Gst.ClockTime" c:type="GstClockTime*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_max_decode_time"
              c:identifier="gst_video_decoder_get_max_decode_time">
        <doc xml:space="preserve">Determines maximum possible decoding time for @frame that will
allow it to decode and arrive in time (as determined by QoS events).
In particular, a negative result means decoding in time is no longer possible
and should therefore occur as soon/skippy as possible.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">max decoding time.</doc>
          <type name="Gst.ClockTimeDiff" c:type="GstClockTimeDiff"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="frame" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoCodecFrame</doc>
            <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_max_errors"
              c:identifier="gst_video_decoder_get_max_errors">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">currently configured decoder tolerated error count.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="dec" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_oldest_frame"
              c:identifier="gst_video_decoder_get_oldest_frame">
        <doc xml:space="preserve">Get the oldest pending unfinished #GstVideoCodecFrame</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">oldest pending unfinished #GstVideoCodecFrame.</doc>
          <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_output_state"
              c:identifier="gst_video_decoder_get_output_state">
        <doc xml:space="preserve">Get the #GstVideoCodecState currently describing the output stream.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">#GstVideoCodecState describing format of video data.</doc>
          <type name="VideoCodecState" c:type="GstVideoCodecState*"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_packetized"
              c:identifier="gst_video_decoder_get_packetized">
        <doc xml:space="preserve">Queries whether input data is considered packetized or not by the
base class.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if input data is considered packetized.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_qos_proportion"
              c:identifier="gst_video_decoder_get_qos_proportion"
              version="1.0.3">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The current QoS proportion.</doc>
          <type name="gdouble" c:type="gdouble"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder current QoS proportion, or %NULL</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="have_frame" c:identifier="gst_video_decoder_have_frame">
        <doc xml:space="preserve">Gathers all data collected for currently parsed frame, gathers corresponding
metadata and passes it along for further processing, i.e. @handle_frame.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GstFlowReturn</doc>
          <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="merge_tags" c:identifier="gst_video_decoder_merge_tags">
        <doc xml:space="preserve">Adds tags to so-called pending tags, which will be processed
before pushing out data downstream.

Note that this is provided for convenience, and the subclass is
not required to use this and can still do tag handling on its own.

MT safe.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="dec" transfer-ownership="none">
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="tags" transfer-ownership="none">
            <doc xml:space="preserve">a #GstTagList to merge</doc>
            <type name="Gst.TagList" c:type="const GstTagList*"/>
          </parameter>
          <parameter name="mode" transfer-ownership="none">
            <doc xml:space="preserve">the #GstTagMergeMode to use</doc>
            <type name="Gst.TagMergeMode" c:type="GstTagMergeMode"/>
          </parameter>
        </parameters>
      </method>
      <method name="negotiate" c:identifier="gst_video_decoder_negotiate">
        <doc xml:space="preserve">Negotiate with downstreame elements to currently configured #GstVideoCodecState.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">#TRUE if the negotiation succeeded, else #FALSE.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_estimate_rate"
              c:identifier="gst_video_decoder_set_estimate_rate">
        <doc xml:space="preserve">Allows baseclass to perform byte to time estimated conversion.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="dec" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="enabled" transfer-ownership="none">
            <doc xml:space="preserve">whether to enable byte to time conversion</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_latency" c:identifier="gst_video_decoder_set_latency">
        <doc xml:space="preserve">Lets #GstVideoDecoder sub-classes tell the baseclass what the decoder
latency is. Will also post a LATENCY message on the bus so the pipeline
can reconfigure its global latency.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="min_latency" transfer-ownership="none">
            <doc xml:space="preserve">minimum latency</doc>
            <type name="Gst.ClockTime" c:type="GstClockTime"/>
          </parameter>
          <parameter name="max_latency" transfer-ownership="none">
            <doc xml:space="preserve">maximum latency</doc>
            <type name="Gst.ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_max_errors"
              c:identifier="gst_video_decoder_set_max_errors">
        <doc xml:space="preserve">Sets numbers of tolerated decoder errors, where a tolerated one is then only
warned about, but more than tolerated will lead to fatal error.  Default
is set to GST_VIDEO_DECODER_MAX_ERRORS.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="dec" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="num" transfer-ownership="none">
            <doc xml:space="preserve">max tolerated errors</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_output_state"
              c:identifier="gst_video_decoder_set_output_state">
        <doc xml:space="preserve">Creates a new #GstVideoCodecState with the specified @fmt, @width and @height
as the output state for the decoder.
Any previously set output state on @decoder will be replaced by the newly
created one.

If the subclass wishes to copy over existing fields (like pixel aspec ratio,
or framerate) from an existing #GstVideoCodecState, it can be provided as a
@reference.

If the subclass wishes to override some fields from the output state (like
pixel-aspect-ratio or framerate) it can do so on the returned #GstVideoCodecState.

The new output state will only take effect (set on pads and buffers) starting
from the next call to #gst_video_decoder_finish_frame().</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the newly configured output state.</doc>
          <type name="VideoCodecState" c:type="GstVideoCodecState*"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="fmt" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoFormat</doc>
            <type name="VideoFormat" c:type="GstVideoFormat"/>
          </parameter>
          <parameter name="width" transfer-ownership="none">
            <doc xml:space="preserve">The width in pixels</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="height" transfer-ownership="none">
            <doc xml:space="preserve">The height in pixels</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="reference" transfer-ownership="none" allow-none="1">
            <doc xml:space="preserve">An optional reference #GstVideoCodecState</doc>
            <type name="VideoCodecState" c:type="GstVideoCodecState*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_packetized"
              c:identifier="gst_video_decoder_set_packetized">
        <doc xml:space="preserve">Allows baseclass to consider input data as packetized or not. If the
input is packetized, then the @parse method will not be called.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="decoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoDecoder</doc>
            <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
          </instance-parameter>
          <parameter name="packetized" transfer-ownership="none">
            <doc xml:space="preserve">whether the input data should be considered as packetized.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <field name="element" readable="0" private="1">
        <type name="Gst.Element" c:type="GstElement"/>
      </field>
      <field name="sinkpad" readable="0" private="1">
        <type name="Gst.Pad" c:type="GstPad*"/>
      </field>
      <field name="srcpad" readable="0" private="1">
        <type name="Gst.Pad" c:type="GstPad*"/>
      </field>
      <field name="stream_lock" readable="0" private="1">
        <type name="GLib.RecMutex" c:type="GRecMutex"/>
      </field>
      <field name="input_segment" readable="0" private="1">
        <type name="Gst.Segment" c:type="GstSegment"/>
      </field>
      <field name="output_segment" readable="0" private="1">
        <type name="Gst.Segment" c:type="GstSegment"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="VideoDecoderPrivate" c:type="GstVideoDecoderPrivate*"/>
      </field>
      <field name="padding" readable="0" private="1">
        <array zero-terminated="0" c:type="void" fixed-size="20">
          <type name="gpointer" c:type="void*"/>
        </array>
      </field>
    </class>
    <record name="VideoDecoderClass"
            c:type="GstVideoDecoderClass"
            glib:is-gtype-struct-for="VideoDecoder">
      <doc xml:space="preserve">Subclasses can override any of the available virtual methods or not, as
needed. At minimum @handle_frame needs to be overridden, and @set_format
and likely as well.  If non-packetized input is supported or expected,
@parse needs to be overridden as well.</doc>
      <field name="element_class" readable="0" private="1">
        <type name="Gst.ElementClass" c:type="GstElementClass"/>
      </field>
      <field name="open">
        <callback name="open">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="decoder" transfer-ownership="none">
              <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="close">
        <callback name="close">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="decoder" transfer-ownership="none">
              <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="start">
        <callback name="start">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="decoder" transfer-ownership="none">
              <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="stop">
        <callback name="stop">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="decoder" transfer-ownership="none">
              <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="parse">
        <callback name="parse">
          <return-value transfer-ownership="none">
            <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
          </return-value>
          <parameters>
            <parameter name="decoder" transfer-ownership="none">
              <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
            </parameter>
            <parameter name="frame" transfer-ownership="none">
              <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
            </parameter>
            <parameter name="adapter" transfer-ownership="none">
              <type name="GstBase.Adapter" c:type="GstAdapter*"/>
            </parameter>
            <parameter name="at_eos" transfer-ownership="none">
              <type name="gboolean" c:type="gboolean"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="set_format">
        <callback name="set_format">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="decoder" transfer-ownership="none">
              <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
            </parameter>
            <parameter name="state" transfer-ownership="none">
              <type name="VideoCodecState" c:type="GstVideoCodecState*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reset">
        <callback name="reset">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="decoder" transfer-ownership="none">
              <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
            </parameter>
            <parameter name="hard" transfer-ownership="none">
              <type name="gboolean" c:type="gboolean"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="finish">
        <callback name="finish">
          <return-value transfer-ownership="none">
            <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
          </return-value>
          <parameters>
            <parameter name="decoder" transfer-ownership="none">
              <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="handle_frame">
        <callback name="handle_frame">
          <return-value transfer-ownership="none">
            <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
          </return-value>
          <parameters>
            <parameter name="decoder" transfer-ownership="none">
              <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
            </parameter>
            <parameter name="frame" transfer-ownership="none">
              <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="sink_event">
        <callback name="sink_event">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="decoder" transfer-ownership="none">
              <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
            </parameter>
            <parameter name="event" transfer-ownership="none">
              <type name="Gst.Event" c:type="GstEvent*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="src_event">
        <callback name="src_event">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="decoder" transfer-ownership="none">
              <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
            </parameter>
            <parameter name="event" transfer-ownership="none">
              <type name="Gst.Event" c:type="GstEvent*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="negotiate">
        <callback name="negotiate">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">#TRUE if the negotiation succeeded, else #FALSE.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="decoder" transfer-ownership="none">
              <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="decide_allocation">
        <callback name="decide_allocation">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="decoder" transfer-ownership="none">
              <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
            </parameter>
            <parameter name="query" transfer-ownership="none">
              <type name="Gst.Query" c:type="GstQuery*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="propose_allocation">
        <callback name="propose_allocation">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="decoder" transfer-ownership="none">
              <type name="VideoDecoder" c:type="GstVideoDecoder*"/>
            </parameter>
            <parameter name="query" transfer-ownership="none">
              <type name="Gst.Query" c:type="GstQuery*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="padding" readable="0" private="1">
        <array zero-terminated="0" c:type="void" fixed-size="20">
          <type name="gpointer" c:type="void*"/>
        </array>
      </field>
    </record>
    <record name="VideoDecoderPrivate"
            c:type="GstVideoDecoderPrivate"
            disguised="1">
    </record>
    <class name="VideoEncoder"
           c:symbol-prefix="video_encoder"
           c:type="GstVideoEncoder"
           parent="Gst.Element"
           abstract="1"
           glib:type-name="GstVideoEncoder"
           glib:get-type="gst_video_encoder_get_type"
           glib:type-struct="VideoEncoderClass">
      <doc xml:space="preserve">This base class is for video encoders turning raw video into
encoded video data.

GstVideoEncoder and subclass should cooperate as follows.
&lt;orderedlist&gt;
&lt;listitem&gt;
  &lt;itemizedlist&gt;&lt;title&gt;Configuration&lt;/title&gt;
  &lt;listitem&gt;&lt;para&gt;
    Initially, GstVideoEncoder calls @start when the encoder element
    is activated, which allows subclass to perform any global setup.
  &lt;/para&gt;&lt;/listitem&gt;
  &lt;listitem&gt;&lt;para&gt;
    GstVideoEncoder calls @set_format to inform subclass of the format
    of input video data that it is about to receive.  Subclass should
    setup for encoding and configure base class as appropriate
    (e.g. latency). While unlikely, it might be called more than once,
    if changing input parameters require reconfiguration.  Baseclass
    will ensure that processing of current configuration is finished.
  &lt;/para&gt;&lt;/listitem&gt;
  &lt;listitem&gt;&lt;para&gt;
    GstVideoEncoder calls @stop at end of all processing.
  &lt;/para&gt;&lt;/listitem&gt;
  &lt;/itemizedlist&gt;
&lt;/listitem&gt;
&lt;listitem&gt;
  &lt;itemizedlist&gt;
  &lt;title&gt;Data processing&lt;/title&gt;
    &lt;listitem&gt;&lt;para&gt;
      Base class collects input data and metadata into a frame and hands
      this to subclass' @handle_frame.
    &lt;/para&gt;&lt;/listitem&gt;
    &lt;listitem&gt;&lt;para&gt;
      If codec processing results in encoded data, subclass should call
      @gst_video_encoder_finish_frame to have encoded data pushed
      downstream.
    &lt;/para&gt;&lt;/listitem&gt;
    &lt;listitem&gt;&lt;para&gt;
      If implemented, baseclass calls subclass @pre_push just prior to
      pushing to allow subclasses to modify some metadata on the buffer.
      If it returns GST_FLOW_OK, the buffer is pushed downstream.
    &lt;/para&gt;&lt;/listitem&gt;
    &lt;listitem&gt;&lt;para&gt;
      GstVideoEncoderClass will handle both srcpad and sinkpad events.
      Sink events will be passed to subclass if @event callback has been
      provided.
    &lt;/para&gt;&lt;/listitem&gt;
  &lt;/itemizedlist&gt;
&lt;/listitem&gt;
&lt;listitem&gt;
  &lt;itemizedlist&gt;&lt;title&gt;Shutdown phase&lt;/title&gt;
  &lt;listitem&gt;&lt;para&gt;
    GstVideoEncoder class calls @stop to inform the subclass that data
    parsing will be stopped.
  &lt;/para&gt;&lt;/listitem&gt;
  &lt;/itemizedlist&gt;
&lt;/listitem&gt;
&lt;/orderedlist&gt;

Subclass is responsible for providing pad template caps for
source and sink pads. The pads need to be named "sink" and "src". It should
also be able to provide fixed src pad caps in @getcaps by the time it calls
@gst_video_encoder_finish_frame.

Things that subclass need to take care of:
&lt;itemizedlist&gt;
  &lt;listitem&gt;&lt;para&gt;Provide pad templates&lt;/para&gt;&lt;/listitem&gt;
  &lt;listitem&gt;&lt;para&gt;
     Provide source pad caps before pushing the first buffer
  &lt;/para&gt;&lt;/listitem&gt;
  &lt;listitem&gt;&lt;para&gt;
     Accept data in @handle_frame and provide encoded results to
     @gst_video_encoder_finish_frame.
  &lt;/para&gt;&lt;/listitem&gt;
&lt;/itemizedlist&gt;</doc>
      <implements name="Gst.Preset"/>
      <virtual-method name="close">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="decide_allocation">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="query" transfer-ownership="none">
            <type name="Gst.Query" c:type="GstQuery*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="finish">
        <return-value transfer-ownership="none">
          <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="getcaps">
        <return-value transfer-ownership="full">
          <type name="Gst.Caps" c:type="GstCaps*"/>
        </return-value>
        <parameters>
          <instance-parameter name="enc" transfer-ownership="none">
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="filter" transfer-ownership="none">
            <type name="Gst.Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="handle_frame">
        <return-value transfer-ownership="none">
          <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="frame" transfer-ownership="none">
            <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="negotiate" invoker="negotiate">
        <doc xml:space="preserve">Negotiate with downstream elements to currently configured #GstVideoCodecState.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">#TRUE if the negotiation succeeded, else #FALSE.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="open">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="pre_push">
        <return-value transfer-ownership="none">
          <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="frame" transfer-ownership="none">
            <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="propose_allocation">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="query" transfer-ownership="none">
            <type name="Gst.Query" c:type="GstQuery*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="reset">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="hard" transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="set_format">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="state" transfer-ownership="none">
            <type name="VideoCodecState" c:type="GstVideoCodecState*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="sink_event">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="event" transfer-ownership="none">
            <type name="Gst.Event" c:type="GstEvent*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="src_event">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="event" transfer-ownership="none">
            <type name="Gst.Event" c:type="GstEvent*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="start">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="stop">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <method name="allocate_output_buffer"
              c:identifier="gst_video_encoder_allocate_output_buffer">
        <doc xml:space="preserve">Helper function that allocates a buffer to hold an encoded video frame
for @encoder's current #GstVideoCodecState.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">allocated buffer</doc>
          <type name="Gst.Buffer" c:type="GstBuffer*"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoEncoder</doc>
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="size" transfer-ownership="none">
            <doc xml:space="preserve">size of the buffer</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="allocate_output_frame"
              c:identifier="gst_video_encoder_allocate_output_frame">
        <doc xml:space="preserve">Helper function that allocates a buffer to hold an encoded video frame for @encoder's
current #GstVideoCodecState.  Subclass should already have configured video
state and set src pad caps.

The buffer allocated here is owned by the frame and you should only
keep references to the frame, not the buffer.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%GST_FLOW_OK if an output buffer could be allocated</doc>
          <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoEncoder</doc>
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="frame" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoCodecFrame</doc>
            <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <doc xml:space="preserve">size of the buffer</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="finish_frame"
              c:identifier="gst_video_encoder_finish_frame">
        <doc xml:space="preserve">@frame must have a valid encoded data buffer, whose metadata fields
are then appropriately set according to frame data or no buffer at
all if the frame should be dropped.
It is subsequently pushed downstream or provided to @pre_push.
In any case, the frame is considered finished and released.

After calling this function the output buffer of the frame is to be
considered read-only. This function will also change the metadata
of the buffer.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GstFlowReturn resulting from sending data downstream</doc>
          <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoEncoder</doc>
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="frame" transfer-ownership="full">
            <doc xml:space="preserve">an encoded #GstVideoCodecFrame</doc>
            <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_allocator"
              c:identifier="gst_video_encoder_get_allocator">
        <doc xml:space="preserve">Lets #GstVideoEncoder sub-classes to know the memory @allocator
used by the base class and its @params.

Unref the @allocator after use it.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoEncoder</doc>
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="allocator"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     allow-none="1">
            <doc xml:space="preserve">the #GstAllocator used</doc>
            <type name="Gst.Allocator" c:type="GstAllocator**"/>
          </parameter>
          <parameter name="params"
                     direction="out"
                     caller-allocates="1"
                     transfer-ownership="full"
                     allow-none="1">
            <doc xml:space="preserve">the #GstAllocatorParams of @allocator</doc>
            <type name="Gst.AllocationParams" c:type="GstAllocationParams*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_discont" c:identifier="gst_video_encoder_get_discont">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_frame" c:identifier="gst_video_encoder_get_frame">
        <doc xml:space="preserve">Get a pending unfinished #GstVideoCodecFrame</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">pending unfinished #GstVideoCodecFrame identified by @frame_number.</doc>
          <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoEnccoder</doc>
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="frame_number" transfer-ownership="none">
            <doc xml:space="preserve">system_frame_number of a frame</doc>
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_frames" c:identifier="gst_video_encoder_get_frames">
        <doc xml:space="preserve">Get all pending unfinished #GstVideoCodecFrame</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">pending unfinished #GstVideoCodecFrame.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="VideoCodecFrame"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoEncoder</doc>
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_latency" c:identifier="gst_video_encoder_get_latency">
        <doc xml:space="preserve">Query the configured encoding latency. Results will be returned via
@min_latency and @max_latency.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoEncoder</doc>
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="min_latency"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     allow-none="1">
            <doc xml:space="preserve">address of variable in which to store the configured minimum latency, or %NULL</doc>
            <type name="Gst.ClockTime" c:type="GstClockTime*"/>
          </parameter>
          <parameter name="max_latency"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     allow-none="1">
            <doc xml:space="preserve">address of variable in which to store the configured maximum latency, or %NULL</doc>
            <type name="Gst.ClockTime" c:type="GstClockTime*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_oldest_frame"
              c:identifier="gst_video_encoder_get_oldest_frame">
        <doc xml:space="preserve">Get the oldest unfinished pending #GstVideoCodecFrame</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">oldest unfinished pending #GstVideoCodecFrame</doc>
          <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoEncoder</doc>
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_output_state"
              c:identifier="gst_video_encoder_get_output_state">
        <doc xml:space="preserve">Get the current #GstVideoCodecState</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">#GstVideoCodecState describing format of video data.</doc>
          <type name="VideoCodecState" c:type="GstVideoCodecState*"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoEncoder</doc>
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="merge_tags" c:identifier="gst_video_encoder_merge_tags">
        <doc xml:space="preserve">Adds tags to so-called pending tags, which will be processed
before pushing out data downstream.

Note that this is provided for convenience, and the subclass is
not required to use this and can still do tag handling on its own.

MT safe.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoEncoder</doc>
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="tags" transfer-ownership="none">
            <doc xml:space="preserve">a #GstTagList to merge</doc>
            <type name="Gst.TagList" c:type="const GstTagList*"/>
          </parameter>
          <parameter name="mode" transfer-ownership="none">
            <doc xml:space="preserve">the #GstTagMergeMode to use</doc>
            <type name="Gst.TagMergeMode" c:type="GstTagMergeMode"/>
          </parameter>
        </parameters>
      </method>
      <method name="negotiate" c:identifier="gst_video_encoder_negotiate">
        <doc xml:space="preserve">Negotiate with downstream elements to currently configured #GstVideoCodecState.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">#TRUE if the negotiation succeeded, else #FALSE.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoEncoder</doc>
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="proxy_getcaps"
              c:identifier="gst_video_encoder_proxy_getcaps">
        <doc xml:space="preserve">Returns caps that express @caps (or sink template caps if @caps == NULL)
restricted to resolution/format/... combinations supported by downstream
elements (e.g. muxers).</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GstCaps owned by caller</doc>
          <type name="Gst.Caps" c:type="GstCaps*"/>
        </return-value>
        <parameters>
          <instance-parameter name="enc" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoEncoder</doc>
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="caps" transfer-ownership="none">
            <doc xml:space="preserve">initial caps</doc>
            <type name="Gst.Caps" c:type="GstCaps*"/>
          </parameter>
          <parameter name="filter" transfer-ownership="none">
            <doc xml:space="preserve">filter caps</doc>
            <type name="Gst.Caps" c:type="GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_discont" c:identifier="gst_video_encoder_set_discont">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_headers" c:identifier="gst_video_encoder_set_headers">
        <doc xml:space="preserve">Set the codec headers to be sent downstream whenever requested.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoEncoder</doc>
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="headers" transfer-ownership="full">
            <doc xml:space="preserve">a list of #GstBuffer containing the codec header</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="Gst.Buffer"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="set_latency" c:identifier="gst_video_encoder_set_latency">
        <doc xml:space="preserve">Informs baseclass of encoding latency.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoEncoder</doc>
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="min_latency" transfer-ownership="none">
            <doc xml:space="preserve">minimum latency</doc>
            <type name="Gst.ClockTime" c:type="GstClockTime"/>
          </parameter>
          <parameter name="max_latency" transfer-ownership="none">
            <doc xml:space="preserve">maximum latency</doc>
            <type name="Gst.ClockTime" c:type="GstClockTime"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_output_state"
              c:identifier="gst_video_encoder_set_output_state">
        <doc xml:space="preserve">Creates a new #GstVideoCodecState with the specified caps as the output state
for the encoder.
Any previously set output state on @encoder will be replaced by the newly
created one.

The specified @caps should not contain any resolution, pixel-aspect-ratio,
framerate, codec-data, .... Those should be specified instead in the returned
#GstVideoCodecState.

If the subclass wishes to copy over existing fields (like pixel aspect ratio,
or framerate) from an existing #GstVideoCodecState, it can be provided as a
@reference.

If the subclass wishes to override some fields from the output state (like
pixel-aspect-ratio or framerate) it can do so on the returned #GstVideoCodecState.

The new output state will only take effect (set on pads and buffers) starting
from the next call to #gst_video_encoder_finish_frame().</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the newly configured output state.</doc>
          <type name="VideoCodecState" c:type="GstVideoCodecState*"/>
        </return-value>
        <parameters>
          <instance-parameter name="encoder" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoEncoder</doc>
            <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
          </instance-parameter>
          <parameter name="caps" transfer-ownership="full">
            <doc xml:space="preserve">the #GstCaps to use for the output</doc>
            <type name="Gst.Caps" c:type="GstCaps*"/>
          </parameter>
          <parameter name="reference" transfer-ownership="none" allow-none="1">
            <doc xml:space="preserve">An optional reference @GstVideoCodecState</doc>
            <type name="VideoCodecState" c:type="GstVideoCodecState*"/>
          </parameter>
        </parameters>
      </method>
      <field name="element" readable="0" private="1">
        <type name="Gst.Element" c:type="GstElement"/>
      </field>
      <field name="sinkpad" readable="0" private="1">
        <type name="Gst.Pad" c:type="GstPad*"/>
      </field>
      <field name="srcpad" readable="0" private="1">
        <type name="Gst.Pad" c:type="GstPad*"/>
      </field>
      <field name="stream_lock" readable="0" private="1">
        <type name="GLib.RecMutex" c:type="GRecMutex"/>
      </field>
      <field name="input_segment" readable="0" private="1">
        <type name="Gst.Segment" c:type="GstSegment"/>
      </field>
      <field name="output_segment" readable="0" private="1">
        <type name="Gst.Segment" c:type="GstSegment"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="VideoEncoderPrivate" c:type="GstVideoEncoderPrivate*"/>
      </field>
      <field name="padding" readable="0" private="1">
        <array zero-terminated="0" c:type="void" fixed-size="20">
          <type name="gpointer" c:type="void*"/>
        </array>
      </field>
    </class>
    <record name="VideoEncoderClass"
            c:type="GstVideoEncoderClass"
            glib:is-gtype-struct-for="VideoEncoder">
      <doc xml:space="preserve">Subclasses can override any of the available virtual methods or not, as
needed. At minimum @handle_frame needs to be overridden, and @set_format
and @get_caps are likely needed as well.</doc>
      <field name="element_class" readable="0" private="1">
        <type name="Gst.ElementClass" c:type="GstElementClass"/>
      </field>
      <field name="open">
        <callback name="open">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="encoder" transfer-ownership="none">
              <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="close">
        <callback name="close">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="encoder" transfer-ownership="none">
              <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="start">
        <callback name="start">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="encoder" transfer-ownership="none">
              <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="stop">
        <callback name="stop">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="encoder" transfer-ownership="none">
              <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="set_format">
        <callback name="set_format">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="encoder" transfer-ownership="none">
              <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
            </parameter>
            <parameter name="state" transfer-ownership="none">
              <type name="VideoCodecState" c:type="GstVideoCodecState*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="handle_frame">
        <callback name="handle_frame">
          <return-value transfer-ownership="none">
            <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
          </return-value>
          <parameters>
            <parameter name="encoder" transfer-ownership="none">
              <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
            </parameter>
            <parameter name="frame" transfer-ownership="none">
              <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reset">
        <callback name="reset">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="encoder" transfer-ownership="none">
              <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
            </parameter>
            <parameter name="hard" transfer-ownership="none">
              <type name="gboolean" c:type="gboolean"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="finish">
        <callback name="finish">
          <return-value transfer-ownership="none">
            <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
          </return-value>
          <parameters>
            <parameter name="encoder" transfer-ownership="none">
              <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="pre_push">
        <callback name="pre_push">
          <return-value transfer-ownership="none">
            <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
          </return-value>
          <parameters>
            <parameter name="encoder" transfer-ownership="none">
              <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
            </parameter>
            <parameter name="frame" transfer-ownership="none">
              <type name="VideoCodecFrame" c:type="GstVideoCodecFrame*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="getcaps">
        <callback name="getcaps">
          <return-value transfer-ownership="full">
            <type name="Gst.Caps" c:type="GstCaps*"/>
          </return-value>
          <parameters>
            <parameter name="enc" transfer-ownership="none">
              <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
            </parameter>
            <parameter name="filter" transfer-ownership="none">
              <type name="Gst.Caps" c:type="GstCaps*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="sink_event">
        <callback name="sink_event">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="encoder" transfer-ownership="none">
              <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
            </parameter>
            <parameter name="event" transfer-ownership="none">
              <type name="Gst.Event" c:type="GstEvent*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="src_event">
        <callback name="src_event">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="encoder" transfer-ownership="none">
              <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
            </parameter>
            <parameter name="event" transfer-ownership="none">
              <type name="Gst.Event" c:type="GstEvent*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="negotiate">
        <callback name="negotiate">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">#TRUE if the negotiation succeeded, else #FALSE.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="encoder" transfer-ownership="none">
              <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="decide_allocation">
        <callback name="decide_allocation">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="encoder" transfer-ownership="none">
              <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
            </parameter>
            <parameter name="query" transfer-ownership="none">
              <type name="Gst.Query" c:type="GstQuery*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="propose_allocation">
        <callback name="propose_allocation">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="encoder" transfer-ownership="none">
              <type name="VideoEncoder" c:type="GstVideoEncoder*"/>
            </parameter>
            <parameter name="query" transfer-ownership="none">
              <type name="Gst.Query" c:type="GstQuery*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="20">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <record name="VideoEncoderPrivate"
            c:type="GstVideoEncoderPrivate"
            disguised="1">
    </record>
    <class name="VideoFilter"
           c:symbol-prefix="video_filter"
           c:type="GstVideoFilter"
           parent="GstBase.BaseTransform"
           abstract="1"
           glib:type-name="GstVideoFilter"
           glib:get-type="gst_video_filter_get_type"
           glib:type-struct="VideoFilterClass">
      <doc xml:space="preserve">&lt;refsect2&gt;
&lt;para&gt;
Provides useful functions and a base class for video filters.
&lt;/para&gt;
&lt;para&gt;
The videofilter will by default enable QoS on the parent GstBaseTransform
to implement frame dropping.
&lt;/para&gt;
&lt;/refsect2&gt;</doc>
      <virtual-method name="set_info">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="filter" transfer-ownership="none">
            <type name="VideoFilter" c:type="GstVideoFilter*"/>
          </instance-parameter>
          <parameter name="incaps" transfer-ownership="none">
            <type name="Gst.Caps" c:type="GstCaps*"/>
          </parameter>
          <parameter name="in_info" transfer-ownership="none">
            <type name="VideoInfo" c:type="GstVideoInfo*"/>
          </parameter>
          <parameter name="outcaps" transfer-ownership="none">
            <type name="Gst.Caps" c:type="GstCaps*"/>
          </parameter>
          <parameter name="out_info" transfer-ownership="none">
            <type name="VideoInfo" c:type="GstVideoInfo*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="transform_frame">
        <return-value transfer-ownership="none">
          <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <instance-parameter name="filter" transfer-ownership="none">
            <type name="VideoFilter" c:type="GstVideoFilter*"/>
          </instance-parameter>
          <parameter name="inframe" transfer-ownership="none">
            <type name="VideoFrame" c:type="GstVideoFrame*"/>
          </parameter>
          <parameter name="outframe" transfer-ownership="none">
            <type name="VideoFrame" c:type="GstVideoFrame*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="transform_frame_ip">
        <return-value transfer-ownership="none">
          <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <instance-parameter name="trans" transfer-ownership="none">
            <type name="VideoFilter" c:type="GstVideoFilter*"/>
          </instance-parameter>
          <parameter name="frame" transfer-ownership="none">
            <type name="VideoFrame" c:type="GstVideoFrame*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <field name="element">
        <type name="GstBase.BaseTransform" c:type="GstBaseTransform"/>
      </field>
      <field name="negotiated">
        <type name="gboolean" c:type="gboolean"/>
      </field>
      <field name="in_info">
        <type name="VideoInfo" c:type="GstVideoInfo"/>
      </field>
      <field name="out_info">
        <type name="VideoInfo" c:type="GstVideoInfo"/>
      </field>
      <field name="_gst_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </class>
    <record name="VideoFilterClass"
            c:type="GstVideoFilterClass"
            glib:is-gtype-struct-for="VideoFilter">
      <doc xml:space="preserve">The video filter class structure.</doc>
      <field name="parent_class">
        <type name="GstBase.BaseTransformClass"
              c:type="GstBaseTransformClass"/>
      </field>
      <field name="set_info">
        <callback name="set_info">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="filter" transfer-ownership="none">
              <type name="VideoFilter" c:type="GstVideoFilter*"/>
            </parameter>
            <parameter name="incaps" transfer-ownership="none">
              <type name="Gst.Caps" c:type="GstCaps*"/>
            </parameter>
            <parameter name="in_info" transfer-ownership="none">
              <type name="VideoInfo" c:type="GstVideoInfo*"/>
            </parameter>
            <parameter name="outcaps" transfer-ownership="none">
              <type name="Gst.Caps" c:type="GstCaps*"/>
            </parameter>
            <parameter name="out_info" transfer-ownership="none">
              <type name="VideoInfo" c:type="GstVideoInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="transform_frame">
        <callback name="transform_frame">
          <return-value transfer-ownership="none">
            <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
          </return-value>
          <parameters>
            <parameter name="filter" transfer-ownership="none">
              <type name="VideoFilter" c:type="GstVideoFilter*"/>
            </parameter>
            <parameter name="inframe" transfer-ownership="none">
              <type name="VideoFrame" c:type="GstVideoFrame*"/>
            </parameter>
            <parameter name="outframe" transfer-ownership="none">
              <type name="VideoFrame" c:type="GstVideoFrame*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="transform_frame_ip">
        <callback name="transform_frame_ip">
          <return-value transfer-ownership="none">
            <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
          </return-value>
          <parameters>
            <parameter name="trans" transfer-ownership="none">
              <type name="VideoFilter" c:type="GstVideoFilter*"/>
            </parameter>
            <parameter name="frame" transfer-ownership="none">
              <type name="VideoFrame" c:type="GstVideoFrame*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <bitfield name="VideoFlags"
              glib:type-name="GstVideoFlags"
              glib:get-type="gst_video_flags_get_type"
              c:type="GstVideoFlags">
      <doc xml:space="preserve">Extra video flags</doc>
      <member name="none"
              value="0"
              c:identifier="GST_VIDEO_FLAG_NONE"
              glib:nick="none">
        <doc xml:space="preserve">no flags</doc>
      </member>
      <member name="variable_fps"
              value="1"
              c:identifier="GST_VIDEO_FLAG_VARIABLE_FPS"
              glib:nick="variable-fps">
        <doc xml:space="preserve">a variable fps is selected, fps_n and fps_d denote the maximum fps of the video</doc>
      </member>
      <member name="premultiplied_alpha"
              value="2"
              c:identifier="GST_VIDEO_FLAG_PREMULTIPLIED_ALPHA"
              glib:nick="premultiplied-alpha">
        <doc xml:space="preserve">Each color has been scaled by the alpha value.</doc>
      </member>
    </bitfield>
    <enumeration name="VideoFormat"
                 glib:type-name="GstVideoFormat"
                 glib:get-type="gst_video_format_get_type"
                 c:type="GstVideoFormat">
      <doc xml:space="preserve">Enum value describing the most common video formats.</doc>
      <member name="unknown"
              value="0"
              c:identifier="GST_VIDEO_FORMAT_UNKNOWN"
              glib:nick="unknown">
        <doc xml:space="preserve">Unknown or unset video format id</doc>
      </member>
      <member name="encoded"
              value="1"
              c:identifier="GST_VIDEO_FORMAT_ENCODED"
              glib:nick="encoded">
        <doc xml:space="preserve">Encoded video format</doc>
      </member>
      <member name="i420"
              value="2"
              c:identifier="GST_VIDEO_FORMAT_I420"
              glib:nick="i420">
        <doc xml:space="preserve">planar 4:2:0 YUV</doc>
      </member>
      <member name="yv12"
              value="3"
              c:identifier="GST_VIDEO_FORMAT_YV12"
              glib:nick="yv12">
        <doc xml:space="preserve">planar 4:2:0 YVU (like I420 but UV planes swapped)</doc>
      </member>
      <member name="yuy2"
              value="4"
              c:identifier="GST_VIDEO_FORMAT_YUY2"
              glib:nick="yuy2">
        <doc xml:space="preserve">packed 4:2:2 YUV (Y0-U0-Y1-V0 Y2-U2-Y3-V2 Y4 ...)</doc>
      </member>
      <member name="uyvy"
              value="5"
              c:identifier="GST_VIDEO_FORMAT_UYVY"
              glib:nick="uyvy">
        <doc xml:space="preserve">packed 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...)</doc>
      </member>
      <member name="ayuv"
              value="6"
              c:identifier="GST_VIDEO_FORMAT_AYUV"
              glib:nick="ayuv">
        <doc xml:space="preserve">packed 4:4:4 YUV with alpha channel (A0-Y0-U0-V0 ...)</doc>
      </member>
      <member name="rgbx"
              value="7"
              c:identifier="GST_VIDEO_FORMAT_RGBx"
              glib:nick="rgbx">
        <doc xml:space="preserve">sparse rgb packed into 32 bit, space last</doc>
      </member>
      <member name="bgrx"
              value="8"
              c:identifier="GST_VIDEO_FORMAT_BGRx"
              glib:nick="bgrx">
        <doc xml:space="preserve">sparse reverse rgb packed into 32 bit, space last</doc>
      </member>
      <member name="xrgb"
              value="9"
              c:identifier="GST_VIDEO_FORMAT_xRGB"
              glib:nick="xrgb">
        <doc xml:space="preserve">sparse rgb packed into 32 bit, space first</doc>
      </member>
      <member name="xbgr"
              value="10"
              c:identifier="GST_VIDEO_FORMAT_xBGR"
              glib:nick="xbgr">
        <doc xml:space="preserve">sparse reverse rgb packed into 32 bit, space first</doc>
      </member>
      <member name="rgba"
              value="11"
              c:identifier="GST_VIDEO_FORMAT_RGBA"
              glib:nick="rgba">
        <doc xml:space="preserve">rgb with alpha channel last</doc>
      </member>
      <member name="bgra"
              value="12"
              c:identifier="GST_VIDEO_FORMAT_BGRA"
              glib:nick="bgra">
        <doc xml:space="preserve">reverse rgb with alpha channel last</doc>
      </member>
      <member name="argb"
              value="13"
              c:identifier="GST_VIDEO_FORMAT_ARGB"
              glib:nick="argb">
        <doc xml:space="preserve">rgb with alpha channel first</doc>
      </member>
      <member name="abgr"
              value="14"
              c:identifier="GST_VIDEO_FORMAT_ABGR"
              glib:nick="abgr">
        <doc xml:space="preserve">reverse rgb with alpha channel first</doc>
      </member>
      <member name="rgb"
              value="15"
              c:identifier="GST_VIDEO_FORMAT_RGB"
              glib:nick="rgb">
        <doc xml:space="preserve">rgb</doc>
      </member>
      <member name="bgr"
              value="16"
              c:identifier="GST_VIDEO_FORMAT_BGR"
              glib:nick="bgr">
        <doc xml:space="preserve">reverse rgb</doc>
      </member>
      <member name="y41b"
              value="17"
              c:identifier="GST_VIDEO_FORMAT_Y41B"
              glib:nick="y41b">
        <doc xml:space="preserve">planar 4:1:1 YUV</doc>
      </member>
      <member name="y42b"
              value="18"
              c:identifier="GST_VIDEO_FORMAT_Y42B"
              glib:nick="y42b">
        <doc xml:space="preserve">planar 4:2:2 YUV</doc>
      </member>
      <member name="yvyu"
              value="19"
              c:identifier="GST_VIDEO_FORMAT_YVYU"
              glib:nick="yvyu">
        <doc xml:space="preserve">packed 4:2:2 YUV (Y0-V0-Y1-U0 Y2-V2-Y3-U2 Y4 ...)</doc>
      </member>
      <member name="y444"
              value="20"
              c:identifier="GST_VIDEO_FORMAT_Y444"
              glib:nick="y444">
        <doc xml:space="preserve">planar 4:4:4 YUV</doc>
      </member>
      <member name="v210"
              value="21"
              c:identifier="GST_VIDEO_FORMAT_v210"
              glib:nick="v210">
        <doc xml:space="preserve">packed 4:2:2 10-bit YUV, complex format</doc>
      </member>
      <member name="v216"
              value="22"
              c:identifier="GST_VIDEO_FORMAT_v216"
              glib:nick="v216">
        <doc xml:space="preserve">packed 4:2:2 16-bit YUV, Y0-U0-Y1-V1 order</doc>
      </member>
      <member name="nv12"
              value="23"
              c:identifier="GST_VIDEO_FORMAT_NV12"
              glib:nick="nv12">
        <doc xml:space="preserve">planar 4:2:0 YUV with interleaved UV plane</doc>
      </member>
      <member name="nv21"
              value="24"
              c:identifier="GST_VIDEO_FORMAT_NV21"
              glib:nick="nv21">
        <doc xml:space="preserve">planar 4:2:0 YUV with interleaved VU plane</doc>
      </member>
      <member name="gray8"
              value="25"
              c:identifier="GST_VIDEO_FORMAT_GRAY8"
              glib:nick="gray8">
        <doc xml:space="preserve">8-bit grayscale</doc>
      </member>
      <member name="gray16_be"
              value="26"
              c:identifier="GST_VIDEO_FORMAT_GRAY16_BE"
              glib:nick="gray16-be">
        <doc xml:space="preserve">16-bit grayscale, most significant byte first</doc>
      </member>
      <member name="gray16_le"
              value="27"
              c:identifier="GST_VIDEO_FORMAT_GRAY16_LE"
              glib:nick="gray16-le">
        <doc xml:space="preserve">16-bit grayscale, least significant byte first</doc>
      </member>
      <member name="v308"
              value="28"
              c:identifier="GST_VIDEO_FORMAT_v308"
              glib:nick="v308">
        <doc xml:space="preserve">packed 4:4:4 YUV</doc>
      </member>
      <member name="rgb16"
              value="29"
              c:identifier="GST_VIDEO_FORMAT_RGB16"
              glib:nick="rgb16">
        <doc xml:space="preserve">rgb 5-6-5 bits per component</doc>
      </member>
      <member name="bgr16"
              value="30"
              c:identifier="GST_VIDEO_FORMAT_BGR16"
              glib:nick="bgr16">
        <doc xml:space="preserve">reverse rgb 5-6-5 bits per component</doc>
      </member>
      <member name="rgb15"
              value="31"
              c:identifier="GST_VIDEO_FORMAT_RGB15"
              glib:nick="rgb15">
        <doc xml:space="preserve">rgb 5-5-5 bits per component</doc>
      </member>
      <member name="bgr15"
              value="32"
              c:identifier="GST_VIDEO_FORMAT_BGR15"
              glib:nick="bgr15">
        <doc xml:space="preserve">reverse rgb 5-5-5 bits per component</doc>
      </member>
      <member name="uyvp"
              value="33"
              c:identifier="GST_VIDEO_FORMAT_UYVP"
              glib:nick="uyvp">
        <doc xml:space="preserve">packed 10-bit 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...)</doc>
      </member>
      <member name="a420"
              value="34"
              c:identifier="GST_VIDEO_FORMAT_A420"
              glib:nick="a420">
        <doc xml:space="preserve">planar 4:4:2:0 AYUV</doc>
      </member>
      <member name="rgb8p"
              value="35"
              c:identifier="GST_VIDEO_FORMAT_RGB8P"
              glib:nick="rgb8p">
        <doc xml:space="preserve">8-bit paletted RGB</doc>
      </member>
      <member name="yuv9"
              value="36"
              c:identifier="GST_VIDEO_FORMAT_YUV9"
              glib:nick="yuv9">
        <doc xml:space="preserve">planar 4:1:0 YUV</doc>
      </member>
      <member name="yvu9"
              value="37"
              c:identifier="GST_VIDEO_FORMAT_YVU9"
              glib:nick="yvu9">
        <doc xml:space="preserve">planar 4:1:0 YUV (like YUV9 but UV planes swapped)</doc>
      </member>
      <member name="iyu1"
              value="38"
              c:identifier="GST_VIDEO_FORMAT_IYU1"
              glib:nick="iyu1">
        <doc xml:space="preserve">packed 4:1:1 YUV (Cb-Y0-Y1-Cr-Y2-Y3 ...)</doc>
      </member>
      <member name="argb64"
              value="39"
              c:identifier="GST_VIDEO_FORMAT_ARGB64"
              glib:nick="argb64">
        <doc xml:space="preserve">rgb with alpha channel first, 16 bits per channel</doc>
      </member>
      <member name="ayuv64"
              value="40"
              c:identifier="GST_VIDEO_FORMAT_AYUV64"
              glib:nick="ayuv64">
        <doc xml:space="preserve">packed 4:4:4 YUV with alpha channel, 16 bits per channel (A0-Y0-U0-V0 ...)</doc>
      </member>
      <member name="r210"
              value="41"
              c:identifier="GST_VIDEO_FORMAT_r210"
              glib:nick="r210">
        <doc xml:space="preserve">packed 4:4:4 RGB, 10 bits per channel</doc>
      </member>
      <member name="i420_10be"
              value="42"
              c:identifier="GST_VIDEO_FORMAT_I420_10BE"
              glib:nick="i420-10be">
        <doc xml:space="preserve">planar 4:2:0 YUV, 10 bits per channel</doc>
      </member>
      <member name="i420_10le"
              value="43"
              c:identifier="GST_VIDEO_FORMAT_I420_10LE"
              glib:nick="i420-10le">
        <doc xml:space="preserve">planar 4:2:0 YUV, 10 bits per channel</doc>
      </member>
      <member name="i422_10be"
              value="44"
              c:identifier="GST_VIDEO_FORMAT_I422_10BE"
              glib:nick="i422-10be">
        <doc xml:space="preserve">planar 4:2:2 YUV, 10 bits per channel</doc>
      </member>
      <member name="i422_10le"
              value="45"
              c:identifier="GST_VIDEO_FORMAT_I422_10LE"
              glib:nick="i422-10le">
        <doc xml:space="preserve">planar 4:2:2 YUV, 10 bits per channel</doc>
      </member>
      <function name="from_fourcc" c:identifier="gst_video_format_from_fourcc">
        <doc xml:space="preserve">Converts a FOURCC value into the corresponding #GstVideoFormat.
If the FOURCC cannot be represented by #GstVideoFormat,
#GST_VIDEO_FORMAT_UNKNOWN is returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the #GstVideoFormat describing the FOURCC value</doc>
          <type name="VideoFormat" c:type="GstVideoFormat"/>
        </return-value>
        <parameters>
          <parameter name="fourcc" transfer-ownership="none">
            <doc xml:space="preserve">a FOURCC value representing raw YUV video</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </function>
      <function name="from_masks" c:identifier="gst_video_format_from_masks">
        <doc xml:space="preserve">Find the #GstVideoFormat for the given parameters.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GstVideoFormat or GST_VIDEO_FORMAT_UNKNOWN when the parameters to not specify a known format.</doc>
          <type name="VideoFormat" c:type="GstVideoFormat"/>
        </return-value>
        <parameters>
          <parameter name="depth" transfer-ownership="none">
            <doc xml:space="preserve">the amount of bits used for a pixel</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="bpp" transfer-ownership="none">
            <doc xml:space="preserve">the amount of bits used to store a pixel. This value is bigger than @depth</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="endianness" transfer-ownership="none">
            <doc xml:space="preserve">the endianness of the masks</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="red_mask" transfer-ownership="none">
            <doc xml:space="preserve">the red mask</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="green_mask" transfer-ownership="none">
            <doc xml:space="preserve">the green mask</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="blue_mask" transfer-ownership="none">
            <doc xml:space="preserve">the blue mask</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="alpha_mask" transfer-ownership="none">
            <doc xml:space="preserve">the optional alpha mask</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </function>
      <function name="from_string" c:identifier="gst_video_format_from_string">
        <doc xml:space="preserve">Convert the @format string to its #GstVideoFormat.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the #GstVideoFormat for @format or GST_VIDEO_FORMAT_UNKNOWN when the string is not a known format.</doc>
          <type name="VideoFormat" c:type="GstVideoFormat"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <doc xml:space="preserve">a format string</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </function>
      <function name="get_info" c:identifier="gst_video_format_get_info">
        <doc xml:space="preserve">Get the #GstVideoFormatInfo for @format</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The #GstVideoFormatInfo for @format.</doc>
          <type name="VideoFormatInfo" c:type="const GstVideoFormatInfo*"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoFormat</doc>
            <type name="VideoFormat" c:type="GstVideoFormat"/>
          </parameter>
        </parameters>
      </function>
      <function name="to_fourcc" c:identifier="gst_video_format_to_fourcc">
        <doc xml:space="preserve">Converts a #GstVideoFormat value into the corresponding FOURCC.  Only
a few YUV formats have corresponding FOURCC values.  If @format has
no corresponding FOURCC value, 0 is returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the FOURCC corresponding to @format</doc>
          <type name="guint32" c:type="guint32"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoFormat video format</doc>
            <type name="VideoFormat" c:type="GstVideoFormat"/>
          </parameter>
        </parameters>
      </function>
      <function name="to_string" c:identifier="gst_video_format_to_string">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <type name="VideoFormat" c:type="GstVideoFormat"/>
          </parameter>
        </parameters>
      </function>
    </enumeration>
    <bitfield name="VideoFormatFlags"
              glib:type-name="GstVideoFormatFlags"
              glib:get-type="gst_video_format_flags_get_type"
              c:type="GstVideoFormatFlags">
      <doc xml:space="preserve">The different video flags that a format info can have.</doc>
      <member name="yuv"
              value="1"
              c:identifier="GST_VIDEO_FORMAT_FLAG_YUV"
              glib:nick="yuv">
        <doc xml:space="preserve">The video format is YUV, components are numbered 0=Y, 1=U, 2=V.</doc>
      </member>
      <member name="rgb"
              value="2"
              c:identifier="GST_VIDEO_FORMAT_FLAG_RGB"
              glib:nick="rgb">
        <doc xml:space="preserve">The video format is RGB, components are numbered 0=R, 1=G, 2=B.</doc>
      </member>
      <member name="gray"
              value="4"
              c:identifier="GST_VIDEO_FORMAT_FLAG_GRAY"
              glib:nick="gray">
        <doc xml:space="preserve">The video is gray, there is one gray component with index 0.</doc>
      </member>
      <member name="alpha"
              value="8"
              c:identifier="GST_VIDEO_FORMAT_FLAG_ALPHA"
              glib:nick="alpha">
        <doc xml:space="preserve">The video format has an alpha components with the number 3.</doc>
      </member>
      <member name="le"
              value="16"
              c:identifier="GST_VIDEO_FORMAT_FLAG_LE"
              glib:nick="le">
        <doc xml:space="preserve">The video format has data stored in little endianness.</doc>
      </member>
      <member name="palette"
              value="32"
              c:identifier="GST_VIDEO_FORMAT_FLAG_PALETTE"
              glib:nick="palette">
        <doc xml:space="preserve">The video format has a palette. The palette is stored in the second plane and indexes are stored in the first plane.</doc>
      </member>
      <member name="complex"
              value="64"
              c:identifier="GST_VIDEO_FORMAT_FLAG_COMPLEX"
              glib:nick="complex">
        <doc xml:space="preserve">The video format has a complex layout that can't be described with the usual information in the #GstVideoFormatInfo.</doc>
      </member>
      <member name="unpack"
              value="128"
              c:identifier="GST_VIDEO_FORMAT_FLAG_UNPACK"
              glib:nick="unpack">
        <doc xml:space="preserve">This format can be used in a #GstVideoFormatUnpack and #GstVideoFormatPack function.</doc>
      </member>
    </bitfield>
    <record name="VideoFormatInfo" c:type="GstVideoFormatInfo">
      <doc xml:space="preserve">Information for a video format.</doc>
      <field name="format" writable="1">
        <type name="VideoFormat" c:type="GstVideoFormat"/>
      </field>
      <field name="name" writable="1">
        <type name="utf8" c:type="const gchar*"/>
      </field>
      <field name="description" writable="1">
        <type name="utf8" c:type="const gchar*"/>
      </field>
      <field name="flags" writable="1">
        <type name="VideoFormatFlags" c:type="GstVideoFormatFlags"/>
      </field>
      <field name="bits" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <field name="n_components" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <field name="shift" writable="1">
        <array zero-terminated="0" c:type="guint" fixed-size="4">
          <type name="guint" c:type="guint"/>
        </array>
      </field>
      <field name="depth" writable="1">
        <array zero-terminated="0" c:type="guint" fixed-size="4">
          <type name="guint" c:type="guint"/>
        </array>
      </field>
      <field name="pixel_stride" writable="1">
        <array zero-terminated="0" c:type="gint" fixed-size="4">
          <type name="gint" c:type="gint"/>
        </array>
      </field>
      <field name="n_planes" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <field name="plane" writable="1">
        <array zero-terminated="0" c:type="guint" fixed-size="4">
          <type name="guint" c:type="guint"/>
        </array>
      </field>
      <field name="poffset" writable="1">
        <array zero-terminated="0" c:type="guint" fixed-size="4">
          <type name="guint" c:type="guint"/>
        </array>
      </field>
      <field name="w_sub" writable="1">
        <array zero-terminated="0" c:type="guint" fixed-size="4">
          <type name="guint" c:type="guint"/>
        </array>
      </field>
      <field name="h_sub" writable="1">
        <array zero-terminated="0" c:type="guint" fixed-size="4">
          <type name="guint" c:type="guint"/>
        </array>
      </field>
      <field name="unpack_format" writable="1">
        <type name="VideoFormat" c:type="GstVideoFormat"/>
      </field>
      <field name="unpack_func" writable="1">
        <type name="VideoFormatUnpack" c:type="GstVideoFormatUnpack"/>
      </field>
      <field name="pack_lines" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="pack_func" writable="1">
        <type name="VideoFormatPack" c:type="GstVideoFormatPack"/>
      </field>
      <field name="_gst_reserved" writable="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <callback name="VideoFormatPack" c:type="GstVideoFormatPack">
      <doc xml:space="preserve">Packs @width pixels from @src to the given planes and strides in the
format @info. The pixels from source have each component interleaved
and will be packed into the planes in @data.

This function operates on pack_lines lines, meaning that @src should
contain at least pack_lines lines with a stride of @sstride and @y
should be a multiple of pack_lines.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="info" transfer-ownership="none">
          <doc xml:space="preserve">a #GstVideoFormatInfo</doc>
          <type name="VideoFormatInfo" c:type="const GstVideoFormatInfo*"/>
        </parameter>
        <parameter name="flags" transfer-ownership="none">
          <doc xml:space="preserve">flags to control the packing</doc>
          <type name="VideoPackFlags" c:type="GstVideoPackFlags"/>
        </parameter>
        <parameter name="src" transfer-ownership="none">
          <doc xml:space="preserve">a source array</doc>
          <type name="gpointer" c:type="const gpointer"/>
        </parameter>
        <parameter name="sstride" transfer-ownership="none">
          <doc xml:space="preserve">the source array stride</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <doc xml:space="preserve">pointers to the destination data planes</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="stride" transfer-ownership="none">
          <doc xml:space="preserve">strides of the destination planes</doc>
          <type name="gint" c:type="const gint"/>
        </parameter>
        <parameter name="chroma_site" transfer-ownership="none">
          <doc xml:space="preserve">the chroma siting of the target when subsampled</doc>
          <type name="VideoChromaSite" c:type="GstVideoChromaSite"/>
        </parameter>
        <parameter name="y" transfer-ownership="none">
          <doc xml:space="preserve">the y position in the image to pack to</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="width" transfer-ownership="none">
          <doc xml:space="preserve">the amount of pixels to pack.</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="VideoFormatUnpack" c:type="GstVideoFormatUnpack">
      <doc xml:space="preserve">Unpacks @width pixels from the given planes and strides containing data of
format @info. The pixels will be unpacked into @dest which each component
interleaved. @dest should at least be big enough to hold @width *
n_components * size(unpack_format) bytes.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="info" transfer-ownership="none">
          <doc xml:space="preserve">a #GstVideoFormatInfo</doc>
          <type name="VideoFormatInfo" c:type="const GstVideoFormatInfo*"/>
        </parameter>
        <parameter name="flags" transfer-ownership="none">
          <doc xml:space="preserve">flags to control the unpacking</doc>
          <type name="VideoPackFlags" c:type="GstVideoPackFlags"/>
        </parameter>
        <parameter name="dest" transfer-ownership="none">
          <doc xml:space="preserve">a destination array</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <doc xml:space="preserve">pointers to the data planes</doc>
          <type name="gpointer" c:type="const gpointer"/>
        </parameter>
        <parameter name="stride" transfer-ownership="none">
          <doc xml:space="preserve">strides of the planes</doc>
          <type name="gint" c:type="const gint"/>
        </parameter>
        <parameter name="x" transfer-ownership="none">
          <doc xml:space="preserve">the x position in the image to start from</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="y" transfer-ownership="none">
          <doc xml:space="preserve">the y position in the image to start from</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="width" transfer-ownership="none">
          <doc xml:space="preserve">the amount of pixels to unpack.</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
      </parameters>
    </callback>
    <record name="VideoFrame" c:type="GstVideoFrame">
      <doc xml:space="preserve">A video frame obtained from gst_video_frame_map()</doc>
      <field name="info" writable="1">
        <type name="VideoInfo" c:type="GstVideoInfo"/>
      </field>
      <field name="flags" writable="1">
        <type name="VideoFrameFlags" c:type="GstVideoFrameFlags"/>
      </field>
      <field name="buffer" writable="1">
        <type name="Gst.Buffer" c:type="GstBuffer*"/>
      </field>
      <field name="meta" writable="1">
        <type name="gpointer" c:type="gpointer"/>
      </field>
      <field name="id" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="data" writable="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
      <field name="map" writable="1">
        <array zero-terminated="0" c:type="GstMapInfo" fixed-size="4">
          <type name="Gst.MapInfo" c:type="GstMapInfo"/>
        </array>
      </field>
      <field name="_gst_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
      <method name="copy" c:identifier="gst_video_frame_copy">
        <doc xml:space="preserve">Copy the contents from @src to @dest.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if the contents could be copied.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="dest" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoFrame</doc>
            <type name="VideoFrame" c:type="GstVideoFrame*"/>
          </instance-parameter>
          <parameter name="src" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoFrame</doc>
            <type name="VideoFrame" c:type="const GstVideoFrame*"/>
          </parameter>
        </parameters>
      </method>
      <method name="copy_plane" c:identifier="gst_video_frame_copy_plane">
        <doc xml:space="preserve">Copy the plane with index @plane from @src to @dest.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if the contents could be copied.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="dest" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoFrame</doc>
            <type name="VideoFrame" c:type="GstVideoFrame*"/>
          </instance-parameter>
          <parameter name="src" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoFrame</doc>
            <type name="VideoFrame" c:type="const GstVideoFrame*"/>
          </parameter>
          <parameter name="plane" transfer-ownership="none">
            <doc xml:space="preserve">a plane</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="map" c:identifier="gst_video_frame_map">
        <doc xml:space="preserve">Use @info and @buffer to fill in the values of @frame.

All video planes of @buffer will be mapped and the pointers will be set in
@frame-&gt;data.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="frame" transfer-ownership="none">
            <doc xml:space="preserve">pointer to #GstVideoFrame</doc>
            <type name="VideoFrame" c:type="GstVideoFrame*"/>
          </instance-parameter>
          <parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoInfo</doc>
            <type name="VideoInfo" c:type="GstVideoInfo*"/>
          </parameter>
          <parameter name="buffer" transfer-ownership="none">
            <doc xml:space="preserve">the buffer to map</doc>
            <type name="Gst.Buffer" c:type="GstBuffer*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">#GstMapFlags</doc>
            <type name="Gst.MapFlags" c:type="GstMapFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="map_id" c:identifier="gst_video_frame_map_id">
        <doc xml:space="preserve">Use @info and @buffer to fill in the values of @frame with the video frame
information of frame @id.

When @id is -1, the default frame is mapped. When @id != -1, this function
will return %FALSE when there is no GstVideoMeta with that id.

All video planes of @buffer will be mapped and the pointers will be set in
@frame-&gt;data.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="frame" transfer-ownership="none">
            <doc xml:space="preserve">pointer to #GstVideoFrame</doc>
            <type name="VideoFrame" c:type="GstVideoFrame*"/>
          </instance-parameter>
          <parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoInfo</doc>
            <type name="VideoInfo" c:type="GstVideoInfo*"/>
          </parameter>
          <parameter name="buffer" transfer-ownership="none">
            <doc xml:space="preserve">the buffer to map</doc>
            <type name="Gst.Buffer" c:type="GstBuffer*"/>
          </parameter>
          <parameter name="id" transfer-ownership="none">
            <doc xml:space="preserve">the frame id to map</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">#GstMapFlags</doc>
            <type name="Gst.MapFlags" c:type="GstMapFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="unmap" c:identifier="gst_video_frame_unmap">
        <doc xml:space="preserve">Unmap the memory previously mapped with gst_video_frame_map.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="frame" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoFrame</doc>
            <type name="VideoFrame" c:type="GstVideoFrame*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <bitfield name="VideoFrameFlags" c:type="GstVideoFrameFlags">
      <doc xml:space="preserve">Extra video frame flags</doc>
      <member name="none" value="0" c:identifier="GST_VIDEO_FRAME_FLAG_NONE">
        <doc xml:space="preserve">no flags</doc>
      </member>
      <member name="interlaced"
              value="1"
              c:identifier="GST_VIDEO_FRAME_FLAG_INTERLACED">
        <doc xml:space="preserve">The video frame is interlaced. In mixed interlace-mode, this flags specifies if the frame is interlace or progressive.</doc>
      </member>
      <member name="tff" value="2" c:identifier="GST_VIDEO_FRAME_FLAG_TFF">
        <doc xml:space="preserve">The video frame has the top field first</doc>
      </member>
      <member name="rff" value="4" c:identifier="GST_VIDEO_FRAME_FLAG_RFF">
        <doc xml:space="preserve">The video frame has the repeat flag</doc>
      </member>
      <member name="onefield"
              value="8"
              c:identifier="GST_VIDEO_FRAME_FLAG_ONEFIELD">
        <doc xml:space="preserve">The video frame has one field</doc>
      </member>
    </bitfield>
    <record name="VideoInfo" c:type="GstVideoInfo">
      <doc xml:space="preserve">Information describing image properties. This information can be filled
in from GstCaps with gst_video_info_from_caps(). The information is also used
to store the specific video info when mapping a video frame with
gst_video_frame_map().

Use the provided macros to access the info in this structure.</doc>
      <field name="finfo" writable="1">
        <type name="VideoFormatInfo" c:type="const GstVideoFormatInfo*"/>
      </field>
      <field name="interlace_mode" writable="1">
        <type name="VideoInterlaceMode" c:type="GstVideoInterlaceMode"/>
      </field>
      <field name="flags" writable="1">
        <type name="VideoFlags" c:type="GstVideoFlags"/>
      </field>
      <field name="width" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="height" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="size" writable="1">
        <type name="gsize" c:type="gsize"/>
      </field>
      <field name="views" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="chroma_site" writable="1">
        <type name="VideoChromaSite" c:type="GstVideoChromaSite"/>
      </field>
      <field name="colorimetry" writable="1">
        <type name="VideoColorimetry" c:type="GstVideoColorimetry"/>
      </field>
      <field name="par_n" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="par_d" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="fps_n" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="fps_d" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="offset" writable="1">
        <array zero-terminated="0" c:type="gsize" fixed-size="4">
          <type name="gsize" c:type="gsize"/>
        </array>
      </field>
      <field name="stride" writable="1">
        <array zero-terminated="0" c:type="gint" fixed-size="4">
          <type name="gint" c:type="gint"/>
        </array>
      </field>
      <field name="_gst_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
      <method name="align" c:identifier="gst_video_info_align">
        <doc xml:space="preserve">Adjust the offset and stride fields in @info so that the padding and
stride alignment in @align is respected.

Extra padding will be added to the right side when stride alignment padding
is required and @align will be updated with the new padding values.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoInfo</doc>
            <type name="VideoInfo" c:type="GstVideoInfo*"/>
          </instance-parameter>
          <parameter name="align" transfer-ownership="none">
            <doc xml:space="preserve">alignment parameters</doc>
            <type name="VideoAlignment" c:type="GstVideoAlignment*"/>
          </parameter>
        </parameters>
      </method>
      <method name="convert" c:identifier="gst_video_info_convert">
        <doc xml:space="preserve">Converts among various #GstFormat types.  This function handles
GST_FORMAT_BYTES, GST_FORMAT_TIME, and GST_FORMAT_DEFAULT.  For
raw video, GST_FORMAT_DEFAULT corresponds to video frames.  This
function can be used to handle pad queries of the type GST_QUERY_CONVERT.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if the conversion was successful.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoInfo</doc>
            <type name="VideoInfo" c:type="GstVideoInfo*"/>
          </instance-parameter>
          <parameter name="src_format" transfer-ownership="none">
            <doc xml:space="preserve">#GstFormat of the @src_value</doc>
            <type name="Gst.Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="src_value" transfer-ownership="none">
            <doc xml:space="preserve">value to convert</doc>
            <type name="gint64" c:type="gint64"/>
          </parameter>
          <parameter name="dest_format" transfer-ownership="none">
            <doc xml:space="preserve">#GstFormat of the @dest_value</doc>
            <type name="Gst.Format" c:type="GstFormat"/>
          </parameter>
          <parameter name="dest_value" transfer-ownership="none">
            <doc xml:space="preserve">pointer to destination value</doc>
            <type name="gint64" c:type="gint64*"/>
          </parameter>
        </parameters>
      </method>
      <method name="from_caps" c:identifier="gst_video_info_from_caps">
        <doc xml:space="preserve">Parse @caps and update @info.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if @caps could be parsed</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoInfo</doc>
            <type name="VideoInfo" c:type="GstVideoInfo*"/>
          </instance-parameter>
          <parameter name="caps" transfer-ownership="none">
            <doc xml:space="preserve">a #GstCaps</doc>
            <type name="Gst.Caps" c:type="const GstCaps*"/>
          </parameter>
        </parameters>
      </method>
      <method name="init" c:identifier="gst_video_info_init">
        <doc xml:space="preserve">Initialize @info with default values.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoInfo</doc>
            <type name="VideoInfo" c:type="GstVideoInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_equal" c:identifier="gst_video_info_is_equal">
        <doc xml:space="preserve">Compares two #GstVideoInfo and returns whether they are equal or not</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @info and @other are equal, else %FALSE.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoInfo</doc>
            <type name="VideoInfo" c:type="const GstVideoInfo*"/>
          </instance-parameter>
          <parameter name="other" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoInfo</doc>
            <type name="VideoInfo" c:type="const GstVideoInfo*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_format" c:identifier="gst_video_info_set_format">
        <doc xml:space="preserve">Set the default info for a video frame of @format and @width and @height.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoInfo</doc>
            <type name="VideoInfo" c:type="GstVideoInfo*"/>
          </instance-parameter>
          <parameter name="format" transfer-ownership="none">
            <doc xml:space="preserve">the format</doc>
            <type name="VideoFormat" c:type="GstVideoFormat"/>
          </parameter>
          <parameter name="width" transfer-ownership="none">
            <doc xml:space="preserve">a width</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="height" transfer-ownership="none">
            <doc xml:space="preserve">a height</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="to_caps" c:identifier="gst_video_info_to_caps">
        <doc xml:space="preserve">Convert the values of @info into a #GstCaps.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #GstCaps containing the info of @info.</doc>
          <type name="Gst.Caps" c:type="GstCaps*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoInfo</doc>
            <type name="VideoInfo" c:type="GstVideoInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <enumeration name="VideoInterlaceMode"
                 glib:type-name="GstVideoInterlaceMode"
                 glib:get-type="gst_video_interlace_mode_get_type"
                 c:type="GstVideoInterlaceMode">
      <doc xml:space="preserve">The possible values of the #GstVideoInterlaceMode describing the interlace
mode of the stream.</doc>
      <member name="progressive"
              value="0"
              c:identifier="GST_VIDEO_INTERLACE_MODE_PROGRESSIVE"
              glib:nick="progressive">
        <doc xml:space="preserve">all frames are progressive</doc>
      </member>
      <member name="interleaved"
              value="1"
              c:identifier="GST_VIDEO_INTERLACE_MODE_INTERLEAVED"
              glib:nick="interleaved">
        <doc xml:space="preserve">2 fields are interleaved in one video frame. Extra buffer flags describe the field order.</doc>
      </member>
      <member name="mixed"
              value="2"
              c:identifier="GST_VIDEO_INTERLACE_MODE_MIXED"
              glib:nick="mixed">
        <doc xml:space="preserve">frames contains both interlaced and progressive video, the buffer flags describe the frame and fields.</doc>
      </member>
      <member name="fields"
              value="3"
              c:identifier="GST_VIDEO_INTERLACE_MODE_FIELDS"
              glib:nick="fields">
        <doc xml:space="preserve">2 fields are stored in one buffer, use the frame ID to get access to the required field. For multiview (the 'views' property &gt; 1) the fields of view N can be found at frame ID (N * 2) and (N * 2) + 1. Each field has only half the amount of lines as noted in the height property. This mode requires multiple GstVideoMeta metadata to describe the fields.</doc>
      </member>
    </enumeration>
    <record name="VideoMeta" c:type="GstVideoMeta">
      <doc xml:space="preserve">Extra buffer metadata describing image properties</doc>
      <field name="meta" writable="1">
        <type name="Gst.Meta" c:type="GstMeta"/>
      </field>
      <field name="buffer" writable="1">
        <type name="Gst.Buffer" c:type="GstBuffer*"/>
      </field>
      <field name="flags" writable="1">
        <type name="VideoFrameFlags" c:type="GstVideoFrameFlags"/>
      </field>
      <field name="format" writable="1">
        <type name="VideoFormat" c:type="GstVideoFormat"/>
      </field>
      <field name="id" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="width" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <field name="height" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <field name="n_planes" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <field name="offset" writable="1">
        <array zero-terminated="0" c:type="gsize" fixed-size="4">
          <type name="gsize" c:type="gsize"/>
        </array>
      </field>
      <field name="stride" writable="1">
        <array zero-terminated="0" c:type="gint" fixed-size="4">
          <type name="gint" c:type="gint"/>
        </array>
      </field>
      <field name="map">
        <callback name="map">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="meta" transfer-ownership="none">
              <type name="VideoMeta" c:type="GstVideoMeta*"/>
            </parameter>
            <parameter name="plane" transfer-ownership="none">
              <type name="guint" c:type="guint"/>
            </parameter>
            <parameter name="info" transfer-ownership="none">
              <type name="Gst.MapInfo" c:type="GstMapInfo*"/>
            </parameter>
            <parameter name="data" transfer-ownership="none">
              <type name="gpointer" c:type="gpointer*"/>
            </parameter>
            <parameter name="stride" transfer-ownership="none">
              <type name="gint" c:type="gint*"/>
            </parameter>
            <parameter name="flags" transfer-ownership="none">
              <type name="Gst.MapFlags" c:type="GstMapFlags"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="unmap">
        <callback name="unmap">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="meta" transfer-ownership="none">
              <type name="VideoMeta" c:type="GstVideoMeta*"/>
            </parameter>
            <parameter name="plane" transfer-ownership="none">
              <type name="guint" c:type="guint"/>
            </parameter>
            <parameter name="info" transfer-ownership="none">
              <type name="Gst.MapInfo" c:type="GstMapInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <method name="map" c:identifier="gst_video_meta_map">
        <doc xml:space="preserve">Map the video plane with index @plane in @meta and return a pointer to the
first byte of the plane and the stride of the plane.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if the map operation was successful.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoMeta</doc>
            <type name="VideoMeta" c:type="GstVideoMeta*"/>
          </instance-parameter>
          <parameter name="plane" transfer-ownership="none">
            <doc xml:space="preserve">a plane</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve">a #GstMapInfo</doc>
            <type name="Gst.MapInfo" c:type="GstMapInfo*"/>
          </parameter>
          <parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">the data of @plane</doc>
            <type name="gpointer" c:type="gpointer*"/>
          </parameter>
          <parameter name="stride" transfer-ownership="none">
            <doc xml:space="preserve">the stride of @plane</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">@GstMapFlags</doc>
            <type name="Gst.MapFlags" c:type="GstMapFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="unmap" c:identifier="gst_video_meta_unmap">
        <doc xml:space="preserve">Unmap a previously mapped plane with gst_video_meta_map().</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if the memory was successfully unmapped.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoMeta</doc>
            <type name="VideoMeta" c:type="GstVideoMeta*"/>
          </instance-parameter>
          <parameter name="plane" transfer-ownership="none">
            <doc xml:space="preserve">a plane</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve">a #GstMapInfo</doc>
            <type name="Gst.MapInfo" c:type="GstMapInfo*"/>
          </parameter>
        </parameters>
      </method>
      <function name="get_info" c:identifier="gst_video_meta_get_info">
        <return-value transfer-ownership="none">
          <type name="Gst.MetaInfo" c:type="const GstMetaInfo*"/>
        </return-value>
      </function>
    </record>
    <record name="VideoMetaTransform" c:type="GstVideoMetaTransform">
      <doc xml:space="preserve">Extra data passed to a video transform #GstMetaTransformFunction such as:
"gst-video-scale".</doc>
      <field name="in_info" writable="1">
        <type name="VideoInfo" c:type="GstVideoInfo*"/>
      </field>
      <field name="out_info" writable="1">
        <type name="VideoInfo" c:type="GstVideoInfo*"/>
      </field>
      <function name="scale_get_quark"
                c:identifier="gst_video_meta_transform_scale_get_quark">
        <doc xml:space="preserve">Get the #GQuark for the "gst-video-scale" metadata transform operation.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GQuark</doc>
          <type name="GLib.Quark" c:type="GQuark"/>
        </return-value>
      </function>
    </record>
    <interface name="VideoOrientation"
               c:symbol-prefix="video_orientation"
               c:type="GstVideoOrientation"
               glib:type-name="GstVideoOrientation"
               glib:get-type="gst_video_orientation_get_type"
               glib:type-struct="VideoOrientationInterface">
      <doc xml:space="preserve">The interface allows unified access to control flipping and autocenter
operation of video-sources or operators.</doc>
      <virtual-method name="get_hcenter" invoker="get_hcenter">
        <doc xml:space="preserve">Get the horizontal centering offset from the given object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE in case the element supports centering</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="video_orientation"
                              transfer-ownership="none">
            <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
          </instance-parameter>
          <parameter name="center" transfer-ownership="none">
            <doc xml:space="preserve">return location for the result</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_hflip" invoker="get_hflip">
        <doc xml:space="preserve">Get the horizontal flipping state (%TRUE for flipped) from the given object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE in case the element supports flipping</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="video_orientation"
                              transfer-ownership="none">
            <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
          </instance-parameter>
          <parameter name="flip" transfer-ownership="none">
            <doc xml:space="preserve">return location for the result</doc>
            <type name="gboolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_vcenter" invoker="get_vcenter">
        <doc xml:space="preserve">Get the vertical centering offset from the given object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE in case the element supports centering</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="video_orientation"
                              transfer-ownership="none">
            <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
          </instance-parameter>
          <parameter name="center" transfer-ownership="none">
            <doc xml:space="preserve">return location for the result</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_vflip" invoker="get_vflip">
        <doc xml:space="preserve">Get the vertical flipping state (%TRUE for flipped) from the given object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE in case the element supports flipping</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="video_orientation"
                              transfer-ownership="none">
            <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
          </instance-parameter>
          <parameter name="flip" transfer-ownership="none">
            <doc xml:space="preserve">return location for the result</doc>
            <type name="gboolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="set_hcenter" invoker="set_hcenter">
        <doc xml:space="preserve">Set the horizontal centering offset for the given object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE in case the element supports centering</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="video_orientation"
                              transfer-ownership="none">
            <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
          </instance-parameter>
          <parameter name="center" transfer-ownership="none">
            <doc xml:space="preserve">centering offset</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="set_hflip" invoker="set_hflip">
        <doc xml:space="preserve">Set the horizontal flipping state (%TRUE for flipped) for the given object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE in case the element supports flipping</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="video_orientation"
                              transfer-ownership="none">
            <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
          </instance-parameter>
          <parameter name="flip" transfer-ownership="none">
            <doc xml:space="preserve">use flipping</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="set_vcenter" invoker="set_vcenter">
        <doc xml:space="preserve">Set the vertical centering offset for the given object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE in case the element supports centering</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="video_orientation"
                              transfer-ownership="none">
            <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
          </instance-parameter>
          <parameter name="center" transfer-ownership="none">
            <doc xml:space="preserve">centering offset</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="set_vflip" invoker="set_vflip">
        <doc xml:space="preserve">Set the vertical flipping state (%TRUE for flipped) for the given object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE in case the element supports flipping</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="video_orientation"
                              transfer-ownership="none">
            <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
          </instance-parameter>
          <parameter name="flip" transfer-ownership="none">
            <doc xml:space="preserve">use flipping</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="get_hcenter"
              c:identifier="gst_video_orientation_get_hcenter">
        <doc xml:space="preserve">Get the horizontal centering offset from the given object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE in case the element supports centering</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="video_orientation"
                              transfer-ownership="none">
            <doc xml:space="preserve">#GstVideoOrientation interface of a #GstElement</doc>
            <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
          </instance-parameter>
          <parameter name="center" transfer-ownership="none">
            <doc xml:space="preserve">return location for the result</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_hflip" c:identifier="gst_video_orientation_get_hflip">
        <doc xml:space="preserve">Get the horizontal flipping state (%TRUE for flipped) from the given object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE in case the element supports flipping</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="video_orientation"
                              transfer-ownership="none">
            <doc xml:space="preserve">#GstVideoOrientation interface of a #GstElement</doc>
            <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
          </instance-parameter>
          <parameter name="flip" transfer-ownership="none">
            <doc xml:space="preserve">return location for the result</doc>
            <type name="gboolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_vcenter"
              c:identifier="gst_video_orientation_get_vcenter">
        <doc xml:space="preserve">Get the vertical centering offset from the given object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE in case the element supports centering</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="video_orientation"
                              transfer-ownership="none">
            <doc xml:space="preserve">#GstVideoOrientation interface of a #GstElement</doc>
            <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
          </instance-parameter>
          <parameter name="center" transfer-ownership="none">
            <doc xml:space="preserve">return location for the result</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_vflip" c:identifier="gst_video_orientation_get_vflip">
        <doc xml:space="preserve">Get the vertical flipping state (%TRUE for flipped) from the given object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE in case the element supports flipping</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="video_orientation"
                              transfer-ownership="none">
            <doc xml:space="preserve">#GstVideoOrientation interface of a #GstElement</doc>
            <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
          </instance-parameter>
          <parameter name="flip" transfer-ownership="none">
            <doc xml:space="preserve">return location for the result</doc>
            <type name="gboolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_hcenter"
              c:identifier="gst_video_orientation_set_hcenter">
        <doc xml:space="preserve">Set the horizontal centering offset for the given object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE in case the element supports centering</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="video_orientation"
                              transfer-ownership="none">
            <doc xml:space="preserve">#GstVideoOrientation interface of a #GstElement</doc>
            <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
          </instance-parameter>
          <parameter name="center" transfer-ownership="none">
            <doc xml:space="preserve">centering offset</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_hflip" c:identifier="gst_video_orientation_set_hflip">
        <doc xml:space="preserve">Set the horizontal flipping state (%TRUE for flipped) for the given object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE in case the element supports flipping</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="video_orientation"
                              transfer-ownership="none">
            <doc xml:space="preserve">#GstVideoOrientation interface of a #GstElement</doc>
            <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
          </instance-parameter>
          <parameter name="flip" transfer-ownership="none">
            <doc xml:space="preserve">use flipping</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_vcenter"
              c:identifier="gst_video_orientation_set_vcenter">
        <doc xml:space="preserve">Set the vertical centering offset for the given object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE in case the element supports centering</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="video_orientation"
                              transfer-ownership="none">
            <doc xml:space="preserve">#GstVideoOrientation interface of a #GstElement</doc>
            <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
          </instance-parameter>
          <parameter name="center" transfer-ownership="none">
            <doc xml:space="preserve">centering offset</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_vflip" c:identifier="gst_video_orientation_set_vflip">
        <doc xml:space="preserve">Set the vertical flipping state (%TRUE for flipped) for the given object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE in case the element supports flipping</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="video_orientation"
                              transfer-ownership="none">
            <doc xml:space="preserve">#GstVideoOrientation interface of a #GstElement</doc>
            <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
          </instance-parameter>
          <parameter name="flip" transfer-ownership="none">
            <doc xml:space="preserve">use flipping</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
    </interface>
    <record name="VideoOrientationInterface"
            c:type="GstVideoOrientationInterface"
            glib:is-gtype-struct-for="VideoOrientation">
      <doc xml:space="preserve">#GstVideoOrientationInterface interface.</doc>
      <field name="iface">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
      <field name="get_hflip">
        <callback name="get_hflip">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">%TRUE in case the element supports flipping</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="video_orientation" transfer-ownership="none">
              <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
            </parameter>
            <parameter name="flip" transfer-ownership="none">
              <doc xml:space="preserve">return location for the result</doc>
              <type name="gboolean" c:type="gboolean*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_vflip">
        <callback name="get_vflip">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">%TRUE in case the element supports flipping</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="video_orientation" transfer-ownership="none">
              <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
            </parameter>
            <parameter name="flip" transfer-ownership="none">
              <doc xml:space="preserve">return location for the result</doc>
              <type name="gboolean" c:type="gboolean*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_hcenter">
        <callback name="get_hcenter">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">%TRUE in case the element supports centering</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="video_orientation" transfer-ownership="none">
              <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
            </parameter>
            <parameter name="center" transfer-ownership="none">
              <doc xml:space="preserve">return location for the result</doc>
              <type name="gint" c:type="gint*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_vcenter">
        <callback name="get_vcenter">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">%TRUE in case the element supports centering</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="video_orientation" transfer-ownership="none">
              <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
            </parameter>
            <parameter name="center" transfer-ownership="none">
              <doc xml:space="preserve">return location for the result</doc>
              <type name="gint" c:type="gint*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="set_hflip">
        <callback name="set_hflip">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">%TRUE in case the element supports flipping</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="video_orientation" transfer-ownership="none">
              <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
            </parameter>
            <parameter name="flip" transfer-ownership="none">
              <doc xml:space="preserve">use flipping</doc>
              <type name="gboolean" c:type="gboolean"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="set_vflip">
        <callback name="set_vflip">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">%TRUE in case the element supports flipping</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="video_orientation" transfer-ownership="none">
              <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
            </parameter>
            <parameter name="flip" transfer-ownership="none">
              <doc xml:space="preserve">use flipping</doc>
              <type name="gboolean" c:type="gboolean"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="set_hcenter">
        <callback name="set_hcenter">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">%TRUE in case the element supports centering</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="video_orientation" transfer-ownership="none">
              <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
            </parameter>
            <parameter name="center" transfer-ownership="none">
              <doc xml:space="preserve">centering offset</doc>
              <type name="gint" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="set_vcenter">
        <callback name="set_vcenter">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">%TRUE in case the element supports centering</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="video_orientation" transfer-ownership="none">
              <type name="VideoOrientation" c:type="GstVideoOrientation*"/>
            </parameter>
            <parameter name="center" transfer-ownership="none">
              <doc xml:space="preserve">centering offset</doc>
              <type name="gint" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <interface name="VideoOverlay"
               c:symbol-prefix="video_overlay"
               c:type="GstVideoOverlay"
               glib:type-name="GstVideoOverlay"
               glib:get-type="gst_video_overlay_get_type"
               glib:type-struct="VideoOverlayInterface">
      <doc xml:space="preserve">&lt;refsect2&gt;
&lt;para&gt;
The #GstVideoOverlay interface is used for 2 main purposes :
&lt;itemizedlist&gt;
&lt;listitem&gt;
&lt;para&gt;
To get a grab on the Window where the video sink element is going to render.
This is achieved by either being informed about the Window identifier that
the video sink element generated, or by forcing the video sink element to use
a specific Window identifier for rendering.
&lt;/para&gt;
&lt;/listitem&gt;
&lt;listitem&gt;
&lt;para&gt;
To force a redrawing of the latest video frame the video sink element
displayed on the Window. Indeed if the #GstPipeline is in #GST_STATE_PAUSED
state, moving the Window around will damage its content. Application
developers will want to handle the Expose events themselves and force the
video sink element to refresh the Window's content.
&lt;/para&gt;
&lt;/listitem&gt;
&lt;/itemizedlist&gt;
&lt;/para&gt;
&lt;para&gt;
Using the Window created by the video sink is probably the simplest scenario,
in some cases, though, it might not be flexible enough for application
developers if they need to catch events such as mouse moves and button
clicks.
&lt;/para&gt;
&lt;para&gt;
Setting a specific Window identifier on the video sink element is the most
flexible solution but it has some issues. Indeed the application needs to set
its Window identifier at the right time to avoid internal Window creation
from the video sink element. To solve this issue a #GstMessage is posted on
the bus to inform the application that it should set the Window identifier
immediately. Here is an example on how to do that correctly:
|[
static GstBusSyncReply
create_window (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
{
 // ignore anything but 'prepare-window-handle' element messages
 if (!gst_is_video_overlay_prepare_window_handle_message (message))
   return GST_BUS_PASS;

 win = XCreateSimpleWindow (disp, root, 0, 0, 320, 240, 0, 0, 0);

 XSetWindowBackgroundPixmap (disp, win, None);

 XMapRaised (disp, win);

 XSync (disp, FALSE);

 gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (GST_MESSAGE_SRC (message)),
     win);

 gst_message_unref (message);

 return GST_BUS_DROP;
}
...
int
main (int argc, char **argv)
{
...
 bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
 gst_bus_set_sync_handler (bus, (GstBusSyncHandler) create_window, pipeline,
        NULL);
...
}
]|
&lt;/para&gt;
&lt;/refsect2&gt;
&lt;refsect2&gt;
&lt;title&gt;Two basic usage scenarios&lt;/title&gt;
&lt;para&gt;
There are two basic usage scenarios: in the simplest case, the application
knows exactly what particular element is used for video output, which is
usually the case when the application creates the videosink to use
(e.g. #xvimagesink, #ximagesink, etc.) itself; in this case, the application
can just create the videosink element, create and realize the window to
render the video on and then call gst_video_overlay_set_window_handle() directly
with the XID or native window handle, before starting up the pipeline.
&lt;/para&gt;
&lt;para&gt;
In the other and more common case, the application does not know in advance
what GStreamer video sink element will be used for video output. This is
usually the case when an element such as #autovideosink or #gconfvideosink
is used. In this case, the video sink element itself is created
asynchronously from a GStreamer streaming thread some time after the
pipeline has been started up. When that happens, however, the video sink
will need to know right then whether to render onto an already existing
application window or whether to create its own window. This is when it
posts a prepare-window-handle message, and that is also why this message needs
to be handled in a sync bus handler which will be called from the streaming
thread directly (because the video sink will need an answer right then).
&lt;/para&gt;
&lt;para&gt;
As response to the prepare-window-handle element message in the bus sync
handler, the application may use gst_video_overlay_set_window_handle() to tell
the video sink to render onto an existing window surface. At this point the
application should already have obtained the window handle / XID, so it
just needs to set it. It is generally not advisable to call any GUI toolkit
functions or window system functions from the streaming thread in which the
prepare-window-handle message is handled, because most GUI toolkits and
windowing systems are not thread-safe at all and a lot of care would be
required to co-ordinate the toolkit and window system calls of the
different threads (Gtk+ users please note: prior to Gtk+ 2.18
GDK_WINDOW_XID() was just a simple structure access, so generally fine to do
within the bus sync handler; this macro was changed to a function call in
Gtk+ 2.18 and later, which is likely to cause problems when called from a
sync handler; see below for a better approach without GDK_WINDOW_XID()
used in the callback).
&lt;/para&gt;
&lt;/refsect2&gt;
&lt;refsect2&gt;
&lt;title&gt;GstVideoOverlay and Gtk+&lt;/title&gt;
&lt;para&gt;
|[
#include &amp;lt;gst/video/videooverlay.h&amp;gt;
#include &amp;lt;gtk/gtk.h&amp;gt;
#ifdef GDK_WINDOWING_X11
#include &amp;lt;gdk/gdkx.h&amp;gt;  // for GDK_WINDOW_XID
#endif
#ifdef GDK_WINDOWING_WIN32
#include &amp;lt;gdk/gdkwin32.h&amp;gt;  // for GDK_WINDOW_HWND
#endif
...
static guintptr video_window_handle = 0;
...
static GstBusSyncReply
bus_sync_handler (GstBus * bus, GstMessage * message, gpointer user_data)
{
 // ignore anything but 'prepare-window-handle' element messages
 if (!gst_is_video_overlay_prepare_window_handle_message (message))
   return GST_BUS_PASS;

 if (video_window_handle != 0) {
   GstVideoOverlay *overlay;

   // GST_MESSAGE_SRC (message) will be the video sink element
   overlay = GST_VIDEO_OVERLAY (GST_MESSAGE_SRC (message));
   gst_video_overlay_set_window_handle (overlay, video_window_handle);
 } else {
   g_warning ("Should have obtained video_window_handle by now!");
 }

 gst_message_unref (message);
 return GST_BUS_DROP;
}
...
static void
video_widget_realize_cb (GtkWidget * widget, gpointer data)
{
#if GTK_CHECK_VERSION(2,18,0)
  // Tell Gtk+/Gdk to create a native window for this widget instead of
  // drawing onto the parent widget.
  // This is here just for pedagogical purposes, GDK_WINDOW_XID will call
  // it as well in newer Gtk versions
  if (!gdk_window_ensure_native (widget-&gt;window))
    g_error ("Couldn't create native window needed for GstVideoOverlay!");
#endif

#ifdef GDK_WINDOWING_X11
  {
    gulong xid = GDK_WINDOW_XID (gtk_widget_get_window (video_window));
    video_window_handle = xid;
  }
#endif
#ifdef GDK_WINDOWING_WIN32
  {
    HWND wnd = GDK_WINDOW_HWND (gtk_widget_get_window (video_window));
    video_window_handle = (guintptr) wnd;
  }
#endif
}
...
int
main (int argc, char **argv)
{
  GtkWidget *video_window;
  GtkWidget *app_window;
  ...
  app_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  ...
  video_window = gtk_drawing_area_new ();
  g_signal_connect (video_window, "realize",
      G_CALLBACK (video_widget_realize_cb), NULL);
  gtk_widget_set_double_buffered (video_window, FALSE);
  ...
  // usually the video_window will not be directly embedded into the
  // application window like this, but there will be many other widgets
  // and the video window will be embedded in one of them instead
  gtk_container_add (GTK_CONTAINER (ap_window), video_window);
  ...
  // show the GUI
  gtk_widget_show_all (app_window);

  // realize window now so that the video window gets created and we can
  // obtain its XID/HWND before the pipeline is started up and the videosink
  // asks for the XID/HWND of the window to render onto
  gtk_widget_realize (video_window);

  // we should have the XID/HWND now
  g_assert (video_window_handle != 0);
  ...
  // set up sync handler for setting the xid once the pipeline is started
  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
  gst_bus_set_sync_handler (bus, (GstBusSyncHandler) bus_sync_handler, NULL,
      NULL);
  gst_object_unref (bus);
  ...
  gst_element_set_state (pipeline, GST_STATE_PLAYING);
  ...
}
]|
&lt;/para&gt;
&lt;/refsect2&gt;
&lt;refsect2&gt;
&lt;title&gt;GstVideoOverlay and Qt&lt;/title&gt;
&lt;para&gt;
|[
#include &amp;lt;glib.h&amp;gt;
#include &amp;lt;gst/gst.h&amp;gt;
#include &amp;lt;gst/video/videooverlay.h&amp;gt;

#include &amp;lt;QApplication&amp;gt;
#include &amp;lt;QTimer&amp;gt;
#include &amp;lt;QWidget&amp;gt;

int main(int argc, char *argv[])
{
  if (!g_thread_supported ())
    g_thread_init (NULL);

  gst_init (&amp;argc, &amp;argv);
  QApplication app(argc, argv);
  app.connect(&amp;app, SIGNAL(lastWindowClosed()), &amp;app, SLOT(quit ()));

  // prepare the pipeline

  GstElement *pipeline = gst_pipeline_new ("xvoverlay");
  GstElement *src = gst_element_factory_make ("videotestsrc", NULL);
  GstElement *sink = gst_element_factory_make ("xvimagesink", NULL);
  gst_bin_add_many (GST_BIN (pipeline), src, sink, NULL);
  gst_element_link (src, sink);

  // prepare the ui

  QWidget window;
  window.resize(320, 240);
  window.show();

  WId xwinid = window.winId();
  gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (sink), xwinid);

  // run the pipeline

  GstStateChangeReturn sret = gst_element_set_state (pipeline,
      GST_STATE_PLAYING);
  if (sret == GST_STATE_CHANGE_FAILURE) {
    gst_element_set_state (pipeline, GST_STATE_NULL);
    gst_object_unref (pipeline);
    // Exit application
    QTimer::singleShot(0, QApplication::activeWindow(), SLOT(quit()));
  }

  int ret = app.exec();

  window.hide();
  gst_element_set_state (pipeline, GST_STATE_NULL);
  gst_object_unref (pipeline);

  return ret;
}
]|
&lt;/para&gt;
&lt;/refsect2&gt;</doc>
      <virtual-method name="expose" invoker="expose">
        <doc xml:space="preserve">Tell an overlay that it has been exposed. This will redraw the current frame
in the drawable even if the pipeline is PAUSED.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="overlay" transfer-ownership="none">
            <type name="VideoOverlay" c:type="GstVideoOverlay*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="handle_events" invoker="handle_events">
        <doc xml:space="preserve">Tell an overlay that it should handle events from the window system. These
events are forwarded upstream as navigation events. In some window system,
events are not propagated in the window hierarchy if a client is listening
for them. This method allows you to disable events handling completely
from the #GstVideoOverlay.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="overlay" transfer-ownership="none">
            <type name="VideoOverlay" c:type="GstVideoOverlay*"/>
          </instance-parameter>
          <parameter name="handle_events" transfer-ownership="none">
            <doc xml:space="preserve">a #gboolean indicating if events should be handled or not.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="set_render_rectangle">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="overlay" transfer-ownership="none">
            <type name="VideoOverlay" c:type="GstVideoOverlay*"/>
          </instance-parameter>
          <parameter name="x" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="y" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="width" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="height" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="set_window_handle" invoker="set_window_handle">
        <doc xml:space="preserve">This will call the video overlay's set_window_handle method. You
should use this method to tell to an overlay to display video output to a
specific window (e.g. an XWindow on X11). Passing 0 as the  @handle will
tell the overlay to stop using that window and create an internal one.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="overlay" transfer-ownership="none">
            <type name="VideoOverlay" c:type="GstVideoOverlay*"/>
          </instance-parameter>
          <parameter name="handle" transfer-ownership="none">
            <doc xml:space="preserve">a handle referencing the window.</doc>
            <type name="guintptr" c:type="guintptr"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="expose" c:identifier="gst_video_overlay_expose">
        <doc xml:space="preserve">Tell an overlay that it has been exposed. This will redraw the current frame
in the drawable even if the pipeline is PAUSED.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="overlay" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlay to expose.</doc>
            <type name="VideoOverlay" c:type="GstVideoOverlay*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="got_window_handle"
              c:identifier="gst_video_overlay_got_window_handle">
        <doc xml:space="preserve">This will post a "have-window-handle" element message on the bus.

This function should only be used by video overlay plugin developers.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="overlay" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlay which got a window</doc>
            <type name="VideoOverlay" c:type="GstVideoOverlay*"/>
          </instance-parameter>
          <parameter name="handle" transfer-ownership="none">
            <doc xml:space="preserve">a platform-specific handle referencing the window</doc>
            <type name="guintptr" c:type="guintptr"/>
          </parameter>
        </parameters>
      </method>
      <method name="handle_events"
              c:identifier="gst_video_overlay_handle_events">
        <doc xml:space="preserve">Tell an overlay that it should handle events from the window system. These
events are forwarded upstream as navigation events. In some window system,
events are not propagated in the window hierarchy if a client is listening
for them. This method allows you to disable events handling completely
from the #GstVideoOverlay.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="overlay" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlay to expose.</doc>
            <type name="VideoOverlay" c:type="GstVideoOverlay*"/>
          </instance-parameter>
          <parameter name="handle_events" transfer-ownership="none">
            <doc xml:space="preserve">a #gboolean indicating if events should be handled or not.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="prepare_window_handle"
              c:identifier="gst_video_overlay_prepare_window_handle">
        <doc xml:space="preserve">This will post a "prepare-window-handle" element message on the bus
to give applications an opportunity to call
gst_video_overlay_set_window_handle() before a plugin creates its own
window.

This function should only be used by video overlay plugin developers.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="overlay" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlay which does not yet have an Window handle set</doc>
            <type name="VideoOverlay" c:type="GstVideoOverlay*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_render_rectangle"
              c:identifier="gst_video_overlay_set_render_rectangle">
        <doc xml:space="preserve">Configure a subregion as a video target within the window set by
gst_video_overlay_set_window_handle(). If this is not used or not supported
the video will fill the area of the window set as the overlay to 100%.
By specifying the rectangle, the video can be overlayed to a specific region
of that window only. After setting the new rectangle one should call
gst_video_overlay_expose() to force a redraw. To unset the region pass -1 for
the @width and @height parameters.

This method is needed for non fullscreen video overlay in UI toolkits that
do not support subwindows.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%FALSE if not supported by the sink.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="overlay" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlay</doc>
            <type name="VideoOverlay" c:type="GstVideoOverlay*"/>
          </instance-parameter>
          <parameter name="x" transfer-ownership="none">
            <doc xml:space="preserve">the horizontal offset of the render area inside the window</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="y" transfer-ownership="none">
            <doc xml:space="preserve">the vertical offset of the render area inside the window</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="width" transfer-ownership="none">
            <doc xml:space="preserve">the width of the render area inside the window</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="height" transfer-ownership="none">
            <doc xml:space="preserve">the height of the render area inside the window</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_window_handle"
              c:identifier="gst_video_overlay_set_window_handle">
        <doc xml:space="preserve">This will call the video overlay's set_window_handle method. You
should use this method to tell to an overlay to display video output to a
specific window (e.g. an XWindow on X11). Passing 0 as the  @handle will
tell the overlay to stop using that window and create an internal one.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="overlay" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlay to set the window on.</doc>
            <type name="VideoOverlay" c:type="GstVideoOverlay*"/>
          </instance-parameter>
          <parameter name="handle" transfer-ownership="none">
            <doc xml:space="preserve">a handle referencing the window.</doc>
            <type name="guintptr" c:type="guintptr"/>
          </parameter>
        </parameters>
      </method>
    </interface>
    <record name="VideoOverlayComposition"
            c:type="GstVideoOverlayComposition"
            glib:type-name="GstVideoOverlayComposition"
            glib:get-type="gst_video_overlay_composition_get_type"
            c:symbol-prefix="video_overlay_composition">
      <doc xml:space="preserve">&lt;refsect2&gt;
&lt;para&gt;
Functions to create and handle overlay compositions on video buffers.
&lt;/para&gt;
&lt;para&gt;
An overlay composition describes one or more overlay rectangles to be
blended on top of a video buffer.
&lt;/para&gt;
&lt;para&gt;
This API serves two main purposes:
&lt;itemizedlist&gt;
&lt;listitem&gt;
it can be used to attach overlay information (subtitles or logos)
to non-raw video buffers such as GL/VAAPI/VDPAU surfaces. The actual
blending of the overlay can then be done by e.g. the video sink that
processes these non-raw buffers.
&lt;/listitem&gt;
&lt;listitem&gt;
it can also be used to blend overlay rectangles on top of raw video
buffers, thus consolidating blending functionality for raw video in
one place.
&lt;/listitem&gt;
Together, this allows existing overlay elements to easily handle raw
and non-raw video as input in without major changes (once the overlays
have been put into a #GstOverlayComposition object anyway) - for raw
video the overlay can just use the blending function to blend the data
on top of the video, and for surface buffers it can just attach them to
the buffer and let the sink render the overlays.
&lt;/itemizedlist&gt;
&lt;/para&gt;
&lt;/refsect2&gt;</doc>
      <constructor name="new" c:identifier="gst_video_overlay_composition_new">
        <doc xml:space="preserve">Creates a new video overlay composition object to hold one or more
overlay rectangles.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #GstVideoOverlayComposition. Unref with gst_video_overlay_composition_unref() when no longer needed.</doc>
          <type name="VideoOverlayComposition"
                c:type="GstVideoOverlayComposition*"/>
        </return-value>
        <parameters>
          <parameter name="rectangle" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayRectangle to add to the composition</doc>
            <type name="VideoOverlayRectangle"
                  c:type="GstVideoOverlayRectangle*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="add_rectangle"
              c:identifier="gst_video_overlay_composition_add_rectangle">
        <doc xml:space="preserve">Adds an overlay rectangle to an existing overlay composition object. This
must be done right after creating the overlay composition.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="comp" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayComposition</doc>
            <type name="VideoOverlayComposition"
                  c:type="GstVideoOverlayComposition*"/>
          </instance-parameter>
          <parameter name="rectangle" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayRectangle to add to the composition</doc>
            <type name="VideoOverlayRectangle"
                  c:type="GstVideoOverlayRectangle*"/>
          </parameter>
        </parameters>
      </method>
      <method name="blend" c:identifier="gst_video_overlay_composition_blend">
        <doc xml:space="preserve">Blends the overlay rectangles in @comp on top of the raw video data
contained in @video_buf. The data in @video_buf must be writable and
mapped appropriately.</doc>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="comp" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayComposition</doc>
            <type name="VideoOverlayComposition"
                  c:type="GstVideoOverlayComposition*"/>
          </instance-parameter>
          <parameter name="video_buf" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoFrame containing raw video data in a supported format</doc>
            <type name="VideoFrame" c:type="GstVideoFrame*"/>
          </parameter>
        </parameters>
      </method>
      <method name="copy" c:identifier="gst_video_overlay_composition_copy">
        <doc xml:space="preserve">Makes a copy of @comp and all contained rectangles, so that it is possible
to modify the composition and contained rectangles (e.g. add additional
rectangles or change the render co-ordinates or render dimension). The
actual overlay pixel data buffers contained in the rectangles are not
copied.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #GstVideoOverlayComposition equivalent to @comp.</doc>
          <type name="VideoOverlayComposition"
                c:type="GstVideoOverlayComposition*"/>
        </return-value>
        <parameters>
          <instance-parameter name="comp" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayComposition to copy</doc>
            <type name="VideoOverlayComposition"
                  c:type="GstVideoOverlayComposition*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_rectangle"
              c:identifier="gst_video_overlay_composition_get_rectangle">
        <doc xml:space="preserve">Returns the @n-th #GstVideoOverlayRectangle contained in @comp.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the @n-th rectangle, or NULL if @n is out of bounds. Will not return a new reference, the caller will need to obtain her own reference using gst_video_overlay_rectangle_ref() if needed.</doc>
          <type name="VideoOverlayRectangle"
                c:type="GstVideoOverlayRectangle*"/>
        </return-value>
        <parameters>
          <instance-parameter name="comp" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayComposition</doc>
            <type name="VideoOverlayComposition"
                  c:type="GstVideoOverlayComposition*"/>
          </instance-parameter>
          <parameter name="n" transfer-ownership="none">
            <doc xml:space="preserve">number of the rectangle to get</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_seqnum"
              c:identifier="gst_video_overlay_composition_get_seqnum">
        <doc xml:space="preserve">Returns the sequence number of this composition. Sequence numbers are
monotonically increasing and unique for overlay compositions and rectangles
(meaning there will never be a rectangle with the same sequence number as
a composition).</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the sequence number of @comp</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="comp" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayComposition</doc>
            <type name="VideoOverlayComposition"
                  c:type="GstVideoOverlayComposition*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="make_writable"
              c:identifier="gst_video_overlay_composition_make_writable">
        <doc xml:space="preserve">Takes ownership of @comp and returns a version of @comp that is writable
(i.e. can be modified). Will either return @comp right away, or create a
new writable copy of @comp and unref @comp itself. All the contained
rectangles will also be copied, but the actual overlay pixel data buffers
contained in the rectangles are not copied.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a writable #GstVideoOverlayComposition equivalent to @comp.</doc>
          <type name="VideoOverlayComposition"
                c:type="GstVideoOverlayComposition*"/>
        </return-value>
        <parameters>
          <instance-parameter name="comp" transfer-ownership="full">
            <doc xml:space="preserve">a #GstVideoOverlayComposition to copy</doc>
            <type name="VideoOverlayComposition"
                  c:type="GstVideoOverlayComposition*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="n_rectangles"
              c:identifier="gst_video_overlay_composition_n_rectangles">
        <doc xml:space="preserve">Returns the number of #GstVideoOverlayRectangle&lt;!-- --&gt;s contained in @comp.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the number of rectangles</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="comp" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayComposition</doc>
            <type name="VideoOverlayComposition"
                  c:type="GstVideoOverlayComposition*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <record name="VideoOverlayCompositionMeta"
            c:type="GstVideoOverlayCompositionMeta">
      <doc xml:space="preserve">Extra buffer metadata describing image overlay data.</doc>
      <field name="meta" writable="1">
        <type name="Gst.Meta" c:type="GstMeta"/>
      </field>
      <field name="overlay" writable="1">
        <type name="VideoOverlayComposition"
              c:type="GstVideoOverlayComposition*"/>
      </field>
      <function name="get_info"
                c:identifier="gst_video_overlay_composition_meta_get_info">
        <return-value transfer-ownership="none">
          <type name="Gst.MetaInfo" c:type="const GstMetaInfo*"/>
        </return-value>
      </function>
    </record>
    <enumeration name="VideoOverlayFormatFlags"
                 c:type="GstVideoOverlayFormatFlags">
      <doc xml:space="preserve">Overlay format flags.</doc>
      <member name="none"
              value="0"
              c:identifier="GST_VIDEO_OVERLAY_FORMAT_FLAG_NONE">
        <doc xml:space="preserve">no flags</doc>
      </member>
      <member name="premultiplied_alpha"
              value="1"
              c:identifier="GST_VIDEO_OVERLAY_FORMAT_FLAG_PREMULTIPLIED_ALPHA">
        <doc xml:space="preserve">RGB are premultiplied by A/255.</doc>
      </member>
      <member name="global_alpha"
              value="2"
              c:identifier="GST_VIDEO_OVERLAY_FORMAT_FLAG_GLOBAL_ALPHA">
        <doc xml:space="preserve">a global-alpha value != 1 is set.</doc>
      </member>
    </enumeration>
    <record name="VideoOverlayInterface"
            c:type="GstVideoOverlayInterface"
            glib:is-gtype-struct-for="VideoOverlay">
      <doc xml:space="preserve">#GstVideoOverlay interface</doc>
      <field name="iface">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
      <field name="expose">
        <callback name="expose">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="overlay" transfer-ownership="none">
              <type name="VideoOverlay" c:type="GstVideoOverlay*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="handle_events">
        <callback name="handle_events">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="overlay" transfer-ownership="none">
              <type name="VideoOverlay" c:type="GstVideoOverlay*"/>
            </parameter>
            <parameter name="handle_events" transfer-ownership="none">
              <doc xml:space="preserve">a #gboolean indicating if events should be handled or not.</doc>
              <type name="gboolean" c:type="gboolean"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="set_render_rectangle">
        <callback name="set_render_rectangle">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="overlay" transfer-ownership="none">
              <type name="VideoOverlay" c:type="GstVideoOverlay*"/>
            </parameter>
            <parameter name="x" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="y" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="width" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="height" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="set_window_handle">
        <callback name="set_window_handle">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="overlay" transfer-ownership="none">
              <type name="VideoOverlay" c:type="GstVideoOverlay*"/>
            </parameter>
            <parameter name="handle" transfer-ownership="none">
              <doc xml:space="preserve">a handle referencing the window.</doc>
              <type name="guintptr" c:type="guintptr"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <record name="VideoOverlayRectangle"
            c:type="GstVideoOverlayRectangle"
            glib:type-name="GstVideoOverlayRectangle"
            glib:get-type="gst_video_overlay_rectangle_get_type"
            c:symbol-prefix="video_overlay_rectangle">
      <doc xml:space="preserve">An opaque video overlay rectangle object. A rectangle contains a single
overlay rectangle which can be added to a composition.</doc>
      <constructor name="new_raw"
                   c:identifier="gst_video_overlay_rectangle_new_raw">
        <doc xml:space="preserve">Creates a new video overlay rectangle with ARGB or AYUV pixel data.
The layout in case of ARGB of the components in memory is B-G-R-A
on little-endian platforms
(corresponding to #GST_VIDEO_FORMAT_BGRA) and A-R-G-B on big-endian
platforms (corresponding to #GST_VIDEO_FORMAT_ARGB). In other words,
pixels are treated as 32-bit words and the lowest 8 bits then contain
the blue component value and the highest 8 bits contain the alpha
component value. Unless specified in the flags, the RGB values are
non-premultiplied. This is the format that is used by most hardware,
and also many rendering libraries such as Cairo, for example.
The pixel data buffer must have #GstVideoMeta set.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #GstVideoOverlayRectangle. Unref with gst_video_overlay_rectangle_unref() when no longer needed.</doc>
          <type name="VideoOverlayRectangle"
                c:type="GstVideoOverlayRectangle*"/>
        </return-value>
        <parameters>
          <parameter name="pixels" transfer-ownership="none">
            <doc xml:space="preserve">a #GstBuffer pointing to the pixel memory</doc>
            <type name="Gst.Buffer" c:type="GstBuffer*"/>
          </parameter>
          <parameter name="render_x" transfer-ownership="none">
            <doc xml:space="preserve">the X co-ordinate on the video where the top-left corner of this overlay rectangle should be rendered to</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="render_y" transfer-ownership="none">
            <doc xml:space="preserve">the Y co-ordinate on the video where the top-left corner of this overlay rectangle should be rendered to</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="render_width" transfer-ownership="none">
            <doc xml:space="preserve">the render width of this rectangle on the video</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="render_height" transfer-ownership="none">
            <doc xml:space="preserve">the render height of this rectangle on the video</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">flags</doc>
            <type name="VideoOverlayFormatFlags"
                  c:type="GstVideoOverlayFormatFlags"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="copy" c:identifier="gst_video_overlay_rectangle_copy">
        <doc xml:space="preserve">Makes a copy of @rectangle, so that it is possible to modify it
(e.g. to change the render co-ordinates or render dimension). The
actual overlay pixel data buffers contained in the rectangle are not
copied.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #GstVideoOverlayRectangle equivalent to @rectangle.</doc>
          <type name="VideoOverlayRectangle"
                c:type="GstVideoOverlayRectangle*"/>
        </return-value>
        <parameters>
          <instance-parameter name="rectangle" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayRectangle to copy</doc>
            <type name="VideoOverlayRectangle"
                  c:type="GstVideoOverlayRectangle*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_flags"
              c:identifier="gst_video_overlay_rectangle_get_flags">
        <doc xml:space="preserve">Retrieves the flags associated with a #GstVideoOverlayRectangle.
This is useful if the caller can handle both premultiplied alpha and
non premultiplied alpha, for example. By knowing whether the rectangle
uses premultiplied or not, it can request the pixel data in the format
it is stored in, to avoid unnecessary conversion.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the #GstVideoOverlayFormatFlags associated with the rectangle.</doc>
          <type name="VideoOverlayFormatFlags"
                c:type="GstVideoOverlayFormatFlags"/>
        </return-value>
        <parameters>
          <instance-parameter name="rectangle" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayRectangle</doc>
            <type name="VideoOverlayRectangle"
                  c:type="GstVideoOverlayRectangle*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_global_alpha"
              c:identifier="gst_video_overlay_rectangle_get_global_alpha">
        <doc xml:space="preserve">Retrieves the global-alpha value associated with a #GstVideoOverlayRectangle.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the global-alpha value associated with the rectangle.</doc>
          <type name="gfloat" c:type="gfloat"/>
        </return-value>
        <parameters>
          <instance-parameter name="rectangle" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayRectangle</doc>
            <type name="VideoOverlayRectangle"
                  c:type="GstVideoOverlayRectangle*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_pixels_argb"
              c:identifier="gst_video_overlay_rectangle_get_pixels_argb">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GstBuffer holding the ARGB pixel data with width and height of the render dimensions as per gst_video_overlay_rectangle_get_render_rectangle(). This function does not return a reference, the caller should obtain a reference of her own with gst_buffer_ref() if needed.</doc>
          <type name="Gst.Buffer" c:type="GstBuffer*"/>
        </return-value>
        <parameters>
          <instance-parameter name="rectangle" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayRectangle</doc>
            <type name="VideoOverlayRectangle"
                  c:type="GstVideoOverlayRectangle*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">flags If a global_alpha value != 1 is set for the rectangle, the caller should set the #GST_VIDEO_OVERLAY_FORMAT_FLAG_GLOBAL_ALPHA flag if he wants to apply global-alpha himself. If the flag is not set global_alpha is applied internally before returning the pixel-data.</doc>
            <type name="VideoOverlayFormatFlags"
                  c:type="GstVideoOverlayFormatFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_pixels_ayuv"
              c:identifier="gst_video_overlay_rectangle_get_pixels_ayuv">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GstBuffer holding the AYUV pixel data with width and height of the render dimensions as per gst_video_overlay_rectangle_get_render_rectangle(). This function does not return a reference, the caller should obtain a reference of her own with gst_buffer_ref() if needed.</doc>
          <type name="Gst.Buffer" c:type="GstBuffer*"/>
        </return-value>
        <parameters>
          <instance-parameter name="rectangle" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayRectangle</doc>
            <type name="VideoOverlayRectangle"
                  c:type="GstVideoOverlayRectangle*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">flags If a global_alpha value != 1 is set for the rectangle, the caller should set the #GST_VIDEO_OVERLAY_FORMAT_FLAG_GLOBAL_ALPHA flag if he wants to apply global-alpha himself. If the flag is not set global_alpha is applied internally before returning the pixel-data.</doc>
            <type name="VideoOverlayFormatFlags"
                  c:type="GstVideoOverlayFormatFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_pixels_raw"
              c:identifier="gst_video_overlay_rectangle_get_pixels_raw">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GstBuffer holding the pixel data with format as originally provided and specified in video meta with width and height of the render dimensions as per gst_video_overlay_rectangle_get_render_rectangle(). This function does not return a reference, the caller should obtain a reference of her own with gst_buffer_ref() if needed.</doc>
          <type name="Gst.Buffer" c:type="GstBuffer*"/>
        </return-value>
        <parameters>
          <instance-parameter name="rectangle" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayRectangle</doc>
            <type name="VideoOverlayRectangle"
                  c:type="GstVideoOverlayRectangle*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">flags If a global_alpha value != 1 is set for the rectangle, the caller should set the #GST_VIDEO_OVERLAY_FORMAT_FLAG_GLOBAL_ALPHA flag if he wants to apply global-alpha himself. If the flag is not set global_alpha is applied internally before returning the pixel-data.</doc>
            <type name="VideoOverlayFormatFlags"
                  c:type="GstVideoOverlayFormatFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_pixels_unscaled_argb"
              c:identifier="gst_video_overlay_rectangle_get_pixels_unscaled_argb">
        <doc xml:space="preserve">Retrieves the pixel data as it is. This is useful if the caller can
do the scaling itself when handling the overlaying. The rectangle will
need to be scaled to the render dimensions, which can be retrieved using
gst_video_overlay_rectangle_get_render_rectangle().</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GstBuffer holding the ARGB pixel data with #GstVideoMeta set. This function does not return a reference, the caller should obtain a reference of her own with gst_buffer_ref() if needed.</doc>
          <type name="Gst.Buffer" c:type="GstBuffer*"/>
        </return-value>
        <parameters>
          <instance-parameter name="rectangle" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayRectangle</doc>
            <type name="VideoOverlayRectangle"
                  c:type="GstVideoOverlayRectangle*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">flags. If a global_alpha value != 1 is set for the rectangle, the caller should set the #GST_VIDEO_OVERLAY_FORMAT_FLAG_GLOBAL_ALPHA flag if he wants to apply global-alpha himself. If the flag is not set global_alpha is applied internally before returning the pixel-data.</doc>
            <type name="VideoOverlayFormatFlags"
                  c:type="GstVideoOverlayFormatFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_pixels_unscaled_ayuv"
              c:identifier="gst_video_overlay_rectangle_get_pixels_unscaled_ayuv">
        <doc xml:space="preserve">Retrieves the pixel data as it is. This is useful if the caller can
do the scaling itself when handling the overlaying. The rectangle will
need to be scaled to the render dimensions, which can be retrieved using
gst_video_overlay_rectangle_get_render_rectangle().</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GstBuffer holding the AYUV pixel data with #GstVideoMeta set. This function does not return a reference, the caller should obtain a reference of her own with gst_buffer_ref() if needed.</doc>
          <type name="Gst.Buffer" c:type="GstBuffer*"/>
        </return-value>
        <parameters>
          <instance-parameter name="rectangle" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayRectangle</doc>
            <type name="VideoOverlayRectangle"
                  c:type="GstVideoOverlayRectangle*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">flags. If a global_alpha value != 1 is set for the rectangle, the caller should set the #GST_VIDEO_OVERLAY_FORMAT_FLAG_GLOBAL_ALPHA flag if he wants to apply global-alpha himself. If the flag is not set global_alpha is applied internally before returning the pixel-data.</doc>
            <type name="VideoOverlayFormatFlags"
                  c:type="GstVideoOverlayFormatFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_pixels_unscaled_raw"
              c:identifier="gst_video_overlay_rectangle_get_pixels_unscaled_raw">
        <doc xml:space="preserve">Retrieves the pixel data as it is. This is useful if the caller can
do the scaling itself when handling the overlaying. The rectangle will
need to be scaled to the render dimensions, which can be retrieved using
gst_video_overlay_rectangle_get_render_rectangle().</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GstBuffer holding the pixel data with #GstVideoMeta set. This function does not return a reference, the caller should obtain a reference of her own with gst_buffer_ref() if needed.</doc>
          <type name="Gst.Buffer" c:type="GstBuffer*"/>
        </return-value>
        <parameters>
          <instance-parameter name="rectangle" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayRectangle</doc>
            <type name="VideoOverlayRectangle"
                  c:type="GstVideoOverlayRectangle*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">flags. If a global_alpha value != 1 is set for the rectangle, the caller should set the #GST_VIDEO_OVERLAY_FORMAT_FLAG_GLOBAL_ALPHA flag if he wants to apply global-alpha himself. If the flag is not set global_alpha is applied internally before returning the pixel-data.</doc>
            <type name="VideoOverlayFormatFlags"
                  c:type="GstVideoOverlayFormatFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_render_rectangle"
              c:identifier="gst_video_overlay_rectangle_get_render_rectangle">
        <doc xml:space="preserve">Retrieves the render position and render dimension of the overlay
rectangle on the video.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if valid render dimensions were retrieved.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="rectangle" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayRectangle</doc>
            <type name="VideoOverlayRectangle"
                  c:type="GstVideoOverlayRectangle*"/>
          </instance-parameter>
          <parameter name="render_x"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     allow-none="1">
            <doc xml:space="preserve">address where to store the X render offset</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
          <parameter name="render_y"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     allow-none="1">
            <doc xml:space="preserve">address where to store the Y render offset</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
          <parameter name="render_width"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     allow-none="1">
            <doc xml:space="preserve">address where to store the render width</doc>
            <type name="guint" c:type="guint*"/>
          </parameter>
          <parameter name="render_height"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     allow-none="1">
            <doc xml:space="preserve">address where to store the render height</doc>
            <type name="guint" c:type="guint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_seqnum"
              c:identifier="gst_video_overlay_rectangle_get_seqnum">
        <doc xml:space="preserve">Returns the sequence number of this rectangle. Sequence numbers are
monotonically increasing and unique for overlay compositions and rectangles
(meaning there will never be a rectangle with the same sequence number as
a composition).

Using the sequence number of a rectangle as an indicator for changed
pixel-data of a rectangle is dangereous. Some API calls, like e.g.
gst_video_overlay_rectangle_set_global_alpha(), automatically update
the per rectangle sequence number, which is misleading for renderers/
consumers, that handle global-alpha themselves. For them  the
pixel-data returned by gst_video_overlay_rectangle_get_pixels_*()
wont be different for different global-alpha values. In this case a
renderer could also use the GstBuffer pointers as a hint for changed
pixel-data.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the sequence number of @rectangle</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="rectangle" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayRectangle</doc>
            <type name="VideoOverlayRectangle"
                  c:type="GstVideoOverlayRectangle*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_global_alpha"
              c:identifier="gst_video_overlay_rectangle_set_global_alpha">
        <doc xml:space="preserve">Sets the global alpha value associated with a #GstVideoOverlayRectangle. Per-
pixel alpha values are multiplied with this value. Valid
values: 0 &lt;= global_alpha &lt;= 1; 1 to deactivate.

 # @rectangle must be writable, meaning its refcount must be 1. You can
make the rectangles inside a #GstVideoOverlayComposition writable using
gst_video_overlay_composition_make_writable() or
gst_video_overlay_composition_copy().</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="rectangle" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayRectangle</doc>
            <type name="VideoOverlayRectangle"
                  c:type="GstVideoOverlayRectangle*"/>
          </instance-parameter>
          <parameter name="global_alpha" transfer-ownership="none">
            <type name="gfloat" c:type="gfloat"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_render_rectangle"
              c:identifier="gst_video_overlay_rectangle_set_render_rectangle">
        <doc xml:space="preserve">Sets the render position and dimensions of the rectangle on the video.
This function is mainly for elements that modify the size of the video
in some way (e.g. through scaling or cropping) and need to adjust the
details of any overlays to match the operation that changed the size.

@rectangle must be writable, meaning its refcount must be 1. You can
make the rectangles inside a #GstVideoOverlayComposition writable using
gst_video_overlay_composition_make_writable() or
gst_video_overlay_composition_copy().</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="rectangle" transfer-ownership="none">
            <doc xml:space="preserve">a #GstVideoOverlayRectangle</doc>
            <type name="VideoOverlayRectangle"
                  c:type="GstVideoOverlayRectangle*"/>
          </instance-parameter>
          <parameter name="render_x" transfer-ownership="none">
            <doc xml:space="preserve">render X position of rectangle on video</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="render_y" transfer-ownership="none">
            <doc xml:space="preserve">render Y position of rectangle on video</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="render_width" transfer-ownership="none">
            <doc xml:space="preserve">render width of rectangle</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="render_height" transfer-ownership="none">
            <doc xml:space="preserve">render height of rectangle</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
    </record>
    <enumeration name="VideoPackFlags"
                 glib:type-name="GstVideoPackFlags"
                 glib:get-type="gst_video_pack_flags_get_type"
                 c:type="GstVideoPackFlags">
      <doc xml:space="preserve">The different flags that can be used when packing and unpacking.</doc>
      <member name="none"
              value="0"
              c:identifier="GST_VIDEO_PACK_FLAG_NONE"
              glib:nick="none">
        <doc xml:space="preserve">No flag</doc>
      </member>
      <member name="truncate_range"
              value="1"
              c:identifier="GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE"
              glib:nick="truncate-range">
        <doc xml:space="preserve">When the source has a smaller depth than the target format, set the least significant bits of the target to 0. This is likely sightly faster but less accurate. When this flag is not specified, the most significant bits of the source are duplicated in the least significant bits of the destination.</doc>
      </member>
    </enumeration>
    <record name="VideoRectangle" c:type="GstVideoRectangle">
      <doc xml:space="preserve">Helper structure representing a rectangular area.</doc>
      <field name="x" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="y" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="w" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="h" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
    </record>
    <class name="VideoSink"
           c:symbol-prefix="video_sink"
           c:type="GstVideoSink"
           parent="GstBase.BaseSink"
           glib:type-name="GstVideoSink"
           glib:get-type="gst_video_sink_get_type"
           glib:type-struct="VideoSinkClass">
      <doc xml:space="preserve">&lt;refsect2&gt;
&lt;para&gt;
Provides useful functions and a base class for video sinks. 
&lt;/para&gt;
&lt;para&gt;
GstVideoSink will configure the default base sink to drop frames that
arrive later than 20ms as this is considered the default threshold for
observing out-of-sync frames.
&lt;/para&gt;
&lt;/refsect2&gt;</doc>
      <function name="center_rect" c:identifier="gst_video_sink_center_rect">
        <doc xml:space="preserve">Takes @src rectangle and position it at the center of @dst rectangle with or
without @scaling. It handles clipping if the @src rectangle is bigger than
the @dst one and @scaling is set to FALSE.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="src" transfer-ownership="none">
            <doc xml:space="preserve">the #GstVideoRectangle describing the source area</doc>
            <type name="VideoRectangle" c:type="GstVideoRectangle"/>
          </parameter>
          <parameter name="dst" transfer-ownership="none">
            <doc xml:space="preserve">the #GstVideoRectangle describing the destination area</doc>
            <type name="VideoRectangle" c:type="GstVideoRectangle"/>
          </parameter>
          <parameter name="result" transfer-ownership="none">
            <doc xml:space="preserve">a pointer to a #GstVideoRectangle which will receive the result area</doc>
            <type name="VideoRectangle" c:type="GstVideoRectangle*"/>
          </parameter>
          <parameter name="scaling" transfer-ownership="none">
            <doc xml:space="preserve">a #gboolean indicating if scaling should be applied or not</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </function>
      <virtual-method name="show_frame">
        <return-value transfer-ownership="none">
          <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
        </return-value>
        <parameters>
          <instance-parameter name="video_sink" transfer-ownership="none">
            <type name="VideoSink" c:type="GstVideoSink*"/>
          </instance-parameter>
          <parameter name="buf" transfer-ownership="none">
            <type name="Gst.Buffer" c:type="GstBuffer*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <property name="show-preroll-frame"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Whether to show video frames during preroll. If set to #FALSE, video
frames will only be rendered in PLAYING state.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <field name="element">
        <type name="GstBase.BaseSink" c:type="GstBaseSink"/>
      </field>
      <field name="width">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="height">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="VideoSinkPrivate" c:type="GstVideoSinkPrivate*"/>
      </field>
      <field name="_gst_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </class>
    <record name="VideoSinkClass"
            c:type="GstVideoSinkClass"
            glib:is-gtype-struct-for="VideoSink">
      <doc xml:space="preserve">The video sink class structure. Derived classes should override the
@show_frame virtual function.</doc>
      <field name="parent_class">
        <type name="GstBase.BaseSinkClass" c:type="GstBaseSinkClass"/>
      </field>
      <field name="show_frame">
        <callback name="show_frame">
          <return-value transfer-ownership="none">
            <type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
          </return-value>
          <parameters>
            <parameter name="video_sink" transfer-ownership="none">
              <type name="VideoSink" c:type="GstVideoSink*"/>
            </parameter>
            <parameter name="buf" transfer-ownership="none">
              <type name="Gst.Buffer" c:type="GstBuffer*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gst_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gpointer" fixed-size="4">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <record name="VideoSinkPrivate" c:type="GstVideoSinkPrivate" disguised="1">
    </record>
    <enumeration name="VideoTransferFunction"
                 glib:type-name="GstVideoTransferFunction"
                 glib:get-type="gst_video_transfer_function_get_type"
                 c:type="GstVideoTransferFunction">
      <doc xml:space="preserve">The video transfer function defines the formula for converting between
non-linear RGB (R'G'B') and linear RGB</doc>
      <member name="unknown"
              value="0"
              c:identifier="GST_VIDEO_TRANSFER_UNKNOWN"
              glib:nick="unknown">
        <doc xml:space="preserve">unknown transfer function</doc>
      </member>
      <member name="gamma10"
              value="1"
              c:identifier="GST_VIDEO_TRANSFER_GAMMA10"
              glib:nick="gamma10">
        <doc xml:space="preserve">linear RGB, gamma 1.0 curve</doc>
      </member>
      <member name="gamma18"
              value="2"
              c:identifier="GST_VIDEO_TRANSFER_GAMMA18"
              glib:nick="gamma18">
        <doc xml:space="preserve">Gamma 1.8 curve</doc>
      </member>
      <member name="gamma20"
              value="3"
              c:identifier="GST_VIDEO_TRANSFER_GAMMA20"
              glib:nick="gamma20">
        <doc xml:space="preserve">Gamma 2.0 curve</doc>
      </member>
      <member name="gamma22"
              value="4"
              c:identifier="GST_VIDEO_TRANSFER_GAMMA22"
              glib:nick="gamma22">
        <doc xml:space="preserve">Gamma 2.2 curve</doc>
      </member>
      <member name="bt709"
              value="5"
              c:identifier="GST_VIDEO_TRANSFER_BT709"
              glib:nick="bt709">
        <doc xml:space="preserve">Gamma 2.2 curve with a linear segment in the lower range</doc>
      </member>
      <member name="smpte240m"
              value="6"
              c:identifier="GST_VIDEO_TRANSFER_SMPTE240M"
              glib:nick="smpte240m">
        <doc xml:space="preserve">Gamma 2.2 curve with a linear segment in the lower range</doc>
      </member>
      <member name="srgb"
              value="7"
              c:identifier="GST_VIDEO_TRANSFER_SRGB"
              glib:nick="srgb">
        <doc xml:space="preserve">Gamma 2.4 curve with a linear segment in the lower range</doc>
      </member>
      <member name="gamma28"
              value="8"
              c:identifier="GST_VIDEO_TRANSFER_GAMMA28"
              glib:nick="gamma28">
        <doc xml:space="preserve">Gamma 2.8 curve</doc>
      </member>
      <member name="log100"
              value="9"
              c:identifier="GST_VIDEO_TRANSFER_LOG100"
              glib:nick="log100">
        <doc xml:space="preserve">Logarithmic transfer characteristic 100:1 range</doc>
      </member>
      <member name="log316"
              value="10"
              c:identifier="GST_VIDEO_TRANSFER_LOG316"
              glib:nick="log316">
        <doc xml:space="preserve">Logarithmic transfer characteristic 316.22777:1 range</doc>
      </member>
    </enumeration>
    <function name="buffer_add_video_meta"
              c:identifier="gst_buffer_add_video_meta"
              introspectable="0">
      <doc xml:space="preserve">Attaches GstVideoMeta metadata to @buffer with the given parameters and the
default offsets and strides for @format and @width x @height.

This function calculates the default offsets and strides and then calls
gst_buffer_add_video_meta_full() with them.</doc>
      <return-value>
        <doc xml:space="preserve">the #GstVideoMeta on @buffer.</doc>
        <type name="VideoMeta" c:type="GstVideoMeta*"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a #GstBuffer</doc>
          <type name="Gst.Buffer" c:type="GstBuffer*"/>
        </parameter>
        <parameter name="flags" transfer-ownership="none">
          <doc xml:space="preserve">#GstVideoFrameFlags</doc>
          <type name="VideoFrameFlags" c:type="GstVideoFrameFlags"/>
        </parameter>
        <parameter name="format" transfer-ownership="none">
          <doc xml:space="preserve">a #GstVideoFormat</doc>
          <type name="VideoFormat" c:type="GstVideoFormat"/>
        </parameter>
        <parameter name="width" transfer-ownership="none">
          <doc xml:space="preserve">the width</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="height" transfer-ownership="none">
          <doc xml:space="preserve">the height</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_add_video_meta_full"
              c:identifier="gst_buffer_add_video_meta_full"
              introspectable="0">
      <doc xml:space="preserve">Attaches GstVideoMeta metadata to @buffer with the given parameters.</doc>
      <return-value>
        <doc xml:space="preserve">the #GstVideoMeta on @buffer.</doc>
        <type name="VideoMeta" c:type="GstVideoMeta*"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a #GstBuffer</doc>
          <type name="Gst.Buffer" c:type="GstBuffer*"/>
        </parameter>
        <parameter name="flags" transfer-ownership="none">
          <doc xml:space="preserve">#GstVideoFrameFlags</doc>
          <type name="VideoFrameFlags" c:type="GstVideoFrameFlags"/>
        </parameter>
        <parameter name="format" transfer-ownership="none">
          <doc xml:space="preserve">a #GstVideoFormat</doc>
          <type name="VideoFormat" c:type="GstVideoFormat"/>
        </parameter>
        <parameter name="width" transfer-ownership="none">
          <doc xml:space="preserve">the width</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="height" transfer-ownership="none">
          <doc xml:space="preserve">the height</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="n_planes" transfer-ownership="none">
          <doc xml:space="preserve">number of planes</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="offset" transfer-ownership="none">
          <doc xml:space="preserve">offset of each plane</doc>
          <type name="gsize" c:type="gsize"/>
        </parameter>
        <parameter name="stride" transfer-ownership="none">
          <doc xml:space="preserve">stride of each plane</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_add_video_overlay_composition_meta"
              c:identifier="gst_buffer_add_video_overlay_composition_meta"
              introspectable="0">
      <doc xml:space="preserve">Sets an overlay composition on a buffer. The buffer will obtain its own
reference to the composition, meaning this function does not take ownership
of @comp.</doc>
      <return-value>
        <type name="VideoOverlayCompositionMeta"
              c:type="GstVideoOverlayCompositionMeta*"/>
      </return-value>
      <parameters>
        <parameter name="buf" transfer-ownership="none">
          <doc xml:space="preserve">a #GstBuffer</doc>
          <type name="Gst.Buffer" c:type="GstBuffer*"/>
        </parameter>
        <parameter name="comp" transfer-ownership="none" allow-none="1">
          <doc xml:space="preserve">a #GstVideoOverlayComposition</doc>
          <type name="VideoOverlayComposition"
                c:type="GstVideoOverlayComposition*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_get_video_meta_id"
              c:identifier="gst_buffer_get_video_meta_id"
              introspectable="0">
      <doc xml:space="preserve">Find the #GstVideoMeta on @buffer with the given @id.

Buffers can contain multiple #GstVideoMeta metadata items when dealing with
multiview buffers.</doc>
      <return-value>
        <doc xml:space="preserve">the #GstVideoMeta with @id or %NULL when there is no such metadata on @buffer.</doc>
        <type name="VideoMeta" c:type="GstVideoMeta*"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a #GstBuffer</doc>
          <type name="Gst.Buffer" c:type="GstBuffer*"/>
        </parameter>
        <parameter name="id" transfer-ownership="none">
          <doc xml:space="preserve">a metadata id</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_pool_config_get_video_alignment"
              c:identifier="gst_buffer_pool_config_get_video_alignment">
      <doc xml:space="preserve">Get the video alignment from the bufferpool configuration @config in
in @align</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">#TRUE if @config could be parsed correctly.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="config" transfer-ownership="none">
          <doc xml:space="preserve">a #GstStructure</doc>
          <type name="Gst.Structure" c:type="GstStructure*"/>
        </parameter>
        <parameter name="align" transfer-ownership="none">
          <doc xml:space="preserve">a #GstVideoAlignment</doc>
          <type name="VideoAlignment" c:type="GstVideoAlignment*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_pool_config_set_video_alignment"
              c:identifier="gst_buffer_pool_config_set_video_alignment">
      <doc xml:space="preserve">Set the video alignment in @align to the bufferpool configuration
@config</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="config" transfer-ownership="none">
          <doc xml:space="preserve">a #GstStructure</doc>
          <type name="Gst.Structure" c:type="GstStructure*"/>
        </parameter>
        <parameter name="align" transfer-ownership="none">
          <doc xml:space="preserve">a #GstVideoAlignment</doc>
          <type name="VideoAlignment" c:type="GstVideoAlignment*"/>
        </parameter>
      </parameters>
    </function>
    <function name="is_video_overlay_prepare_window_handle_message"
              c:identifier="gst_is_video_overlay_prepare_window_handle_message">
      <doc xml:space="preserve">Convenience function to check if the given message is a
"prepare-window-handle" message from a #GstVideoOverlay.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">whether @msg is a "prepare-window-handle" message</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="msg" transfer-ownership="none">
          <doc xml:space="preserve">a #GstMessage</doc>
          <type name="Gst.Message" c:type="GstMessage*"/>
        </parameter>
      </parameters>
    </function>
    <function name="navigation_event_get_type"
              c:identifier="gst_navigation_event_get_type"
              moved-to="Navigation.event_get_type">
      <doc xml:space="preserve">Inspect a #GstEvent and return the #GstNavigationEventType of the event, or
#GST_NAVIGATION_EVENT_INVALID if the event is not a #GstNavigation event.</doc>
      <return-value transfer-ownership="none">
        <type name="NavigationEventType" c:type="GstNavigationEventType"/>
      </return-value>
      <parameters>
        <parameter name="event" transfer-ownership="none">
          <doc xml:space="preserve">A #GstEvent to inspect.</doc>
          <type name="Gst.Event" c:type="GstEvent*"/>
        </parameter>
      </parameters>
    </function>
    <function name="navigation_event_parse_command"
              c:identifier="gst_navigation_event_parse_command"
              moved-to="Navigation.event_parse_command">
      <doc xml:space="preserve">Inspect a #GstNavigation command event and retrieve the enum value of the
associated command.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">TRUE if the navigation command could be extracted, otherwise FALSE.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="event" transfer-ownership="none">
          <doc xml:space="preserve">A #GstEvent to inspect.</doc>
          <type name="Gst.Event" c:type="GstEvent*"/>
        </parameter>
        <parameter name="command" transfer-ownership="none">
          <doc xml:space="preserve">Pointer to GstNavigationCommand to receive the type of the navigation event.</doc>
          <type name="NavigationCommand" c:type="GstNavigationCommand*"/>
        </parameter>
      </parameters>
    </function>
    <function name="navigation_event_parse_key_event"
              c:identifier="gst_navigation_event_parse_key_event"
              moved-to="Navigation.event_parse_key_event">
      <return-value transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="event" transfer-ownership="none">
          <doc xml:space="preserve">A #GstEvent to inspect.</doc>
          <type name="Gst.Event" c:type="GstEvent*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <doc xml:space="preserve">A pointer to a location to receive the string identifying the key press. The returned string is owned by the event, and valid only until the event is unreffed.</doc>
          <type name="utf8" c:type="const gchar**"/>
        </parameter>
      </parameters>
    </function>
    <function name="navigation_event_parse_mouse_button_event"
              c:identifier="gst_navigation_event_parse_mouse_button_event"
              moved-to="Navigation.event_parse_mouse_button_event">
      <doc xml:space="preserve">Retrieve the details of either a #GstNavigation mouse button press event or
a mouse button release event. Determine which type the event is using
gst_navigation_event_get_type() to retrieve the #GstNavigationEventType.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">TRUE if the button number and both coordinates could be extracted, otherwise FALSE.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="event" transfer-ownership="none">
          <doc xml:space="preserve">A #GstEvent to inspect.</doc>
          <type name="Gst.Event" c:type="GstEvent*"/>
        </parameter>
        <parameter name="button" transfer-ownership="none">
          <doc xml:space="preserve">Pointer to a gint that will receive the button number associated with the event.</doc>
          <type name="gint" c:type="gint*"/>
        </parameter>
        <parameter name="x" transfer-ownership="none">
          <doc xml:space="preserve">Pointer to a gdouble to receive the x coordinate of the mouse button event.</doc>
          <type name="gdouble" c:type="gdouble*"/>
        </parameter>
        <parameter name="y" transfer-ownership="none">
          <doc xml:space="preserve">Pointer to a gdouble to receive the y coordinate of the mouse button event.</doc>
          <type name="gdouble" c:type="gdouble*"/>
        </parameter>
      </parameters>
    </function>
    <function name="navigation_event_parse_mouse_move_event"
              c:identifier="gst_navigation_event_parse_mouse_move_event"
              moved-to="Navigation.event_parse_mouse_move_event">
      <doc xml:space="preserve">Inspect a #GstNavigation mouse movement event and extract the coordinates
of the event.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">TRUE if both coordinates could be extracted, otherwise FALSE.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="event" transfer-ownership="none">
          <doc xml:space="preserve">A #GstEvent to inspect.</doc>
          <type name="Gst.Event" c:type="GstEvent*"/>
        </parameter>
        <parameter name="x" transfer-ownership="none">
          <doc xml:space="preserve">Pointer to a gdouble to receive the x coordinate of the mouse movement.</doc>
          <type name="gdouble" c:type="gdouble*"/>
        </parameter>
        <parameter name="y" transfer-ownership="none">
          <doc xml:space="preserve">Pointer to a gdouble to receive the y coordinate of the mouse movement.</doc>
          <type name="gdouble" c:type="gdouble*"/>
        </parameter>
      </parameters>
    </function>
    <function name="navigation_message_get_type"
              c:identifier="gst_navigation_message_get_type"
              moved-to="Navigation.message_get_type">
      <doc xml:space="preserve">Check a bus message to see if it is a #GstNavigation event, and return
the #GstNavigationMessageType identifying the type of the message if so.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">The type of the #GstMessage, or #GST_NAVIGATION_MESSAGE_INVALID if the message is not a #GstNavigation notification.</doc>
        <type name="NavigationMessageType" c:type="GstNavigationMessageType"/>
      </return-value>
      <parameters>
        <parameter name="message" transfer-ownership="none">
          <doc xml:space="preserve">A #GstMessage to inspect.</doc>
          <type name="Gst.Message" c:type="GstMessage*"/>
        </parameter>
      </parameters>
    </function>
    <function name="navigation_message_new_angles_changed"
              c:identifier="gst_navigation_message_new_angles_changed"
              moved-to="Navigation.message_new_angles_changed">
      <doc xml:space="preserve">Creates a new #GstNavigation message with type
#GST_NAVIGATION_MESSAGE_ANGLES_CHANGED for notifying an application
that the current angle, or current number of angles available in a
multiangle video has changed.</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">The new #GstMessage.</doc>
        <type name="Gst.Message" c:type="GstMessage*"/>
      </return-value>
      <parameters>
        <parameter name="src" transfer-ownership="none">
          <doc xml:space="preserve">A #GstObject to set as source of the new message.</doc>
          <type name="Gst.Object" c:type="GstObject*"/>
        </parameter>
        <parameter name="cur_angle" transfer-ownership="none">
          <doc xml:space="preserve">The currently selected angle.</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="n_angles" transfer-ownership="none">
          <doc xml:space="preserve">The number of viewing angles now available.</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="navigation_message_new_commands_changed"
              c:identifier="gst_navigation_message_new_commands_changed"
              moved-to="Navigation.message_new_commands_changed">
      <doc xml:space="preserve">Creates a new #GstNavigation message with type
#GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">The new #GstMessage.</doc>
        <type name="Gst.Message" c:type="GstMessage*"/>
      </return-value>
      <parameters>
        <parameter name="src" transfer-ownership="none">
          <doc xml:space="preserve">A #GstObject to set as source of the new message.</doc>
          <type name="Gst.Object" c:type="GstObject*"/>
        </parameter>
      </parameters>
    </function>
    <function name="navigation_message_new_mouse_over"
              c:identifier="gst_navigation_message_new_mouse_over"
              moved-to="Navigation.message_new_mouse_over">
      <doc xml:space="preserve">Creates a new #GstNavigation message with type
#GST_NAVIGATION_MESSAGE_MOUSE_OVER.</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">The new #GstMessage.</doc>
        <type name="Gst.Message" c:type="GstMessage*"/>
      </return-value>
      <parameters>
        <parameter name="src" transfer-ownership="none">
          <doc xml:space="preserve">A #GstObject to set as source of the new message.</doc>
          <type name="Gst.Object" c:type="GstObject*"/>
        </parameter>
        <parameter name="active" transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the mouse has entered a clickable area of the display. %FALSE if it over a non-clickable area.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </parameter>
      </parameters>
    </function>
    <function name="navigation_message_parse_angles_changed"
              c:identifier="gst_navigation_message_parse_angles_changed"
              moved-to="Navigation.message_parse_angles_changed">
      <doc xml:space="preserve">Parse a #GstNavigation message of type GST_NAVIGATION_MESSAGE_ANGLES_CHANGED
and extract the @cur_angle and @n_angles parameters.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%TRUE if the message could be successfully parsed. %FALSE if not.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="message" transfer-ownership="none">
          <doc xml:space="preserve">A #GstMessage to inspect.</doc>
          <type name="Gst.Message" c:type="GstMessage*"/>
        </parameter>
        <parameter name="cur_angle" transfer-ownership="none">
          <doc xml:space="preserve">A pointer to a #guint to receive the new current angle number, or NULL</doc>
          <type name="guint" c:type="guint*"/>
        </parameter>
        <parameter name="n_angles" transfer-ownership="none">
          <doc xml:space="preserve">A pointer to a #guint to receive the new angle count, or NULL.</doc>
          <type name="guint" c:type="guint*"/>
        </parameter>
      </parameters>
    </function>
    <function name="navigation_message_parse_mouse_over"
              c:identifier="gst_navigation_message_parse_mouse_over"
              moved-to="Navigation.message_parse_mouse_over">
      <doc xml:space="preserve">Parse a #GstNavigation message of type #GST_NAVIGATION_MESSAGE_MOUSE_OVER
and extract the active/inactive flag. If the mouse over event is marked
active, it indicates that the mouse is over a clickable area.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%TRUE if the message could be successfully parsed. %FALSE if not.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="message" transfer-ownership="none">
          <doc xml:space="preserve">A #GstMessage to inspect.</doc>
          <type name="Gst.Message" c:type="GstMessage*"/>
        </parameter>
        <parameter name="active" transfer-ownership="none">
          <doc xml:space="preserve">A pointer to a gboolean to receive the active/inactive state, or NULL.</doc>
          <type name="gboolean" c:type="gboolean*"/>
        </parameter>
      </parameters>
    </function>
    <function name="navigation_query_get_type"
              c:identifier="gst_navigation_query_get_type"
              moved-to="Navigation.query_get_type">
      <doc xml:space="preserve">Inspect a #GstQuery and return the #GstNavigationQueryType associated with
it if it is a #GstNavigation query.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">The #GstNavigationQueryType of the query, or #GST_NAVIGATION_QUERY_INVALID</doc>
        <type name="NavigationQueryType" c:type="GstNavigationQueryType"/>
      </return-value>
      <parameters>
        <parameter name="query" transfer-ownership="none">
          <doc xml:space="preserve">The query to inspect</doc>
          <type name="Gst.Query" c:type="GstQuery*"/>
        </parameter>
      </parameters>
    </function>
    <function name="navigation_query_new_angles"
              c:identifier="gst_navigation_query_new_angles"
              moved-to="Navigation.query_new_angles">
      <doc xml:space="preserve">Create a new #GstNavigation angles query. When executed, it will
query the pipeline for the set of currently available angles, which may be
greater than one in a multiangle video.</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">The new query.</doc>
        <type name="Gst.Query" c:type="GstQuery*"/>
      </return-value>
    </function>
    <function name="navigation_query_new_commands"
              c:identifier="gst_navigation_query_new_commands"
              moved-to="Navigation.query_new_commands">
      <doc xml:space="preserve">Create a new #GstNavigation commands query. When executed, it will
query the pipeline for the set of currently available commands.</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">The new query.</doc>
        <type name="Gst.Query" c:type="GstQuery*"/>
      </return-value>
    </function>
    <function name="navigation_query_parse_angles"
              c:identifier="gst_navigation_query_parse_angles"
              moved-to="Navigation.query_parse_angles">
      <doc xml:space="preserve">Parse the current angle number in the #GstNavigation angles @query into the
#guint pointed to by the @cur_angle variable, and the number of available
angles into the #guint pointed to by the @n_angles variable.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%TRUE if the query could be successfully parsed. %FALSE if not.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="query" transfer-ownership="none">
          <doc xml:space="preserve">a #GstQuery</doc>
          <type name="Gst.Query" c:type="GstQuery*"/>
        </parameter>
        <parameter name="cur_angle" transfer-ownership="none">
          <doc xml:space="preserve">Pointer to a #guint into which to store the currently selected angle value from the query, or NULL</doc>
          <type name="guint" c:type="guint*"/>
        </parameter>
        <parameter name="n_angles" transfer-ownership="none">
          <doc xml:space="preserve">Pointer to a #guint into which to store the number of angles value from the query, or NULL</doc>
          <type name="guint" c:type="guint*"/>
        </parameter>
      </parameters>
    </function>
    <function name="navigation_query_parse_commands_length"
              c:identifier="gst_navigation_query_parse_commands_length"
              moved-to="Navigation.query_parse_commands_length">
      <doc xml:space="preserve">Parse the number of commands in the #GstNavigation commands @query.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%TRUE if the query could be successfully parsed. %FALSE if not.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="query" transfer-ownership="none">
          <doc xml:space="preserve">a #GstQuery</doc>
          <type name="Gst.Query" c:type="GstQuery*"/>
        </parameter>
        <parameter name="n_cmds" transfer-ownership="none">
          <doc xml:space="preserve">the number of commands in this query.</doc>
          <type name="guint" c:type="guint*"/>
        </parameter>
      </parameters>
    </function>
    <function name="navigation_query_parse_commands_nth"
              c:identifier="gst_navigation_query_parse_commands_nth"
              moved-to="Navigation.query_parse_commands_nth">
      <doc xml:space="preserve">Parse the #GstNavigation command query and retrieve the @nth command from
it into @cmd. If the list contains less elements than @nth, @cmd will be
set to #GST_NAVIGATION_COMMAND_INVALID.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%TRUE if the query could be successfully parsed. %FALSE if not.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="query" transfer-ownership="none">
          <doc xml:space="preserve">a #GstQuery</doc>
          <type name="Gst.Query" c:type="GstQuery*"/>
        </parameter>
        <parameter name="nth" transfer-ownership="none">
          <doc xml:space="preserve">the nth command to retrieve.</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="cmd" transfer-ownership="none">
          <doc xml:space="preserve">a pointer to store the nth command into.</doc>
          <type name="NavigationCommand" c:type="GstNavigationCommand*"/>
        </parameter>
      </parameters>
    </function>
    <function name="navigation_query_set_angles"
              c:identifier="gst_navigation_query_set_angles"
              moved-to="Navigation.query_set_angles">
      <doc xml:space="preserve">Set the #GstNavigation angles query result field in @query.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="query" transfer-ownership="none">
          <doc xml:space="preserve">a #GstQuery</doc>
          <type name="Gst.Query" c:type="GstQuery*"/>
        </parameter>
        <parameter name="cur_angle" transfer-ownership="none">
          <doc xml:space="preserve">the current viewing angle to set.</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="n_angles" transfer-ownership="none">
          <doc xml:space="preserve">the number of viewing angles to set.</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="navigation_query_set_commandsv"
              c:identifier="gst_navigation_query_set_commandsv"
              moved-to="Navigation.query_set_commandsv">
      <doc xml:space="preserve">Set the #GstNavigation command query result fields in @query. The number
of commands passed must be equal to @n_commands.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="query" transfer-ownership="none">
          <doc xml:space="preserve">a #GstQuery</doc>
          <type name="Gst.Query" c:type="GstQuery*"/>
        </parameter>
        <parameter name="n_cmds" transfer-ownership="none">
          <doc xml:space="preserve">the number of commands to set.</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="cmds" transfer-ownership="none">
          <doc xml:space="preserve">An array containing @n_cmds @GstNavigationCommand values.</doc>
          <type name="NavigationCommand" c:type="GstNavigationCommand*"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_blend" c:identifier="gst_video_blend">
      <return-value transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="dest" transfer-ownership="none">
          <type name="VideoFrame" c:type="GstVideoFrame*"/>
        </parameter>
        <parameter name="src" transfer-ownership="none">
          <type name="VideoFrame" c:type="GstVideoFrame*"/>
        </parameter>
        <parameter name="x" transfer-ownership="none">
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="y" transfer-ownership="none">
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="global_alpha" transfer-ownership="none">
          <type name="gfloat" c:type="gfloat"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_blend_scale_linear_RGBA"
              c:identifier="gst_video_blend_scale_linear_RGBA">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="src" transfer-ownership="none">
          <type name="VideoInfo" c:type="GstVideoInfo*"/>
        </parameter>
        <parameter name="src_buffer" transfer-ownership="none">
          <type name="Gst.Buffer" c:type="GstBuffer*"/>
        </parameter>
        <parameter name="dest_height" transfer-ownership="none">
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="dest_width" transfer-ownership="none">
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="dest" transfer-ownership="none">
          <type name="VideoInfo" c:type="GstVideoInfo*"/>
        </parameter>
        <parameter name="dest_buffer" transfer-ownership="none">
          <type name="Gst.Buffer" c:type="GstBuffer**"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_calculate_display_ratio"
              c:identifier="gst_video_calculate_display_ratio">
      <doc xml:space="preserve">Given the Pixel Aspect Ratio and size of an input video frame, and the
pixel aspect ratio of the intended display device, calculates the actual
display ratio the video will be rendered with.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">A boolean indicating success and a calculated Display Ratio in the dar_n and dar_d parameters. The return value is FALSE in the case of integer overflow or other error.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="dar_n" transfer-ownership="none">
          <doc xml:space="preserve">Numerator of the calculated display_ratio</doc>
          <type name="guint" c:type="guint*"/>
        </parameter>
        <parameter name="dar_d" transfer-ownership="none">
          <doc xml:space="preserve">Denominator of the calculated display_ratio</doc>
          <type name="guint" c:type="guint*"/>
        </parameter>
        <parameter name="video_width" transfer-ownership="none">
          <doc xml:space="preserve">Width of the video frame in pixels</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="video_height" transfer-ownership="none">
          <doc xml:space="preserve">Height of the video frame in pixels</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="video_par_n" transfer-ownership="none">
          <doc xml:space="preserve">Numerator of the pixel aspect ratio of the input video.</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="video_par_d" transfer-ownership="none">
          <doc xml:space="preserve">Denominator of the pixel aspect ratio of the input video.</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="display_par_n" transfer-ownership="none">
          <doc xml:space="preserve">Numerator of the pixel aspect ratio of the display device</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="display_par_d" transfer-ownership="none">
          <doc xml:space="preserve">Denominator of the pixel aspect ratio of the display device</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_chroma_from_string"
              c:identifier="gst_video_chroma_from_string">
      <doc xml:space="preserve">Convert @s to a #GstVideoChromaSite</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">a #GstVideoChromaSite or %GST_VIDEO_CHROMA_SITE_UNKNOWN when @s does not contain a valid chroma description.</doc>
        <type name="VideoChromaSite" c:type="GstVideoChromaSite"/>
      </return-value>
      <parameters>
        <parameter name="s" transfer-ownership="none">
          <doc xml:space="preserve">a chromasite string</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_chroma_to_string"
              c:identifier="gst_video_chroma_to_string">
      <doc xml:space="preserve">Converts @site to its string representation.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">a string describing @site.</doc>
        <type name="utf8" c:type="const gchar*"/>
      </return-value>
      <parameters>
        <parameter name="site" transfer-ownership="none">
          <doc xml:space="preserve">a #GstVideoChromaSite</doc>
          <type name="VideoChromaSite" c:type="GstVideoChromaSite"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_color_range_offsets"
              c:identifier="gst_video_color_range_offsets"
              moved-to="VideoColorRange.offsets">
      <doc xml:space="preserve">Compute the offset and scale values for each component of @info. For each
component, (c[i] - offset[i]) / scale[i] will scale the component c[i] to the
range [0.0 .. 1.0].

The reverse operation (c[i] * scale[i]) + offset[i] can be used to convert
the component values in range [0.0 .. 1.0] back to their representation in
@info and @range.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="range" transfer-ownership="none">
          <doc xml:space="preserve">a #GstVideoColorRange</doc>
          <type name="VideoColorRange" c:type="GstVideoColorRange"/>
        </parameter>
        <parameter name="info" transfer-ownership="none">
          <doc xml:space="preserve">a #GstVideoFormatInfo</doc>
          <type name="VideoFormatInfo" c:type="const GstVideoFormatInfo*"/>
        </parameter>
        <parameter name="offset" transfer-ownership="none">
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="scale"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">output scale</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_convert_sample"
              c:identifier="gst_video_convert_sample"
              throws="1">
      <doc xml:space="preserve">Converts a raw video buffer into the specified output caps.

The output caps can be any raw video formats or any image formats (jpeg, png, ...).

The width, height and pixel-aspect-ratio can also be specified in the output caps.</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">The converted #GstSample, or %NULL if an error happened (in which case @err will point to the #GError).</doc>
        <type name="Gst.Sample" c:type="GstSample*"/>
      </return-value>
      <parameters>
        <parameter name="sample" transfer-ownership="none">
          <doc xml:space="preserve">a #GstSample</doc>
          <type name="Gst.Sample" c:type="GstSample*"/>
        </parameter>
        <parameter name="to_caps" transfer-ownership="none">
          <doc xml:space="preserve">the #GstCaps to convert to</doc>
          <type name="Gst.Caps" c:type="const GstCaps*"/>
        </parameter>
        <parameter name="timeout" transfer-ownership="none">
          <doc xml:space="preserve">the maximum amount of time allowed for the processing.</doc>
          <type name="Gst.ClockTime" c:type="GstClockTime"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_convert_sample_async"
              c:identifier="gst_video_convert_sample_async">
      <doc xml:space="preserve">Converts a raw video buffer into the specified output caps.

The output caps can be any raw video formats or any image formats (jpeg, png, ...).

The width, height and pixel-aspect-ratio can also be specified in the output caps.

@callback will be called after conversion, when an error occured or if conversion didn't
finish after @timeout. @callback will always be called from the thread default
%GMainContext, see g_main_context_get_thread_default(). If GLib before 2.22 is used,
this will always be the global default main context.

@destroy_notify will be called after the callback was called and @user_data is not needed
anymore.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="sample" transfer-ownership="none">
          <doc xml:space="preserve">a #GstSample</doc>
          <type name="Gst.Sample" c:type="GstSample*"/>
        </parameter>
        <parameter name="to_caps" transfer-ownership="none">
          <doc xml:space="preserve">the #GstCaps to convert to</doc>
          <type name="Gst.Caps" c:type="const GstCaps*"/>
        </parameter>
        <parameter name="timeout" transfer-ownership="none">
          <doc xml:space="preserve">the maximum amount of time allowed for the processing.</doc>
          <type name="Gst.ClockTime" c:type="GstClockTime"/>
        </parameter>
        <parameter name="callback"
                   transfer-ownership="none"
                   scope="notified"
                   closure="4"
                   destroy="5">
          <doc xml:space="preserve">%GstVideoConvertSampleCallback that will be called after conversion.</doc>
          <type name="VideoConvertSampleCallback"
                c:type="GstVideoConvertSampleCallback"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <doc xml:space="preserve">extra data that will be passed to the @callback</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="destroy_notify"
                   transfer-ownership="none"
                   scope="async">
          <doc xml:space="preserve">%GDestroyNotify to be called after @user_data is not needed anymore</doc>
          <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_crop_meta_api_get_type"
              c:identifier="gst_video_crop_meta_api_get_type">
      <return-value transfer-ownership="none">
        <type name="GType" c:type="GType"/>
      </return-value>
    </function>
    <function name="video_crop_meta_get_info"
              c:identifier="gst_video_crop_meta_get_info"
              moved-to="VideoCropMeta.get_info">
      <return-value transfer-ownership="none">
        <type name="Gst.MetaInfo" c:type="const GstMetaInfo*"/>
      </return-value>
    </function>
    <function name="video_event_is_force_key_unit"
              c:identifier="gst_video_event_is_force_key_unit">
      <doc xml:space="preserve">Checks if an event is a force key unit event. Returns true for both upstream
and downstream force key unit events.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%TRUE if the event is a valid force key unit event</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="event" transfer-ownership="none">
          <doc xml:space="preserve">A #GstEvent to check</doc>
          <type name="Gst.Event" c:type="GstEvent*"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_event_new_downstream_force_key_unit"
              c:identifier="gst_video_event_new_downstream_force_key_unit">
      <doc xml:space="preserve">Creates a new downstream force key unit event. A downstream force key unit
event can be sent down the pipeline to request downstream elements to produce
a key unit. A downstream force key unit event must also be sent when handling
an upstream force key unit event to notify downstream that the latter has been
handled.

To parse an event created by gst_video_event_new_downstream_force_key_unit() use
gst_video_event_parse_downstream_force_key_unit().</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">The new GstEvent</doc>
        <type name="Gst.Event" c:type="GstEvent*"/>
      </return-value>
      <parameters>
        <parameter name="timestamp" transfer-ownership="none">
          <doc xml:space="preserve">the timestamp of the buffer that starts a new key unit</doc>
          <type name="Gst.ClockTime" c:type="GstClockTime"/>
        </parameter>
        <parameter name="stream_time" transfer-ownership="none">
          <doc xml:space="preserve">the stream_time of the buffer that starts a new key unit</doc>
          <type name="Gst.ClockTime" c:type="GstClockTime"/>
        </parameter>
        <parameter name="running_time" transfer-ownership="none">
          <doc xml:space="preserve">the running_time of the buffer that starts a new key unit</doc>
          <type name="Gst.ClockTime" c:type="GstClockTime"/>
        </parameter>
        <parameter name="all_headers" transfer-ownership="none">
          <doc xml:space="preserve">%TRUE to produce headers when starting a new key unit</doc>
          <type name="gboolean" c:type="gboolean"/>
        </parameter>
        <parameter name="count" transfer-ownership="none">
          <doc xml:space="preserve">integer that can be used to number key units</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_event_new_still_frame"
              c:identifier="gst_video_event_new_still_frame">
      <doc xml:space="preserve">Creates a new Still Frame event. If @in_still is %TRUE, then the event
represents the start of a still frame sequence. If it is %FALSE, then
the event ends a still frame sequence.

To parse an event created by gst_video_event_new_still_frame() use
gst_video_event_parse_still_frame().</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">The new GstEvent</doc>
        <type name="Gst.Event" c:type="GstEvent*"/>
      </return-value>
      <parameters>
        <parameter name="in_still" transfer-ownership="none">
          <doc xml:space="preserve">boolean value for the still-frame state of the event.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_event_new_upstream_force_key_unit"
              c:identifier="gst_video_event_new_upstream_force_key_unit">
      <doc xml:space="preserve">Creates a new upstream force key unit event. An upstream force key unit event
can be sent to request upstream elements to produce a key unit. 

@running_time can be set to request a new key unit at a specific
running_time. If set to GST_CLOCK_TIME_NONE, upstream elements will produce a
new key unit as soon as possible.

To parse an event created by gst_video_event_new_downstream_force_key_unit() use
gst_video_event_parse_downstream_force_key_unit().</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">The new GstEvent</doc>
        <type name="Gst.Event" c:type="GstEvent*"/>
      </return-value>
      <parameters>
        <parameter name="running_time" transfer-ownership="none">
          <doc xml:space="preserve">the running_time at which a new key unit should be produced</doc>
          <type name="Gst.ClockTime" c:type="GstClockTime"/>
        </parameter>
        <parameter name="all_headers" transfer-ownership="none">
          <doc xml:space="preserve">%TRUE to produce headers when starting a new key unit</doc>
          <type name="gboolean" c:type="gboolean"/>
        </parameter>
        <parameter name="count" transfer-ownership="none">
          <doc xml:space="preserve">integer that can be used to number key units</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_event_parse_downstream_force_key_unit"
              c:identifier="gst_video_event_parse_downstream_force_key_unit">
      <doc xml:space="preserve">Get timestamp, stream-time, running-time, all-headers and count in the force
key unit event. See gst_video_event_new_downstream_force_key_unit() for a
full description of the downstream force key unit event.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%TRUE if the event is a valid downstream force key unit event.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="event" transfer-ownership="none">
          <doc xml:space="preserve">A #GstEvent to parse</doc>
          <type name="Gst.Event" c:type="GstEvent*"/>
        </parameter>
        <parameter name="timestamp"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">A pointer to the timestamp in the event</doc>
          <type name="Gst.ClockTime" c:type="GstClockTime*"/>
        </parameter>
        <parameter name="stream_time"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">A pointer to the stream-time in the event</doc>
          <type name="Gst.ClockTime" c:type="GstClockTime*"/>
        </parameter>
        <parameter name="running_time"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">A pointer to the running-time in the event</doc>
          <type name="Gst.ClockTime" c:type="GstClockTime*"/>
        </parameter>
        <parameter name="all_headers"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">A pointer to the all_headers flag in the event</doc>
          <type name="gboolean" c:type="gboolean*"/>
        </parameter>
        <parameter name="count"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">A pointer to the count field of the event</doc>
          <type name="guint" c:type="guint*"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_event_parse_still_frame"
              c:identifier="gst_video_event_parse_still_frame">
      <doc xml:space="preserve">Parse a #GstEvent, identify if it is a Still Frame event, and
return the still-frame state from the event if it is.
If the event represents the start of a still frame, the in_still
variable will be set to TRUE, otherwise FALSE. It is OK to pass NULL for the
in_still variable order to just check whether the event is a valid still-frame
event.

Create a still frame event using gst_video_event_new_still_frame()</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%TRUE if the event is a valid still-frame event. %FALSE if not</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="event" transfer-ownership="none">
          <doc xml:space="preserve">A #GstEvent to parse</doc>
          <type name="Gst.Event" c:type="GstEvent*"/>
        </parameter>
        <parameter name="in_still" transfer-ownership="none">
          <doc xml:space="preserve">A boolean to receive the still-frame status from the event, or NULL</doc>
          <type name="gboolean" c:type="gboolean*"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_event_parse_upstream_force_key_unit"
              c:identifier="gst_video_event_parse_upstream_force_key_unit">
      <doc xml:space="preserve">Get running-time, all-headers and count in the force key unit event. See
gst_video_event_new_upstream_force_key_unit() for a full description of the
upstream force key unit event.

Create an upstream force key unit event using  gst_video_event_new_upstream_force_key_unit()</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%TRUE if the event is a valid upstream force-key-unit event. %FALSE if not</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="event" transfer-ownership="none">
          <doc xml:space="preserve">A #GstEvent to parse</doc>
          <type name="Gst.Event" c:type="GstEvent*"/>
        </parameter>
        <parameter name="running_time"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">A pointer to the running_time in the event</doc>
          <type name="Gst.ClockTime" c:type="GstClockTime*"/>
        </parameter>
        <parameter name="all_headers"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">A pointer to the all_headers flag in the event</doc>
          <type name="gboolean" c:type="gboolean*"/>
        </parameter>
        <parameter name="count"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">A pointer to the count field in the event</doc>
          <type name="guint" c:type="guint*"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_format_from_fourcc"
              c:identifier="gst_video_format_from_fourcc"
              moved-to="VideoFormat.from_fourcc">
      <doc xml:space="preserve">Converts a FOURCC value into the corresponding #GstVideoFormat.
If the FOURCC cannot be represented by #GstVideoFormat,
#GST_VIDEO_FORMAT_UNKNOWN is returned.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">the #GstVideoFormat describing the FOURCC value</doc>
        <type name="VideoFormat" c:type="GstVideoFormat"/>
      </return-value>
      <parameters>
        <parameter name="fourcc" transfer-ownership="none">
          <doc xml:space="preserve">a FOURCC value representing raw YUV video</doc>
          <type name="guint32" c:type="guint32"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_format_from_masks"
              c:identifier="gst_video_format_from_masks"
              moved-to="VideoFormat.from_masks">
      <doc xml:space="preserve">Find the #GstVideoFormat for the given parameters.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">a #GstVideoFormat or GST_VIDEO_FORMAT_UNKNOWN when the parameters to not specify a known format.</doc>
        <type name="VideoFormat" c:type="GstVideoFormat"/>
      </return-value>
      <parameters>
        <parameter name="depth" transfer-ownership="none">
          <doc xml:space="preserve">the amount of bits used for a pixel</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="bpp" transfer-ownership="none">
          <doc xml:space="preserve">the amount of bits used to store a pixel. This value is bigger than @depth</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="endianness" transfer-ownership="none">
          <doc xml:space="preserve">the endianness of the masks</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="red_mask" transfer-ownership="none">
          <doc xml:space="preserve">the red mask</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="green_mask" transfer-ownership="none">
          <doc xml:space="preserve">the green mask</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="blue_mask" transfer-ownership="none">
          <doc xml:space="preserve">the blue mask</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="alpha_mask" transfer-ownership="none">
          <doc xml:space="preserve">the optional alpha mask</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_format_from_string"
              c:identifier="gst_video_format_from_string"
              moved-to="VideoFormat.from_string">
      <doc xml:space="preserve">Convert the @format string to its #GstVideoFormat.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">the #GstVideoFormat for @format or GST_VIDEO_FORMAT_UNKNOWN when the string is not a known format.</doc>
        <type name="VideoFormat" c:type="GstVideoFormat"/>
      </return-value>
      <parameters>
        <parameter name="format" transfer-ownership="none">
          <doc xml:space="preserve">a format string</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_format_get_info"
              c:identifier="gst_video_format_get_info"
              moved-to="VideoFormat.get_info">
      <doc xml:space="preserve">Get the #GstVideoFormatInfo for @format</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">The #GstVideoFormatInfo for @format.</doc>
        <type name="VideoFormatInfo" c:type="const GstVideoFormatInfo*"/>
      </return-value>
      <parameters>
        <parameter name="format" transfer-ownership="none">
          <doc xml:space="preserve">a #GstVideoFormat</doc>
          <type name="VideoFormat" c:type="GstVideoFormat"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_format_to_fourcc"
              c:identifier="gst_video_format_to_fourcc"
              moved-to="VideoFormat.to_fourcc">
      <doc xml:space="preserve">Converts a #GstVideoFormat value into the corresponding FOURCC.  Only
a few YUV formats have corresponding FOURCC values.  If @format has
no corresponding FOURCC value, 0 is returned.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">the FOURCC corresponding to @format</doc>
        <type name="guint32" c:type="guint32"/>
      </return-value>
      <parameters>
        <parameter name="format" transfer-ownership="none">
          <doc xml:space="preserve">a #GstVideoFormat video format</doc>
          <type name="VideoFormat" c:type="GstVideoFormat"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_format_to_string"
              c:identifier="gst_video_format_to_string"
              moved-to="VideoFormat.to_string">
      <return-value transfer-ownership="none">
        <type name="utf8" c:type="const gchar*"/>
      </return-value>
      <parameters>
        <parameter name="format" transfer-ownership="none">
          <type name="VideoFormat" c:type="GstVideoFormat"/>
        </parameter>
      </parameters>
    </function>
    <function name="video_meta_api_get_type"
              c:identifier="gst_video_meta_api_get_type">
      <return-value transfer-ownership="none">
        <type name="GType" c:type="GType"/>
      </return-value>
    </function>
    <function name="video_meta_get_info"
              c:identifier="gst_video_meta_get_info"
              moved-to="VideoMeta.get_info">
      <return-value transfer-ownership="none">
        <type name="Gst.MetaInfo" c:type="const GstMetaInfo*"/>
      </return-value>
    </function>
    <function name="video_meta_transform_scale_get_quark"
              c:identifier="gst_video_meta_transform_scale_get_quark"
              moved-to="VideoMetaTransform.scale_get_quark">
      <doc xml:space="preserve">Get the #GQuark for the "gst-video-scale" metadata transform operation.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">a #GQuark</doc>
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
    </function>
    <function name="video_overlay_composition_meta_api_get_type"
              c:identifier="gst_video_overlay_composition_meta_api_get_type">
      <return-value transfer-ownership="none">
        <type name="GType" c:type="GType"/>
      </return-value>
    </function>
    <function name="video_overlay_composition_meta_get_info"
              c:identifier="gst_video_overlay_composition_meta_get_info"
              moved-to="VideoOverlayCompositionMeta.get_info">
      <return-value transfer-ownership="none">
        <type name="Gst.MetaInfo" c:type="const GstMetaInfo*"/>
      </return-value>
    </function>
  </namespace>
</repository>
