This is GStreamer Base Plugins 1.0.7

Changes since 1.0.6:

      * streamsynchronizer is now a public element, useful in HLS pipelines for example

Bugs fixed since 1.0.6:

      * 682171 : videoscale: assertion failed: (envelope ((x - (xi - 1)) * ex) == 0)
      * 688240 : streamsynchronizer: make element public
      * 696540 : Ring buffer released after parsing caps when setting caps
      * 696899 : oggdemux: non flushing segment seek makes buffers late
      * 697092 : rtspconnection: The " x-server-ip-address " header with wrong IP address is added to the GET response
      * 697162 : SDP library is not parsing correctly
      * 697277 : SDP library does not include timing line if there is not timing information
      * 697820 : playbin: Enabling visualizations during playback stops the pipeline
      * 697824 : videometa: gst_buffer_add_meta() can return NULL

Changes since 1.0.5:

      * adder: fix setting caps via the "caps" property
      * alsasink: don't use 100% CPU
      * appsrc: fix locking order
      * encodebin: sync muxer state with parent bin so encodebin can be added dynamically to pipeline
      * libvisual: fix improper video frame clear operation
      * pango: fix attribute list handling
      * playbin: fix playsink caps handling so that converters get plugged when needed
      * playbin: fix subtitleoverlay caps handling to avoid not-negotiated errors when plugins are missing
      * videoscale: Correct DAR and border calculations
      * ximagesink: fon't access structures of EMPTY caps
      * typefinding: fix y4m caps
      * build: fix build with automake 1.13

Bugs fixed since 1.0.5:

      * 688476 : Seek in matroska file fails with not-negotiated error when using playsink
      * 688803 : playbin: converters don't work? not-negotiated error with non-1/1 PAR and ximagesink
      * 690937 : alsasink: playing video files with gst-launch causes CPU 100%
      * 691687 : GstImageType documentation is misleading
      * 693224 : appsrc deadlocks when setting pad caps before pushing buffer
      * 693372 : 1.0 branch is still using AM_CONFIG_HEADER
      * 693981 : subparse: fix bogus discontinuity detection if offset not set on buffers
      * 696019 : videoscale does not preserve DAR with add-borders=TRUE 
      
Changes since 1.0.4:

      * alsasrc: don't output buffers without timestamps or with bogus timestamps
      * discoverer, decodebin: fix state change re-sync race that might lead to deadlocks
      * video: fix crashes with and frame sizes of A420 video format

Bugs fixed since 1.0.4:

      * 691244 : unable to play flv file with VP6 alpha video

Changes since 1.0.3:

      * playbin: fix occasional not-negotiated errors when switching visualisations
      * ssaparse: ignore invalid UTF-8 in SSA/ASS subtitles init sections in matroska files
      * streamsynchronizer: better timestamp and gap handling at EOS, fixing potential OOM in baseaudiosink
      * bindings: fix annotation for gst_app_src_push_buffer(), fixing crash
      * bindings: add several missing annotations for GstRtspMessage API

Bugs fixed since 1.0.3:

      * 679976 : playbin: switching visualisations results in not-negotiated flow erros
      * 689814 : Memory allocated by GstVideoDecoder base class is not freed
      * 689873 : gstrtspmessage: Several functions are missing introspection annotations...

Changes since 1.0.2:

      * typefind: detect isml ftyp as iso-fragmented video/quicktime
      * typefinding improvements fixing playback of some wavpack files
      * textoverlay rendering fixes
      * gobject-introspection annotation fixes

Bugs fixed since 1.0.2:

      * 686276 : rtsp: http tunneling does not work
      * 687030 : ogg: crash checking header of empty ogg packet
      * 687055 : exiftag: fix use after free and memory leak
      * 687057 : vorbistag: fix memory leak
      * 687421 : GstRTSPConnection: a number of methods not annotated correctly
      * 687459 : textoverlay:forward allocation queries instead of discarding
      * 687473 : rtspconnection: remove extra 'return'
      * 687620 : GstRTSPMessage: fix GI annotations
      * 687666 : textoverlay: aborts when shading is enabled but not supported for the current video format
      * 687674 : typefinding: some WavPack files are mis-detected as AAC and fail to play
      * 687991 : videodecoder: add getter for QoS proportion
      * 687994 : rtsp: missing g-i annotation for gst_rtsp_message_set_body
      * 688151 : pbutils missing description for Opus codec
      * 686841 : pango: fix shadow text color

API additions since 1.0.2:

      * gst_video_decoder_get_qos_proportion()

Changes since 1.0.1:

      * Parallel installability with 0.10.x series
      * alsa: fix probing of supported formats, and advertise non-native-endianness formats as fallback
      * audiobasesink: properly handle GAP events (fixing some isses with e.g. certain DVD menus)
      * audioconvert: try harder to not convert or to preserve input format precision
      * audiodecoder: leak fixes and refcounting fixes
      * audioresample: re-enable the SSE/SSE2 code paths for better performance
      * riff: fix paletted RGB formats and msvideo mapping
      * rtsp: make formatting and parsing of range floating-point values locale-independent
      * playbin: streamsynchronizer fixes, esp. for handling corner-cases near EOS
      * tcpserver{sink,src}: add 'current-port' property and signal actually used port
      * videoconvert: fix handling of paletted RGB formats
      * videodecoder: don't leak message strings when error is not fatal
      * videodecoder: finetune missing timestamp estimating
      * videotestsrc: add palette for paletted RGB formats
      * vorbistag: fix writing of image tags into vorbis comments

Bugs fixed since 1.0.1:

      * 580093 : tcpserversink,src: add 'current-port' property and signal actually used port when port=0 was set
      * 680904 : alsasink: no supported formats detected with using USB sound card on big-endian system
      * 683098 : videodecoder: log failure message if acquire_buffer failed
      * 684411 : rtsp: range in SDP formatted according to locale
      * 685273 : Pre-rolling on GAP events doesn't work properly for audio sinks
      * 685711 : audio, video: update docs for virtual functions that require chaining up
      * 685938 : [decodebin] Issues with group switching algorithm
      * 686081 : adder: all unit tests crash now after collectpads changes
      * 686298 : Cannot decode some AVI files with Microsoft Video 1

Changes since 1.0.0:
    
      * videodecoder and -encoder timestamp handling improvements
      * thread-safey fixes for GstMeta registrations and GstVideoDecoder
      * bug fixes

Bugs fixed since 1.0.0:
     
      * 684424 : playbin: external subtitles break playback
      * 684832 : videodecoder: Takes stream lock in query function
      * 685110 : encodebin fails to release mux request sink pad for GstId3Mux as it is a static one for this mux
      * 685242 : rtsp: mark url argument of gst_rtsp_url_parse as out
      * 685332 : GstMeta registry race
      * 685490 : audioencoder: don't require base class to implement to start vfunc

New features in 1.0.0:

      * Parallel installability with 0.10.x series
      * See release notes for more details
