
Release notes for GStreamer 0.10.15 "October"
        


The GStreamer team is proud to announce a new release
in the 0.10.x stable series of the
core of the GStreamer streaming media framework.


The 0.10.x series is a stable series targeted at end users.
It is not API or ABI compatible with the stable 0.8.x series.
It is, however, parallel installable with the 0.8.x series.


The 0.10.x series has been reworked for threadsafety.  It also features
various feature additions and enchancements.


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

gst-plugins-base
contains a basic set of well-supported plug-ins
gst-plugins-good
contains a set of well-supported plug-ins under our preferred license
gst-plugins-ugly
contains a set of well-supported plug-ins, but might pose problems for
    distributors
gst-plugins-bad
contains a set of less supported plug-ins that haven't passed the
    rigorous quality testing we expect



  

Features of this release
    
      * Changes for asynchronous sink management
      * New ts-offset property on basesink for adjusting clock synchronisation
      * New GstController LFO feature
      * Fixes and improvements in latency measurement for live pipelines
      * Additional documentation and docs fixes
      * Faster typefinding
      * More tag types added
      * Improvements in various core elements and parent classes
      * New unit tests
      * Allow dumping pipelines as dot graphs
      * GstStructures now support nesting
      * URIHandler interface can now be implemented in bindings
      * Many other bug-fixes and improvements

Bugs fixed in this release
     
      * 496722 : DSP/DSW files in win32/vs6 directory are in unix format
      * 476514 : [queue] Doesn't forward EOS event in all cases
      * 456573 : allow dumping pipelines as dot graphs
      * 475723 : cleanup static caps correctly
      * 480341 : Memory leak at fakesink (regression in cvs)
      * 349410 : Problems with type handling
      * 414539 : [API] Support more GST_TAG*_SORTNAME and remove MusicBrai...
      * 459717 : [Controller] Add GstLFOControlSource that provides values...
      * 459809 : [API] add GST_TAG_COMPOSER
      * 461598 : Commit Hungarian translations from TP
      * 461599 : Some files missing from POTFILES.in
      * 464366 : program including gst/gstbuffer.h does not compile with -...
      * 466595 : gst_index_add_association generates corrupted entries
      * 469402 : File uri handling on windows broken
      * 473846 : Deadlock if sink is unable to send first buffer
      * 474371 : Can't build libsgtcontroller with VS6
      * 474823 : tee unit test failure
      * 478347 : GST_STATIC_PAD_TEMPLATE macro causes warnings with g++-4.2
      * 478401 : gstbasesrc.c ref count bug
      * 479784 : GST_PLUGIN_DEFINE() doesn't accept BSD and MIT/X11 licences
      * 485343 : Implement a wait_eos function in basesink
      * 487969 : allow nested GstStructures
      * 492077 : Build issues on Windows/MSVC
      * 493134 : Wrong GstObject signals registration
      * 493983 : Build issues on Windows
      * 494343 : pre-release vs6 patch
      * 480858 : gstqueue code cleaning
      * 486758 : queue element fails to re-negotiate caps upstream when si...
      * 488201 : gst_segment_set_newsegment does not accumulate correctly
      * 492729 : PAUSED- > PLAYING returns ASYNC when triggered from bus han...
      * 494245 : [basesink] doesn't sync correctly if segment is in BYTES ...

API changed in this release
     
- API additions:
    
* gst_base_sink_get_last_buffer()
* GstBaseSink::last-buffer
* GstURIHandlerInterface::get_type_full
* GstURIHandlerInterface::get_protocols_full
* New tag: GST_TAG_ARTIST_SORTNAME
* New tag: GST_TAG_ALBUM_SORTNAME
* New tag: GST_TAG_TITLE_SORTNAME
* New tag: GST_TAG_COMPOSER
* gst_value_set_structure()
* gst_value_get_structure()
* GST_VALUE_HOLDS_STRUCTURE macro
* gst_bus_pop_filtered()
* gst_bus_timed_pop_filtered()
* gst_base_sink_wait_eos()
* gst_pad_peer_query()
* GstBaseSrc::do-timestamp
* gst_base_src_set_do_timestamp()
* gst_base_src_get_do_timestamp()
* GstBaseSink::ts-offset property
* gst_base_sink_set_ts_offset()
* gst_base_sink_get_ts_offset()
* GstBaseSink::async property
* gst_base_sink_set_async_enabled()
* gst_base_sink_is_async_enabled()
* gst_structure_get_uint()
* GstLFOControlSource and functions

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

Developers

CVS is hosted on cvs.freedesktop.org.
All code is in CVS and can be checked out from there.
Interested developers of the core library, plug-ins, and applications should
subscribe to the gstreamer-devel list. If there is sufficient interest we
will create more lists as necessary.

        
Applications

Applications ported to GStreamer 0.10 include Totem, RhythmBox, Sound-Juicer,
Gnome Media, Flumotion, Amarok, Jamboree, Pitivi, Istanbul, AnnoAmp, Elisa, and others.
Let us know if you want to be added to this list.

  
Contributors to this release
    
      * 
      * Benoit Fouet
      * David Nečas
      * Edgard Lima
      * Edward Hervey
      * Felipe Contreras
      * Gabor Kelemen
      * Jan Schmidt
      * Jan Schmidt - Sun Microsystems
      * Jorge González González
      * Julien MOUTTE
      * Michael Smith
      * Murray Cumming
      * Ole André Vadla Ravnås
      * Philippe Kalaf
      * Sebastian Dröge
      * Sebastien Moutte
      * Stefan Kost
      * Steve Fink
      * Thomas Vander Stichele
      * Tim-Philipp Müller
      * Wim Taymans
 