gstreamer (0.4.1-1) unstable; urgency=low

  * New upstream
  * gstreamer-tools.files/manpages: add gst-md5sum
  * Use xsltproc 1.0.21 to fix doc image problems
  * Don't use module flags for libgstcontrol

 -- David I. Lehn <dlehn@vt.edu>  Tue,  1 Oct 2002 15:02:57 -0400

gstreamer (0.4.0.2-cvs20020919-1) unstable; urgency=low

  * CVS snapshot, release branch
  * gstreamer-core.files: change to libgst*scheduler, since the
    scheduler names have changed.
  * gstreamer-core-libs.files: libgstcontrol.so moved
  * add debian/control.in, and create debian/control rule in debian/rules
    to change the version number automatically

 -- David Schleef <ds@schleef.org>  Thu, 19 Sep 2002 15:07:36 -0700

gstreamer (0.4.0-2) unstable; urgency=low

  * Remove libtool hack
  * Dependency change from libc6-dev to libc6-dev | libc-dev

 -- David I. Lehn <dlehn@vt.edu>  Fri, 23 Aug 2002 12:26:10 -0400

gstreamer (0.4.0-1) unstable; urgency=low

  * New upstream
  * Update library package: libgstreamer0.3.4 -> libgstreamer0.4.0
  * Add automake Python support to find python binary to run devhelp doc
    helper script.  This touches -every- Makefile.in and since the package
    diff will already be large just use automake 1.6 instead of 1.5 as used
    upstream.  Sorry.
  * Update config.{guess,sub}
  * Temporarily comment out figures from manual so it builds
  * Apply CVS patch for s/&percnt;/%/ in XML docs
  * Added devhelp support
  * Added gst-feedback to gstreamer-tools
  * Break stuff: blindly reanme gstreamer-lib-core{-dev} to
    gstreamer-core-libs{-dev}.  Hard to chose naming as these are half-plugins
    and half-linkable libs.  Picking a scheme that also works with
    gstreamer-plugins-* packages.  Still looking for a better solution...

 -- David I. Lehn <dlehn@vt.edu>  Tue, 16 Jul 2002 02:20:40 -0400

gstreamer (0.3.4-1) unstable; urgency=low

  * New upstream
  * libgstreamer0.3.3 -> libgstreamer0.3.4
  * Conflict and Replace libgstreamer0.3.3 so upgrades work
    This shouldn't be required because plugins know what version they were
    compiled with.  Apparently this doesn't yet work properly.
  * Add bison and flex to Build-Depends
  * Add libgstfastscheduler.so to -core

 -- David I. Lehn <dlehn@vt.edu>  Mon, 15 Apr 2002 01:13:00 -0400

gstreamer (0.3.3-3) unstable; urgency=low

  * Add libgstreamer-dev dependencies on libpopt-dev and libglib2.0-dev
  * CVS fix for GstElement NEW_PAD and PAD_REMOVED g_signal_new parameters

 -- David I. Lehn <dlehn@vt.edu>  Fri, 29 Mar 2002 03:04:22 -0500

gstreamer (0.3.3-2) unstable; urgency=low

  * Depend on and rebuld for glib 2.0
  * Remove libgtk from Build-Depends
  * Move gs from Build-Depends to Build-Depends-Indep
  * Added lintian overrides for base.css zero length files

 -- David I. Lehn <dlehn@vt.edu>  Fri, 22 Mar 2002 19:29:24 -0500

gstreamer (0.3.3-1) unstable; urgency=low

  * New upstream
  * Renamed libgstX to libgstreamerX.Y.Z
    will move to better versioning once upstream starts interface versioning
  * Renamed libgst-dev to libgstreamer-dev
  * Patch to build plugins as only .so
  * Added libstandardscheduler.so to -core
  * Guessing that mips support handles mipsel too
  * From David Schleef <ds@schleef.org>:
    * Add popt, gs to Build-Depends:
    * #include <errno.h> compile fix

 -- David I. Lehn <dlehn@vt.edu>  Thu, 21 Mar 2002 01:42:18 -0500

