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
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)

libHermes	(for colorspace conversions; you need this for any video work)
			http://www.clanlib.org/hermes/
libghttp	(for httpsrc)
			http://ftp.gnome.org/pub/GNOME/stable/sources/libghttp/
libaudiofile    (for afsrc/afsink
			http://oss.sgi.com/projects/audiofile/
libmad          (for the mad mp3 decoder plugin)
			http://www.mars.org/home/rob/proj/mpeg/
libjpeg         (for jpegenc/jpegdec)
			http://www.ijg.org/
libopenquicktime (for the QT plugin)
			http://sourceforge.net/projects/openquicktime/
libXv		(for videosink)
libxaudio	(for xa mp3 decoder)
			http://www.xaudio.com/
libvorbis	(for vorbisenc, vorbisdec)
			http://www.xiph.org/ogg/vorbis/index.html
libcdparanoia	(for cdparanoia ripper)
			http://www.xiph.org/paranoia/index.html
liblame		(for lame mp3 encoder)
			http://www.mp3dev.org/mp3/
libshout	(for the shoutcast plugin)
			http://www.icecast.org
libasound	(for the alsa src/sink plugin)
			http://alsa-project.org/
librtp		(for the rtp sink plugin)
			http://www.linphone.org/ortp/
aalib		(for the aa sink plugin)
			http://aa-project.sourceforge.net/aalib/
aRts		(for the arts plugin wrapper, and the artsd sink)
			http://www.arts-project.org
raw1394/linux1394	(for the dv plugin)
			http://linux1394.sourceforge.net
libdvdread	(for the dvdsrc)
			http://www.dtek.chalmers.se/groups/dvd/
			(optional: libcss for encrypted DVDs)
libdvdnav	(for the dvdnavsrc)
			http://dvd.sourceforge.net/
			(optional: libcss for encrypted DVDs)
		>= 0.1.9
libesound	(for the esd sink 
			ftp.gnome.org/pub/GNOME/stable/sources/esound)
gnome-vfs	(for the gnome-vfs src)
		>= 2.4.0
libgsm		(for the gsm plugin)
			http://kbs.cs.tu-berlin.de/~jutta/toast.html
sdl		(for the sdl sink)
			http://www.libsdl.org
xmms		(for the xmms plugins wrapper)
			http://www.xmms.org
mpeg2dec/a52dec	(for mpeg2 related plugins and dvd playback)
			http://libmpeg2.sourceforge.net/
			and http://liba52.sourceforge.net/
		>=	v0.3.1/v0.7.2
swfdec		(for the swfdec plugin)
			http://swfdec.sourceforge.net
		>=	0.2.0
flac		(for the FLAC lossless audio format)
			http://flac.sourceforge.net
                >= 1.0.3 preferred, 1.0.2 should work
gtk		(for the gdk_pixbuf plugin)
			http://www.gtk.org/
		>= 2.2.1 preferred, 2.0 ok
pango		(for the textoverlay plugins)
			http://www.pango.org/

Optional debian packages:
=========================

gtk-doc-tools 0.4-0.2  -- needed to build documentation
