<?xml version='1.0'?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
                  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
<!ENTITY % image-entities SYSTEM "image.entities">
%image-entities;
<!ENTITY % version-entities SYSTEM "version.entities">
%version-entities;

<!ENTITY INTRO SYSTEM "intro.xml">
<!ENTITY MOTIVATION SYSTEM "motivation.xml">
<!ENTITY GOALS SYSTEM "goals.xml">

<!ENTITY INIT SYSTEM "init.xml">
<!ENTITY ELEMENTS SYSTEM "elements.xml">
<!ENTITY PADS SYSTEM "pads.xml">
<!ENTITY LINKS SYSTEM "links.xml">
<!ENTITY BINS SYSTEM "bins.xml">
<!ENTITY BUFFERS SYSTEM "buffers.xml">
<!ENTITY STATES SYSTEM "states.xml">

<!ENTITY HELLOWORLD SYSTEM "helloworld.xml">
<!ENTITY FACTORIES SYSTEM "factories.xml">
<!ENTITY AUTOPLUGGING SYSTEM "autoplugging.xml">
<!ENTITY HELLOWORLD2 SYSTEM "helloworld2.xml">

<!ENTITY THREADS SYSTEM "threads.xml">
<!ENTITY QUEUES SYSTEM "queues.xml">
<!ENTITY COTHREADS SYSTEM "cothreads.xml">
<!ENTITY SCHEDULERS SYSTEM "schedulers.xml">
<!ENTITY CLOCKS SYSTEM "clocks.xml">
<!ENTITY DYNAMIC SYSTEM "dynamic.xml">
<!ENTITY TYPEDETECTION SYSTEM "typedetection.xml">
<!ENTITY UTILITY SYSTEM "utility.xml">
<!ENTITY DPARAMS SYSTEM "dparams-app.xml">

<!ENTITY XML SYSTEM "xml.xml">
<!ENTITY PLUGINS SYSTEM "plugins.xml">
<!ENTITY DEBUGGING SYSTEM "debugging.xml">
<!ENTITY PROGRAMS SYSTEM "programs.xml">
<!ENTITY COMPONENTS SYSTEM "components.xml">
<!ENTITY GNOME SYSTEM "gnome.xml">
<!ENTITY QUOTES SYSTEM "quotes.xml">
]>

<book id="index">
  <bookinfo>
    
    <authorgroup>
      <author>
	<firstname>Wim</firstname>
	<surname>Taymans</surname>
	<authorblurb>
	  <para>
	    <email>wim.taymans@chello.be</email>
	  </para>
	</authorblurb>
      </author>
      <author>
	<firstname>Steve</firstname>
	<surname>Baker</surname>
	<authorblurb>
	  <para>
	    <email>stevebaker_org@yahoo.co.uk</email>
	  </para>
	</authorblurb>
      </author>
      <author>
	<firstname>Andy</firstname>
	<surname>Wingo</surname>
	<authorblurb>
	  <para>
	    <email>wingo@pobox.com</email>
	  </para>
	</authorblurb>
      </author>
    </authorgroup>

    <legalnotice id="legalnotice">
      <para>
	This material may be distributed only subject to the terms and
        conditions set forth in the Open Publication License, v1.0 or later (the
        latest version is presently available at <ulink url="
        http://www.opencontent.org/openpub/"
        type="http">http://www.opencontent.org/openpub/</ulink> )
      </para>
    </legalnotice>

    <title><application>GStreamer</application> Application Development Manual</title>

  </bookinfo>
      
<!-- ############# Overview - part ############### -->

  <part id="overview"><title>Overview</title>
    <partintro>
      <para>
        <xref linkend="overview"/> gives you an overview of
        <application>GStreamer</application> design goals.

        <xref linkend="basic-concepts"/> rapidly covers the basics of
        <application>GStreamer</application> programming.

        In <xref linkend="build-app"/> we will move on to the
        examples. Since <application>GStreamer</application> uses <ulink
        url="http://developer.gnome.org/arch/gtk/glib.html" type="http">GLib
        2.0</ulink>, the reader is assumed to understand the basics of the
        <ulink url="http://developer.gnome.org/doc/API/2.0/gobject/index.html"
        type="http">GObject object model</ulink>.

        For a gentle introduction to this system, you may wish to read the
        <emphasis><ulink url="http://www.gtk.org/tutorial/" type="http">GTK+
        Tutorial</ulink></emphasis> or Eric Harlow's book <emphasis>Developing
        Linux Applications with GTK+ and GDK</emphasis>.

      </para>
    </partintro>

<!-- ############ Introduction - chapter ############# -->
      &INTRO;

      &MOTIVATION;

      &GOALS;
  </part>

<!-- ############ Basic concepts - part ############# -->

  <part id="basic-concepts"><title>Basic concepts</title>
    <partintro>
      <para> 
        We will first describe the basics of
        <application>GStreamer</application> programming by introducing the
        different objects needed to create a media pipeline.
      </para>
      <para> 
        We will use a visual representation of these objects so that we can
	visualize the more complex pipelines you will learn to build later on.
      </para>
    </partintro>

<!-- ############ Basic concepts - chapter ############# -->
      &INIT;

      &ELEMENTS;

      &PADS;

      &PLUGINS;

      &LINKS;

      &BINS;

      &BUFFERS;

      &STATES;

  </part>
<!-- ############ Building Apps - part ############# -->

  <part id="build-app"><title>Building an application</title>

    <partintro>
      <para>
        With the basic concepts out of the way, you're ready to start building a
        full-scale <application>GStreamer</application> application. 
      </para>
      <para>
        We assume the reader is familiar with GTK+/GNOME programming.
      </para>
    </partintro>

      &HELLOWORLD;

      &FACTORIES;

  </part>

<!-- ############ Advanced GStreamer - part ############# -->

  <part id="advanced"><title>Advanced <application>GStreamer</application> concepts</title>

    <partintro>
      <para>
        In this part we will cover the more advanced features of <application>GStreamer</application>.
	With the basics you learned in the prevous part you should be 
	able to create a 'simple' pipeline. If you want more control over
	the media types and the pipeline you should use the more
	low-level features of <application>GStreamer</application>.
      </para>      
    </partintro>

      &THREADS;

      &QUEUES;

      &COTHREADS;

      &SCHEDULERS;

      &CLOCKS;

      &DYNAMIC;

      &TYPEDETECTION;

      &AUTOPLUGGING;

      &HELLOWORLD2;
      
      &DPARAMS;
  </part>

<!-- ############ XML in GStreamer - part ############# -->

  <part id="xml-gstreamer"><title>XML in <application>GStreamer</application></title>

    <partintro>
      <para>
        <application>GStreamer</application> has the possibility to serialize the pipelines you
	create using an XML format. You can load a previously created pipeline by loading the XML
	file.
      </para>
    </partintro>

      &XML;
  </part>


<!-- ############ Appendices - part ############# -->

  <part id="appendices">
    <title>Appendices</title>

    <partintro>
      <para>
        <application>GStreamer</application> comes prepackaged with a few
        programs, and some useful debugging options.
      </para>
    </partintro>

      &DEBUGGING;

      &PROGRAMS;

      &COMPONENTS;

      &GNOME;

      &QUOTES;

  </part>
</book>