This is GStreamer 0.10.9, "On the road again"
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...
