<chapter id="chapter-intgration">
  <title>Integration</title>
  <para>
    &GStreamer; tries to integrate closely with operating systems (such
    as Linux and UNIX-like operating systems, OS X or Windows) and desktop
    environments (such as GNOME or KDE). In this chapter, we'll mention
    some specific techniques to integrate your application with your
    operating system or desktop environment of choice.
  </para>
 
<!-- ####################################################################### -->
<!-- ####################################################################### -->
<!-- ####################################################################### -->

  <sect1 id="section-integration-nix">
    <title>Linux and UNIX-like operating systems</title>
    <para>
      &GStreamer; provides a basic set of elements that are useful when
      integrating with Linux or a UNIX-like operating system.
    </para>
    <itemizedlist>
      <listitem>
        <para>
          For audio input and output, &GStreamer; provides input and
          output elements for several audio subsystems. Amongst others,
          &GStreamer; includes elements for ALSA (alsasrc,
          alsasink), OSS (osssrc, osssink) Pulesaudio (pulsesrc, pulsesink)
          and Sun audio (sunaudiosrc, sunaudiomixer, sunaudiosink).
        </para>
      </listitem>
      <listitem>
        <para>
          For video input, &GStreamer; contains source elements for
          Video4linux2 (v4l2src, v4l2element, v4l2sink).
        </para>
      </listitem>
      <listitem>
        <para>
          For video output, &GStreamer; provides elements for output
          to X-windows (ximagesink), Xv-windows (xvimagesink; for
          hardware-accelerated video), direct-framebuffer (dfbimagesink)
          and openGL image contexts (glsink).
        </para>
      </listitem>
    </itemizedlist>
  </sect1>

<!-- ####################################################################### -->
<!-- ####################################################################### -->
<!-- ####################################################################### -->

  <sect1 id="section-integration-gnome">
    <title>GNOME desktop</title>
    <para>
      &GStreamer; has been the media backend of the <ulink type="http"
      url="http://www.gnome.org/">GNOME</ulink> desktop since GNOME-2.2
      onwards. Nowadays, a whole bunch of GNOME applications make use of
      &GStreamer; for media-processing, including (but not limited to)
      <ulink type="http" url="http://www.rhythmbox.org/">Rhythmbox</ulink>,
      <ulink type="http" url="https://wiki.gnome.org/Apps/Videos">Videos</ulink>
      and <ulink type="http"
      url="https://wiki.gnome.org/Apps/SoundJuicer">Sound
      Juicer</ulink>.
    </para>
    <para>
      Most of these GNOME applications make use of some specific techniques
      to integrate as closely as possible with the GNOME desktop:
    </para>
    <itemizedlist>
      <listitem>
        <para>
          GNOME applications usually call <function>gtk_init ()</function>
          to parse command-line options and initialize GTK. &GStreamer;
          applications would normally call <function>gst_init ()</function>
          to do the same for GStreamer.
          This would mean that only one of the two can parse command-line
          options. To work around this issue, &GStreamer; can provide a
          GLib <classname>GOptionGroup</classname> which can be passed to
          <function>gnome_program_init ()</function>. The following
          example requires GTK 2.6 or newer (previous GTK versions
          do not support command line parsing via GOption yet)
        </para>
        <programlisting><!-- example-begin gnome.c a -->
#include &lt;gtk/gtk.h&gt;
#include &lt;gst/gst.h&gt;

static gchar **cmd_filenames = NULL;

static GOptionEntries cmd_options[] = {
  /* here you can add command line options for your application. Check
   * the GOption section in the GLib API reference for a more elaborate
   * example of how to add your own command line options here */

  /* at the end we have a special option that collects all remaining 
   * command line arguments (like filenames) for us. If you don&apos;t
   * need this, you can safely remove it */
  { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &amp;cmd_filenames,
    "Special option that collects any remaining arguments for us" },

  /* mark the end of the options array with a NULL option */
  { NULL, }
};

/* this should usually be defined in your config.h */
#define VERSION "0.0.1"

