Overview
  Introduction
   (creating multimedia apps)
   (pipeline/plugin based)
   
  Motivation
   (multitude of duplicate code)
   (mostly focused on one goal)
   (reinvent plugin mechanisms)
   (network transparency?)
   (catch up with Windows(tm) world)

  Goals
   (clean and powerfull)
     (building graphs)
     (building plugins)
   (object oriented)
     (using GTK+ object model)
   (extensible)
   (alow binary only plugins)
   (alow high performance)
     (HW acceleration)
     (efficient memory use)
     (kernel buffers etc..)

Basic concepts
  elements
   (what is it)
   (types) sink, src, filter
   (have pads)
  linking elements
  bin
   (can contain elements)
   pipeline (a complete graph)
   thread (theaded operation)
  buffers
   (pass between elements)
   (contains data)
   (can cary metadata)
   (use refcounting)
  element states
   (null)
   (ready)
   (paused)
   (playing)
     
Building apps
 helloworld
   (fdsrc->mp3decoder->audiosink)
   (step by step explanation)
 More on factories
   problems with helloworld
   MIME types
   GStreamer types
   Basic types
 Your second application
   
   
  
advanced concepts
  threads
  queues
  cothreads
  dynamic pipeline construction
  ghost pads
  type detection
  utility functions
  
XML in GStreamer
  (saving)
  (loading a pipeline)

Plugin development
  plugin types
    chain based
    loop based
  buffers
  metadata
  subbufers
  adding pads
  libraries
  plugin registry
  types
  type detection
  QoS messages
  clocks
  
GStreamer programs
  editor
  gstplay