gstreamer (0.3.2-2) unstable; urgency=low

  * Rebuild for glib/gtk 1.3.15

 -- David I. Lehn <dlehn@vt.edu>  Sun, 24 Feb 2002 23:48:33 -0500

gstreamer (0.3.2-1) unstable; urgency=low

  * The "I should have started using cvs-buildpacakge long ago" release
  * New upstream release
  * Once again stripped CVS dirs from upstream tarball
  * Add spider autoplugger
  * Added gst-xmllaunch and man page to -tools
  * Despite my complaints, upstream is using new lib versioning
    until they decide API is "stable" enough to provide support.
    At that point proper versioning will happen.
    This release lib change:
       libgst.so.2.0.0 -> libgst-0.3.2.so.0.0.0
    This release lib package change:
       libgst2 -> libgst3
    Hopefully this is mostly transparent.

    Due to a conflict with GNU Smalltalk the next upstream release
    will be renaming some "gst" to "gstreamer".  This will change
    the lib to libgstreamer*.  Some header locations will change too
    so prepare for broken code.

    Plan for next upstream release is to rename packages:
       libgst3 -> libgstreamer0
       libgst-dev -> libgstreamer-dev
  * Plugins now unversioned upstream:
    * Just .so, no more .so.x.y.z
    * Drop .la and .a
    * Fixup a few
    * Wait and see if anyone even notices...
  * Add back some docs that escaped via the diff
  * Fixup some more doc cruft in the diff

 -- David I. Lehn <dlehn@vt.edu>  Thu, 14 Feb 2002 02:20:48 -0500

gstreamer (0.3.1-4) unstable; urgency=low

  * (Unreleased)
  * find . -type d -name CVS -exec rm -rf {} \;
  * Hack upstream tarball to exclude above CVS/ dirs
  * Rebuild for conversion to cvs-buildpackage management

 -- David I. Lehn <dlehn@vt.edu>  Wed, 13 Feb 2002 18:18:34 -0500

gstreamer (0.3.1-3) unstable; urgency=low

  * Rebuild for glib/gtk 1.3.13

 -- David I. Lehn <dlehn@vt.edu>  Wed,  6 Feb 2002 02:17:23 -0500

