Release notes for GStreamer 1.0.0

The GStreamer project is pleased to announce the very first release of the
new API and ABI-stable 1.x series of the GStreamer multimedia framework.

The 1.x series is a stable series targeted at end users. It is not API or ABI
compatible with the 0.10.x series. It can, however, be installed in parallel
with the 0.10.x series and will not affect an existing 0.10.x installation.

Major improvements include: more flexible memory handling; extensible and
negotiable metadata for buffers; caps negotiation and renegotiation mechanisms,
decoupled from buffer allocation; improved caps renegotiation; automatic
re-sending of state for dynamic pipelines; reworked and more fine-grained pad
probing; simpler and more descriptive audio and video caps; more efficient
allocation of buffers, events and other mini objects; improved timestamp
handling; support for gobject-inspection-based language bindings; countless
other improvements.

Most of these changes involve the GStreamer plugin API. The application API
has changed comparatively little, and most applications should be fairly easy
to port to the new API. There is a porting guide available.

The GStreamer team would like to thank everyone who helped bring this release
about, whether by submitting patches, reporting bugs, testing, sponsoring
development, attending hackfests, or simply supplying moral support.

This is the end of a long development process, but also the beginning of
one. This release does not mark the pinnacle of perfection, but the point
where the team is content with the API and stability and quality of the code
base in general, especially compared to the old 0.10 series.

There will be bugs to fix, and starting from this release there will be
distinct bug-fixing and feature development cycles, with the goal of getting
bug-fixes out quicker and unencumbered by other more risky changes. See

  http://gstreamer.freedesktop.org/wiki/ReleasePlanning/RoadMap

for a tentative road map and possible schedule.

=== Modules

This module, gstreamer, only contains core functionality.
For actual media playback, you will also need other modules:

 gst-plugins-base : a basic set of well-supported plugins
 gst-plugins-good : a set of well-supported plugins under our preferred license
 gst-plugins-ugly : a set of well-supported plugins, but might pose problems
                        for distributors
 gst-plugins-bad  : a set of less supported plugins that haven't passed the
                        rigorous quality testing we expect
 gst-libav        : a set of codecs plugins based on libav (formerly gst-ffmpeg)

==== Download

You can find source releases of gstreamer in the download directory:

  http://gstreamer.freedesktop.org/src/gstreamer/

==== GStreamer Homepage

More details can be found on the project's website:

  http://gstreamer.freedesktop.org/

==== Support and Bugs

We use GNOME's bugzilla for bug reports and feature requests:

  http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer
 or
  http://gstreamer.freedesktop.org/bugs/

==== Developers

GStreamer is stored in Git, hosted at git.freedesktop.org, and can be
cloned from there. Interested developers of the core library, plugins, and
applications should subscribe to the gstreamer-devel list and/or pop into
our #gstreamer IRC channel on Freenode.

==== Contributors to this release

  Alban Browaeys 
  Alessandro Decina 
  Alexander Saprykin 
  Andoni Morales Alastruey 
  Andreas Frisch 
  Andre Moreira Magalhaes (andrunko) 
  Antoine Tremblay 
  Anton Belka 
  Arnaud Vrac 
  Bastian Winkler 
  Bastien Nocera 
  Brian Cameron 
  Christian Fredrik Kalager Schaller 
  Christophe Fergeau 
  Chun-wei Fan 
  Colin Walters 
  David Schleef 
  David Svensson Fors 
  Edward Hervey 
  Evan Nemerson 
  Fabrizio (Misto) Milo 
  Havard Graff 
  Idar Tollefsen 
  Jan Schmidt 
  Jason DeRose 
  Jens Georg 
  João Paulo Pizani Flor 
  Johan Boulé 
  Johan Dahlin 
  Josep Torra 
  Joshua M. Doe 
  Koop Mast 
  Lionel Landwerlin 
  Luis de Bethencourt 
  Mark Nauwelaerts 
  Matej Knopp 
  Miguel Angel Cabrera Moya 
  Mike Ruprecht 
  Oleksij Rempel 
  Olivier Crête 
  Peteris Krisjanis 
  Philippe Normand 
  Raimo Järvi 
  René Stadler 
  Reynaldo H. Verdejo Pinochet 
  Ryan Lortie 
  Sebastian Dröge 
  Sebastian Rasmussen 
  Sjoerd Simons 
  Sreerenj Balachandran 
  Stefan Kost 
  Stefan Sauer 
  Thiago Santos 
  Thibault Saunier 
  Thomas Vander Stichele 
  Tim-Philipp Müller 
  Víctor Manuel Jáquez Leal 
  Vincent Penquerc'h 
  Wim Taymans 
  Youness Alaoui 
  Руслан Ижбулатов