gint
main (gint argc, gchar **argv)
{
  GOptionContext *context;
  GOptionGroup *gstreamer_group, *gtk_group;
  GError *err = NULL;

  context = g_option_context_new ("gtk-demo-app");

  /* get command line options from GStreamer and add them to the group */
  gstreamer_group = gst_init_get_option_group ();
  g_option_context_add_group (context, gstreamer_group);
  gtk_group = gtk_get_option_group (TRUE);
  g_option_context_add_group (context, gtk_group);

  /* add our own options. If you are using gettext for translation of your
   * strings, use GETTEXT_PACKAGE here instead of NULL */
  g_option_context_add_main_entries (context, cmd_options, NULL);

  /* now parse the commandline options, note that this already
   * calls gtk_init() and gst_init() */
  if (!g_option_context_parse (ctx, &amp;argc, &amp;argv, &amp;err)) {
    g_print ("Error initializing: %s\n", err->message);
    exit (1);
  }

  /* any filenames we got passed on the command line? parse them! */
  if (cmd_filenames != NULL) {
    guint i, num;

    num = g_strv_length (cmd_filenames);
    for (i = 0; i &lt; num; ++i) {
      /* do something with the filename ... */
      g_print ("Adding to play queue: %s\n", cmd_filenames[i]);
    }

    g_strfreev (cmd_filenames);
    cmd_filenames = NULL;
  }
<!-- example-end gnome.c a -->
[..]<!-- example-begin gnome.c b --><!--
  return 0;
--><!-- example-end gnome.c b -->
<!-- example-begin gnome.c c -->
}
        <!-- example-end gnome.c c --></programlisting>
      </listitem>
      <listitem>
        <para>
          GNOME uses Pulseaudio for audio, use the pulsesrc and
          pulsesink elements to have access to all the features.
        </para>
      </listitem>
      <listitem>
        <para>
          &GStreamer; provides data input/output elements for use with the
          GIO VFS system. These elements are called <quote>giosrc</quote>
          and <quote>giosink</quote>.
          The deprecated GNOME-VFS system is supported too but shouldn't be
          used for any new applications.
        </para>
      </listitem>
    </itemizedlist>
  </sect1>

<!-- ####################################################################### -->
<!-- ####################################################################### -->
<!-- ####################################################################### -->



  <sect1 id="section-integration-kde">
    <title>KDE desktop</title>
    <para>
      &GStreamer; has been proposed for inclusion in KDE-4.0. Currently,
      &GStreamer; is included as an optional component, and it's used by
      several KDE applications, including <ulink type="http"
      url="http://amarok.kde.org/">AmaroK</ulink>, <ulink type="http"
      url="http://developer.kde.org/~wheeler/juk.html">JuK</ulink>,
      <ulink type="http"
      url="http://www.xs4all.nl/~jjvrieze/kmplayer.html">KMPlayer</ulink> and
      <ulink type="http"
      url="http://kaffeine.sourceforge.net/">Kaffeine</ulink>.
    </para>
    <para>
      Although not yet as complete as the GNOME integration bits, there
      are already some KDE integration specifics available. This list will
      probably grow as &GStreamer; starts to be used in KDE-4.0:
    </para>
    <itemizedlist>
      <listitem>
        <para>
          AmaroK contains a kiosrc element, which is a source element that
          integrates with the KDE VFS subsystem KIO.
        </para>
      </listitem>
    </itemizedlist>
  </sect1>

<!-- ####################################################################### -->
<!-- ####################################################################### -->
<!-- ####################################################################### -->

  <sect1 id="section-integration-osx">
    <title>OS X</title>
    <para>
      &GStreamer; provides native video and audio output elements for OS X.
      It builds using the standard development tools for OS X.
    </para>
  </sect1>

<!-- ####################################################################### -->
<!-- ####################################################################### -->
<!-- ####################################################################### -->

  <sect1 id="section-integration-win32">
    <title>Windows</title>

    <warning>
<para>
Note: this section is out of date. GStreamer-1.0 has much better
support for win32 than previous versions though and should usually compile
and work out-of-the-box both using MSYS/MinGW or Microsoft compilers. The
<ulink url="http://gstreamer.freedesktop.org">GStreamer web site</ulink> and the
<ulink url="http://news.gmane.org/gmane.comp.video.gstreamer.devel">mailing list
archives</ulink> are a good place to check the latest win32-related news.
</para>
    </warning>


    <para>
      &GStreamer; builds using Microsoft Visual C .NET 2003 and using Cygwin.
    </para>

  <sect2 id="section-win32-build">
  <title>Building <application>GStreamer</application> under Win32</title>

<para>There are different makefiles that can be used to build GStreamer with the usual Microsoft 
compiling tools.</para>

