<chapter id="chapter-programs">
  <title>Programs</title>
  <para> 
  </para>

  <sect1 id="section-programs-gst-launch">
    <title><command>gst-launch</command></title>
    <para> 
      This is a tool that will construct pipelines based on a command-line
      syntax.
    </para> 
    <para> 
      A simple commandline looks like:

    <screen>
gst-launch filesrc location=hello.mp3 ! mad ! audioresample ! osssink
    </screen>

      A more complex pipeline looks like:

    <screen>
gst-launch filesrc location=redpill.vob ! dvddemux name=demux \
 demux.audio_00 ! queue ! a52dec ! audioconvert ! audioresample ! osssink \
 demux.video_00 ! queue ! mpeg2dec ! videoconvert ! xvimagesink
    </screen>

    </para>
    <para>
      You can also use the parser in you own
      code. <application>GStreamer</application> provides a function
      gst_parse_launch () that you can use to construct a pipeline.
      The following program lets you create an MP3 pipeline using the
      gst_parse_launch () function:
    </para>
    <programlisting>
#include &lt;gst/gst.h&gt;

int
main (int argc, char *argv[])
{
  GstElement *pipeline;
  GstElement *filesrc;
  GstMessage *msg;
  GstBus *bus;
  GError *error = NULL;

  gst_init (&amp;argc, &amp;argv);

  if (argc != 2) {
    g_print ("usage: %s &lt;filename&gt;\n", argv[0]);
    return -1;
  }

  pipeline = gst_parse_launch ("filesrc name=my_filesrc ! mad ! osssink", &amp;error);
  if (!pipeline) {
    g_print ("Parse error: %s\n", error->message);
    exit (1);
  }
  
  filesrc = gst_bin_get_by_name (GST_BIN (pipeline), "my_filesrc");
  g_object_set (filesrc, "location", argv[1], NULL);

  gst_element_set_state (pipeline, GST_STATE_PLAYING);

  bus = gst_element_get_bus (pipeline);

  /* wait until we either get an EOS or an ERROR message. Note that in a real
   * program you would probably not use gst_bus_poll(), but rather set up an
   * async signal watch on the bus and run a main loop and connect to the
   * bus's signals to catch certain messages or all messages */
  msg = gst_bus_poll (bus, GST_MESSAGE_EOS | GST_MESSAGE_ERROR, -1);

  switch (GST_MESSAGE_TYPE (msg)) {
    case GST_MESSAGE_EOS: {
      g_print ("EOS\n");
      break;
    }
    case GST_MESSAGE_ERROR: {
      GError *err = NULL; /* error to show to users                 */
      gchar *dbg = NULL;  /* additional debug string for developers */

      gst_message_parse_error (msg, &amp;err, &amp;dbg);
      if (err) {
        g_printerr ("ERROR: %s\n", err-&gt;message);
        g_error_free (err);
      }
      if (dbg) {
        g_printerr ("[Debug details: %s]\n", dbg);
        g_free (dbg);
      }
    }
    default:
      g_printerr ("Unexpected message of type %d", GST_MESSAGE_TYPE (msg));
      break;
  }
  gst_message_unref (msg);

  gst_element_set_state (pipeline, GST_STATE_NULL);
  gst_object_unref (pipeline);
  gst_object_unref (bus);

  return 0;
}
    </programlisting>
    <para>
      Note how we can retrieve the filesrc element from the constructed bin using the
      element name.
    </para>
    <sect2>
      <title>Grammar Reference</title>
      <para>
        The <command>gst-launch</command> syntax is processed by a flex/bison parser. This section
        is intended to provide a full specification of the grammar; any deviations from this
        specification is considered a bug.
      </para>
      <sect3>
        <title>Elements</title>
        <screen>
          ... mad ...
        </screen>
        <para>
          A bare identifier (a string beginning with a letter and containing
          only letters, numbers, dashes, underscores, percent signs, or colons)
          will create an element from a given element factory. In this example,
          an instance of the "mad" MP3 decoding plugin will be created.
        </para>
      </sect3>          
      <sect3>
        <title>Links</title>
        <screen>
          ... !sink ...
        </screen>
        <para>
          An exclamation point, optionally having a qualified pad name (an the name of the pad,
          optionally preceded by the name of the element) on both sides, will link two pads. If
          the source pad is not specified, a source pad from the immediately preceding element
          will be automatically chosen. If the sink pad is not specified, a sink pad from the next
          element to be constructed will be chosen. An attempt will be made to find compatible
          pads. Pad names may be preceded by an element name, as in
          <computeroutput>my_element_name.sink_pad</computeroutput>.
        </para>
      </sect3>          
      <sect3>
        <title>Properties</title>
        <screen>
          ... location="http://gstreamer.net" ...
        </screen>
        <para>
          The name of a property, optionally qualified with an element name, and a value,
          separated by an equals sign, will set a property on an element. If the element is not
          specified, the previous element is assumed. Strings can optionally be enclosed in
          quotation marks. Characters in strings may be escaped with the backtick
          (<literal>\</literal>). If the right-hand side is all digits, it is considered to be an
          integer. If it is all digits and a decimal point, it is a double. If it is "true",
          "false", "TRUE", or "FALSE" it is considered to be boolean. Otherwise, it is parsed as a
          string. The type of the property is determined later on in the parsing, and the value is
          converted to the target type. This conversion is not guaranteed to work, it relies on
          the g_value_convert routines. No error message will be displayed on an invalid
          conversion, due to limitations in the value convert API.
        </para>
      </sect3>          
      <sect3>
        <title>Bins, Threads, and Pipelines</title>
        <screen>
          ( ... )
        </screen>
        <para>
          A pipeline description between parentheses is placed into a bin. The open paren may be
          preceded by a type name, as in <computeroutput>jackbin.( ... )</computeroutput> to make
          a bin of a specified type. Square brackets make pipelines, and curly braces make
          threads. The default toplevel bin type is a pipeline, although putting the whole
          description within parentheses or braces can override this default.
        </para>
      </sect3>          
    </sect2>
  </sect1>

  <sect1 id="section-programs-gst-inspect">
    <title><command>gst-inspect</command></title>
    <para> 
      This is a tool to query a plugin or an element about its properties.
    </para> 
    <para> 
      To query the information about the element mad, you would specify:
    </para> 

    <screen>
