
Release notes for GStreamer 1.3.3


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


This is hopefully the last 1.3 development release and will be followed by
the first 1.4.0 release candidate (1.3.90) in 1-2 weeks. Which then hopefully
is followed by 1.4.0 soonish in early July.


Binaries for Android, iOS, Mac OS X and Windows will be provided separately
during the unstable 1.3 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
     
      * 732007 : Rename GstGlobalDeviceMonitor
      * 703021 : Missing Gst.VERSION_MAJOR, Gst.VERSION_MINOR
      * 709224 : audio/videodecoder: Not returning GST_FLOW_EOS when after segment
      * 710268 : basetransform: cannot answer GST_QUERY_ALLOCATION if its src has ANY caps
      * 727746 : Factor buffer flags-to-string code
      * 729440 : docs: DeviceMonitor missing in generated doc
      * 729701 : baseparse: rate parameter from segment event could not pass to downstream
      * 730718 : POTFILES.in is out of date
      * 730982 : Minor annotation fixes
      * 731302 : gst_data_queue_new documentation is misleading
      * 731349 : queuearray: doesn't expand with initial size of 1, resulting in invalid memory access
      * 731355 : GstFlowCombiner not introspection-friendly
      * 731442 : bytereader: optimize _scan_for_start_code() using pointer access
      * 731541 : minor introspection fixes
      * 731704 : gst_caps_is_any() returns FALSE or flag value, not TRUE or FALSE
      * 731716 : funnel: fix eos handling and unit test case
      * 731756 : gstvalue: Speed up gst_value_intersect/_subtract
      * 731892 : gstvalue: Avoid expensive g_type_check_value_holds calls when dealing with fundamental GType
      * 727611 : bufferpool: Add _set_flushing() and new (active,flushing) state

==== 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
    
      * Edward Hervey
      * Evan Nemerson
      * Nicolas Dufresne
      * Olivier Crête
      * Philip Withnall
      * Piotr Drąg
      * Sebastian Dröge
      * Srimanta Panda
      * Sungho Bae
      * Thiago Santos
      * Tim-Philipp Müller
      * Vincent Penquerc'h
      * Wim Taymans
      * zhouming
 