This is GStreamer 0.10.23 "Alaboo Alaboo"

Changes since 0.10.22:
      * Support files > 4GB on Windows
      * Controller interpolation fixes
      * Add timer support to GstPoll and use it for clocking
      * Attempt to typefind contents from the file extension if all else fails
      * GStreamer revision control switched to Git
      * Many other bug fixes and improvements

Bugs fixed since 0.10.22:
     
      * 579177 : GstInfo: maintain ABI compatibility
      * 163577 : [RFC] Interlaced/progressive media support in GStreamer.
      * 574160 : collectpads does not reliably eos when last pad is removed
      * 575598 : hierarchical pipelines accumulate segment-done wrongly
      * 575922 : disabling subsystems cause API break
      * 576842 : loading a broken registry file can crash
      * 555978 : [ladspa] no elements exposed/found on Cygwin
      * 565607 : Broken macros in gsturi.h and gstinterface.h
      * 566936 : [ghostpads] unlink function wrongly called on target
      * 567692 : gstinfo.h header not compatible with C++
      * 567725 : [qtdemux] stopping at a time sometimes shows a different ...
      * 568289 : gst_pad_template_new() leaks caps it's supposed to take o...
      * 568438 : gst_poll_wait calling read() on control socket
      * 568481 : GStreamer linking failures.
      * 568632 : __MSVCRT_VERSION__ not defined with mingw, causing " stora...
      * 568678 : filesrc doesn't logs offsets
      * 570910 : Removing the target of a ghostpad does not re-target the ...
      * 571227 : Add home page tag
      * 571559 : [API] add GST_PARAM_MUTABLE_PLAYING etc. to indicate vali...
      * 572480 : unref and copy functions should not be macros
      * 573623 : [API] Array binary search utility function
      * 574024 : [GstAdapter] gst_adapter_push should not accept empty buf...
      * 574211 : gst_poll_*_control always returns FALSE on Windows
      * 574213 : [gstcheck] fix for libcheck > 0.9.6
      * 574241 : gst_tag_list_add and gst_tag_list_add_values behave incon...
      * 574484 : [patch] Make caps in DOT debug graphs more readable
      * 574623 : [dot_file_with_ts] ':' not a valid character for a filename
      * 574805 : [capsfilter] Doesn't reset the internal suggestion with A...
      * 575695 : build fails on OpenSolaris due to incorrect header file i...
      * 575814 : flag for EOS on gst-launch when exiting with ctrl-c
      * 576381 : [basesink] QoS: emergency rendering not always done
      * 576563 : pidgin crashes on exit in gst_plugin_ext_dep_free()
      * 576582 : A patch to enable the use of 'name' in Enum parameters
      * 577887 : Missing GST_DISABLE_GST_DEBUG in gstregistrybinary.c
      * 577891 : add alloc-pad property on tee
      * 578114 : API: add two new log levels: FIXME and MEMDUMP
      * 578201 : _gst_plugin_fault_handler_is_setup undefined under HAVE_W...
      * 579127 : gst-launch: disable CLOCK_LOST message handling
      * 580121 : race condition in GStreamer state changes causes problems...
      * 361155 : Add monotonic clock
      * 517231 : threadsafe/colored windows logging
      * 572591 : Another batch of " differs in signedness " warnings
      * 573823 : pad block callback if it is re-blocked while the previous...
      * 574163 : Fix gst_pad_activate_pull deactivation with unlinked element
      * 575682 : Add gst_pad_is_compatible()
      * 575988 : On Windows filesink can't write files longer than 2-4 GiB...

API additions since 0.10.22:
    
      * New FIXME and MEMDUMP debug levels
      * gst_tag_list_get_buffer() and gst_tag_list_get_buffer_index()
      * New tags: GST_TAG_SUBTITLE_CODEC, GST_TAG_HOMEPAGE
      * gst_util_array_binary_search()
      * gst_message_new_request_state(), gst_message_parse_request_state(), GST_MESSAGE_REQUEST_STATE
      * GstPoll::gst_poll_new_timer()
      * GstPoll::gst_poll_write_control()
      * GstPoll::gst_poll_read_control()

Changes since 0.10.21:

      * GstController improvements
      * Extensions to the latency setting behaviours
      * Ability for plugins to register dependencies to trigger re-scanning
      * Optimisations in some common operations on caps and values and elsewhere
      * Add sequence numbers to events so dependent events can be associated with
        the event that caused them
      * New macros for reading and writing float values
      * Many improvements in the basesink base class
      * Support non-default main contexts for GstBus watches
      * Improvements in pull-mode scheduling of sinks
      * Fixes for alignment issues on sparc
      * Ghost pad fixes
      * New bit-reader assistance API
      * Many other bug fixes and improvements
      
Bugs fixed since 0.10.21:

      * 567002 : --gst-disable-registry-update also skips registry creation
      * 350477 : [Registry] Provide a way for plugins to delegate the 'cha...
      * 510354 : post GST_MESSAGE_STRUCTURE_CHANGE when linking and unlink...
      * 526044 : Crash if there is more than one watcher for a GstBus
      * 539108 : gst_ghost_pad_new() does more than call g_object_new()
      * 544003 : [parse] Links to wrong pad if no padtemplate name is given
      * 544293 : rtspsrc / gstpoll regression
      * 545714 : GST_READ_UINT_* and GST_WRITE_UINT_* are not always safe ...
      * 548786 : [win32] search for plugins based on location of DLL
      * 551676 : Small Memleak fix in gst_pad_link_check_compatible_unlocked
      * 552778 : add free_func in gstbuffer instances
      * 553554 : [base] Add a generic bit reader
      * 553874 : query_position broken during seek
      * 555196 : Move floating point endian conversion macros into core
      * 555307 : Need to push latency event into the pipeline
      * 555631 : Banshee crashes; gstreamer GST_CAPS GST_IS_CAPS warnings
      * 556091 : libtool-2.2 and old gettext don't mix
      * 556900 : a copy & paste bug in helloworld example
      * 557154 : Allow totem to run without write-access to home directory
      * 557300 : libgstnet needs to link against $(WIN32_LIBS)
      * 557438 : Gstreamer crashes when Banshee supposed to change track
      * 557649 : GstBaseTransform can cause ivalid memory references
      * 559250 : segments need identifiers.
      * 560301 : Add --plugin to gst-inspect
      * 560360 : Excessive statting when reading binary cache
      * 560399 : Unnecessary CRC checksum for binary registry cache
      * 560442 : GNOME Goal: Remove deprecated GLib symbols
      * 561501 : g_type_class_ref without unref
      * 562170 : GstBus watch doesn't work with non-default main context
      * 562949 : [API] Add an URI query type for querying the source/sink URI
      * 564863 : Caps are not propagated from a ghostpad's target to the g...
      * 567225 : volatile gonce_data in BOILERPLATE not initialized to 0
      * 566393 : [deadlock] Setting index on a pipeline