gst-inspect mad
    </screen>

    <para> 
      Below is the output of a query for the osssink element:
    </para> 

    <screen>
<![CDATA[
Factory Details:
  Rank:         secondary (128)
  Long-name:            Audio Sink (OSS)
  Klass:                Sink/Audio
  Description:          Output to a sound card via OSS
  Author:               Erik Walthinsen <omega@cse.ogi.edu>, Wim Taymans <wim.taymans@chello.be>

Plugin Details:
  Name:                 ossaudio
  Description:          OSS (Open Sound System) support for GStreamer
  Filename:             /home/wim/gst/head/gst-plugins-good/sys/oss/.libs/libgstossaudio.so
  Version:              1.0.0.1
  License:              LGPL
  Source module:        gst-plugins-good
  Source release date:  2012-09-25 12:52 (UTC)
  Binary package:       GStreamer Good Plug-ins git
  Origin URL:           Unknown package origin

GObject
 +----GInitiallyUnowned
       +----GstObject
             +----GstElement
                   +----GstBaseSink
                         +----GstAudioBaseSink
                               +----GstAudioSink
                                     +----GstOssSink

Pad Templates:
  SINK template: 'sink'
    Availability: Always
    Capabilities:
      audio/x-raw
                 format: { S16LE, U16LE, S8, U8 }
                 layout: interleaved
                   rate: [ 1, 2147483647 ]
               channels: 1
      audio/x-raw
                 format: { S16LE, U16LE, S8, U8 }
                 layout: interleaved
                   rate: [ 1, 2147483647 ]
               channels: 2
           channel-mask: 0x0000000000000003


Element Flags:
  no flags set

Element Implementation:
  Has change_state() function: gst_audio_base_sink_change_state

Clocking Interaction:
  element is supposed to provide a clock but returned NULL

Element has no indexing capabilities.
Element has no URI handling capabilities.

Pads:
  SINK: 'sink'
    Implementation:
      Has chainfunc(): gst_base_sink_chain
      Has custom eventfunc(): gst_base_sink_event
      Has custom queryfunc(): gst_base_sink_sink_query
      Has custom iterintlinkfunc(): gst_pad_iterate_internal_links_default
    Pad Template: 'sink'

Element Properties:
  name                : The name of the object
                        flags: readable, writable
                        String. Default: "osssink0"
  parent              : The parent of the object
                        flags: readable, writable
                        Object of type "GstObject"
  sync                : Sync on the clock
                        flags: readable, writable
                        Boolean. Default: true
  max-lateness        : Maximum number of nanoseconds that a buffer can be late before it is dropped (-1 unlimited)
                        flags: readable, writable
                        Integer64. Range: -1 - 9223372036854775807 Default: -1 
  qos                 : Generate Quality-of-Service events upstream
                        flags: readable, writable
                        Boolean. Default: false
  async               : Go asynchronously to PAUSED
                        flags: readable, writable
                        Boolean. Default: true
  ts-offset           : Timestamp offset in nanoseconds
                        flags: readable, writable
                        Integer64. Range: -9223372036854775808 - 9223372036854775807 Default: 0 
  enable-last-sample  : Enable the last-sample property
                        flags: readable, writable
                        Boolean. Default: false
  last-sample         : The last sample received in the sink
                        flags: readable
                        Boxed pointer of type "GstSample"
  blocksize           : Size in bytes to pull per buffer (0 = default)
                        flags: readable, writable
                        Unsigned Integer. Range: 0 - 4294967295 Default: 4096 
  render-delay        : Additional render delay of the sink in nanoseconds
                        flags: readable, writable
                        Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0 
  throttle-time       : The time to keep between rendered buffers
                        flags: readable, writable
                        Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0 
  buffer-time         : Size of audio buffer in microseconds, this is the minimum latency that the sink reports
                        flags: readable, writable
                        Integer64. Range: 1 - 9223372036854775807 Default: 200000 
  latency-time        : The minimum amount of data to write in each iteration in microseconds
                        flags: readable, writable
                        Integer64. Range: 1 - 9223372036854775807 Default: 10000 
  provide-clock       : Provide a clock to be used as the global pipeline clock
                        flags: readable, writable
                        Boolean. Default: true
  slave-method        : Algorithm to use to match the rate of the masterclock
                        flags: readable, writable
                        Enum "GstAudioBaseSinkSlaveMethod" Default: 1, "skew"
                           (0): resample         - GST_AUDIO_BASE_SINK_SLAVE_RESAMPLE
                           (1): skew             - GST_AUDIO_BASE_SINK_SLAVE_SKEW
                           (2): none             - GST_AUDIO_BASE_SINK_SLAVE_NONE
  can-activate-pull   : Allow pull-based scheduling
                        flags: readable, writable
                        Boolean. Default: false
  alignment-threshold : Timestamp alignment threshold in nanoseconds
                        flags: readable, writable
                        Unsigned Integer64. Range: 1 - 18446744073709551614 Default: 40000000 
  drift-tolerance     : Tolerance for clock drift in microseconds
                        flags: readable, writable
                        Integer64. Range: 1 - 9223372036854775807 Default: 40000 
  discont-wait        : Window of time in nanoseconds to wait before creating a discontinuity
                        flags: readable, writable
                        Unsigned Integer64. Range: 0 - 18446744073709551614 Default: 1000000000 
  device              : OSS device (usually /dev/dspN)
                        flags: readable, writable
                        String. Default: "/dev/dsp"
]]>
    </screen>

    <para> 
      To query the information about a plugin, you would do:
    </para> 

    <screen>
gst-inspect gstelements
    </screen>
  </sect1>

</chapter>
