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
git (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/
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
sidplay		FIXME
