This is GStreamer 1.3.1

Changes since 1.2:

New API:
 • GstMessageType has GST_MESSAGE_EXTENDED added. All types before
   that can be used together as a flags type as before, but from
   that message onwards the types are just counted incrementally.
   This was necessary to be able to add more message types.
   In 2.0 GstMessageType will just become an enum and not a flags
   type anymore.
 • GstDeviceMonitor for device probing, e.g. to list all available
   audio or video capture devices. This is the replacement for
   GstPropertyProbe from 0.10.
 • Events accumulate the running-time offset now when travelling
   through pads, as set by the gst_pad_set_offset() function. This
   allows to compensate for this in the QOS event for example.
 • GstBuffer has a new flag "tag-memory" that is set automatically
   when memory is added or removed to a buffer. This allows buffer
   pools to detect if they can recycle a buffer or need to reset
   it first.
 • GstToc has new API to mark GstTocEntries as loops.
 • A not-authorized resource error has been defined to notify
   applications that accessing the resource has failed because
   of missing authorization and to distinguish this case from others.
   This change is actually already in 1.2.4.
 • GstPad has a new flag "accept-intersect", that will let the default
   ACCEPT_CAPS query handler do an intersection instead of subset check.
   This is interesting for parser elements that can handle incomplete
   caps.
 • GstCollectPads has support for flushing and a default handler for
   SEEK events now.
 • GstSegment has new API to offset the running time by a specific
   value and this is used in GstPad to allow positive and negative
   offsets in gst_pad_set_offset() in all situations.
 • Support for h265/HEVC and VP8 has been added to the codec utils and codec
   parsers library, and was integrated into various elements.
 • API for adjusting the TLS validation of RTSP connection has been added.
 • The RTSP and SDP library has MIKEY (RFC 3830) support now, and
   there is API to distinguish between the different RTSP profiles.
 • API to access RTP time information and statistics.
 • Support for auxiliary streams was added to rtpbin.
 • Support for tiled, raw video formats has been added.
 • GstVideoDecoder and GstAudioDecoder have API to help aggregating tag
   events and merge custom tags into them consistently.
 • playbin/playsink has support for application provided audio and video
   filters.
 • The GL library was merged from gst-plugins-gl to gst-plugins-bad,
   providing a generic infrastructure for handling GL inside GStreamer
   pipelines and a plugin with some elements using these, especially
   a video sink. Supported platforms currently are Android, Cocoa (OS X),
   DispManX (Raspberry Pi), EAGL (iOS), WGL (Windows) and generic X11,
   Wayland and EGL platforms.
   This replaces eglglessink and also is supposed to replace osxvideosink.


Major changes:
 • New plugins and elements:
   ∘ v4l2videodec element for accessing hardware codecs on
     platforms that make them accessible via V4L2, e.g.
     Samsung Exynos. This comes together with major refactoring
     of the existing V4L2 elements and the corresponding
     infrastructure.
     The v4l2videodec element replaces the mfcdec element.
   ∘ rtpstreampay and rtpstreamdepay elements for transmitting
     RTP packets over a stream API (e.g. TCP) according to
     RFC 4571.
   ∘ rtprtx elements for standard compliant implementation of
     retransmissions, integrated into the rtpmanager plugin.
   ∘ audiomixer element that mixes multiple audio streams together
     into a single one while keeping synchronization. This is
     planned to become the replacement of the adder element.
   ∘ OpenNI2 plugin for 3D cameras like the Kinect camera.
   ∘ OpenEXR plugin for decoding high-dynamic-range EXR images.
   ∘ curlsshsink and curlsftpsink to write files via SSH/SFTP.
   ∘ videosignal, ivfparse and sndfile plugins ported from 0.10.
   ∘ avfvideosrc, vtdec and other elements were ported from 0.10 and
     are available on OS X and iOS now.

 • Other changes:
   ∘ gst-libav now uses libav 10, and gained support for H265/HEVC.
   ∘ Support for hardware codecs and special memory types has been
     improved with bugfixes and feature additions in various plugins
     and base classes.
   ∘ Various bugfixes and improvements to buffering in queue2 and
     multiqueue elements.
   ∘ dvbsrc supports more delivery mechanisms and other features
     now, including DVB S2 and T2 support.
   ∘ The MPEGTS library has support for many more descriptors.
   ∘ Major improvements to tsdemux, especially time related.
   ∘ souphttpsrc now has support for keep-alive connections,
     compression, configurable number of retries and configuration
     for SSL certificate validation.
   ∘ hlsdemux has undergone major refactoring and works more
     reliable now and supports more HLS features like trick modes.
     Also fragments are pushed downstream while they're downloaded
     now instead of waiting for each fragment to finish.
   ∘ videoflip can automatically flip based on the orientation tag.
   ∘ openjpeg supports the OpenJPEG2 API.
   ∘ gst-rtsp-server supports SRTP and MIKEY now.
   ∘ Lots of fixes for coverity warnings all over the place.
   ∘ 400+ fixed bug reports, and many other bug fixes and other
     improvements everywhere that had no bug report.

Things to look out for:
 • The eglglessink element was removed and replaced by the glimagesink
   element.
 • The mfcdec element was removed and replaced by v4l2videodec.
 • osxvideosink is only available in OS X 10.6 or newer.

