
Release notes for GStreamer 1.7.2

The GStreamer team is pleased to announce the second release of the unstable
1.7 release series. The 1.7 release series is adding new features on top of
the 1.0, 1.2, 1.4 and 1.6 series and is part of the API and ABI-stable 1.x release
series of the GStreamer multimedia framework. The unstable 1.7 release series
will lead to the stable 1.8 release series in the next weeks. Any 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.7 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
     
      * 720778 : gst-uninstalled requires building with libtool
      * 745939 : funnel: modify debug message for a better debugging
      * 753899 : baseparse: push sticky events to downstreams for initial prerolling
      * 758668 : controlsource: fix GetValue and GetValueArray documentation
      * 760003 : gst_parse_launch: warn if we're still waiting to plug sub-pipelines after no-more-pads
      * 760267 : tracer: how to pass and structure tracing data (GstStructure, GVariant, etc.)
      * 760421 : info: expose custom vasprintf implementation
      * 760479 : basesrc: Only respond to duration/position queries if the quantity is valid
      * 760598 : gstnetclientclock: memory leak in handling gst_ntp_packet_receive errors
      * 760757 : systemclock: incorrect handling of wait requests
      * 760762 : tracer: Fix compiler warnings on 32-bit systems
      * 760767 : gst: ref/unref new enum types in gst_init/deinit
      * 760821 : tracerrecord: Fix memory leaks and mishandlings
      * 761071 : tests: gstinfo: Fix string memory leak
      * 761273 : typefind: " Stream contains not enough data " is bad grammar
      * 761586 : systemclock: regression causing audiomixer to stall
      * 761824 : bufferpool: pass acquire params to alloc_buffer
      * 761901 : harness: fix up docs to reference functions properly
      * 761904 : gstharness: Unset sink_forward_pad before tearing down sink_harness
      * 761905 : gstharness: enable empty harness creation and refactor around this
      * 761906 : testclock: add crank method
      * 761909 : gstharness: Fix docs for stress test functions
      * 761910 : gstharness: Fix MT issues when forwarding event/query to sink harness
      * 761913 : ghostpad: Do nothing in _internal_activate_push_default
      * 761914 : gstharness: always set our test-clock on the harnessed element
      * 761917 : check: Add tcase_skip_broken_loop_test convenience macro
      * 761919 : check: fix unused parameter
      * 761931 : harness: fix the race in blocking push mode
      * 761932 : gstharness: Add event stress test functions with callback
      * 761970 : pushsrc: fix minor typo in header
      * 760732 : gsttracer.h uses private header file gsttracerutils

==== Download ====

You can find source releases of gstreamer in the download
directory: https://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 https://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
    
      * Aleksander Wabik
      * Alex Henrie
      * Aurélien Zanelli
      * Carlos Rafael Giani
      * Edward Hervey
      * Evan Nemerson
      * Florin Apostol
      * Havard Graff
      * HoonHee Lee
      * Jan Schmidt
      * Julien Isorce
      * Luis de Bethencourt
      * Martin Kelly
      * Matej Knopp
      * Matthew Waters
      * Mikhail Fludkov
      * Nirbheek Chauhan
      * Philip Van Hoof
      * Sebastian Dröge
      * Stefan Sauer
      * Stian Selnes
      * Thiago Santos
      * Thibault Saunier
      * Tim-Philipp Müller
      * Vineeth TM
      * Víctor Manuel Jáquez Leal
 