API added since 0.10.21:

      * Add bit reader and byte reader classes.
      * gst_message_new_structure_change()
      * gst_message_parse_structure_change()
      * GST_BUFFER_FREE_FUNC()
      * Add GST_READ_UINT24_(LE|BE) and GST_WRITE_UINT24_(LE|BE).
      * GstBaseSrc::gst_base_src_set_blocksize()
      * GstBaseSrc::gst_base_src_get_blocksize()
      * GstBaseSink::gst_base_sink_set_blocksize()
      * GstBaseSink::gst_base_sink_get_blocksize()
      * GstBaseSink::blocksize
      * GstBaseSink::gst_base_sink_do_preroll()
      * Add gst_byte_reader_get_data and gst_byte_reader_peek_data 
      * Move float endianness conversion macros from libgstfloatcast to core
      * gst_util_seqnum_next, gst_util_seqnum_compare
      * gst_event_get_seqnum, gst_event_set_seqnum
      * gst_message_get_seqnum, gst_message_set_seqnum
      * GstSeekFlags::GST_SEEK_FLAG_SKIP 
      * gst_bin_recalculate_latency()
      * GstBin::do-latency
      * gst_tag_setter_reset_tags()
      * gst_query_new_uri, gst_query_set_uri, gst_query_parse_uri
      * add gst_plugin_add_dependency()
      * add gst_plugin_add_dependency_simple()


Changes since 0.10.20:

      * Basetransform rework
      * Basesink synchronisation extensions
      * New documentation
      * Many bug fixes, enhancements and optimisations

Bugs fixed since 0.10.20:

      * 481169 : [tag] add support for geo tags (gps location etc.)
      * 520694 : adding GST_TAG_KEYWORDS
      * 538201 : deleting the control point at ts=0 does not lower the con...
      * 544855 : fakesrc and fakesink should call super::event()
      * 339795 : [GstBaseTransform] Reverse negotiation issues in passthro...
      * 348114 : [PPC64?] [gcc-4.1.2?] GST_BUFFER_IN_CAPS flag should have...
      * 361718 : [basetransform] needs API to force renegotiation
      * 533856 : gst_buffer_join() documentation is unclear
      * 536978 : GTKDOC_CFLAGS should include CFLAGS
      * 537804 : [multiqueue] wrongly reporting that the queue is full.
      * 537812 : [check] add api to setup a pad by name
      * 538568 : Add GST_TAG_ATTACHMENT
      * 539772 : gst_pad_template_new() does more than call g_object_new()
      * 542175 : gst-inspect --gst-plugins-path fails with multiple direct...
      * 543444 : gst_base_sink_get_position can return 0 unexpectedly
      * 543853 : Bison version check failure on OSX 10.4 Tiger
      * 544174 : [basesrc] allow dynamic value of the seekable value.
      * 544776 : [win32] binary registry may fail if glib is using a diffe...
      * 545352 : gsturi is too restrictive
      * 545603 : gst-inspect: don't print uri handler when compiled withou...
      * 545605 : gstelementfactory: don't use uri handler code without uri...
      * 545607 : gst: include gstconfig when using macros defined therein
      * 545853 : [basetransform] rewrite
      * 546328 : fractions with G_MAXINT cause failure for fixation
      * 546822 : gstreamer doesn't tell gettext to output its translations...
      * 547277 : filesrc detect if a file is seekable using SEEK_SET and n...
      * 547728 : [basetransform] fail on buffer_alloc 
      * 548394 : basesink should ignore EOS during flushing
      * 548652 : [Inconsistency] GST_TAG_LOCATION is used for different me...
      * 549504 : Thread-safe version of gst_pad_get_internal_links()
      * 551952 : Need 'check' package when compile
      * 551978 : Memleak in gst_element_sync_state_with_paren
      * 547835 : tee release_request_pad while buffer_alloc racyness
      * 538628 : Patch: added a timeout property to fdsrc used in gst_poll...
      * 546883 : [basetransform] ximagesink fails when resizing video window
      * 551509 : gst_base_transform_prepare_output_buffer: assertion faile...

API added since 0.10.20:

      * Add GST_TAG_ATTACHMENT for generic file attachments to streams.
      * Add gst_base_sink_set_render_delay()
      * Add gst_base_sink_get_render_delay()
      * Add gst_check_setup_src_pad_by_name
      * Add gst_check_setup_sink_pad_by_name
      * Add gst_check_teardown_pad_by_name
      * Add GstBaseTransform::gst_base_transform_suggest()
      * GstBaseTransform::gst_base_transform_reconfigure()
      * GstPad::gst_pad_set_iterate_internal_links_function()
      * GstPad::GstPadIterIntLinkFunction
      * GstPad::gst_pad_iterate_internal_links()
      * GstPad::gst_pad_iterate_internal_links_default()

API deprecated since 0.10.20:

      * gst_pad_get_internal_links()
      * gst_pad_set_internal_link_function()
      * gst_pad_get_internal_links_default()

Changes since 0.10.19:

      * Add the Presets interface
      * Use the binary registry by default
      * Deprecate gst_element_get_pad and don't use it anywhere any more.
      * Reverse playback fixes
      * API to get missing element messages from parse_launch parsing.
      * Fixes in latency calculations
      * BaseTransform negotiation fixes
      * New Buffering query and messages
      * Fix multiqueue deadlocks when changing limits
      * Remove pre-generated parser hacks and require newer flex/bison
      * Use GSlice in more places
      * Use static strings in property declarations everywhere to save memory
        allocations
      * Fix unaligned memory accesses with the binary registry and add CRC
        checks
      * Lots of other bug fixes

