GStreamer uses a *large* array of tools and libraries, most of which are
optional.  We have attempted to make sure that any code that depends on
optional libraries doesn't get built unless you have those libraries.  If
you find this not to be the case, please, let us know by filing a bug
report at http://bugzilla.gnome.org/.


Required tools:
===============

An extra set of tools is required if you wish to build GStreamer out of
CVS (using autogen.sh):

autoconf 2.52 or better 
automake 1.5
gettext 0.11.5
libtool v1.4 or better
pkgconfig 0.9.0 or better (http://www.freedesktop.org/software/pkgconfig/)

Required libraries:
===================

The core GStreamer libraries. See the gstreamer/ module in GStreamer cvs, or
the version that corresponds to this plugin release.

Optional libraries:
===================

This file lists supporting libraries for which gst-plugins contains plugins,
as well as their minimum version.  You can find the corresponding plugins in
ext/(library)

a52dec		(for the a52dec AC-3 decoder)
			http://liba52.sourceforge.net/
opencore-amr (for the AMR-NB decoder and encoder and the AMR-WB decoder)
			http://sourceforge.net/projects/opencore-amr/
libmpg123      (for the mpg123 mp3 decoder plugin)
			https://www.mpg123.de/api/
liblame		(for lame mp3 encoder)
			http://www.mp3dev.org/mp3/
libdvdread	(for the dvdreadsrc)
			http://www.dtek.chalmers.se/groups/dvd/
			(optional: libcss for encrypted DVDs)
mpeg2dec	(for mpeg2 related plugins and dvd playback)
			http://libmpeg2.sourceforge.net/
liborc		(for the liborc optimization library)
			http://code.entropywave.com/download/orc/
cdio		(for the cdio CDDA CD audio source)
			http://savannah.gnu.org/projects/libcdio/
x264		(for the x264enc H.264 encoder)
			http://www.videolan.org/developers/x264.html
twolame		(for the twolame mp2 encoder)
			http://www.twolame.org/
sidplay		FIXME
