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

<chapter id="chapter-intro-preface" xreflabel="Preface">
  <title>Preface</title>

  <!-- ############ sect1 ############# -->
  
  <sect1 id="section-intro-what"><!-- synchronize with AppDevMan -->
    <title>What is &GStreamer;?</title>
    <para> 
      &GStreamer; is a framework for creating streaming media applications.
      The fundamental design comes from the video pipeline at Oregon Graduate
      Institute, as well as some ideas from DirectShow.  
    </para>
 
    <para>
      &GStreamer;'s development framework makes it possible to write any
      type of streaming multimedia application. The &GStreamer; framework
      is designed to make it easy to write applications that handle audio
      or video or both. It isn't restricted to audio and video, and can
      process any kind of data flow.
      The pipeline design is made to have little overhead above what the
      applied filters induce. This makes &GStreamer; a good framework for
      designing even high-end audio applications which put high demands on
      latency. 
    </para> 

    <para>
      One of the most obvious uses of &GStreamer; is using it to build
      a media player. &GStreamer; already includes components for building a
      media player that can support a very wide variety of formats, including
      MP3, Ogg/Vorbis, MPEG-1/2, AVI, Quicktime, mod, and more. &GStreamer;,
      however, is much more than just another media player. Its main advantages
      are that the pluggable components can be mixed and matched into arbitrary
      pipelines so that it's possible to write a full-fledged video or audio
      editing application.
    </para> 

    <para>
      The framework is based on plugins that will provide the various codec 
      and other functionality. The plugins can be linked and arranged in
      a pipeline. This pipeline defines the flow of the data. Pipelines can 
      also be edited with a GUI editor and saved as XML so that pipeline
      libraries can be made with a minimum of effort.
    </para> 

    <para>
      The &GStreamer; core function is to provide a framework for plugins,
      data flow and media type handling/negotiation. It also provides an
      API to write applications using the various plugins.
    </para> 
  </sect1>

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

  <sect1 id="section-preface-who" xreflabel="Who Should Read This Guide?">
    <title>Who Should Read This Guide?</title>
    <para>
      This guide explains how to write new modules for &GStreamer;. The guide is
      relevant to several groups of people:
    </para>
    <itemizedlist>
      <listitem>
        <para>
          Anyone who wants to add support for new ways of processing data in
          &GStreamer;. For example, a person in this group might want to create
          a new data format converter, a new visualization tool, or a new
          decoder or encoder.
        </para>
      </listitem>
      <listitem>
        <para>
          Anyone who wants to add support for new input and output devices. For
          example, people in this group might want to add the ability to write
          to a new video output system or read data from a digital camera or
          special microphone.
        </para>
      </listitem>
      <listitem>
        <para>
          Anyone who wants to extend &GStreamer; in any way. You need to have an
          understanding of how the plugin system works before you can understand
          the constraints that the plugin system places on the rest of the code.
          Also, you might be surprised after reading this at how much can be
          done with plugins.
        </para>
      </listitem>
    </itemizedlist>
    <para>
      This guide is not relevant to you if you only want to use the existing
      functionality of &GStreamer;, or if you just want to use an application
      that uses &GStreamer;. If you are only interested in using existing
      plugins to write a new application - and there are quite a lot of
      plugins already - you might want to check the &GstAppDevMan;. If you
      are just trying to get help with a &GStreamer; application, then you
      should check with the user manual for that particular application.
    </para>
  </sect1>

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

  <sect1 id="section-preface-reading" xreflabel="Preliminary Reading">
    <title>Preliminary Reading</title>
    <para>
      This guide assumes that you are somewhat familiar with the basic workings
      of &GStreamer;. For a gentle introduction to programming concepts in
      &GStreamer;, you may wish to read the &GstAppDevMan; first.
      Also check out the other documentation available on the <ulink type="http"
      url="http://gstreamer.freedesktop.org/documentation/">&GStreamer; web site</ulink>.
    </para>
    <para><!-- synchronize with AppDevMan -->
      In order to understand this manual, you will need to have a basic
      understanding of the C language.
      Since &GStreamer; adheres to the GObject programming model, this guide
      also assumes that you understand the basics of <ulink type="http"
      url="http://developer.gnome.org/doc/API/2.0/gobject/index.html">GObject</ulink>
      programming. 
      You may also want to have a look
      at Eric Harlow's book <emphasis>Developing Linux Applications with
      GTK+ and GDK</emphasis>.
    </para>
  </sect1>

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

  <sect1 id="section-preface-structure" xreflabel="Structure of This Guide">
    <title>Structure of This Guide</title>
    <para>
      To help you navigate through this guide, it is divided into several large
      parts. Each part addresses a particular broad topic concerning &GStreamer;
      plugin development. The parts of this guide are laid out in the following
      order:
    </para>
    <itemizedlist>
      <listitem>
        <para>
          <xref linkend="part-building"/> -
          Introduction to the structure of a plugin, using an example audio
          filter for illustration.
        </para>
        <para>
          This part covers all the basic steps you generally need to perform
          to build a plugin, such as registering the element with &GStreamer;
          and setting up the basics so it can receive data from and send data
          to neighbour elements. The discussion begins by giving examples of
          generating the basic structures and registering an element in
          <xref linkend="chapter-building-boiler"/>. Then, you will learn how
          to write the code to get a basic filter plugin working in <xref
          linkend="chapter-building-pads"/>, <xref
          linkend="chapter-building-chainfn"/> and <xref
          linkend="chapter-statemanage-states"/>.
        </para>
        <para>
          After that, we will show some of the GObject concepts on how to
          make an element configurable for applications and how to do
          application-element interaction in
          <xref linkend="chapter-building-args"/> and <xref
          linkend="chapter-building-signals"/>. Next, you will learn to build
          a quick test application to test all that you've just learned in
          <xref linkend="chapter-building-testapp"/>. We will just touch upon
          basics here. For full-blown application development, you should
          look at <ulink type="http"
          url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/index.html">the
          Application Development Manual</ulink>.
        </para>
      </listitem>
      <listitem>
        <para>
          <xref linkend="part-advanced"/> -
          Information on advanced features of &GStreamer; plugin development.
        </para>
        <para>
          After learning about the basic steps, you should be able to create a
          functional audio or video filter plugin with some nice features.
          However, &GStreamer; offers more for plugin writers. This part of the
          guide includes chapters on more advanced topics, such as scheduling,
          media type definitions in &GStreamer;, clocks, interfaces and
          tagging. Since these features are purpose-specific, you can read them
          in any order, most of them don't require knowledge from other
          sections.
        </para>
        <para>
          The first chapter, named <xref linkend="chapter-scheduling"/>,
          will explain some of the basics of element scheduling. It is not
          very in-depth, but is mostly some sort of an introduction on why
          other things work as they do. Read this chapter if you're interested
          in &GStreamer; internals. Next, we will apply this knowledge and
          discuss another type of data transmission than what you learned in
          <xref linkend="chapter-building-chainfn"/>: <xref
          linkend="chapter-scheduling"/>. Loop-based elements will give
          you more control over input rate. This is useful when writing, for
          example, muxers or demuxers.
        </para>
        <para>
          Next, we will discuss media identification in &GStreamer; in <xref
          linkend="chapter-building-types"/>. You will learn how to define
          new media types and get to know a list of standard media types
          defined in &GStreamer;.
        </para>
        <para>
          In the next chapter, you will learn the concept of request- and
          sometimes-pads, which are pads that are created dynamically, either
          because the application asked for it (request) or because the media
          stream requires it (sometimes). This will be in <xref
          linkend="chapter-advanced-request"/>.
        </para>
        <para>
          The next chapter, <xref linkend="chapter-advanced-clock"/>, will
          explain the concept of clocks in &GStreamer;. You need this
          information when you want to know how elements should achieve
          audio/video synchronization.
        </para>
        <para>
          The next few chapters will discuss advanced ways of doing
          application-element interaction. Previously, we learned on the
          GObject-ways of doing this in <xref linkend="chapter-building-args"/>
          and <xref linkend="chapter-building-signals"/>. We will discuss
          dynamic parameters, which are a way of defining element behaviour
          over time in advance, in <xref linkend="chapter-dparams"/>. Next,
          you will learn about interfaces in <xref
          linkend="chapter-advanced-interfaces"/>. Interfaces are very target-
          specific ways of application-element interaction, based on GObject's
          GInterface. Lastly, you will learn about how metadata is handled in
          &GStreamer; in <xref linkend="chapter-advanced-tagging"/>.
        </para>
        <para>
          The last chapter, <xref linkend="chapter-advanced-events"/>, will
          discuss the concept of events in &GStreamer;. Events are, on the
          one hand, another way of doing application-element interaction. It
          takes care of seeking, for example. On the other hand, it is also
          a way in which elements interact with each other, such as letting
          each other know about media stream discontinuities, forwarding tags
          inside a pipeline and so on.
        </para>
      </listitem>
      <listitem>
        <para>
          <xref linkend="part-other"/> - Explanation
          of writing other plugin types.
        </para>
        <para>
          Because the first two parts of the guide use an audio filter as an
          example, the concepts introduced apply to filter plugins. But many of
          the concepts apply equally to other plugin types, including sources,
          sinks, and autopluggers. This part of the guide presents the issues
          that arise when working on these more specialized plugin types. The
          chapter starts with a special focus on elements that can be written
          using a base-class (<xref linkend="chapter-other-base"/>), and
          later also goes into writing special types of elements in
          <xref linkend="chapter-other-oneton"/>, <xref
          linkend="chapter-other-ntoone"/> and <xref
          linkend="chapter-other-manager"/>.
        </para>
      </listitem>
      <listitem>
        <para>
          <xref linkend="part-appendix"/> - Further
          information for plugin developers.
        </para>
        <para>
          The appendices contain some information that stubbornly refuses
          to fit cleanly in other sections of the guide. Most of this section
          is not yet finished.
        </para>
      </listitem>
    </itemizedlist>

    <para>
      The remainder of this introductory part of the guide presents a short
      overview of the basic concepts involved in &GStreamer; plugin development.
      Topics covered include <xref linkend="section-basics-elements"/>, <xref
      linkend="section-basics-pads"/>, <xref linkend="section-basics-data"/> and
      <xref linkend="section-basics-types"/>. If you are already familiar with
      this information, you can use this short overview to refresh your memory,
      or you can skip to <xref linkend="part-building"/>.
    </para>
    <para>
      As you can see, there a lot to learn, so let's get started!
    </para>

    <itemizedlist>
      <listitem>
        <para>
          Creating compound and complex elements by extending from a GstBin.
          This will allow you to create plugins that have other plugins embedded
          in them.
        </para>
      </listitem>
      <listitem>
        <para>
          Adding new mime-types to the registry along with typedetect functions.
          This will allow your plugin to operate on a completely new media type.
        </para>
      </listitem>
    </itemizedlist>
  </sect1>
</chapter>
