This is GStreamer 0.10.32 "Take Me to the Bonus Level"

Changes since 0.10.31:

      * GLib requirement is now >= 2.22
      * New core element: valve (moved from -bad)
      * New core element: input-selector (N.B. without "select-all" property,
        use fsfunnel instead) (moved from -bad)
      * New core element: output-selector (N.B. with different negotiation
        behaviour by default, set pad-negotiation-mode=active for previous
        behaviour) (moved from -bad)
      * Performance improvements for many heavily-used code paths: GstPad,
        GstPoll, GstClock, GstTask, basesink, basesrc, queue2, multiqueue
      * gobject-introspection: add annotations for most core API
      * clock: make sync clock wait lockfree
      * fdsrc/fdsink: reenable on MSVC
      * registry: fix GStatBuf definition for win32 when building against older
        glib (fixes unnecessary rescanning of plugins at start-up)
      * element: add a more flexible way to get request pads from elements
      * multiqueue: return upon input when already eos
      * object: fix creation of default name (when creating more than 100000 elements)
      * pluginloader: fix hangs on OSX
      * poll: fixes for (p)select backend (used e.g. on OSX)
      * poll: refactor and make more lockfree; fixes for win32 and OSX (pselect backend)
      * registry: don't replace valid existing plugins by blacklisted ones
      * tags: don't produce duplicated entries when merging same value twice
      * basesink: preroll fixes for async=false case
      * basesink: rework position reporting code
      * basetransform: handle downstream giving a buffer with new caps but invalid size