gstreamer (0.3.1-2) unstable; urgency=low

  * Upstream fix for proper libxml version in pkg-config
  * Undo some of the auto docs/*/tmpl breakage

 -- David I. Lehn <dlehn@vt.edu>  Wed, 23 Jan 2002 01:28:12 -0500

gstreamer (0.3.1-1) unstable; urgency=low

  * New upstream release
  * Upstream broken into multiple packages
  * Core plugins left in -core
  * Core lib plugins moved to -core
  * Other plugins now built from gst-plugins source pacakge
  * libgst1 -> libgst2
  * Tool prefix renamed upstream: s/gstreamer/gst/
  * Moved gstreamer-guilaunch to gst-editor source package
  * Removed gstreamer-config and .m4 in favor of pkg-config use
  * Build for glib2
  * Change doc build system a bit
  * Added -lib-core and -lib-core-dev packages for library plugins

 -- David I. Lehn <dlehn@vt.edu>  Thu, 10 Jan 2002 23:09:34 -0500

gstreamer (0.3.0-3) unstable; urgency=low

  * Remove upstream ChangeLog from packages: 128k changelog.gz per
    plugin package for 40 packages is too much

 -- David I. Lehn <dlehn@vt.edu>  Tue, 25 Dec 2001 23:36:28 -0500

gstreamer (0.3.0-2) unstable; urgency=low

  * Fix bug that slipped into 0.3.0: s/aasink/xvideosink/ in
    gstplay/gstplay.c

 -- David I. Lehn <dlehn@vt.edu>  Tue, 25 Dec 2001 17:56:29 -0500

gstreamer (0.3.0-1) unstable; urgency=low

  * New upstream release
  * Attempt to update various Build-Depends versions
  * Added plugin packages: -a52dec, -dvd, -mikmod, -sid
  * Renamed -elements to -core
  * Added to -core: gstbasicscheduler
  * Moved from -common to -core: gsttypes, autoplug related
  * Renamed -common to -misc
  * Added to -misc: speed, qcam, bytesteram, control, silence, sinesrc,
    mpegstream, playondemand, resample
  * Added gstreamer-guilaunch to gstreamer-tools package
  * Added dependencies on unofficial LAME packages
  * Use PIC libs for Xv
  * Disable broken building of PDF/PS docs
  * Renamed -all-plugins to -all
  * Disable docs -- too hard to build

 -- David I. Lehn <dlehn@vt.edu>  Fri, 21 Dec 2001 12:00:02 -0500

gstreamer (0.2.1-4) unstable; urgency=low

  * Fix some problems reported from lintian 1.20.14:
    * copyright-lists-upstream-authors-like-dh_make
    * debian-changelog-file-contains-user-emacs-settings
  * Patch from CVS to link libgst into plugins
    Plugins now properly depend on libgst package
  * Use RedHat Gtk+-1.3 hack to fix relink issues with ltmain.sh
  * Patch from CVS for xvideosink segfault when no DISPLAY set
  * Remove builddir references from gstreamer-config.in
  * Move libgstelements.la from libgst-dev to gstreamer-elements

 -- David I. Lehn <dlehn@vt.edu>  Tue, 28 Aug 2001 20:05:28 -0400

gstreamer (0.2.1-3) unstable; urgency=low

  * Update build dependencies to FLAC 1.0
  * Enable debug features
  * Fixup broken doc build -scan voodoo with link into .libs/ dir

 -- David I. Lehn <dlehn@vt.edu>  Sun,  5 Aug 2001 23:04:28 -0400

gstreamer (0.2.1-2) unstable; urgency=low

  * Fix lib deps: run debhelper tools in the right order
  * Added arts dir to Makefile.am SUBDIRS so it builds again
  * Changed libmpeg2dec to libgstmpeg2dec to avoid naming issues
    when using -lmpeg2dec
  * Updated system_encode/ with CVS segfaulter bug fix

 -- David I. Lehn <dlehn@vt.edu>  Thu, 19 Jul 2001 15:47:24 -0400

gstreamer (0.2.1-1) unstable; urgency=low

  * New upstream 0.2.1: "Return of the Sedi Master"
  * New plugin packages: -festival, -flac, -avifile, -x
  * New plugins in -common: chart, deinterlace, udp
  * Added some post-0.2.1 fixes for FLAC, build system, ALSA

 -- David I. Lehn <dlehn@vt.edu>  Thu, 28 Jun 2001 20:15:15 -0400

gstreamer (0.2.0-6) unstable; urgency=low

  * Move -compprep to -runtime and call it same places as -register
  * Do -register and -compprep in postrm instead of prerm
  * Make -arts plugin actually build all the source (sent upstream)
  * Purge of -runtime removes /etc/gstreamer

 -- David I. Lehn <dlehn@vt.edu>  Tue, 19 Jun 2001 13:09:32 -0400

gstreamer (0.2.0-5) unstable; urgency=low

  * Added element package dependencies to libgstmediaplay0

 -- David I. Lehn <dlehn@vt.edu>  Mon, 18 Jun 2001 11:18:53 -0400

gstreamer (0.2.0-4) unstable; urgency=low

  * Add --gst-mask=0 to -runtime.postinst

 -- David I. Lehn <dlehn@vt.edu>  Fri, 15 Jun 2001 11:47:24 -0400

gstreamer (0.2.0-3) unstable; urgency=low

  * Fix the plugin control file symlink creation
  * Add audiofile to Build-Depends

 -- David I. Lehn <dlehn@vt.edu>  Fri, 15 Jun 2001 05:22:28 -0400

gstreamer (0.2.0-2) unstable; urgency=low

  * Fixed ALSA checks to not include -lasound in -every- link
  * Update LAME plugin to use latest CVS API
  * Removed OSS src/sink from -common.files (was in -oss too)
  * Swapped -arts.files and -artsd.files contents

 -- David I. Lehn <dlehn@vt.edu>  Fri, 15 Jun 2001 04:02:21 -0400

gstreamer (0.2.0-1) unstable; urgency=low

  * Added gstreamer-compprep manpage
  * Upgrade to 0.2.0

 -- David I. Lehn <dlehn@vt.edu>  Thu,  7 Jun 2001 12:53:59 -0400

gstreamer (0.2.0-0.3) unstable; urgency=low

  * GStreamer 0.2.0-pre3

 -- David I. Lehn <dlehn@vt.edu>  Wed,  6 Jun 2001 15:09:59 -0400

gstreamer (0.2.0-0.2) unstable; urgency=low

  * GStreamer 0.2.0-pre2 + CVS 20010604
  * Added -artsd (vs -arts), -audiofile, -gnomevfs, -gsm, -jpeg,
    -oss, and -sdl plugin packages
  * Added osshelper lib to oss package
  * Added more AVI related plugins and autoplug libs to -common
  * Added pkgconfig file to libgst-dev
  * Added gstreamer-all-plugins pseudo package that depends on
    all other plugin pacakges

 -- David I. Lehn <dlehn@vt.edu>  Mon,  4 Jun 2001 17:33:20 -0400

gstreamer (0.2.0-0.1) unstable; urgency=low

  * GStreamer 0.2.0-pre1

 -- David I. Lehn <dlehn@vt.edu>  Thu, 31 May 2001 17:16:23 -0400

gstreamer (0.1.1.20010504-1) unstable; urgency=low

  * Latest CVS code

 -- David I. Lehn <dlehn@vt.edu>  Fri,  4 May 2001 21:48:45 -0400

gstreamer (0.1.1.20010430-2) unstable; urgency=low

  * Added -colorspace package for Hermes dependent conversion
  * Added -arts package for aRts sink

 -- David I. Lehn <dlehn@vt.edu>  Tue,  1 May 2001 19:46:08 -0400

gstreamer (0.1.1.20010430-1) unstable; urgency=low

  * Latest CVS code
  * Added -aa package for aasink output
  * Added -mad package for mad mp3 decoder

 -- David I. Lehn <dlehn@vt.edu>  Mon, 30 Apr 2001 18:25:52 -0400

gstreamer (0.1.1.20010320-1) unstable; urgency=low

  * Latest CVS code
  * enable main docs
  * disable broken plugin docs with new option

 -- David I. Lehn <dlehn@vt.edu>  Tue, 20 Mar 2001 18:15:19 -0500

gstreamer (0.1.1.20010315-1) unstable; urgency=low

  * Latest CVS code
  * Added man pages
  * Split mpeg2dec to seperate plugin
  * libgst Architectures updated to cothread supported archs

 -- David I. Lehn <dlehn@vt.edu>  Thu, 15 Mar 2001 20:17:19 -0500

gstreamer (0.1.1-1) unstable; urgency=low

  * New upstream release
  * disable docs build, broken at the momemnt

 -- David I. Lehn <dlehn@vt.edu>  Sun, 25 Feb 2001 17:58:25 -0500

gstreamer (0.1.0-2) unstable; urgency=low

  * debian/rules: call configure instead of autogen.sh

 -- David I. Lehn <dlehn@vt.edu>  Sat, 24 Feb 2001 18:31:36 -0500

gstreamer (0.1.0-1) unstable; urgency=low

  * Initial Release.

 -- David I. Lehn <dlehn@vt.edu>  Mon, 15 Jan 2001 18:25:18 -0500
