This is GStreamer Bad Plugins 1.2.0

Changes since 1.0:

New API:
 • GstContext negotiation / sharing / announcing for sharing a
   generic context between elements, e.g. a display handle
 • GL texture upload conversion meta for allowing different
   buffer types to be converted to an OpenGL texture
 • GstCapsFeatures as extension to GstCaps for allowing the
   negotiation of specific memory or meta requirements between
   elements
 • GstMemory flags for contiguous and non-mappable memory
 • The stream-start event has optional flags now, e.g. for signalling
   sparse streams
 • The stream-start even has an optional group-id field now to signal
   all streams that should be played together
 • Allocators library in gst-plugins-base, currently only with generic
   dmabuf memory support
 • insertbin library for easier handling of dynamically linked
   pipelines (in -bad for now)
 • EGL helper library (in -bad for now)
 • MPEG-TS data structure library (in -bad for now)
 • New GstVideoRegionOfInterestMeta to describe a region of interest on
   video frames.
 • GstVideoDecoder/Encoder has new ::flush() vfunc to replace the
   ill-defined ::reset() vfunc.
 • The URI query allows to query the redirected URI now.

Major changes:
 • New tool: gst-play-1.0 in gst-plugins-base for basic playback
   testing on the command line.
 • New plugins:
   ∘ mssdemux for Microsoft Smooth Streaming
   ∘ dashdemux for DASH adaptive streaming protocol
   ∘ bluez for interaction with Bluetooth devices
   ∘ openjpeg for JPEG2000 decoding and encoding
   ∘ daala for experimental Daala decoding and encoding
   ∘ vpx plugin has experimental VP9 decoding and encoding support
   ∘ webp plugin for WebP decoding (encoding to be added later)
   ∘ Various others: yadif, srtp, sbc, fluidsynth, midiparse,
     mfc, ivtv, accuraterip and audiofxbad

 • Moved plugins:
   ∘ dtmf, vp8rtp, scaletempo and rtpmux plugins are in
     gst-plugins-good now

 • Video:
   ∘ Fix handling of interlaced video in converters such as videoscale
     and videoconvert (e.g. scale both fields independently)
   ∘ videoconvert will try harder to minimise quality losses when
     conversion is necessary
   ∘ The experimental GstSurfaceConverter, GstSurfaceMeta and
     GstVideoContext APIs from the (confusingly-named) 
     libgstbasevideo-1.0 library in gst-plugins-bad have now been
     removed and been replaced by new APIs in GStreamer Core and
     gst-plugins-base (see above). Since that was all that was left in
     this library, the entire experimental libgstbasevideo-1.0 library
     has been removed from gst-plugins-bad
   ∘ Chroma subsampling and chroma siting conversion is better handled
     in videoconvert and the support for interlaced video was improved.
   ∘ New pinwheel and spoke patterns in videotestsrc
   ∘ videomixer can now accept different video formats on its sinkpads
     and converts to a common format during mixing

 • Audio:
   ∘ audioconvert will try harder to minimise quality losses when
     conversion is necessary
   ∘ adder now allows muting/unmuting of its input streams, and also
     per-input stream volume 
   ∘ pulseaudio elements can switch between devices during playback now
   ∘ aacparse can convert between ADTS←→RAW

 • Platform specific changes:
   ∘ Caps, events, etc. are now printed in the GStreamer debug logs
     with their content instead of just the pointer address even on
     non-glibc platforms (e.g. Windows, OSX, Android).
   ∘ Network elements (UDP/TCP) now work better with platforms,
     where IPv6 sockets can't handle IPv4 (e.g. Windows)
   ∘ Linux/BSD: v4l2 had many improvements and cleanups

 • Other changes:
   ∘ gst-libav now uses libav 9
   ∘ Static linking of plugins is supported now (also in 1.0.7)
   ∘ rtspsrc: add support for NetClientClock: when the server suggests a
     GstNetTimeProvider in the SDP, set up a GstNetClientClock that
     slaves to the remote clock and suggest this clock in provide_clock.
     Simplifies synchronized playback of a resource from an RTSP server.
     gst-rtsp-server now supports adding this to the SDP and can provide
     a network clock
   ∘ RTP retransmission / NACK support and big RTP jitterbuffer improvements
   ∘ SRTP and DTLS support
   ∘ Changes to many elements and core to use the correct sticky event
     order and also not lose any important sticky events during flushing
   ∘ >1000 fixed bug reports, and many other bug fixes and other
     improvements everywhere that had no bug report

Things to look out for:
 • Single header includes for all libraries, e.g. #include
   <gst/video/video.h> - this was needed for some bindings.
 • Stricter (correct) caps subset checking in some cases where this was
   not correct before. Caps will now always fail to be a compatible
   subset of another set of caps if the subset caps are missing some
   fields that the superset caps have. This might lead to not-negotiated
   errors if caps are incomplete now. However, it also prevents possible
   data corruption caused by piping data formatted in an
   incompatible/unexpected way into some elements. Check your h264 caps
   for stream-format and alignment fields and AAC caps for the
   stream-format field. This change will also be included in the next
   stable 1.0.8 release.
 • Stricter checking for missing events and correct sticky event order
   (stream-start, caps, segment) in some places; this is not enabled in
   stable releases by default, but you may get warnings when using git
   builds, development releases or when compiling with
   -UG_DISABLE_ASSERT in CFLAGS
 • x264enc now outputs data in byte-stream by default if downstream has
   ANY caps (e.g. appsink without caps set, filesink, udpsink,
   tcpserversink etc.)
 • The MPEG TS demuxer posts messages contain the PMT, PAT, etc. in a
   different format now. This new format uses the data structures from
   the new MPEGTS library
 • The GstContext API has changed between 1.1.4 and 1.1.90