Bugs fixed since 0.10.31:

      * 635785 : basesrc: fix deadlock
      * 638599 : GST_PTR_FORMAT causes crashes if GLib-internal printf is used but system provides register_printf_specifier
      * 503592 : gstpad.c does many ref/unref of peer pad in dataflow
      * 564056 : Protect against umask(0177)
      * 607513 : input-selector segfaults in g_object_notify()
      * 632168 : [gsttask] MSVC thread names for task debugging
      * 632447 : reduce static memory allocated by the registry
      * 632557 : [macros] Define restrict keyword if not available
      * 632778 : Optimisations to GstBaseSink
      * 632779 : gstdataqueue: Only emit g_cond_signal when needed
      * 632780 : queue: Remove useless checks from e406f7
      * 633918 : [fakesink] [PATCH] print sink-message events like a  message and its structure
      * 634965 : sinks render buffers in state PAUSED when async is FALSE
      * 635001 : basesink: fix position reporting in PAUSED
      * 636268 : configure test fails on FreeBSD
      * 636455 : basesrc: Avoid taking object locks for just checking tag presence
      * 637057 : [plugin-scanner] gstpoll fails with select backend
      * 637300 : [API] request pad based on caps
      * 637549 : build fails: ./.libs/libgstbase-0.10.so: undefined reference to `gst_clock_single_shot_id_reinit'
      * 637776 : merging the same tag values again produces lists containing duplicates
      * 638381 : {input,output}-selector: double-check API before release
      * 638399 : a few typos in GStreamer
      * 638900 : [GstPoll] Doesn't compile with MinGW
      * 638941 : registry scan/loading race and inconsistency

API additions since 0.10.31:

      * gst_clock_single_shot_id_reinit()
      * gst_element_request_pad()
      * GstElementClass::request_new_pad_full()
      * gst_poll_get_read_gpollfd()
      * gst_value_list_merge()
      * GST_CLOCK_DONE

Changes since 0.10.30:

      * bin: add "message-forward" property to force forwarding of messages that would usually be filtered such as ASYNC_DONE or EOS
      * bin: improve tracking of source elements for more efficient event dispatch
      * bufferlist: add function to add a list of buffers
      * clock: fix racy shutdown clock id leak
      * element: add support for arbitrary element class / factory details
      * element: link_many should activate pads if needed
      * gst: add math-compat.h header
      * datetime: add GstDateTime API
      * elementfactory: add utility functions to filter features by type
      * plugin: load the gst-python plugin loader with G_MODULE_BIND_LAZY
      * query: add buffering ranges API to retrieve informations about the areas of the stream currently buffered
      * value: add int64 range type
      * info: write debugging output to file if GST_DEBUG_FILE environment variable is set
      * pad: use more efficient g_object_notify_by_pspec() for caps notifies if compiling against new-enough GLib
      * pipeline: If the currently used clock gets lost update it the next time when going from PAUSED to playing
      * plugin: add release datetime field to GstPluginDesc and set it if GST_PACKAGE_RELEASE_DATETIME is defined
      * utils: speed up pad linking utility functions by not trying pads that will never work
      * adapter: add function to get a list of buffers; support 0-sized buffers
      * adapter: optimize gst_adapter_take() and gst_adapter_peek() a little
      * basesink: only answer the SEGMENT query in pull mode
      * basesrc: return values in stream time for the POSITION query
      * basetransform: allow the subclass to add new fields to caps when getting new caps from downstream
      * basetransform: avoid useless memcpy
      * basetransform: upstream caps-renegotiation fixes
      * bitreader: add inlined and unchecked versions of the most important functions
      * bytewriter: add inline and unchecked variants of all important functions
      * bytewriter: fix possible infinite loop caused by an overflow
      * queue: add "silent" property to suppress signal emission (for better performance)
      * queue: avoid unnecessary g_cond_signal() (for better performance)
      * queue: push newsegment event when linking in PLAYING
      * queue2: extend ring buffer to support RAM mode
      * queue2: in download mode, prevent range corruption due to race
      * queue2: don't send seeks beyond the end of the file upstream in pull mode (fixes apple trailers and youtube/html5 playback in webkit)
      * multiqueue: flush the data queue if downstream return WRONG_STATE too
      * gst-inspect: print GST_PARAM_MUTABLE_* property flags

Bugs fixed since 0.10.30:

      * 396774 : Make GstElementDetails extensible
      * 482147 : [queue] Issue with current time level if source task is not started
      * 579127 : gst-launch: disable CLOCK_LOST message handling
      * 594504 : Need a GType of " Date AND Time AND Timezone "
      * 600004 : underrun signal emits when i tested queue overrun test case from file /gstreamerXXXX/tests/check/element/queue.c
      * 610366 : [gstcollectpads][doc] Add a reminder for 'data' doc
      * 611918 : leaky queue might not push newsegment event
      * 618919 : Registry/Plugin Loading Memory Leak
      * 619522 : basetransform fix for upstream caps-renegotiation
      * 621299 : make simple queues faster
      * 621332 : BaseTransform should disable proxy alloc if downstream changes caps
      * 622740 : GstPad: Do not call gst_pad_accept_caps() when caps change
      * 623040 : Add release_datetime field to GstPluginDesc
      * 623121 : [queue2] downloaded areas of the media are not exposed
      * 623491 : make *_get_type() thread safe
      * 623541 : [basetransform] Implement POSITION query
      * 623622 : [basesink/basesrc] Should return values in stream time for POSITION query
      * 623806 : [pipeline] Doesn't update the clock if the currently used one gets lost and the start time did not change
      * 623875 : gstregistrybinary.c compatibility with glib > = 2.25.0
      * 624203 : gstutils: Make gst_pad_proxy_getcaps() return empty caps if it's what the other side has
      * 625239 : FTBFS: ./gstreamer-decl.txt:9461: warning: GstTagList has multiple definitions.
      * 625295 : [info] regression: doesn't flush output stream after every debug print any longer
      * 625368 : gstdatetime.c doesn't compile in VS 2008
      * 625862 : [docs] unused symbol GST_CAT_LEVEL_LOG_valist breaks the build
      * 626027 : [tag] Add GST_TAG_APPLICATION_NAME
      * 626181 : GstElementFactory: add listing/filtering API
      * 626651 : [tag] Photography/capture settings tags
      * 626784 : element: link_many might assert elements are in paused or playing
      * 627438 : gst: Add a gst_is_initialized() API
      * 627826 : GstInt64Range type
      * 627910 : Warnings emitted when -Wcast-qual used
      * 627959 : [queue2] on-disk buffering failing for AVI container
      * 628014 : Deprecate GST_FLOW_IS_FATAL/GST_FLOW_IS_SUCCESS
      * 628174 : New gstvalue checks cause trouble in thoggen
      * 628176 : [basetransform] Problems with buffer handling in inplace mode
      * 628408 : Use GDateTime that has been released
      * 629241 : Build broken with introspection using gobject-introspection from master
      * 629410 : GstBaseTransform: position query refers to sink pad, not source pad
      * 629494 : Latest gst-launch.c doesn't build in Visual Studio 2008
      * 629553 : GstAdapter: timestamp not updated when empty buffer is pushed
      * 629831 : [API] add gst_structure_take_value() and gst_structure_id_take_value()
      * 629946 : Enumerations have incorrect names of enum values (GEnumValue.value_name)
      * 630257 : GST_DEBUG_DUMP_DOT_DIR not working anymore
      * 630436 : basesink: renderdelay needs to be subtracted in adjust_time()
      * 630437 : basetransform: Make a WARNING into a DEBUG statement
      * 630439 : clock: fix racy shutdown clock id leak
      * 631755 : Fix build with glib 2.21.3
      * 631853 : [queue2] deadlock when using temp-location and dispatch-properties
      * 632236 : [gst-inspect] unhelpful uri handler output
      * 632433 : [basesink] hangs/drops going to PLAYING following flushing step in PAUSED
      * 632977 : [queue2] qtdemux causes soup to request seeks past the end of the range
      * 633147 : Simple reverse negotiation pipeline is broken.
      * 633886 : Visual Studio emits warnings about double defined _USE_MATH_DEFINES
      * 635031 : [datetime] Fix unix epoch handling
      * 635389 : Include information on exported packages in GIRs
      * 635869 : GST_BOILERPLATE_FULL causes warnings in user C++ code
      * 633176 : recent multiqueue changes break DVD playback

API additions since 0.10.30:

      * gst_is_initialized
      * gst_buffer_list_iterator_add_list
      * GstBin:message-forward
      * GST_TYPE_DATE_TIME
      * gst_date_time_get_day
      * gst_date_time_get_hour
      * gst_date_time_get_microsecond
      * gst_date_time_get_minute
      * gst_date_time_get_month
      * gst_date_time_get_second
      * gst_date_time_get_time_zone_offset
      * gst_date_time_get_type
      * gst_date_time_get_year
      * gst_date_time_new
      * gst_date_time_new_from_unix_epoch_local_time
      * gst_date_time_new_from_unix_epoch_utc
      * gst_date_time_new_local_time
      * gst_date_time_new_now_local_time
      * gst_date_time_new_now_utc
      * gst_date_time_ref
      * gst_date_time_unref
      * gst_tag_list_get_date_time
      * gst_tag_list_get_date_time_index
      * GST_TAG_GEO_LOCATION_HORIZONTAL_ERROR
      * GST_TAG_APPLICATION_DATA
      * GST_TAG_APPLICATION_NAME
      * GST_TAG_DATE_TIME
      * GST_ELEMENT_IS_SOURCE
      * gst_element_class_set_documentation_uri
      * gst_element_class_set_icon_name
      * gst_element_factory_get_documentation_uri
      * gst_element_factory_get_icon_name
      * gst_element_factory_list_filter
      * gst_element_factory_list_get_elements
      * gst_element_factory_list_is_type
      * GstElementFactoryListType
      * GST_ELEMENT_FACTORY_TYPE_ANY
      * GST_ELEMENT_FACTORY_TYPE_AUDIOVIDEO_SINKS
      * GST_ELEMENT_FACTORY_TYPE_AUDIO_ENCODER
      * GST_ELEMENT_FACTORY_TYPE_DECODABLE
      * GST_ELEMENT_FACTORY_TYPE_DECODER
      * GST_ELEMENT_FACTORY_TYPE_DEMUXER
      * GST_ELEMENT_FACTORY_TYPE_DEPAYLOADER
      * GST_ELEMENT_FACTORY_TYPE_ENCODER
      * GST_ELEMENT_FACTORY_TYPE_FORMATTER
      * GST_ELEMENT_FACTORY_TYPE_MAX_ELEMENTS
      * GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO
      * GST_ELEMENT_FACTORY_TYPE_MEDIA_IMAGE
      * GST_ELEMENT_FACTORY_TYPE_MEDIA_METADATA
      * GST_ELEMENT_FACTORY_TYPE_MEDIA_SUBTITLE
      * GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO
      * GST_ELEMENT_FACTORY_TYPE_MEDIA_ANY
      * GST_ELEMENT_FACTORY_TYPE_MUXER
      * GST_ELEMENT_FACTORY_TYPE_PARSER
      * GST_ELEMENT_FACTORY_TYPE_PAYLOADER
      * GST_ELEMENT_FACTORY_TYPE_SINK
      * GST_ELEMENT_FACTORY_TYPE_SRC
      * GST_ELEMENT_FACTORY_TYPE_VIDEO_ENCODER
      * GST_ELEMENT_FACTORY_KLASS_DECODER
      * GST_ELEMENT_FACTORY_KLASS_ENCODER
      * GST_ELEMENT_FACTORY_KLASS_SINK
      * GST_ELEMENT_FACTORY_KLASS_SRC
      * GST_ELEMENT_FACTORY_KLASS_MUXER
      * GST_ELEMENT_FACTORY_KLASS_DEMUXER
      * GST_ELEMENT_FACTORY_KLASS_PARSER
      * GST_ELEMENT_FACTORY_KLASS_PAYLOADER
      * GST_ELEMENT_FACTORY_KLASS_DEPAYLOADER
      * GST_ELEMENT_FACTORY_KLASS_FORMATTER
      * GST_ELEMENT_FACTORY_KLASS_MEDIA_VIDEO
      * GST_ELEMENT_FACTORY_KLASS_MEDIA_AUDIO
      * GST_ELEMENT_FACTORY_KLASS_MEDIA_IMAGE
      * GST_ELEMENT_FACTORY_KLASS_MEDIA_SUBTITLE
      * GST_ELEMENT_FACTORY_KLASS_MEDIA_METADATA
      * gst_plugin_feature_list_debug
      * gst_plugin_feature_rank_compare_func
      * gst_query_add_buffering_range
      * gst_query_get_n_buffering_ranges
      * gst_query_parse_nth_buffering_range
      * gst_structure_get_date_time
      * gst_structure_id_take_value
      * gst_structure_take_value
      * GST_TYPE_INT64_RANGE
      * gst_int64_range_get_type
      * gst_util_fraction_compare
      * gst_value_get_int64_range_max
      * gst_value_get_int64_range_min
      * gst_value_set_int64_range
      * GST_VALUE_HOLDS_DATE_TIME
      * gst_adapter_take_list
      * gst_bit_reader_skip_unchecked
      * gst_bit_reader_skip_to_byte_unchecked
      * gst_bit_reader_get_bits_uint16_unchecked
      * gst_bit_reader_get_bits_uint32_unchecked
      * gst_bit_reader_get_bits_uint64_unchecked
      * gst_bit_reader_get_bits_uint8_unchecked
      * gst_bit_reader_peek_bits_uint16_unchecked
      * gst_bit_reader_peek_bits_uint32_unchecked
      * gst_bit_reader_peek_bits_uint64_unchecked
      * gst_bit_reader_peek_bits_uint8_unchecked
      * gst_byte_writer_put_int8_unchecked
      * gst_byte_writer_put_int16_be_unchecked
      * gst_byte_writer_put_int16_le_unchecked
      * gst_byte_writer_put_int24_be_unchecked
      * gst_byte_writer_put_int32_be_unchecked
      * gst_byte_writer_put_int32_le_unchecked
      * gst_byte_writer_put_int64_be_unchecked
      * gst_byte_writer_put_int64_le_unchecked
      * gst_byte_writer_put_uint8_unchecked
      * gst_byte_writer_put_uint16_be_unchecked
      * gst_byte_writer_put_uint16_le_unchecked
      * gst_byte_writer_put_uint24_be_unchecked
      * gst_byte_writer_put_uint24_le_unchecked
      * gst_byte_writer_put_uint32_be_unchecked
      * gst_byte_writer_put_uint32_le_unchecked
      * gst_byte_writer_put_uint64_be_unchecked
      * gst_byte_writer_put_uint64_le_unchecked
      * gst_byte_writer_put_float32_be_unchecked
      * gst_byte_writer_put_float32_le_unchecked
      * gst_byte_writer_put_float64_be_unchecked
      * gst_byte_writer_put_float64_le_unchecked
      * gst_byte_writer_put_data_unchecked
      * gst_byte_writer_fill_unchecked

API deprecated since 0.10.30:

      * GST_FLOW_IS_FATAL
      * GST_FLOW_IS_SUCCESS

Changes since 0.10.29:

      * GLib requirement was bumped to 2.20, automake requirement to 1.10
      * bin: unlock gst_element_get_state() on error, instead of hanging forever if no timeout is given
      * clock: fix refcounting bug in gst_clock_set_master
      * caps: make sure _normalize() is applied on all structures
      * info: add new TRACE log level and move refcounting there from LOG level
      * pad: don't check twice for changed caps per push
      * pad: fix iterator aggregation of all pads in the internal links fallback
      * tagsetter: protect tagsetter operations with a lock
      * value: support short fourccs (esp. serialisation/deserialisation)
      * adapter: fix _try_to_merge_up(); optimize progressive masked scans
      * basesink: implement percentage position and duration queries
      * basesink: fix segment query return value
      * basetransform: add accept_caps vmethod
      * basetransform: re-evaluate proxy_alloc when reconfigured
      * basetransform: assume in_size equals out_size if there's no transform_size/get_unit_size vfunc
      * fdsink, filesink: make sync property work correctly
      * typefind: make sure buffers' metadata is writable before setting caps on them
      * queue2: fix merging of ranges
      * queue2: don't wait for data when EOS
      * queue2: don't ignore failure to open the temporary file location
      * tools: make gst-launch print things correctly to stderr/stdout and make --quiet work correctly
      * introspection: add many more gobject-introspection annotations
      * xml: serialisation/deserialisation to/from XML has been deprecated, since it's always been broken
        for all but the most trivial pipelines, and will likely never be fixed

Bugs fixed since 0.10.29:

      * 623586 : gst/tagsetter check fails
      * 463435 : Skip #include < libxml/parser.h > in gstconfig.h.in when  not needed
      * 505770 : gst_element_get_state() should unblock if element posts an error
      * 615820 : implement percentage position and duration queries
      * 615941 : [tags] Add GST_TAG_DEVICE_MANUFACTURER and GST_TAG_DEVICE_MODEL
      * 616586 : Use GObject's boxed type for GError
      * 617223 : [tags] Add tags for direction of capture and movement
      * 617625 : Commandline utility wrappers (gst-run) don't work on Windows
      * 618644 : gst_pad_get_caps() Return pad template if parent element is in GST_STATE_NULL
      * 619508 : [tag] Add image orientation tag
      * 619815 : GST_PLUGIN_LOADING_WHITELIST env var for unit tests
      * 619828 : [API] adapter: add masked_scan_uint32_peek
      * 620460 : info: add new TRACE log level and move refcounting there from LOG level
      * 620490 : [basesink] segment query unconditionally returns FALSE
      * 621006 : Deprecate unused gst_object_{get|set}_name_prefix()
      * 621282 : Display of short fourccs is in hex instead of text
      * 621332 : BaseTransform should disable proxy alloc if downstream changes caps
      * 621334 : GstBaseTransform should not require a transform_size function
      * 621505 : Disable memory poisoning by default for releases
      * 621527 : gstcaps: New gst_caps_steal_structure() method
      * 621530 : filesink ignores sync=true
      * 621595 : --quiet doesnt make gst-launch be completely quiet, also messages should not go to stdout
      * 621773 : Add introspection annotations
      * 621867 : gst-launch: rename new --no-play command line option
      * 621896 : [API][taglist] Add gst_tag_list_peek_string_index
      * 622504 : [GstPad] Provide more fine-grained linking methods
      * 622546 : distcheck fails in docs/plugins/
      * 622685 : [GstXml] Deprecate GstXml
      * 622967 : [queue2] Problems with progressive downloading
      * 623301 : gst_caps_normalize : doesn't normalize completely
      * 623589 : Fix races/refcounting bugs with slave clocks
      * 624113 : [tags] wrong behaviour in merge function for strings
      * 622025 : Can't build gstreamer due to Gst-0.10.gir: error: Can't resolve type 'PadIntLinkFunction' for field Gst.Pad.intlinkfunc

API additions since 0.10.29:

      * gst_caps_steal_structure()
      * gst_clock_id_wait_async_full()
      * gst_element_link_pads_full()
      * GstPadLinkCheck
      * gst_pad_link_check_get_type()
      * gst_pad_link_full()
      * gst_structure_fixate_field_string()
      * GST_TAG_DEVICE_MANUFACTURER
      * GST_TAG_DEVICE_MODEL
      * GST_TAG_IMAGE_ORIENTATION
      * GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION
      * GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION
      * GST_TAG_GEO_LOCATION_MOVEMENT_SPEED
      * gst_tag_list_peek_string_index()
      * GST_TRACE
      * GST_TRACE_OBJECT
      * GST_CAT_TRACE
      * GST_CAT_TRACE_OBJECT
      * GST_LEVEL_TRACE
      * gst_adapter_masked_scan_uint32_peek
      * GstBaseSink::enable-last-buffer
      * gst_base_sink_is_last_buffer_enabled()
      * gst_base_sink_set_last_buffer_enabled()
      * GstBaseTransform::accept_caps()

API deprecated since 0.10.29:

      * gst_object_get_name_prefix()
      * gst_object_set_name_prefix()
      * gst_caps_load_thyself()
      * gst_caps_save_thyself()
      * gst_class_signal_emit_by_name()
      * gst_object_save_thyself()
      * gst_object_restore_thyself()
      * gst_pad_load_and_link()
      * gst_xml_get_element()
      * gst_xml_get_topelements()
      * gst_xml_get_type()
      * gst_xml_make_element()
      * gst_xml_new()
      * gst_xml_parse_doc()
      * gst_xml_parse_file()
      * gst_xml_parse_memory()
      * gst_xml_write()
      * gst_xml_write_file()

Changes since 0.10.28:

      * improve plugin loading robustness: do not ever unload a plugin after
        calling into it: should fix mystery crashers during registry loading
        when a plugin init function returns FALSE (e.g. when some supporting
        library fails to initialise or a wrapper plugin found no features to
        wrap and wrongly returned FALSE)
      * configurable memory alignment for GstBuffers
      * add QoS message to inform apps of lost data, dropped frames etc.
      * basesink, basetransform: add support for new QoS message
      * basetransform: accept non-fixed caps suggestions
      * basesrc: fix gst_base_src_new_seamless_segment()
      * GstController fixes and optimisations
      * set thread name for pad tasks on Linux
      * pipeline, bin: fix refcount issue when removing elements during a state change
      * queue2: implement seeking in download mode
      * queue2: implement flushing in download buffering
      * queue2: improve buffer level measurement in download mode
      * fdsrc: allow specifying the size in bytes on the uri
      * build fixes: better checks for uint128_t, inline assembly on OSX, compilation
        if HAVE_REGISTER_PRINTF_SPECIFIER is undefined, gobject-introspection
      * two symbols were removed that had been exported but never been used or been
        declared in any header file: gst_element_default_error and gst_element_request_compatible_pad

Bugs fixed since 0.10.28:

      * 576234 : [basetransform] Suggesting non-fixed caps or no size doesn't work for upstream negotiation
      * 520697 : [API] Add GST_TAG_USER_RATING
      * 590718 : docs build failures with -jN: cp: cannot create regular file `build/image.entities': File exists
      * 595958 : Position not updated after a backwards gst_event_new_step()
      * 596832 : configurable buffer alignment
      * 600718 : autoconf fails with gobject-introspection
      * 600877 : [uridecodebin] Needs to disable download buffering for non-fast-start files
      * 603710 : Can't compile with introspection support
      * 603831 : build with libtool 1.x.y only works if --disable-shave is used
      * 609046 : basetransform now ignores suggestions from capsfilter
      * 609170 : basesrc pushes two newsegment
      * 610256 : Use G_VALUE_COLLECT_INIT if available
      * 611075 : Typo in debug_dump_pad function
      * 611911 : Set thread names on pipeline threads
      * 612370 : gstutils.c inline asm typo, compilation fails
      * 612410 : [API][tags] add new geo tags
      * 612733 : Build fails because HAVE_REGISTER_PRINTF_SPECIFIER is undefined
      * 612881 : [utils] gst_pad_proxy_setcaps() doesn't handler iterator resyncs
      * 613215 : delayed set in gst-launch are not recursive
      * 613593 : git-update.sh script does not work on fresh git repository clones
      * 614167 : gstinfo: no previous prototype for 'xxx' when buildign with --disable-gst-debug
      * 614629 : utils: Use G_GNUC_CONST instead of G_GNUC_PURE for conversion functions
      * 614767 : libgstreamer build failure on OS X x86_64
      * 614833 : out of srcdir build fails for libs/gst/check
      * 615698 :  " warning: cast increases required alignment of target type " with gcc 4.2.1 on arm
      * 615756 : [bin] refcount issue when removing element in error
      * 615880 : Add some more custom flow returns
      * 615881 : [LFOControlSource] Use correct setter for double GValues
      * 616846 : Crash in gst_interpolation_control_source_find_control_point_iter

