
Release notes for GStreamer 1.5.2


The GStreamer team is pleased to announce the second release of the unstable
1.5 release series. The 1.5 release series is adding new features on top of
the 1.0, 1.2 and 1.4 series and is part of the API and ABI-stable 1.x release
series of the GStreamer multimedia framework. The unstable 1.5 release series
will lead to the stable 1.6 release series in the next weeks, and newly added
API can still change until that point.


Binaries for Android, iOS, Mac OS X and Windows will be provided separately
during the unstable 1.5 release series.



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 plugins
gst-plugins-good
contains a set of well-supported plugins under our preferred license
gst-plugins-ugly
contains a set of well-supported plugins, but might pose problems for
    distributors
gst-plugins-bad
contains a set of less supported plugins that haven't passed the
    rigorous quality testing we expect, or are still missing documentation
    and/or unit tests
gst-libav
contains a set of codecs plugins based on libav (formerly gst-ffmpeg)



  

Bugs fixed in this release
     
      * 740502 : Add absolute property to GstDirectControlBinding
      * 740575 : Fixing DTS in GStreamer
      * 745366 : concat: Forward FLUSH_START / FLUSH_STOP events
      * 746949 : concat: Add active-pad property
      * 750027 : concat: Reset internal start offset to 0 after flushing seek
      * 750033 : basetransform - allow collation/separation of buffers
      * 750039 : Keeping buffers with shared memory alive
      * 750319 : memory: subclasses don't know map flags in unmap
      * 750530 : ptp: FreeBSD, DragonFly and other BSDs don't have ifreq.ifw_hwaddr
      * 750574 : netclientclock: Make the clock a wrapper clock around an internal clock
      * 750761 : inputselector: Handle different duration track selection
      * 750782 : pipeline: Add gst_pipeline_set_latency(), getter and GObject property
      * 751026 : basesink: Properly handle buffer lists for the last-sample property
      * 751047 : concat: Add adjust-base property
      * 751107 : concat: when releasing pad, send EOS appropriately.
      * 751235 : utils: get_compatible_pad does not fully respect filter caps
      * 751420 : basesink: need to deep-copy last buffer list in drain

==== Download ====

You can find source releases of gstreamer in the download
directory: http://gstreamer.freedesktop.org/src/gstreamer/

The git repository and details how to clone it can be found at
http://cgit.freedesktop.org/gstreamer/gstreamer/

==== Homepage ====

The project's website is 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

Please submit patches via bugzilla as well.

For help and support, please subscribe to and send questions to the
gstreamer-devel mailing list (see below for details).

There is also a #gstreamer IRC channel on the Freenode IRC network.

==== Developers ====

GStreamer is stored in Git, hosted at git.freedesktop.org, and can be cloned
from there (see link above).

Interested developers of the core library, plugins, and applications should
subscribe to the gstreamer-devel list.

        
Contributors to this release
    
      * Alison Chaiken
      * Carlos Rafael Giani
      * Edward Hervey
      * Hyunjun
      * Hyunjun Ko
      * Jan Schmidt
      * Jonas Holmberg
      * Lazar Claudiu
      * Mathieu Duponchelle
      * Matthew Waters
      * Nicolas Dufresne
      * Sebastian Dröge
      * Song Bing
      * Stefan Sauer
      * Thiago Santos
      * Tim-Philipp Müller
      * Руслан Ижбулатов
 