# Programs

## `gstreamer-config`

`gstreamer-config` is a script to get information about the installed version of GStreamer. This program "knows" what compiler switches are needed to compile programs that use GStreamer.

`gstreamer-config` accepts the following options:

- `--version` Print the currently installed version of GStreamer on the standard output.

- `--libs` Print the linker flags that are necessary to link a GStreamer program.

- `--cflags` Print the compiler flags that are necessary to compile a GStreamer program.

- `--prefix=PREFIX` If specified, use PREFIX instead of the installation prefix that GStreamer was built with when computing the output for the `--cflags` and `--libs` options. This option is also used for the exec prefix if `--exec-prefix` was not specified. This option must be specified before any `--libs` or `--cflags` options.

- `--exec-prefix=PREFIX` If specified, use PREFIX instead of the installation exec prefix that GStreamer was built with when computing the output for the `--cflags` and `--libs` options. This option must be specified before any `--libs` or `--cflags` options.

A simple `Makefile` will contain something like:

    CC = gcc

    helloworld2: helloworld2.c
       $(CC) -Wall `gstreamer-config --cflags --libs` helloworld2.c -o helloworld2

    clean:
       rm -f *.o helloworld2

## `gstreamer-register`

`gstreamer-register` is used to rebuild the database of plugins. It is used after a new plugin has been added to the system. The plugin database can be found in `/etc/gstreamer/reg.xml`.

## `gstreamer-launch`

This is a tool that will construct pipelines based on a command-line syntax.

A simple commandline looks like:

    gstreamer-launch filesrc location=hello.mp3 ! mp3parse ! mpg123 ! audiosink

A more complex pipeline looks like:

    gstreamer-launch filesrc redpill.vob audio_00! (ac3parse ! ac3dec ! audiosink) \
    video_00! (mpeg2dec ! videosink)

Note that the parser isn't capable of more complex pipelines yet, including the VOB player above. The minor tweaks will be made post 0.2.1.

You can also use the the parser in you own code. GStreamer provides a function gst_parse_launch () that you can use to construt a pipeline. The following programs lets you create an mp3 pipeline using the gst_parse_launch () function:

    #include <gst/gst.h>

    int
    main (int argc, char *argv[])
    {
      GstElement *pipeline;
      GstElement *filesrc;

      gst_init (&argc, &argv);

      if (argc != 2) {
        g_print ("usage: %s <filename>\n", argv[0]);
        return -1;
      }
      pipeline = gst_pipeline_new ("my_pipeline");

      gst_parse_launch ("filesrc[my_filesrc] ! mp3parse ! mpg123 ! osssink", GST_BIN (pipeline));

      filesrc = gst_bin_get_by_name (GST_BIN (pipeline), "my_filesrc");
      g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL);

      gst_element_set_state (pipeline, GST_STATE_PLAYING);

      while (gst_bin_iterate (GST_BIN (pipeline)));

      gst_element_set_state (pipeline, GST_STATE_NULL);

      return 0;
    }

Note how we can retrieve the filesrc element from the constructed bin using the element name.

## `gstreamer-inspect`

This is a tool to query a plugin or an element about its properties.

To query the information about the element mpg123, you would specify:

    gstreamer-inspect mpg123

Below is the output of a query for the audiosink element:

    Factory Details:
      Long name:	Audio Sink (OSS)
      Class:	Sink/Audio
      Description:	Output to a sound card via OSS
      Version:	0.1.0
      Author(s):	Erik Walthinsen <omega@cse.ogi.edu>
      Copyright:	(C) 1999

    Pad Templates:
      SINK template: 'sink'
        Exists: Always
        Capabilities:
          'audiosink_sink':
            MIME type: 'audio/raw':
            format: Integer: 16
            depth: List:
              Integer: 8
              Integer: 16
            rate: Integer range: 8000 - 48000
            channels: Integer range: 1 - 2

    Element Flags:
      GST_ELEMENT_THREADSUGGESTED
      no flags set

    Element Implementation:
      No loopfunc(), must be chain-based or not configured yet
      Has change_state() function

    Pads:
      SINK: 'sink'
        Implementation:
          Has chainfunc(): 0x4001cde8
          Has default eosfunc() gst_pad_eos_func()
        Pad Template: 'sink'
        Capabilities:
          'audiosink_sink':
            MIME type: 'audio/raw':
            format: Integer: 16
            depth: List:
              Integer: 8
              Integer: 16
            rate: Integer range: 8000 - 48000
            channels: Integer range: 1 - 2

    Element Arguments:
      GstAudioSink::mute: Boolean
      GstAudioSink::format: Enum (default 16)
        (8): 	8 Bits
        (16): 	16 Bits
      GstAudioSink::channels: Enum (default 2)
        (1): 	Mono
        (2): 	Stereo
      GstAudioSink::frequency: Integer

To query the information about a plugin, you would do:

    gstreamer-inspect gstelements

## `gstmediaplay`

A sample media player.