API additions since 0.10.28:

      * GST_MESSAGE_QOS
      * gst_message_new_qos()
      * gst_message_parse_qos()
      * gst_message_parse_qos_stats()
      * gst_message_parse_qos_values()
      * gst_message_set_qos_stats()
      * gst_message_set_qos_values()
      * GST_FLOW_CUSTOM_SUCCESS_1
      * GST_FLOW_CUSTOM_SUCCESS_2
      * GST_FLOW_CUSTOM_ERROR_1
      * GST_FLOW_CUSTOM_ERROR_2
      * GST_TAG_USER_RATING
      * GST_TAG_GEO_LOCATION_COUNTRY
      * GST_TAG_GEO_LOCATION_CITY
      * GST_TAG_GEO_LOCATION_SUBLOCATION

API deprecated since 0.10.28:

      * gst_element_class_set_details()

Changes since 0.10.27:

     * parse "1/MAX" fraction strings
     * no material changes compared to 0.10.27, this release is mostly to
       keep core/base version numbers in sync

Changes since 0.10.26:

      * basesrc: protect segment values from concurrent access from different threads
      * typefind: protect internal fields from concurrent changes from different threads
      * typefind: fix pad activation corner-case with have-type already having been emitted
      * typefind: reset the working mode when going to READY/NULL, fixes re-use from
        READY state as with decodebin2
      * gstpoll: fix crash when logging is enabled for GST_POLL
      * bytewriter: expose gst_byte_writer_put_{float32|float64}_*() properly in header
      * basesink: fix emergency rendering timestamp tracking
      * fdsink, fdsrc: fix compilation with MSVC
      * memindex: avoid busy loop when doing EXACT lookup

