This is GStreamer 0.8.9.

Changes since 0.8.8:

      * Probe fixes
      * Thread and queue fixes fixes
      * Documentation updates
      * Important GstBin state change fix - see #166371 if you subclass

Bugs fixed since 0.8.8:

      * 94464 : [threads] gst_scheduler_add_scheduler() doesn't ref passe...
      * 123775 : [PATCH] [api] setting state on element should force highe...
      * 142588 : [threads] if all elements have been removed from a bin, s...
      * 150546 : [api] Error for calling gst_pad_push in a get function is...
      * 162276 : [build] gstregistry.h and gstxmlregistry.c don't build wi...
      * 163234 : [PATCH] plugin loading isn't thread-safe
      * 163383 : [PATCH] ogm plugins won't register
      * 163801 : [PATCH] mem leak in xml registry loading
      * 164062 : [PATCH] tee capsnego is broken
      * 164261 : [PATCH] GST parsing doesn't recognise urls without a file...
      * 165272 : [PATCH] Problem compiling gstreamer 0.8.8
      * 165365 : [PATCH] gst_string_wrap() segfaults on NULL strings
      * 165922 : add locking in opt
      * 166269 : Typo in current .po file msgid string
      * 166362 : data discarded by probes is leaked
      * 166371 : GstBin derived classes not notified of state change

Changes since 0.8.7:

      * Threading fixes
      * Opt scheduler fixes
      * Documentation updates
      * New translation: Norwegian Bokmaal (Kjartan Maraas)
      * New translation: Italian (Luca Ferretti)
      * New scheduler: fair

Bugs fixed since 0.8.7:

      * 144804 : opt scheduler breaks on playing a pipeline
      * 148787 : clocks are not distributed correctly
      * 149936 : [PATCH] [build] GStreamer without registry support do not...
      * 150051 : fakesrc needs a data rate parameter that timestamps the d...
      * 151605 : impossible to play .mpg or avi files with gst-launch-ext
      * 153882 : [PATCH] The win32 version of gstenumtypes is not up to date
      * 154061 : optimal scheduler doesn't get freed
      * 156063 : infinite loop and 100% CPU with some MP3
      * 156179 : gstreamer typefind plugin information from gst-inspect is...
      * 157127 : Cleanup of issues reported by sparse
      * 157263 : use G_SIGNAL_TYPE_STATIC_SCOPE for GstBuffers in handoff ...
      * 158018 : gstreamer typefind stalls on these JPEG files
      * 158162 : opt deadlock
      * 158163 : [api] Problem querying on ghostpads
      * 159852 : [PATCH] [api] g_signal_emit thread safety issues
      * 160019 : segfault when error occurs playback of uri containing per...
      * 160220 : gst_pad_set_explicit_caps of a NULL caps doesn't work

API changes since 0.8.7:

- API additions:

* A new function, gst_plugin_get_version, has been added.

Changes since 0.8.6:

      * important playback thread fix
      * typefind fix for non-seekable streams

Changes since 0.8.5:

      * spider, queue fixes
      * fakesrc and identity now have a datarate property
      * dataprotocol threadsafety fix

Bugs fixed since 0.8.5:

      * 136962 : crc error when decoding flac with typefind and threads
      * 150001 : [PATCH] Mem leaks in gstpad.c, gstxml.c and gstelement.c
      * 150262 : gstreamer.spec file needs correction to work with rpmbuil...
      * 150626 : bug trying to play a theora web stream
      * 153657 : make typefind prevent unneeded discont element
      * 153881 : [PATCH] in-code C declarations

API changes since 0.8.5:

- API additions:

* The "fakesrc" element now has a datarate property.
* The "identity" element now has a datarate property.

Changes since 0.8.4:

      * New Translation: Albanian (sq), Laurent Dhima
      * first release that works on Windows with MSVC7
      * fixed lists can now be intersected
      * transform functions from fraction to double added
      * optimal scheduler fixes
      * fixation fixes
      * filesrc fixes
      * typefind fixes

Bugs fixed since 0.8.4:

      * 145100 : segfault in gst_pad_call_get_function
      * 147889 : gst_element_link_pads_filtered may ignore named dest pad ...
      * 148692 : GstQueue binary compatibility breakage
      * 149981 : Win32 not included in the source distribution
      * 150242 : GStreamer doesn't copy some buffer flags correctly

API changes since 0.8.4:

- API additions:
     
* A new function, gst_scheduler_register, has been added.
* A new enum member of GstBufferFlag, GST_BUFFER_DELTA_UNIT has been added.
 
- API depreciations:
     
* GstBufferFlag has a deprecated enum member, GST_BUFFER_KEY_UNIT.
Buffers should be marked with GST_BUFFER_DELTA_UNIT when they're not
key units instead, since key units are the more common case.

Changes since 0.8.3:
    
      * New Translation: Czech (cs), Miloslav Trmac
      * New Translation: Catalan (ca), Jordi Mallach
      * gst_init () now behaves like gtk_init ()
      * queue fixes
      * ongoing win32 build integration
      * bytestream now has GstFilePad
      * gst-register is now i18n-ized
      * GstCaps XML-ization works again
      * Fixed enum GValue
      * Added GstFraction GValue

