WHAT IT IS
----------
This is GStreamer, a framework for streaming media.  The
fundamental design comes from the video pipeline at Oregon Graduate
Institute, as well as some ideas from DirectMedia.  It's based on plug-ins
that will provide the various codec and other functionality.  The
interface hopefully is generic enough for various companies (ahem, Apple)
to release binary codecs for Linux, until such time as they get a clue and
release the source.

COMPILING FROM SOURCE
---------------------
- check output of ./configure --help to see if any options apply to you
- run
  ./configure
  make

  to build GStreamer.
- if you want to install it (not required), run
  make install
- You should create a registry for things to work.
  If you ran make install in the previous step, run
  gst-register
  as root.

  If you didn't install, run
  tools/gst-register
  as a normal user.

- try out a simple test:
  gst-launch fakesrc num_buffers=5 ! fakesink
  (If you didn't install GStreamer, again prefix gst-launch with tools/)

  If it outputs a bunch of messages from fakesrc and fakesink, everything is
  ok.

- After this, you're ready to install gst-plugins, which will provide the
  functionality you're probably looking for by now, so go on and read
  that README.

COMPILING FROM CVS
------------------
When building from CVS sources, you will need to run autogen.sh to generate 
the build system files.

GStreamer is cutting-edge stuff.  To be a CVS developer, you need 
what used to be considered cutting-edge tools.

ATM, most of us have at least these versions :

* autoconf	2.52	(NOT 2.52d)
* automake	1.5
* libtool	1.4     (NOT Gentoo's genetic failure 1.4.2)
* pkg-config    0.8.0

autogen.sh will check for these versions and complain if you don't have 
them.  You can also specify specific versions of automake and autoconf with
--with-automake and --with-autoconf

Check autogen.sh options by running autogen.sh --help

autogen.sh can pass on arguments to configure - you just need to separate them
from autogen.sh with -- between the two.
prefix has been added to autogen.sh but will be passed on to configure because
some build scripts like that.

When you have done this once, you can use autoregen.sh to re-autogen with
the last passed options as a handy shortcut.  Use it.

After the autogen.sh stage, you can follow the directions listed in
"COMPILING FROM SOURCE"