Bugs fixed since 0.10.26:

      * 610366 : [gstcollectpads][doc] Add a reminder for 'data' doc
      * 605189 : gst_element_get_state has wrong introspection
      * 607771 : [API] Add gst_byte_writer_fill
      * 608036 : [typefind] deadlock when upstream puts caps on buffers on pull mode
      * 608877 : [typefind] Access to internal fields not threadsafe
      * 609941 : GStreamer-WARNING **: External plugin loader failed.
      * 610210 : [PATCH] Fix compilation of fdsink and fdsrc with MSVC
      * 610246 : [optimization] Speed up _get_range()
      * 610367 : [memindex] might busy loop upon EXACT lookup
      * 610444 : [controller] Interpolation control source passes NULL pointers to GSequence API
      * 611087 : [basesink] emergency rendering of late buffers fails after resuming from PAUSE
      * 611719 : GST_DEBUG_OBJECT macros not fed with GObject* in gstpoll.c

API additions since 0.10.26:

      * gst_byte_writer_fill()

Changes since 0.10.25:

      * 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 since 0.10.25:

      * 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 additions since 0.10.25:

      * 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()

Changes since 0.10.24:
    
      * Improve the byte-reader API
      * GObject introspection support
      * Improve clock accuracy on win32
      * Optimisations in capabilities checking
      * Optimisations and fixes in the basetransform base class
      * new 64-bit scaling utility function variants
      * Various bug-fixes and improvements (see ChangeLog and bugs list below)

