
Release notes for GStreamer 1.5.2


The GStreamer team is pleased to announce the first 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
      * Руслан Ижбулатов
 