<para>The Makefile is meant to be used with the GNU make program and the free 
version of the Microsoft compiler (<ulink url="http://msdn.microsoft.com/visualc/vctoolkit2003/">http://msdn.microsoft.com/visualc/vctoolkit2003/</ulink>). You also 
have to modify your system environment variables to use it from the command-line. You will also 
need a working Platform SDK for Windows that is available for free from Microsoft.</para>

<para>The projects/makefiles will generate automatically some source files needed to compile 
GStreamer. That requires that you have installed on your system some GNU tools and that they are 
available in your system PATH.</para>

<para>The GStreamer project depends on other libraries, namely :</para>
<itemizedlist>
<listitem><para>GLib</para></listitem>
<listitem><para>libxml2</para></listitem>
<listitem><para>libintl</para></listitem>
<listitem><para>libiconv</para></listitem>
</itemizedlist>

<para>Work is being done to provide pre-compiled GStreamer-1.0 libraries as
a packages for win32. Check the <ulink url="http://gstreamer.freedesktop.org">
GStreamer web site</ulink> and check our
<ulink url="http://news.gmane.org/gmane.comp.video.gstreamer.devel">mailing list
</ulink> for the latest developments in this respect.</para>

<note>
<title>Notes</title>

<para>GNU tools needed that you can find on <ulink url="http://gnuwin32.sourceforge.net/">http://gnuwin32.sourceforge.net/</ulink></para>
<itemizedlist>
<listitem><para>GNU flex      (tested with 2.5.4)</para></listitem>
<listitem><para>GNU bison     (tested with 1.35)</para></listitem>
</itemizedlist>

<para>and <ulink url="http://www.mingw.org/">http://www.mingw.org/</ulink></para>
<itemizedlist>
<listitem><para>GNU make      (tested with 3.80)</para></listitem>
</itemizedlist>

<para>the generated files from the -auto makefiles will be available soon separately on the net 
for convenience (people who don't want to install GNU tools).</para>
</note>
</sect2>

  <sect2 id="section-win32-install">
<title>Installation on the system</title>

<para>FIXME: This section needs be updated for GStreamer-1.0.</para>

<!--
<para>By default, GStreamer needs a registry. You have to generate it using "gst-register.exe". It will create
the file in c:\gstreamer\registry.xml that will hold all the plugins you can use.</para>

<para>You should install the GStreamer core in c:\gstreamer\bin and the plugins in c:\gstreamer\plugins.  Both
directories should be added to your system PATH. The library dependencies should be installed in c:\usr</para>

<para>For example, my current setup is :</para>

<itemizedlist>
<listitem><para><filename>c:\gstreamer\registry.xml</filename></para></listitem>
<listitem><para><filename>c:\gstreamer\bin\gst-inspect.exe</filename></para></listitem>
<listitem><para><filename>c:\gstreamer\bin\gst-launch.exe</filename></para></listitem>
<listitem><para><filename>c:\gstreamer\bin\gst-register.exe</filename></para></listitem>
<listitem><para><filename>c:\gstreamer\bin\gstbytestream.dll</filename></para></listitem>
<listitem><para><filename>c:\gstreamer\bin\gstelements.dll</filename></para></listitem>
<listitem><para><filename>c:\gstreamer\bin\gstoptimalscheduler.dll</filename></para></listitem>
<listitem><para><filename>c:\gstreamer\bin\gstspider.dll</filename></para></listitem>
<listitem><para><filename>c:\gstreamer\bin\libgtreamer-0.8.dll</filename></para></listitem>
<listitem><para><filename>c:\gstreamer\plugins\gst-libs.dll</filename></para></listitem>
<listitem><para><filename>c:\gstreamer\plugins\gstmatroska.dll</filename></para></listitem>
<listitem><para><filename>c:\usr\bin\iconv.dll</filename></para></listitem>
<listitem><para><filename>c:\usr\bin\intl.dll</filename></para></listitem>
<listitem><para><filename>c:\usr\bin\libglib-2.0-0.dll</filename></para></listitem>
<listitem><para><filename>c:\usr\bin\libgmodule-2.0-0.dll</filename></para></listitem>
<listitem><para><filename>c:\usr\bin\libgobject-2.0-0.dll</filename></para></listitem>
<listitem><para><filename>c:\usr\bin\libgthread-2.0-0.dll</filename></para></listitem>
<listitem><para><filename>c:\usr\bin\libxml2.dll</filename></para></listitem>
</itemizedlist>
-->

  </sect2>

  </sect1>

</chapter>