Bugs fixed since 0.10.24:
     
      * 583999 : [basetransform] caps refcounting problem causing GST_IS_CAPS assertion failures
      * 566881 : [GstIndex] support/caching in GstBin
      * 588472 : [basetransform] problems in reverse-negotiating
      * 589173 : macros cause spurious semicolon warnings
      * 589314 : [basetransform] clears GAP flag in passthrough mode
      * 589524 : gst_base_transform_acceptcaps() could provide more verbose debugging output
      * 589849 : [segment] Clipping fails to handle start=stop < segment_start correctly
      * 589991 : [queue] limited error handling might cause pipeline appearing to hang
      * 590045 : Query position fails when pipeline is paused and format is not time
      * 590430 : Add support for " album artist " tags
      * 590841 : configure script check for libxml2 is incorrect
      * 590919 : gst_util_uint64_scale_int() and friends don't round
      * 591045 : [basesrc] Leaking GstTask instances
      * 591318 : ghostpad : core dump : on_src_target_notify called with an invalid ghostpad
      * 591441 : append mode for filesink
      * 592209 : [GstPad] Deprecated markers missing in the header for internal links function related things
      * 592314 : core/tests/examples/streams/ does not link to pthread
      * 593460 : Broken win32-specific systemclock code
      * 593719 : regression: segfault when using gstrtpbin and certain video codecs
      * 594107 : [gstbin] : use of freed message : valgrind Invalid read
      * 594225 : [API] [bytereader] add _unchecked() variants and inline most common functions
      * 594990 : [introspection] pkg-config file madness and another bug
      * 595130 : checks fail
      * 595133 : gst/gstutils check fails
      * 595209 : Fix out-of-tree build
      * 368536 : bin_change_state makes children go through unnecessary state changes