Bugs fixed since 0.10.19:

      * 535069 : basesrc no longer support non-flushing seeks on itself
      * 522882 : Add a configure option to enable/disable OPTION_PARSING i...
      * 396779 : Preset interface for elements
      * 359653 : GStreamer Binary Registry patch
      * 401456 : [API] Rename gst_bin_find_unconnected_pad to gst_bin_find...
      * 446763 : [identity] leaks events in single segment mode
      * 459862 : typefinding coud be more efficient
      * 461253 : Crash when gst_base_transform_prepare_output_buffer is se...
      * 489269 : valgrind option parameter invalid for valgrind 2.2 
      * 508070 : gstreamer crashes whilst trying to read .so files in .deb...
      * 512577 : GstTagMergeMode doc has slightly incorrect explanation
      * 512578 : gst_tag_setter_merge_tags can mess up with KEEP_ALL merge...
      * 514507 : gst-xmlinspect outputs text instead of xml for plugins
      * 518022 : [libgstnet] MSVC 6.0 compile error due to socklen_t
      * 518932 : Expose gst_segment_copy() to facilitate wrapping of GstSe...
      * 520468 : Add a Env to enable/disable scan_and_update_registry for ...
      * 522326 : use of 'char*' instead of 'const char*' in gst_caps_set_s...
      * 523798 : [API] Some GstMiniObject enhancements
      * 523806 : Should use G_PARAM_STATIC_(NAME|NICK|BLURB) when possible
      * 523978 : Documentation fixes. 
      * 523985 : [PATCH] [identity] meta-writes buffers without meta-writa...
      * 524659 : Add specific error code for encrypted streams (e.g. WMA/A...
      * 525532 : [fakesink/fakesrc/identity] Uses GObject marshallers for ...
      * 526042 : [identity] check-imperfect-timestamp doesn't handle new s...
      * 526236 : mingw32 gstpoll compilation fix
      * 526247 : Actually build dlls when cross-compiling with mingw32
      * 526705 : GstIndexResolver uses nickname field as description field
      * 526768 : Basetransform bufferalloc passing through too easily
      * 526814 : [API] add gst_pad_add_{data,event,buffer}_probe_full() wi...
      * 527967 : gst_gerror_get_type is not thread safe
      * 528187 : Get missing elements from gst_parse_launch()
      * 528868 : URI schemes/protocols should be handled case insensitive
      * 529148 : Make gstqueue give the right min latency
      * 530317 : GType registration error - race condition when parallel c...
      * 530637 : queue leak on capacity change
      * 531538 : Race between gst_bus_set_flushing and async bus watches
      * 533490 : gst_message_new_warning() should take const gchar*
      * 533635 : gst_event_new_tag() documentation should say it takes own...
      * 533740 : [API] add gst_typefind_suggest_simple()
      * 533865 : gst_element_get_pad() should really be deprecated
      * 534258 : basesink not accumulated time in some cases.
      * 535218 : gst_base_src_send_event will block if basesrc is blocking...
      * 536723 : Misspelled word in error string
      * 536744 : Must link to libdl if dladdr() is used
      * 536780 : gcc 4.3.0 compile warnings
      * 536857 : DATADIR definition conflicts with windows headers
      * 525961 : Build fails on darwin
      * 535285 : Correct reference to GST_URI_UNKNOWN in gst_element_facto...

API added since 0.10.19:

      * Add GST_IS_PARAM_SPEC_MINI_OBJECT, GST_PARAM_SPEC_MINI_OBJECT
        GST_TYPE_PARAM_MINI_OBJECT and gst_value_dup_mini_object
      * typefind::force-caps
      * gst_message_set_buffering_stats()
      * gst_message_parse_buffering_stats()
      * GST_QUERY_BUFFERING
      * GstBufferingMode
      * gst_query_new_buffering()
      * gst_query_set_buffering_percent()
      * gst_query_parse_buffering_percent()
      * gst_query_set_buffering_stats()
      * gst_query_parse_buffering_stats()
      * gst_query_set_buffering_range()
      * gst_query_parse_buffering_range()
      * GST_STREAM_ERROR_DECRYPT
      * GST_STREAM_ERROR_DECRYPT_NOKEY
      * gst_segment_copy()
      * gst_pad_add_data_probe_full()
      * gst_pad_add_buffer_probe_full()
      * gst_pad_add_event_probe_full()
      * GstEvent::gst_event_has_name()
      * GstFakeSrc:format
      * gst_type_find_suggest_simple()
      * GstBaseSink::gst_base_sink_wait_clock()
      * gst_parse_launch_full()
      * gst_parse_launchv_full()
      * gst_parse_bin_from_description_full()
      * gst_parse_context_new()
      * gst_parse_context_free()
      * gst_parse_context_get_missing_elements()
      * gst_bin_find_unlinked_pad()
      * GstPreset interface

API deprecated since 0.10.19:

      * gst_element_get_pad -
        use gst_element_get_static_pad or gst_element_get_request_pad
      * gst_atomic_int_set() - g_atomic_int_set from GLib
      * gst_bin_find_unconnected_pad()

Changes since 0.10.18:

      * Fix a regression in raw fd handling

Bugs fixed since 0.10.18:
     
      * 524041 : gstfdsrc broken in 0.10.18

Changes since 0.10.17:
        
      * New GstPoll abstraction simplifies operations on multiple fd's/sockets
      * Various bug fixes and corrections
      
Bugs fixed since 0.10.17:
      
      * 516187 : adding gst_collect_pads_read_buffer () collectpads
      * 516395 : gst_buffer_create_sub does not copy flags
      * 520756 : different registry backend configurations cause build errors
      * 498222 : configure improvements
      * 499127 : [multiqueue] has no documentation
      * 505417 : Add GstPoll to core
      * 509559 : [gstinfo]_gst_debug_init() memory leak
      * 510194 : segmentation fault when trying to link elements.
      * 511783 : [API] [check] add gst_check_element_push_buffer_list() etc.
      * 513964 : [GstPad] gst_pad_get_caps don't return a copy of the caps
      * 515469 : patch to add gst_index_set_resolver_full
      * 519584 : gst_element_implements_interface() segfaults with 'filesr...
      * 519698 : g_free/xmlFree mismatches in gstregistryxml
      * 520152 : Core uses non-portable size_t and ssize_t
      * 520671 : GstPoll needs to be ported to Windows
      * 520808 : GstPoll's API could need some changes for Windows
      * 520877 : registrybinary.c doesn't build cleanly on Windows/MSVC
      * 521740 : libgstreamer.def exports not up to date
      * 522741 : regression: gst_index_entry_free() frees string it does n...

Changes since 0.10.16:

      * Fix compilation on environments that have POSIX timers but not
        monotonic clocks

Bugs fixed since 0.10.16:
      
      * 512715 : gst/gstutils.c and HAVE_MONOTONIC_CLOCK

Changes since 0.10.15:

      * Monotonic/Posix clock support
      * Dumping of dot-file graph descriptions for debugging
      * Clean-up of exported symbols
      * Many bug-fixes and enhancements

Bugs fixed since 0.10.15:

      * 497859 : --disable-gst-debug option fails compilation
      * 339279 : [gst.URIHandler] interfaces with class-global virtual met...
      * 498694 : Patches to avoid g_signal_emit(SIGNAL_HANDOFF) on identit...
      * 498746 : basesink is forwarding downstream events
      * 498767 : Hangs after end of tracks since 0.10.15
      * 498924 : deprecate GST_PLUGIN_DEFINE_STATIC because it's not portable
      * 499007 : [gst-plot-timeline] more options
      * 499140 : Add check to ensure .def files are kept up-to-date
      * 500143 : Some small improvements (limiting realloc and CPU usage )
      * 500150 : [filesink] add property to enable buffering via setvbuf()
      * 501560 : gst_(caps|structure)_from_string() crash if structure nam...
      * 503131 : g_intern_string SUSE 10.2
      * 503231 : Change to GST_BUFFER_FLAG_GAP meaning can break with base...
      * 503417 : Build failure due uninitialized variable in function 'gst...
      * 503590 : gstreamer-0.10.15 fails tests on ppc64
      * 503675 : broken registry files written to disk
      * 504499 : Messages from check no longer contain the test case name
      * 505799 : iSight camera does not work in gstreamer
      * 506643 : crash in fixate_value/gst_value_init_and_copy on empty li...
      * 507957 : clean-up incomplete function declarations
      * 508175 : GST_TIMEVAL_TO_TIME() and GST_TIMESPEC_TO_TIME() need to ...
      * 510187 : gst_plugin_register_static() API review and GST_PLUGIN_DE...
      * 510747 : Use $(MAKE) instead of make to fix the build if GNU make ...
      * 511750 : Configure of prereleases 15.2-15.4 fail in OpenEmbedded M...

API additions since 0.10.15:

* GstIdentity::signal-handoffs
* gst_util_get_timestamp()
* gst_base_transform_set_gap_aware()
* GstFileSink::buffer-mode
* GstFileSink::buffer-size
* gst_plugin_register_static()

API deprecated since 0.10.15:

* GST_PLUGIN_DEFINE_STATIC()

Changes since 0.10.14:

      * Changes for asynchronous sink management
      * New ts-offset property on basesink for adjusting clock synchronisation
      * New GstController LFO feature
      * Fixes and improvements in latency measurement for live pipelines
      * Additional documentation and docs fixes
      * Faster typefinding
      * More tag types added
      * Improvements in various core elements and parent classes
      * New unit tests
      * Allow dumping pipelines as dot graphs
      * GstStructures now support nesting
      * URIHandler interface can now be implemented in bindings
      * Many other bug-fixes and improvements

Bugs fixed since 0.10.14:

      * 496722 : DSP/DSW files in win32/vs6 directory are in unix format
      * 476514 : [queue] Doesn't forward EOS event in all cases
      * 456573 : allow dumping pipelines as dot graphs
      * 475723 : cleanup static caps correctly
      * 480341 : Memory leak at fakesink (regression in cvs)
      * 349410 : Problems with type handling
      * 414539 : [API] Support more GST_TAG*_SORTNAME and remove MusicBrai...
      * 459717 : [Controller] Add GstLFOControlSource that provides values...
      * 459809 : [API] add GST_TAG_COMPOSER
      * 461598 : Commit Hungarian translations from TP
      * 461599 : Some files missing from POTFILES.in
      * 464366 : program including gst/gstbuffer.h does not compile with -...
      * 466595 : gst_index_add_association generates corrupted entries
      * 469402 : File uri handling on windows broken
      * 473846 : Deadlock if sink is unable to send first buffer
      * 474371 : Can't build libsgtcontroller with VS6
      * 474823 : tee unit test failure
      * 478347 : GST_STATIC_PAD_TEMPLATE macro causes warnings with g++-4.2
      * 478401 : gstbasesrc.c ref count bug
      * 479784 : GST_PLUGIN_DEFINE() doesn't accept BSD and MIT/X11 licences
      * 485343 : Implement a wait_eos function in basesink
      * 487969 : allow nested GstStructures
      * 492077 : Build issues on Windows/MSVC
      * 493134 : Wrong GstObject signals registration
      * 493983 : Build issues on Windows
      * 494343 : pre-release vs6 patch
      * 480858 : gstqueue code cleaning
      * 486758 : queue element fails to re-negotiate caps upstream when si...
      * 488201 : gst_segment_set_newsegment does not accumulate correctly
      * 492729 : PAUSED- > PLAYING returns ASYNC when triggered from bus han...
      * 494245 : [basesink] doesn't sync correctly if segment is in BYTES ...

API added since 0.10.14:

      * gst_base_sink_get_last_buffer()
      * GstBaseSink::last-buffer
      * GstURIHandlerInterface::get_type_full
      * GstURIHandlerInterface::get_protocols_full
      * New tag: GST_TAG_ARTIST_SORTNAME
      * New tag: GST_TAG_ALBUM_SORTNAME
      * New tag: GST_TAG_TITLE_SORTNAME
      * New tag: GST_TAG_COMPOSER
      * gst_value_set_structure()
      * gst_value_get_structure()
      * GST_VALUE_HOLDS_STRUCTURE macro
      * gst_bus_pop_filtered()
      * gst_bus_timed_pop_filtered()
      * gst_base_sink_wait_eos()
      * gst_pad_peer_query()
      * GstBaseSrc::do-timestamp
      * gst_base_src_set_do_timestamp()
      * gst_base_src_get_do_timestamp()
      * GstBaseSink::ts-offset property
      * gst_base_sink_set_ts_offset()
      * gst_base_sink_get_ts_offset()
      * GstBaseSink::async property
      * gst_base_sink_set_async_enabled()
      * gst_base_sink_is_async_enabled()
      * gst_structure_get_uint()
      * GstLFOControlSource and functions

Changes since 0.10.13:

      * State change handling improvements
      * New improved GstController API
      * Multi-queue fixes and enhancements
      * Fewer dynamic library relocations
      * Various other fixes and improvements
      * Parallel installability with 0.8.x series
      * Threadsafe design and API

Bugs fixed since 0.10.13:

      * 457322 : registry is read twice on startup
      * 406632 : pkgconfigify the check for Check in configure.ac
      * 423700 : [multiqueue] leaks memory when flushing
      * 437457 : saving relocations for GstElementDetails
      * 444648 : [API] add GstParamSpecFraction
      * 444820 : build error with grammar.tab.c
      * 448794 : state changes are racy with decodebin after rewrite for 0...
      * 449197 : [capsfilter] Should set src pad caps on buffer
      * 449226 : Incomplete ghostpads in xml session save
      * 449493 : minor quoting fix in gst-feature.m4 macro
      * 450711 : [GstController] Improve extensibility by providing a GstC...
      * 451939 : [API] add GST_TAG_LICENSE_URI and GST_TAG_COPYRIGHT_URI
      * 459501 : gst_registry_lookup_feature_locked is slow
      * 462558 : Regression in async state change handling
      * 462752 : make gst_element_class_set_details_simple args const
      * 430682 : multiqueue doesn't output data on unlinked pads properly
      * 462085 : registry feature hash can access invalid memory
      * 357959 : buffer_alloc is not proxied through tee
      * 374639 : GstTee doesn't handle pad list resyncs properly
      * 449414 : [capsfilter] Copy of passed GstCaps taken instead of refe...
      * 453732 : [PATCH] multiqueue returns wrong internally linked pads

API added since 0.10.13:

      * Add GstParamSpecFraction, so elements can have fraction
        properties without lots of painful string parsing (#444648).
      * Add fail_unless_equals_float() and assert_equals_float()
      * Add gst_type_register_static_full
      * Add gst_element_class_set_details_simple
      * Refactor GstController into the core controller which can take
        a GstControlSource for providing actual values for timestamps.
      * add GST_TAG_LICENSE_URI and GST_TAG_COPYRIGHT_URI (#451939)
      * gst_element_factory_has_interface()

Changes since 0.10.12:

      * Latency handling infrastructure for live playback scenarios
      * State change handling changes
      * GstController property handling improved
      * Various bug fixes and improvements
      * Parallel installability with 0.8.x series
      * Threadsafe design and API

Bugs fixed since 0.10.12: 

      * 440682 : gst/gstsystemclock unit test occasionally fails
      * 342564 : Configure options causing compilation to fail
      * 378255 : Swedish translation updated
      * 392804 : [API] add GST_CORE_ERROR_DISABLED
      * 412648 : [filesink] reports wrong (byte) position after seeking
      * 413123 : No XML dependency patch
      * 415394 : [identity] post message for imperfect streams if check-pe...
      * 417992 : Quickly playing/pausing messes up synchronization
      * 420106 : [basetransform] race on shutdown: setcaps func called aft...
      * 420206 : Collectpads causes a segv. when stopping after a pad remove
      * 421480 : Make it possible to build without libxml2 with --disable-...
      * 421543 : [GstPad] Doesn't check if pad accepts caps after caps change
      * 422295 : GstController crashes with quadratic and cubic interpolat...
      * 425400 : Multiqueue leaks memory when releasing sink pads
      * 431150 : compilation fails with flex 2.5.4
      * 431940 : [API] add gst_buffer_try_new_and_alloc()
      * 432876 : current time level in queue
      * 434926 : Multilib conflicts with gst-launch-0.10 man page
      * 435880 : [GstBin] Property to allow bins to handle child async cha...
      * 437563 : URIs with upper-case protocol don't play
      * 440463 : gstbin unit test sometimes hangs waiting for ASYNC_DONE m...
      * 441159 : Regression in state change handling
      * 349180 : gst_parse_launch is not reentrant (or recursively callable)
      * 414986 : Don't start the async thread for the system clock until n...
      * 393099 : GstBuffer copy vfunc broken?
      * 419851 : pad-added and pad-removed signals parameter type incorrect
      * 420133 : gst_element_sync_state_with_parent should look at pending...
      * 421177 : Possible deadlock if pad eventfunc is not specified

API additions since 0.10.12:

      * gst_element_change_state()
      * GST_STATE_TARGET
      * GST_BASE_TRANSFORM_LOCK/UNLOCK
      * GstClock::gst_clock_unadjust_unlocked()
      * fakesink::num-buffers property
      * GST_CORE_ERROR_DISABLED
      * basesrc::prepare_seek_segment vmethod
      * gst_buffer_try_new_and_alloc()
      * gst_buffer_copy_metadata()
      * GstBufferCopyFlags enum
      * GST_BUFFER_COPY_ALL flag
      * gst_uri_protocol_is_supported()
      * gst_base_src_query_latency()
      * GstQueue::pushing
      * gst_controller_suggest_next_sync()
      * gst_object_suggest_next_sync()
      * basesrc::unlock_stop
      * basesink::unlock_stop
      * GstBin::async-handling property
      * gst_message_new_async_start()
      * gst_message_parse_async_start()
      * gst_message_new_async_done()
      * GST_MESSAGE_ASYNC_START
      * GST_MESSAGE_ASYNC_DONE

Changes since 0.10.11:

      * Add a warning if GLib threading support is not properly initialised
      * Add support for binary registry serialisation
      * Preliminary support for pull-mode scheduling of entire chains
      * Add support for HPPA 
      * Collectpads fixes
      * Lots of bug fixes

Bugs fixed since 0.10.11:
     
      * 378931 : Bison version check doesn't work on Solaris 9
      * 399875 : [multiqueue] dynamic growth not implemented.
      * 339326 : pads not set to FLUSHING when created
      * 380129 : gst_plugin_feature_load doesn't consistently ref a return...
      * 381301 : [patch] Make GstBus watch work with any GMainContext
      * 383382 : Removing pads from collectpads not threadsafe
      * 383506 : Disallow CLOCK_TIME_NONE as periodic clock id interval
      * 387073 : gst-launch videotestsrc ! ffmpegcolorspace ! ximagesink d...
      * 387866 : [docs] Small fix for GstCollectPads docs
      * 391278 : g_thread_init() called too late, possibly causing memory ...
      * 391296 : [API] add gst_update_registry() to rescan registry at run...
      * 391777 : GStreamer does not reset SEGV trap handler
      * 391909 : Fix compilation with MinGW
      * 399094 : gst_pad_start_task: small doc typo
      * 401381 : GstRegistry signals documentation is missing
      * 401781 : [API] add GST_ROUND_DOWN_* macros
      * 402393 : [API][GstCollectPads] Allow elements to specify destroy n...
      * 405284 : Changing state of pipeline can lock up with preroll queue...
      * 400656 : [PATCH] filesrc seekability detection fix (NFS and 2GB+ f...
      * 403172 : [filesrc] doesn't handle localhost file locations
      * 404569 : [filesrc] Unexpected end of file
      * 161922 : script to provide plugin installation info
      * 391915 : adapter test doesn't compile with mingw
      * 395554 : gst_tag_setter_merge_tags works at most once
      * 403597 : [API] Add ReplayGain reference level tag
      * 405288 : Configure checks use pkg-config directly
      * 381492 : [SystemClock] ClockID wait_async notification broken
      * 382592 : Multiple wait()ers break periodic clock ids
      * 385084 : endless ghost pad pull/push activate recursion until crash
      * 388201 : [API] add gst_adapter_copy()

API additions since 0.10.11:

      * gst_update_registry()
      * gst_adapter_copy()
      * GST_ROUND_DOWN_* macros
      * GstCollectDataDestroyNotify
      * gst_query_new_latency()
      * gst_query_set_latency()
      * gst_query_parse_latency()
      * gst_message_new_lost_preroll()
      * gst_message_parse_lost_preroll()
      * gst_message_new_prerolled()
      * gst_message_new_latency()
      * gst_event_new_latency()
      * gst_event_parse_latency()
      * GST_TAG_REFERENCE_LEVEL
      * gst_base_sink_query_latency()
      * gst_base_sink_get_latency()
      * gst_bus_timed_pop()
      * gst_message_new_info()
      * gst_message_parse_info()

Bugs fixed since 0.10.10:

      * 363095 : [BaseTransform] Outputs empty buffers
      * 353301 : aborts in _get_element_by_uri(), probably due to buggy el...
      * 344639 : Separate threadsafe queuing functionnality in a separate ...
      * 347785 : [multiqueue] New multiple input-output queue
      * 352827 : re-negotiation issues with dynamic pipelines and level or...
      * 357180 : [libs] gst_controller_new* functions don't increase refco...
      * 318031 : gstreamer should use gmodule-no-export in its .pc file
      * 340878 : Registry doesn't discard removed plugin features
      * 345496 : No GstPadDirection in files created by GstXml
      * 356910 : Basesrc gst_base_src_activate_push not calling base_src_s...
      * 357593 : Generated gst-element-check.m4 installed from $(srcdir)
      * 358436 : #include is missing in gstghostpad.c and gstquery.c
      * 358999 : [PATCH] [GstPad] Flushing on blocked pads not handled cor...
      * 359850 : Compiling issues on sparc with Forte
      * 360151 : Fixes compiling with forte: disable warning as error for ...
      * 360173 : Fixes compiling with forte: warning clean up (part 1)
      * 360467 : [API] add gst_tag_list_is_empty ()
      * 360860 : Fixes compiling with forte: warning clean up (part 2)
      * 361675 : Allow applications to use libxml2 and GStreamer even if  ...
      * 361720 : grammar project: error generating gstmarshal.c and gstmar...
      * 361730 : wrong source file list in VC8 project
      * 361732 : " win32\common\libgstreamer.def " lacks 'gst_caps_merge' entry
      * 361769 : Deadlock in gstpad.c 
      * 364388 : size variable is not always initialized in gst_base_src_s...
      * 366321 : GST_SEGMENT_FORMAT not defined on windows
      * 370865 : [basesrc] update segment duration in gst_base_src_update_...
      * 371493 : Incomplete change of printf conversion specifiers in gstr...
      * 374475 : [PATCH] minor doc typo
      * 377332 : [PATCH] Warning with check > = 0.9.4
      * 357617 : [libs] gst_controller_set_from_list can return without un...
      * 358737 : _gst_event_copy sets the wrong parent_refcount on the chi...
      * 366212 : Fix some misspellings in gstreamer core
      * 369366 : MacOSX printf fixes for CVS
      * 371894 : tests/examples/typefind is broken  
      * 355499 : ensure_current_registry_forking()  fails if zombie alread...
      * 352345 : Small race condition in the queue element
      * 357432 : [libs] GstController needs to keep controlled objects alive
      * 358613 : sink- > file is never reset for filesink elements, even tho...
      * 366286 : [PATCH] fix compilation on Windows
      * 366572 : Bad declaration in headerfile
      * 367677 : [fdsrc] skips the first byte
      * 369942 : [PATCH] unblocking blocked pad does not release all block...

API added since 0.10.10:

      * gst_element_state_change_return_get_name
      * gst_tag_list_is_empty
      * gst_pad_is_blocking()
      * GST_PAD_IS_BLOCKING() macro
      * GST_PAD_BLOCKING GstPadFlag
      * gst_base_src_wait_playing
      * gst_base_sink_wait_preroll
      * gst_message_new_buffering
      * gst_message_parse_buffering

Bugs fixed since 0.10.9:
     
      * 349180 : gst_parse_launch is not reentrant (or recursively callable)
      * 348455 : [filesrc] should not use mmap() by default, since it migh...
      * 340674 : marry gst-debugs & plot-timeline.py
      * 350449 : [GstBaseTransform] buffer_alloc should alway try downstream
      * 352580 : implement proper caps merging
      * 345444 : Linking to an audioconvert (pad-added callback) multiple ...
      * 347293 : GstValueList comparison is flawed
      * 347311 : element_unlink leaks its iterator wich will leak the src ...
      * 348179 : gst_parse_lauch is not reentrant
      * 348354 : failure in bison version detection breaks build
      * 350419 : API: GST_SEGMENT_FORMAT printf extension for GstSegments
      * 350879 : [init] Mark gstreamer as being initialized during registr...
      * 350935 : API: add GST_TAG_EXTENDED_COMMENT
      * 353976 : asssertion about element sanity in gst_registry_xml_write...
      * 350432 : micro-optimising quarks
      * 341029 : Ghostpads internal and target should be linked from the b...
      * 345295 : [PATCH] gstreamer/libs/gst/net for Windows
      * 347756 : Allow --disable-trace without --disable-parse
      * 347794 : Do not reset SIGSEGV handler when --gst-disable-segtrap i...
      * 348918 : application should decide whether or not to use fork() to...
      * 349943 : [QOS] documentation/code mismatch
      * 351768 : Unwanted concurent buffer modifications
      * 352958 : pad_alloc_buffer and stream lock
      * 353121 : gst_query_new_segment should initialize all structure fields
      * 353122 : gst_element_get_bus refs the bus unconditionally
      * 347385 : [ghostpad] gst_ghost_pad_new_from_template() method
      * 348677 : Upgrade to 0.10.9 breaks existing applications (failed se...

API added since 0.10.9:
     
      * gst_segtrap_is_enabled
      * gst_segtrap_set_enabled
      * gst_registry_fork_is_enabled
      * gst_registry_fork_set_enabled
      * gst_ghost_pad_new_from_template
      * gst_ghost_pad_new_no_target_from_template
      * gst_caps_merge
      * GST_TAG_EXTENDED_COMMENT
      * GstClockCLass:wait_jitter
      * GST_SEGMENT_FORMAT
      * gst_structure_id_set
      * gst_structure_id_set_valist

Changes since 0.10.8:

      * The testsuite can now generate coverage information
      * Better support for non-linear editing
      * Removed Glib 2.6 compatibility
      * Performance improvements on cpus that support branch hints
      * Bug fixes

Bugs fixed since 0.10.8:

      * 346730 : some warnings about enums and macros
      * 341029 : Ghostpads internal and target should be linked from the b...
      * 346192 : [PATCH] Pad blocking on events
      * 347384 : [ghostpad] padtemplates shouldn't be set automatically
      * 344115 : [patch] make more internal data const
      * 324176 : gst-element-check-0.x.m4 should use versioned gst-inspect
      * 330379 : Bogus commits to basesink, basetransform, collectpads
      * 341667 : restore_from_xml breaks pad links again after creating them
      * 344642 : tools/gst-inspect.c does not compile if --disable-nls is ...
      * 344748 : Fails with non-writable registry
      * 344849 : GstController doesn't handle float properties correct
      * 345086 : [gst-feedback] calls un-versioned tools
      * 346097 : SIGSEGV when using --gst-plugin-load
      * 347337 : GDP does not correctly deserialize events without a struc...
      * 347408 : basesrc causes regressions in pull with 0 bytes
      * 345720 : Bad performance playing files off CD
      * 331727 : make probes and Ghostpads more elegant
      * 343196 : basetransform not handles ro/rw buffer flagging for trans...
      * 346663 : Segmentation error with fakesrc, fakesink and a filter

Changes since 0.10.7:
    
      * Important fix for registry update causing applets not to load

Bugs fixed since 0.10.7:
    
      * 344474 : Gnome Mixer Applet doesn't want to load

Changes since 0.10.6:
    
      * Registry cache updating is now done in a fork, so no plugins are left
        opened
      * New version of data protocol now serializes events
      * queue fixes
      * win32 fixes

Bugs fixed since 0.10.6:
    
      * 338335 : [patch] memleak in gst-utils.c (leak pads from iterator)
      * 343598 : undefined symbol in coreindexers when using --disable-loa...
      * 336929 : GstCollectPads does not clear/reset segment info after fl...
      * 337100 : [fakesink] add " preroll-handoff " signal
      * 339918 : GstTagSetter merge-mode description unclear, and implemen...
      * 340501 : [filesrc] give primary rank
      * 341662 : gst-launch print_tags() fix
      * 342238 : API: gst_element_seek_simple
      * 342321 : GST_QUERY_POSITION fails if GstBaseSrc in get_range mode
      * 342777 : rebuilding the registry leaves all plugins in memory
      * 342820 : gstnetclientclock.c(453): servaddr used before set
      * 343057 : gst-launch-0.10 segfaults when passed gst-plugin-path and...
      * 343341 : [API] add GST_TAG_PREVIEW_IMAGE
      * 343827 : leak in gst_index_gtype_resolver
      * 343929 : Use of // in public header
      * 343988 : data protocol needs extending to handle events better
      * 341479 : Too many plugins loaded even for up-to-date registry
      * 343334 : GstCollectPads testsuite and fixes
      * 343538 : GstCollectPads doesn't reset EOS fields when stopped

API added since 0.10.6:

      * gst_element_seek_simple()
      * GST_FLOW_CUSTOM_SUCCESS
      * GST_FLOW_CUSTOM_ERROR
      * GST_FLOW_IS_SUCCESS
      * gst_collect_pads_set_flushing()
      * GST_TAG_PREVIEW_IMAGE
      * gst_dp_crc()
      * GstDPPacketizer
      * GstDPVersion
      * GstFakeSink::preroll-handoff
      * GstFakeSink::use-mmap

Changes since 0.10.5:

      * Fixes for the collectpads helper
      * Support for proper time recording on server-trickmode streams
        via the applied_rate parameter of the NewSegment event
      * Many bug fixes

Bugs fixed since 0.10.5:

      * 339808 : [patch] mem-leak of bin in gstbin.c
      * 338339 : [patch] registry cache is always written
      * 339843 : [patch] fdsink should not handle short writes and non fat...
      * 340016 : does not build on opensolaris, must always include config...
      * 340079 : gst-launch wrapper fails with 'No version of tool gst-lau...
      * 340174 : locking problem in gstbasesink
      * 340460 : gst-launch no longer supports --version
      * 340508 : remove glib pre 2.8 hacks and compat stuff
      * 340604 : gst_mini_object_ref () docs make no mention of writeability
      * 340608 : leaking caps in padtemplate
      * 340697 : gstsystemclock hangs when outputting to stdout via fdsink 
      * 340721 : API: add GST_TAG_IMAGE
      * 340772 : [qtdemux] bails out on Meet The Robinsons trailer
      * 341556 : gst-launch: print image tags in a human readable form
      * 339821 : [patch] serializing a GValue with a NULL buffer crashes

API added since 0.10.5:

      * gst_adapter_take_buffer()
      * GST_TAG_IMAGE tag added.
      * gst_event_new_new_segment_full()
      * gst_event_parse_new_segment_full()
      * GstSegment::applied_rate field
      * gst_segment_set_newsegment_full()

Changes since 0.10.4:

      * QoS in BaseTransform
      * gcc 4.1 fixes
      * BaseTransform reworked
      * Bus reworked; signal API added

Bugs fixed since 0.10.4:
    
      * 131079 : [PATCH] [api] loading a class leaves elementfactory blank
      * 317048 : gstreamer Cygwin build fixes
      * 325599 : Build fails with GCC 4.1
      * 327315 : GStreamer CVS head files to build with GCC 4.1
      * 331248 : [basesink] filesink spews warnings when used with flacenc
      * 332151 : xml registry loader should use mmap() where possible
      * 332390 : [GstQueue/GstPad] queue pauses immediately when linked, p...
      * 332986 : Something wrong in caps checking...
      * 334109 : pkg-config files must link with the same check library th...
      * 334303 : Stale libgnomeui check in configure
      * 334434 : Missing functions in def files for dlls
      * 335195 : GST_BOILERPLATE_FULL etc isn' optimised
      * 335480 : start with debugging disabled
      * 335513 : totem goes (and stays) out of sync when running bittorrent
      * 336336 : [queue] Queue might block in EOS
      * 336945 : [filesink] throws error when writing 0 bytes
      * 337103 : small cleanup in gstplugin.c
      * 337386 : Pipeline bus is not initially flushing
      * 338711 : Internal data flow error with latest updates for FC5 with...
      * 326311 : basesink does not call the PAUSED- > PLAYING change_state f...
      * 326998 : GstBaseSrc's send_event handler ignores seek requests aft...

API added since 0.10.4:

      * gst_controller_unset_all()
      * gst_pad_query_peer_position()
      * gst_pad_query_peer_duration()
      * gst_pad_query_peer_convert()
      * GstBaseSink::async_play()
      * GstBaseSrc::qos
      * gst_base_sink_set_qos_enabled()
      * gst_base_sink_is_qos_enabled()
      * gst_base_transform_update_qos()
      * gst_base_transform_set_qos_enabled()
      * gst_base_transform_is_qos_enabled()
      * gst_pipeline_get_delay()
      * gst_pipeline_set_delay()

Changes since 0.10.3:
    
      * Parallel installability with 0.8.x series
      * Threadsafe design and API
      * 33% of library size removed by parse change
      * (Experimental) QoS features (use max-lateness on BaseSink subclasses to enable)

Bugs fixed since 0.10.3:
    
      * 323542 : GStreamer 0.10 hangs at EOS for all songs
      * 320340 : triggering a gst_task_join from the streaming task can de...
      * 322628 : document thread-unsafety of gst_value_foo() + gst_value_r...
      * 324186 : Smarter (deterministic!) typefind decisions
      * 324398 : varargs/valist functions aren't bindable
      * 328873 : only one gst_bin_recalc_state allowed at a time
      * 330899 : CVS directory in make dist tarball
      * 330906 : API: add GST_QUERY_TYPE_NAME and GST_MESSAGE_TYPE_NAME
      * 330996 : basesrc emits EOS unconditionally when going to READY
      * 331255 : Shrinking gst_parse_launch bloat
      * 331898 : Basetranform is not reusable
      * 332045 : API: GstPipeline needs API to disable  flushing of its bu...
      * 332277 : [filesrc] seek does not correct read position in non-mmap...
      * 332611 : [basesrc] needs way to prevent expensive start/stop in ch...
      * 332723 : New API: gst_type_find_helper_for_buffer
      * 333042 : New API: gst_type_find_helper_get_range
      * 333266 : Registry file writing rewrite
      * 333272 : tests should set G_SLICE=always-malloc now
      * 333417 : GST_BOILERPLATE_WITH_INTERFACE can't be used in C++ code
      * 333669 : Add pad accessor defines for GstBaseTransform
      * 333779 : New API: add gst_uri_has_protocol
      * 324818 : gst_registry_get_default doesn't sink newly created registry
      * 330125 : _pad_send_event does not check flushing correctly
      * 330684 : Add ability to emit sync-message without messing with the...
 
API added since 0.10.3:
    
      * gst_pipeline_set_auto_flush_bus()
      * gst_pipeline_get_auto_flush_bus()
      * gst_uri_has_protocol()
      * gst_pipeline_set_max_lateness()
      * gst_pipeline_get_max_lateness()
      * gst_pipeline_get_sync()
      * gst_pipeline_do_sync()
      * GST_BASE_TRANSFORM_SRC_PAD()
      * GST_BASE_TRANSFORM_SINK_PAD()
      * GstBaseSrc::check_get_range()
      * GstBaseSink::max-lateness
      * gst_type_find_helper_get_range()
      * gst_type_find_helper_for_buffer()
      * GST_MESSAGE_TYPE_NAME()
      * GST_QUERY_TYPE_NAME()
      * gst_bus_enable_sync_message_emission()
      * gst_bus_disable_sync_message_emission()

Changes since 0.10.2:

      * Documentation updates
      * Bug fixes
      * Base class improvements
      * Extra utility API
      * More elements ported from 0.8
      * Fixes for win32 build.

Changes since 0.10.1:
    
      * documentation updates
      * bug fixes

Bugs fixed since 0.10.1:
    
      * 325429 : GST_BOILERPLATE_FULL can't be used when compiling with -W...
      * 316086 : MinGW compilation: fileindexer depends on mmap

Changes since 0.10.0:
    
      * element factory leak fixes
      * tests cleanup
      * BaseSrc seeking in other format than BYTES
      * collectpad fixes

Bugs fixed since 0.10.0:
    
      * 322441 : getcontext() in common/m4/gst-mcsc.m4 uses incorrect stac...
      * 323041 : [BASESRC] basesrc does not handle a seek to non-bytes for...
      * 323870 : [tools] gst-feedback needs updating for 0.9/0.10
      * 323882 : gst-launch manpage needs updates
      * 323905 : use return val of g_list_append

API added since 0.10.0:
     
      * GST_TYPE_STATIC_CAPS
      * GST_TYPE_STATIC_PAD_TEMPLATE
      * GstNetTimeProvider::active
      * gst_base_src_set_format

Changes from the 0.8 series to 0.10 series:

      * Refcounting and API revised for thread safety, see rules in
        docs/design/part-MT-refcounting.txt

      * Scheduling is now done by the elements, they start/stop
        processing threads themselves. This removes the need for 
        a separate scheduler.

      * State changes now happen from sink to source. This makes sure
        that downstream elements are ready to process data when upstream
        starts producing.

      * EOS/ERROR/... does not change the state of elements anymore. This
        means that when the application sets the state on an element, it
        remains in this state.

      * GMainLoop integration. Information on the state of the pipeline
        is now received in the mainloop via the GstBus.

      * Events move separate from the datastream, this allows for both
        in and out of sync delivery of events.

      * Generic _pull() replaced by _pull_region() so that random access
        can be made faster.

      * data passing happens from PAUSED, called the preroll phase. In this
        state no data is rendered but it is queued in the sinks.

      * negotiation simplified. Caps are now attached to buffers and travel
        along with the datastream. 

      * GstBuffer is now subclassable.

      * Ghostpads now look and feel like real pads.

      * New Seeking/flushing policy.

      * Addition of base classes and helper functions in the core to abstract
        away the harder parts of plugin development.

Changes since 0.9.7:

      * added Traditional Chinese translation

Bugs fixed since 0.9.7:
    
      * 322874 : [PAD] pad_alloc_buffer should not call set_caps
      * 323222 : GStreamer 0.9.7 still checks in dirs containing 0.9
      * 323250 : [collectpads] debug category should be called 'collectpad...

Changes since 0.9.6:
    
      * bumped major/minor to 0.10
      * API cleanup
      * PluginFeature and TypeFind leak fixes
      * cleaned up source tree
      * added plugin documentation for core elements
      * fixes for stripped core

Bugs fixed since 0.9.6:
    
      * 320529 : [API] gst_event_new_segment mentions " stream_time " as an ...
      * 321917 : quicktime with two video tracks and extra foo, makes tote...
      * 322257 : Fix gstnet library name
      * 322427 : gst-compprep aborts with 'double free or corruption'
      * 322429 : Filesink seeking problem
      * 322626 : Strings in gst-launch.c adn gstdebug.c are horrid
      * 322708 : gst_plugin_load_file leaks a reference to a GstPlugin
      * 322751 : gst_ghost_pad_get_target borks on pads without target
      * 322842 : GStreamer-CRITICAL in GstBaseSink and GstBaseTransform

Changes since 0.9.5:
    
      * API changes and clean-up
      * Extensive documentation updates
      * remove GLib 2.4 compatibility
      * added clock selection
      * added network clocking
      * added fd:// URI handler
      * added more fraction functionality

Bugs fixed since 0.9.5:
    
      * 143472 : [api] gst_tag_list_foreach() takes a non-const GstTagList*
      * 156633 : [API] don't use same API for arrays as for normal lists
      * 164168 : circular pipeline fails to negotiate
      * 165650 : [API] gst_value_deserialize doesn't work correctly for NU...
      * 168438 : [API] GstIndexFilter doesn't receive user_data
      * 168494 : [API] gst_index_add_object() does nothing
      * 305291 : Obnoxious bug-filing request
      * 311489 : Possible gstghostpad locking problems
      * 319178 : [API] finish filler events and support them in GstCollect...
      * 319388 : 0.9 API changes tracker
      * 319389 : state change updates obsolete some functions
      * 319392 : GstEventType is not bindings-friendly
      * 319395 : Macro name/visibility API bugs
      * 319940 : Use GLIB macros for GCC extensions
      * 320060 : add a CORE error category for missing ELEMENTS/PLUGINS
      * 320097 : GST_BUFFER_FLAG_ORIGINAL should die
      * 320113 : [API] duration message changes
      * 320299 : gst_pad_send_event should take stream lock for serialized...
      * 320324 : [API] GST_FOURCC_FORMAT should drop leading '%'
      * 320423 : [API] padding for GstCollectData
      * 320766 : [API] collect pads API changes
      * 321061 : GstURI not used
      * 321235 : [API] GST_PAD_IS_USABLE should be removed
      * 321386 : [SEGFAULT] basetransform when doing reverse caps negotiation
      * 321452 : GstPad's " template " property is b0rked
      * 321528 : capsfilter: assertion `caps != NULL' failed
      * 321595 : GstBin doesn't clean the message queue when changing stat...
      * 321638 : Don't use // style comments in headers
      * 321648 : Wrong type check in gst_message_parse_clock_lost
      * 321710 : GstClock resolution functions should take a GstClockTime
      * 321712 : GstClock adjust function changes
      * 321875 : gst_plugin_check_file disappeared
      * 321950 : gst_registry_scan_paths lacks implementation
      * 321962 : [easyfix] gst_value_is_fixed uses gst_value_list_* on GST...
      * 322027 : [API] Rename gst_caps_structure_fixate_* to gst_structure...
      * 322034 : Elements should be updated not to take the stream lock in...
      * 322069 : Names of GstTagSetter methods should be more descriptive
      * 322134 : API master/slave clocks
      * 322139 : our elements are confused about GEnumValue and which is t...
  
Changes since 0.9.4:
    
      * gst_bus_poll and signal watch now see the same messages
      * clock sync in BaseSrc class
      * API documentation updates
      * Bus reworked; signal API added

Bugs fixed since 0.9.4:
    
      * 317341 : after linking ghost pads, one target pad does not have a ...
      * 320774 : basesrc commit broke typefinding

Changes since 0.9.3:

      * state lock redefined
      * Extensive documentation updates
      * BaseTransform reworked
      * Bus reworked; signal API added

Bugs fixed since 0.9.3:

      * 111146 : new GstThread fails on pipeline with errors
      * 169772 : [PATCH] GOption command-line parsing
      * 170777 : use GST_TYPE_DATE for GST_TAG_DATE
      * 315050 : [API] consider using GstClockTime instead of GTimeVal in ...
      * 315126 : filesrc + forced caps should be possible
      * 315383 : gst-launch shouldn't run broken pipelines
      * 317041 : GstObject flags should be made real flags
      * 318447 : gst_bin_iterate_sorted: Invalid call to gst_iterator_new

Changes since 0.9.2:

      * gst-register has been removed
      * Extensive documentation updates
      * BaseTransform reworked
      * Bus reworked; signal API added

Bugs fixed since 0.9.2:

      * 102980 : support incremental gst-register/compprep updates
      * 313897 : [0.9] registry rewrite
      * 314710 : gst_buffer_create_sub doesn't copy the GST_BUFFER_FLAGS
      * 315895 : gst_pad_query_convert src_val check
      * 316155 : MinGW compilation: glib-mkenums root path subtitution pro...
      * 316157 : MinGW compilation: Plugin exports

This is GStreamer 0.9.2, "South".

Bugs fixed since 0.9.1:

      * 121015 : [api] gst_clock_entry_new() seems broken
      * 134227 : [api] gst_clock_id_wait_async, wrong return code for defa...
      * 142209 : [build] Large file support broken
      * 154785 : Clock does not run if audio stream lacks data for a short...
      * 305256 : [API] Change gst_element_seek to not mix enum/flags types
      * 309253 : GST_DEBUG_FUNCPTR macro does illegal casting from functio...
      * 311004 : ghostpad bugginess
      * 311009 : valgrind shows undesired messages
      * 311848 : Renegotiation broken
      * 314708 : filesrc doesn't set GST_BUFFER_FLAG_READONLY on mmaped bu...
