
Release notes for GStreamer 0.10.26 "Think Twice"
        


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 enhancements.


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
    
      * Threadsafe design and API
      * registry: do plugin scanning (on *nix) using an external helper binary
      * lots of performance improvements all over the place (ghostpads,
        multiqueue, pad construction, superfluous type checks, registry loading)
      * add GstByteWriter, a simple generic byte writer
      * filesink: Use _wfopen on win32 to open files with non-ascii filenames correctly.
      * queue2: add option to remove the temp-file (enabled by default)
      * it is now allowed to use gst_caps_set_simple() on non-simple caps
      * queue2: move from gst-plugins-base into the coreelements plugin in core
        (this means you may need to remove libgstqueue2.so manually if you
        installed from source and don't do make uninstall before upgrading, or
        combine an older -base with a newer core)
      * multiqueue: add support for buffering mode where we post BUFFERING
        messages based on the level of the queues
      * typefind: speed up typefinding a lot by first trying the typefinder for
        the file's extension
      * buffer: remove private/internal subbuffer subclass and keep track of
        the parent buffer directly in the GstBuffer structure (this removes
        quite a bit of special-casing and will allow for future improvements/
        extensions that are harder to do if there's a separate subbuffer class.
      * collectpads: add ability to install clipping functions
      * new tags for TV/Radio shows/episodes, lyrics, composer sortname and
        grouping
      * miniobject: avoid race when recycling buffers
      * basesrc: fix race in PLAYING->PAUSED->PLAYING

Bugs fixed in this release
     
      * 476514 : [multiqueue] Doesn't forward EOS event in all cases
      * 590941 : API: add gst_pad_get_caps() variant that avoids unneeded caps copies
      * 595602 : g_child_proxy_get_valist doesn't initialize GValue correctly
      * 535069 : basesrc no longer support non-flushing seeks on itself
      * 560442 : GNOME Goal: Remove deprecated GLib symbols
      * 595511 : Annotations for gst_element_query_{position,duration}
      * 595886 : gst_pad_fixate_caps() does not return fixed caps in case of multiple structures
      * 595964 : [multiqueue] can hang pipeline during startup
      * 596366 : proxy_getcaps reverses direction of getcaps
      * 597407 : GstPipeline calculates base_time incorrectly when a new clock appears during PAUSED state
      * 597550 : basesrc: sometimes no buffers produced after PLAYING - PAUSED - PLAYING
      * 597690 : Improve caps setters API
      * 598297 : make check fails when any --disable option which changes the API has been used
      * 598526 : bytewriter: fails to compile with gcc 4.2.4 on Ubuntu Hardy 64 bits
      * 598700 : scripts: Parallelise git-update.sh build script
      * 598895 : [GstRegistry] Use hash table for feature lookups
      * 598896 : [GstRegistry] Cache lists of ElementFactory and TypeFindFactory
      * 599147 : typefind : Avoid having to re-sort the typefind factory list
      * 599759 : [qtdemux] Add support for more tags
      * 600313 : Visualisations stop updating after seek
      * 600922 : gst-launch: wake up less often to check for Ctrl-C
      * 601587 : MiniObject race condition
      * 601668 : [gstregistry] gstregistry.c uses a variable from gst.c
      * 601669 : [tests] tests/examples/manual depends on libgstcheck
      * 602093 : libgstcheck fails to export some symbols when built under et_EE locale
      * 602275 : [API] Add new sink-message event
      * 602419 : [basesink] Regression with position reporting
      * 603059 : Totem crashes when DVD is encrypted but libdvdcss isn't available
      * 603787 : [registry] Doesn't use GMappedFile
      * 604091 : tee: cleanup requestpads in dispose
      * 604093 : gst-inspect/launch: move gst_tools_print_version to avoid glib warning
      * 605251 : tee causes segfault if there is no source pad
      * 605930 : [shave] common/shave not existing yet when configure checks need it
      * 606435 : gsttee not threadsafe
      * 607283 : segfaults and/or miniobject warnings with GLib > = 2.23.2
      * 607317 : [PATCH] fix unaligned detection for x86-64 when cross compiling
      * 607431 : update common modules before freeze
      * 607481 : Should define G_THREADS_MANDATORY everywhere
      * 607739 : [queue2] Temporary file is removed although code claims the opposite
      * 607842 : Audio comes out with short breaks after resume pipeline (paused- > playing)
      * 608136 : multiqueue handles UNEXPECTED flowreturn wrongly
      * 608398 : Initializing the glib thread system seems not to work
      * 608442 : [filesrc] typo in warning message
      * 608726 : bytewriter: mistake in .h/.c function naming
      * 609166 : Buffer list docs ascii art
      * 590669 : [API] need GstByteWriter or GstChunkWriter
      * 601698 : Rename new plugin-scanner helper executable before release
      * 604565 : [gstcheck] Update check to 0.9.8
      * 596877 : New internal libcheck breaks the Solaris build

API changed in this release
     
- API additions:
    
* GST_DEBUG_REGISTER_FUNCPTR()
* gst_base_src_new_seamless_segment()
* gst_event_new_sink_message()
* gst_event_parse_sink_message()
* gst_util_fraction_add()
* gst_util_fraction_multiply()
* gst_util_greatest_common_divisor()
* gst_util_double_to_fraction()
* gst_util_fraction_to_double()
* gst_registry_get_feature_list_cookie()
* gst_default_registry_get_feature_list_cookie()
* gst_pad_get_caps_reffed()
* gst_pad_peer_get_caps_reffed()
* gst_structure_id_has_field()
* gst_structure_id_has_field_typed()
* gst_plugin_feature_list_copy()
* gst_caps_set_value()
* gst_byte_writer_ensure_free_space()
* gst_byte_writer_free()
* gst_byte_writer_free_and_get_buffer()
* gst_byte_writer_free_and_get_data()
* gst_byte_writer_get_remaining()
* gst_byte_writer_init()
* gst_byte_writer_init_with_buffer()
* gst_byte_writer_init_with_data()
* gst_byte_writer_init_with_size()
* gst_byte_writer_new()
* gst_byte_writer_new_with_buffer()
* gst_byte_writer_new_with_data()
* gst_byte_writer_new_with_size()
* gst_byte_writer_put_data()
* gst_byte_writer_put_float32_be()
* gst_byte_writer_put_float32_le()
* gst_byte_writer_put_float64_be()
* gst_byte_writer_put_float64_le()
* gst_byte_writer_put_int16_be()
* gst_byte_writer_put_int16_le()
* gst_byte_writer_put_int24_be()
* gst_byte_writer_put_int24_le()
* gst_byte_writer_put_int32_be()
* gst_byte_writer_put_int32_le()
* gst_byte_writer_put_int64_be()
* gst_byte_writer_put_int64_le()
* gst_byte_writer_put_int8()
* gst_byte_writer_put_string_utf16()
* gst_byte_writer_put_string_utf32()
* gst_byte_writer_put_string_utf8()
* gst_byte_writer_put_uint16_be()
* gst_byte_writer_put_uint16_le()
* gst_byte_writer_put_uint24_be()
* gst_byte_writer_put_uint24_le()
* gst_byte_writer_put_uint32_be()
* gst_byte_writer_put_uint32_le()
* gst_byte_writer_put_uint64_be()
* gst_byte_writer_put_uint64_le()
* gst_byte_writer_put_uint8()
* gst_byte_writer_reset()
* gst_byte_writer_reset_and_get_buffer()
* gst_byte_writer_reset_and_get_data()
* gst_bit_reader_get_size()
* gst_byte_reader_get_size()
* gst_data_queue_new_full()
* gst_collect_pads_set_clip_function()
* gst_type_find_helper_get_range_ext()
- API deprecations:
    
* gst_registry_xml_read_cache()
* gst_registry_xml_write_cache()

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

GStreamer is stored in Git, hosted at git.freedesktop.org, and can be cloned 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
    
      * Andoni Morales Alastruey
      * Bastien Nocera
      * Benjamin Otte
      * Christian Schaller
      * David Schleef
      * Edward Hervey
      * Frederic Crozat
      * Havard Graff
      * Håvard Graff
      * Jan Schmidt
      * Javier Jardón
      * Johan Bilien
      * LRN
      * Mark Nauwelaerts
      * Michael Smith
      * Ole André Vadla Ravnås
      * Olivier Crête
      * Peter Kjellerstedt
      * Peter van Hardenberg
      * Priit Laes
      * Rob Clark
      * Robert Swain
      * Sebastian Dröge
      * Stefan Kost
      * Thiago Santos
      * Thiago Sousa Santos
      * Thijs Vermeir
      * Tim-Philipp Müller
      * Tommi Myöhänen
      * Wim Taymans
      * Руслан Ижбулатов
 