API additions since 0.10.24:
    
      * gst_caps_can_intersect()
      * gst_util_uint64_scale_int_round()
      * gst_util_uint64_scale_int_ceil()
      * gst_util_uint64_scale_round()
      * gst_util_uint64_scale_ceil()
      * gst_iterator_new_single()
      * gst_byte_reader_skip_unchecked()
      * gst_byte_reader_peek_*_unchecked()
      * gst_byte_reader_get_*_unchecked()
      * gst_byte_reader_{peek,get,dup}_data_unchecked()
      * gst_byte_reader_get_float*_unchecked()

Changes since 0.10.23:
    
      * Fully support nested structures in caps
      * Support frame-by-frame stepping in sinks
      * Add support for buffer-lists to pass around groups of buffers
      * Use TaskPools for managing worker threads
      * New stream-status API for finer thread control
      * Code optimisations
      * Many other bug-fixes and enhancements

Bugs fixed since 0.10.23:
     
      * 580579 : crash in Volume Control: aucunes idées désolé.
      * 527488 : [GstXML] can't load elements with request pads from XML
      * 570233 : allow plugins caching data in the registry
      * 584389 : don't recreate plugin feature and element factories on fi...
      * 534208 : [API] add gst_structure_get()
      * 545787 : [API] add gst_plugin_register_static_full() for bindings
      * 554460 : thumbnailer crash in gst_fake_sink_event() on FLUSH_START...
      * 559643 : Don't allow empty or NULL strings in taglists
      * 560345 : gst_tag_list_get_string() may return NULL or empty string
      * 560442 : GNOME Goal: Remove deprecated GLib symbols
      * 572285 : Buffer Lists
      * 577926 : Remove old xml registry
      * 578908 : [fdsink] implement seeking on seekable fds
      * 580177 : glibc 2.10 deprecates register_printf_function
      * 580716 : race condition in gst_element_lost_state
      * 581198 : [tags] Add gst_tag_setter_add_tag_value() and gst_tag_lis...
      * 581281 : [GstURIHandler] Doesn't use get_type_full() at all
      * 582010 : audiotestsrc is-live=1 ! pulsesink unreliable
      * 582564 : [controller] Use ordered GSequence instead of GList in th...
      * 582588 : [API] Add a way to get the pad corresponding to a taglist
      * 582878 : [GstClock] ABI breakage in GIT on x86
      * 583187 : [API] add gst_adapter_masked_scan_uint32() and gst_adapte...
      * 583419 : Bad translatable string in gst-launch.c
      * 583456 : framestep functionality
      * 583554 : Slow down or lock if date time is changed to the past
      * 584835 : MSVC compiler fails with 'static inline' function
      * 584838 : basesrc: confusing QUERY_SEEKING handling
      * 585039 : rtpool-test can't find pthreads
      * 585075 : Compilation with MSVC fails for files including config.h ...
      * 585137 : gst_xml_write_file() fails serialising GstStructure property
      * 585592 : [API] add gst_byte_reader_masked_scan_uint32()
      * 585733 : Wrong #include order in gstsegment.c
      * 585748 : [API] add gst_tag_list_new_full() to create taglist with ...
      * 586566 : Add GAP Flag support to gstcapsfilter
      * 586568 : [bytereader] add misc. string functions and gst_byte_read...
      * 587973 : use G_DIR_SEPARATOR_S instead of " /' " 
      * 587976 : Fix for gst-inspect and gst-launch when option parsing is...
      * 588744 : [check] Stream consistency checker utility
      * 588745 : [basesrc] Serialize tags in the dataflow
      * 589127 : gsttask leaks the pool
      * 590056 : [collectpads] race resulting in double flush-stop being o...
      * 590622 : [bytereader] buffer size checks subject to wrap-around ov...
      * 579177 : GstInfo: maintain ABI compatibility
      * 581321 : typefind element leaks force-caps property
      * 584118 : [gstadapter][doc] Improve documentation of gst_adapter_ma...
      * 585433 : [queue] Can lock down if min-threshold conflicts with max...
      * 585569 : rtsp/rtp streaming fails when skipping explicit PAUSED st...
      * 585834 : Support for GstBufferList in ghostpads
      * 585960 : Support for GstBufferList in gstbasesink
      * 587052 : [filesink.c] Support for files > 4GB on windows makes file...