Bugs fixed since 0.8.3:
    
      * 109831 : clocks aren't refcounted properly
      * 123774 : state change on bin should set same state change on all c...
      * 134663 : failed assertion at end of movie in totem
      * 137863 : CPU/Memory leak when using spider decoder
      * 140219 : no man page for gst-xmlinspect
      * 141378 : gstreamer crashes during initialization due to a recent c...
      * 141692 : gst_init() type function that ignores arguments it doesn'...
      * 142418 : Win32 Debug build should not be the same as the Release one
      * 142422 : Win32 Build documentation missing
      * 142795 : [PATCH] Memory leak in queue element
      * 142813 : [PATCH] Deadlock in optimal scheduler
      * 142850 : GST-Register didn't find any plugins
      * 142903 : [PATCH] fdsrc element never resets buffer offset to zero
      * 143741 : cross compiling issue
      * 143777 : [opt] problem after removing some elemnts and putting the...
      * 143953 : Crash cause by gst_data_is_writable + audioconvert
      * 144185 : Double-free memory
      * 145137 : patch to make GstCaps XML functions actually do something
      * 145338 : [PATCH] Fix a bus error in the optimal scheduler
      * 145391 : gstvalue.c: ref klasses instead of peek
      * 145520 : registry rebuilds too easily
      * 147707 : FreeBSD dosn't have strndup
      * 147713 : opt scheduler resorts the chain incorrectly
      * 147819 : [PATCH] Add some checks in the opt scheduler
      * 147894 : opt scheduler decoupled elements mismanagement
      * 147929 : [PATCH] running gst-register in non-utf8 locale can cause...

Changes since 0.8.2:

      * Hotfix for unregisterable switch element

Changes since 0.8.1:

      * new translations: Turkish, Ukrainian, GB English
      * Fixes for setting elements to NULL to release devices
      * Windows port
      * New GStreamer Data Protocol helper library
      * New GstAdapter, similar to bytestream
      * Fixes for registry loading plugins with same name
      * Added no-more-pads signal
      * Added Fixed List GValue type
      * Fixes to schedulers

Bugs fixed since 0.8.1:

      * 133897 : Internal GStreamer error: seek problem
      * 134839 : buffers leaked by filesrc, typefind, spider or fakesink
      * 137710 : When seeking, the sink's time is reset
      * 138012 : [opt] simple pipeline crashe
      * 138836 : docs build but won't install
      * 140015 : GstValue GTypes should not derive from G_TYPE_BOXED
      * 140156 : ARM port / type reading patches
      * 140477 : [debug] crash with *:2 while playing alien.mpg
      * 140594 : Small memory leak int gst_parse_launch()
      * 140734 : filesrc should handle named pipes/devices
      * 140743 : Leak in _gst_parse_escape()
      * 141083 : gstreamer-0.8.1 compile failure with gcc-3.4: error: PIC ...
      * 141304 : GST_CAPS and GST_IS_CAPS broken
      * 141317 : Win32 build with newest Microsoft compilers
      * 141414 : filesink leaks events
      * 141416 : leak in entrygthread scheduler
      * 141417 : Memory leak in gthread-cothreads.h
      * 142304 : The Win32 makefiles clean too much
      * 142804 : needed change to allow x86 Solaris compile with Forte
      * 142957 : xmlregistry failes to compile on osx

Changes since 0.8.0:

      * new translations: Azarbaijani, Afrikaans, Swedish
      * MinGW compilation fixes
      * buffer internal fixes
      * new entry scheduler
      * move from memchunks to malloc
      * lots of memleak fixes
      * better valgrind support
      * registry fixes

Changes since 0.7.6:

      * coding style consistency for .c files
      * ABI padding for GstCaps and GstStructure

Changes since 0.7.5:
                                                                                
      * uses 0.8 as the major/minor number
      * opt scheduler fixes
      * don't link non-versioned tools to gstreamer
      * bindings-related fixes and additions
 
Changes since 0.7.4:

      * API additions for bindings
      * Queue memleak fix
      * optimal scheduler fixes
      * Ghost pad fixes
      * Signal marshalling fixes
      * documentation fixes
      * underquotedness fixes for automake 1.8
      * fixed atomic implementation on sparc and S390
      * gstreamer-scan fixes
      * multidisksrc renamed to multifilesrc
      * fixed GstCaps docs
      * fixed libxml checking when not needed
      * added timeout to filesrc
      * added support for double dparams
      * make spider report an error when it can't handle a mime type
      * fixed navigation event handling
      * added codec and volume tags

Bugs fixed since 0.7.4:
    
      * 105844 : --disable-loadsave --disable-registry still check for libxml
      * 118310 : Timeout support added for fdsrc
      * 127133 : [API] Need non-vararg version of gst_index_add_association
      * 127815 : gst-register sigsegs 100% of the time.
      * 129600 : patch to compile on OSX
      * 131362 : use serialize/deserialize in the core
      * 132045 : incorrect dependency causes rebuilding of libgstreamer on "m
      * 132935 : setting pipeline -> NULL -> PLAYING doesn't restart stream
      * 132996 : configure fails: aclocal: macro `jm_AC_TYPE_UNSIGNED_LONG_LO
      * 133391 : the asm mutex implementation is broken on SPARC
      * 133631 : gst-launch seg faults in gst_caps_free with no sink
      * 133800 : fixes for underquoted macros and automake 1.8.x
      * 133817 : add support for disc number tag
      * 134128 : typo in ./gstreamer/gst/gstclock.c
      * 134145 : pot-update not updated after file removal
      * 134583 : Race on gst_pad_link_free
      * 134816 : test -e in autogen.sh does not work on Solaris
      * 134841 : gst-inspect.c is defining GList *pads twice