API added since 0.10.23:
     
      * GST_DEBUG_CATEGORY_GET() macro
      * gst_byte_reader_dup_data
      * gst_byte_reader_dup_string
      * gst_byte_reader_dup_string_utf8
      * gst_byte_reader_dup_string_utf16
      * gst_byte_reader_dup_string_utf32
      * gst_byte_reader_skip_string
      * gst_byte_reader_skip_string_utf8
      * gst_byte_reader_skip_string_utf16
      * gst_byte_reader_skip_string_utf32
      * gst_byte_reader_peek_string
      * gst_byte_reader_peek_string_utf8
      * gst_byte_reader_get_string
      * gst_byte_reader_get_string_utf8
      * add gst_tag_list_new_full()
      * add gst_tag_list_new_full_valist()
      * add gst_byte_reader_masked_scan_uint32()
      * add gst_plugin_get_cache_data, gst_plugin_set_cache_data
      * gst_structure_get()
      * gst_structure_id_get()
      * gst_structure_get_valist()
      * gst_structure_id_get_valist()
      * GstSegment::gst_segment_set_running_time()
      * Add GST_MESSAGE_SRC_NAME() macro
      * GstSegment::gst_segment_to_position()
      * GstEvent::gst_event_new_step()
      * GstEvent::gst_event_parse_step()
      * GstMessage::gst_message_new_step_done()
      * GstMessage::gst_message_parse_step_done()
      * gst_structure_id_new()
      * Add gst_message_{new,parse}_tag_full() to get/set the source pad
      * GstAdapter::gst_adapter_masked_scan_uint32()
      * GstElement::gst_element_lost_state_full()
      * GstAdapter::gst_adapter_prev_timestamp()
      * gst_plugin_register_static_full()
      * gst_tag_list_add_value()
      * gst_tag_setter_add_tag_value()
      * add GST_TAG_CONTAINER_FORMAT tag
      * GstTask::gst_task_set_state()
      * GstObject::gst_object_ref_sink()

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