X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=NEWS;h=98dc512e6aafede7faddab9906783b2f32fbff87;hb=ce0723527aa37d5f4d19ef8021c0b2eb8f83b08d;hp=407ab98387bc2857293009c22c21bee369cab672;hpb=14f45c7bea0d22726e273d2a7483f7abc0137df3;p=platform%2Fupstream%2Fgst-plugins-good.git diff --git a/NEWS b/NEWS index 407ab98..98dc512 100644 --- a/NEWS +++ b/NEWS @@ -1,19 +1,17 @@ -GSTREAMER 1.14 RELEASE NOTES +GSTREAMER 1.16 RELEASE NOTES -GStreamer 1.14.0 has not been released yet. It is scheduled for release -in early March 2018. +GStreamer 1.16.0 was originally released on 19 April 2019. -There are unstable pre-releases available for testing and development -purposes. The latest pre-release is version 1.13.91 (rc2) and was -released on 12 March 2018. +The latest bug-fix release in the 1.16 series is 1.16.2 and was released +on 3 December 2019. -See https://gstreamer.freedesktop.org/releases/1.14/ for the latest +See https://gstreamer.freedesktop.org/releases/1.16/ for the latest version of this document. -_Last updated: Monday 12 March 2018, 18:00 UTC (log)_ +_Last updated: Tuesday 03 December 2019, 08:00 UTC (log)_ Introduction @@ -22,1068 +20,1894 @@ The GStreamer team is proud to announce a new major feature release in the stable 1.x API series of your favourite cross-platform multimedia framework! -As always, this release is again packed with new features, bug fixes and -other improvements. +As always, this release is again packed with many new features, bug +fixes and other improvements. Highlights -- WebRTC support: real-time audio/video streaming to and from web - browsers +- GStreamer WebRTC stack gained support for data channels for + peer-to-peer communication based on SCTP, BUNDLE support, as well as + support for multiple TURN servers. -- Experimental support for the next-gen royalty-free AV1 video codec +- AV1 video codec support for Matroska and QuickTime/MP4 containers + and more configuration options and supported input formats for the + AOMedia AV1 encoder -- Video4Linux: encoding support, stable element names and faster - device probing +- Support for Closed Captions and other Ancillary Data in video -- Support for the Secure Reliable Transport (SRT) video streaming - protocol +- Support for planar (non-interleaved) raw audio -- RTP Forward Error Correction (FEC) support (ULPFEC) +- GstVideoAggregator, compositor and OpenGL mixer elements are now in + -base -- RTSP 2.0 support in rtspsrc and gst-rtsp-server +- New alternate fields interlace mode where each buffer carries a + single field -- ONVIF audio backchannel support in gst-rtsp-server and rtspsrc +- WebM and Matroska ContentEncryption support in the Matroska demuxer -- playbin3 gapless playback and pre-buffering support +- new WebKit WPE-based web browser source element -- tee, our stream splitter/duplication element, now does allocation - query aggregation which is important for efficient data handling and - zero-copy +- Video4Linux: HEVC encoding and decoding, JPEG encoding, and improved + dmabuf import/export -- QuickTime muxer has a new prefill recording mode that allows file - import in Adobe Premiere and FinalCut Pro while the file is still - being written. +- Hardware-accelerated Nvidia video decoder gained support for VP8/VP9 + decoding, whilst the encoder gained support for H.265/HEVC encoding. -- rtpjitterbuffer fast-start mode and timestamp offset adjustment - smoothing +- Many improvements to the Intel Media SDK based hardware-accelerated + video decoder and encoder plugin (msdk): dmabuf import/export for + zero-copy integration with other components; VP9 decoding; 10-bit + HEVC encoding; video post-processing (vpp) support including + deinterlacing; and the video decoder now handles dynamic resolution + changes. -- souphttpsrc connection sharing, which allows for connection reuse, - cookie sharing, etc. +- The ASS/SSA subtitle overlay renderer can now handle multiple + subtitles that overlap in time and will show them on screen + simultaneously -- nvdec: new plugin for hardware-accelerated video decoding using the - NVIDIA NVDEC API +- The Meson build is now feature-complete (*) and it is now the + recommended build system on all platforms. The Autotools build is + scheduled to be removed in the next cycle. -- Adaptive DASH trick play support +- The GStreamer Rust bindings and Rust plugins module are now + officially part of upstream GStreamer. -- ipcpipeline: new plugin that allows splitting a pipeline across - multiple processes +- The GStreamer Editing Services gained a gesdemux element that allows + directly playing back serialized edit list with playbin or + (uri)decodebin -- Major gobject-introspection annotation improvements for large parts - of the library API +- Many performance improvements Major new features and changes -WebRTC support +Noteworthy new API -There is now basic support for WebRTC in GStreamer in form of a new -webrtcbin element and a webrtc support library. This allows you to build -applications that set up connections with and stream to and from other -WebRTC peers, whilst leveraging all of the usual GStreamer features such -as hardware-accelerated encoding and decoding, OpenGL integration, -zero-copy and embedded platform support. And it's easy to build and -integrate into your application too! +- GstAggregator has a new "min-upstream-latency" property that forces + a minimum aggregate latency for the input branches of an aggregator. + This is useful for dynamic pipelines where branches with a higher + latency might be added later after the pipeline is already up and + running and where a change in the latency would be disruptive. This + only applies to the case where at least one of the input branches is + live though, it won’t force the aggregator into live mode in the + absence of any live inputs. + +- GstBaseSink gained a "processing-deadline" property and + setter/getter API to configure a processing deadline for live + pipelines. The processing deadline is the acceptable amount of time + to process the media in a live pipeline before it reaches the sink. + This is on top of the systemic latency that is normally reported by + the latency query. This defaults to 20ms and should make pipelines + such as v4l2src ! xvimagesink not claim that all frames are late in + the QoS events. Ideally, this should replace the "max-lateness" + property for most applications. + +- RTCP Extended Reports (XR) parsing according to RFC 3611: + Loss/Duplicate RLE, Packet Receipt Times, Receiver Reference Time, + Delay since the last Receiver (DLRR), Statistics Summary, and VoIP + Metrics reports. This only provides the ability to parse such + packets, generation of XR packets is not supported yet and XR + packets are not automatically parsed by rtpbin / rtpsession but must + be actively handled by the application. + +- a new mode for interlaced video was added where each buffer carries + a single field of interlaced video, with buffer flags indicating + whether the field is the top field or bottom field. Top and bottom + fields are expected to alternate in this mode. Caps for this + interlace mode must also carry a format:Interlaced caps feature to + ensure backwards compatibility. + +- The video library has gained support for three new raw pixel + formats: -WebRTC enables real-time communication of audio, video and data with web -browsers and native apps, and it is supported or about to be support by -recent versions of all major browsers and operating systems. + - Y410: packed 4:4:4 YUV, 10 bits per channel + - Y210: packed 4:2:2 YUV, 10 bits per channel + - NV12_10LE40: fully-packed 10-bit variant of NV12_10LE32, + i.e. without the padding bits + +- GstRTPSourceMeta is a new meta that can be used to transport + information about the origin of depayloaded or decoded RTP buffers, + e.g. when mixing audio from multiple sources into a single stream. A + new "source-info" property on the RTP depayloader base class + determines whether depayloaders should put this meta on outgoing + buffers. Similarly, the same property on RTP payloaders determines + whether they should use the information from this meta to construct + the CSRCs list on outgoing RTP buffers. -GStreamer's new WebRTC implementation uses libnice for Interactive -Connectivity Establishment (ICE) to figure out the best way to -communicate with other peers, punch holes into firewalls, and traverse -NATs. +- gst_sdp_message_from_text() is a convenience constructor to parse + SDPs from a string which is particularly useful for language + bindings. -The implementation is not complete, but all the basics are there, and -the code sticks fairly close to the PeerConnection API. Where -functionality is missing it should be fairly obvious where it needs to -go. +Support for Planar (Non-Interleaved) Raw Audio -For more details, background and example code, check out Nirbheek's blog -post _GStreamer has grown a WebRTC implementation_, as well as Matthew's -_GStreamer WebRTC_ talk from last year's GStreamer Conference in Prague. +Raw audio samples are usually passed around in interleaved form in +GStreamer, which means that if there are multiple audio channels the +samples for each channel are interleaved in memory, +e.g. |LEFT|RIGHT|LEFT|RIGHT|LEFT|RIGHT| for stereo audio. A +non-interleaved or planar arrangement in memory would look like +|LEFT|LEFT|LEFT|RIGHT|RIGHT|RIGHT| instead, possibly with +|LEFT|LEFT|LEFT| and |RIGHT|RIGHT|RIGHT| residing in separate memory +chunks or separated by some padding. -New Elements +GStreamer has always had signalling for non-interleaved audio since +version 1.0, but it was never actually properly implemented in any +elements. audioconvert would advertise support for it, but wasn’t +actually able to handle it correctly. -- webrtcbin handles the transport aspects of webrtc connections (see - WebRTC section above for more details) - -- New srtsink and srtsrc elements for the Secure Reliable Transport - (SRT) video streaming protocol, which aims to be easy to use whilst - striking a new balance between reliability and latency for low - latency video streaming use cases. More details about SRT and the - implementation in GStreamer in Olivier's blog post _SRT in - GStreamer_. - -- av1enc and av1dec elements providing experimental support for the - next-generation royalty free video AV1 codec, alongside Matroska - support for it. - -- hlssink2 is a rewrite of the existing hlssink element, but unlike - its predecessor hlssink2 takes elementary streams as input and - handles the muxing to MPEG-TS internally. It also leverages - splitmuxsink internally to do the splitting. This allows more - control over the chunk splitting and sizing process and relies less - on the co-operation of an upstream muxer. Different to the old - hlssink it also works with pre-encoded streams and does not require - close interaction with an upstream encoder element. - -- audiolatency is a new element for measuring audio latency end-to-end - and is useful to measure roundtrip latency including both the - GStreamer-internal latency as well as latency added by external - components or circuits. - -- 'fakevideosink is basically a null sink for video data and very - similar to fakesink, only that it will answer allocation queries and - will advertise support for various video-specific things such - GstVideoMeta, GstVideoCropMeta and GstVideoOverlayCompositionMeta - like a normal video sink would. This is useful for throughput - testing and testing the zero-copy path when creating a new pipeline. - -- ipcpipeline: new plugin that allows the splitting of a pipeline into - multiple processes. Usually a GStreamer pipeline runs in a single - process and parallelism is achieved by distributing workloads using - multiple threads. This means that all elements in the pipeline have - access to all the other elements' memory space however, including - that of any libraries used. For security reasons one might therefore - want to put sensitive parts of a pipeline such as DRM and decryption - handling into a separate process to isolate it from the rest of the - pipeline. This can now be achieved with the new ipcpipeline plugin. - Check out George's blog post _ipcpipeline: Splitting a GStreamer - pipeline into multiple processes_ or his lightning talk from last - year's GStreamer Conference in Prague for all the gory details. - -  -- proxysink and proxysrc are new elements to pass data from one - pipeline to another within the same process, very similar to the - existing inter elements, but not limited to raw audio and video - data. These new proxy elements are very special in how they work - under the hood, which makes them extremely powerful, but also - dangerous if not used with care. The reason for this is that it's - not just data that's passed from sink to src, but these elements - basically establish a two-way wormhole that passes through queries - and events in both directions, which means caps negotiation and - allocation query driven zero-copy can work through this wormhole. - There are scheduling considerations as well: proxysink forwards - everything into the proxysrc pipeline directly from the proxysink - streaming thread. There is a queue element inside proxysrc to - decouple the source thread from the sink thread, but that queue is - not unlimited, so it is entirely possible that the proxysink - pipeline thread gets stuck in the proxysrc pipeline, e.g. when that - pipeline is paused or stops consuming data for some other reason. - This means that one should always shut down down the proxysrc - pipeline before shutting down the proxysink pipeline, for example. - Or at least take care when shutting down pipelines. Usually this is - not a problem though, especially not in live pipelines. For more - information see Nirbheek's blog post _Decoupling GStreamer - Pipelines_, and also check out out the new ipcpipeline plugin for - sending data from one process to another process (see above). - -- lcms is a new LCMS-based ICC color profile correction element - -- openmptdec is a new OpenMPT-based decoder for module music formats, - such as S3M, MOD, XM, IT. It is built on top of a new - GstNonstreamAudioDecoder base class which aims to unify handling of - files which do not operate a streaming model. The wildmidi plugin - has also been revived and is also implemented on top of this new - base class. - -- The curl plugin has gained a new curlhttpsrc element, which is - useful for testing HTTP protocol version 2.0 amongst other things. +With this release we now have full support for non-interleaved audio as +well, which means more efficient integration with external APIs that +handle audio this way, but also more efficient processing of certain +operations like interleaving multiple 1-channel streams into a +multi-channel stream which can be done without memory copies now. -Noteworthy new API +New API to support this has been added to the GStreamer Audio support +library: There is now a new GstAudioMeta which describes how data is +laid out inside the buffer, and buffers with non-interleaved audio must +always carry this meta. To access the non-interleaved audio samples you +must map such buffers with gst_audio_buffer_map() which works much like +gst_buffer_map() or gst_video_frame_map() in that it will populate a +little GstAudioBuffer helper structure passed to it with the number of +samples, the number of planes and pointers to the start of each plane in +memory. This function can also be used to map interleaved audio buffers +in which case there will be only one plane of interleaved samples. -- GstPromise provides future/promise-like functionality. This is used - in the GStreamer WebRTC implementation. - -  -- GstReferenceTimestampMeta is a new meta that allows you to attach - additional reference timestamps to a buffer. These timestamps don't - have to relate to the pipeline clock in any way. Examples of this - could be an NTP timestamp when the media was captured, a frame - counter on the capture side or the (local) UNIX timestamp when the - media was captured. The decklink elements make use of this. - -  -- GstVideoRegionOfInterestMeta: it's now possible to attach generic - free-form element-specific parameters to a region of interest meta, - for example to tell a downstream encoder to use certain codec - parameters for a certain region. - -  -- gst_bus_get_pollfd can be used to obtain a file descriptor for the - bus that can be poll()-ed on for new messages. This is useful for - integration with non-GLib event loops. - -  -- gst_get_main_executable_path() can be used by wrapper plugins that - need to find things in the directory where the application - executable is located. In the same vein, - GST_PLUGIN_DEPENDENCY_FLAG_PATHS_ARE_RELATIVE_TO_EXE can be used to - signal that plugin dependency paths are relative to the main - executable. - -- pad templates can be told about the GType of the pad subclass of the - pad via newly-added GstPadTemplate API API or the - gst_element_class_add_static_pad_template_with_gtype() convenience - function. gst-inspect-1.0 will use this information to print pad - properties. - -  -- new convenience functions to iterate over element pads without using - the GstIterator API: gst_element_foreach_pad(), - gst_element_foreach_src_pad(), and gst_element_foreach_sink_pad(). - -  -- GstBaseSrc and appsrc have gained support for buffer lists: - GstBaseSrc subclasses can use gst_base_src_submit_buffer_list(), and - applications can use gst_app_src_push_buffer_list() to push a buffer - list into appsrc. - -  -- The GstHarness unit test harness has a couple of new convenience - functions to retrieve all pending data in the harness in form of a - single chunk of memory. - -  -- GstAudioStreamAlign is a new helper object for audio elements that - handles discontinuity detection and sample alignment. It will align - samples after the previous buffer's samples, but keep track of the - divergence between buffer timestamps and sample position (jitter). - If it exceeds a configurable threshold the alignment will be reset. - This simply factors out code that was duplicated in a number of - elements into a common helper API. - -  -- The GstVideoEncoder base class implements Quality of Service (QoS) - now. This is disabled by default and must be opted in by setting the - "qos" property, which will make the base class gather statistics - about the real-time performance of the pipeline from downstream - elements (usually sinks that sync the pipeline clock). Subclasses - can then make use of this by checking whether input frames are late - already using gst_video_encoder_get_max_encode_time() If late, they - can just drop them and skip encoding in the hope that the pipeline - will catch up. - -  -- The GstVideoOverlay interface gained a few helper functions for - installing and handling a "render-rectangle" property on elements - that implement this interface, so that this functionality can also - be used from the command line for testing and debugging purposes. - The property wasn't added to the interface itself as that would - require all implementors to provide it which would not be - backwards-compatible. - -  -- A new base class, GstNonstreamAudioDecoder for non-stream audio - decoders was added to gst-plugins-bad. This base-class is meant to - be used for audio decoders that require the whole stream to be - loaded first before decoding can start. Examples of this are module - formats (MOD/S3M/XM/IT/etc), C64 SID tunes, video console music - files (GYM/VGM/etc), MIDI files and others. The new openmptdec - element is based on this. - -  -- Full list of API new in 1.14: -- GStreamer core API new in 1.14 -- GStreamer base library API new in 1.14 -- gst-plugins-base libraries API new in 1.14 -- gst-plugins-bad: no list, mostly GstWebRTC library and new - non-stream audio decoder base class. - -New RTP features and improvements - -- rtpulpfecenc and rtpulpfecdec are new elements that implement - Generic Forward Error Correction (FEC) using Uneven Level Protection - (ULP) as described in RFC 5109. This can be used to protect against - certain types of (non-bursty) packet loss, and important packets - such as those containing codec configuration data or key frames can - be protected with higher redundancy. Equally, packets that are not - particularly important can be given low priority or not be protected - at all. If packets are lost, the receiver can then hopefully restore - the lost packet(s) from the surrounding packets which were received. - This is an alternative to, or rather complementary to, dealing with - packet loss using _retransmission (rtx)_. GStreamer has had - retransmission support for a long time, but Forward Error Correction - allows for different trade-offs: The advantage of Forward Error - Correction is that it doesn't add latency, whereas retransmission - requires at least one more roundtrip to request and hopefully - receive lost packets; Forward Error Correction increases the - required bandwidth however, even in situations where there is no - packet loss at all, so one will typically want to fine-tune the - overhead and mechanisms used based on the characteristics of the - link at the time. - -- New _Redundant Audio Data (RED)_ encoders and decoders for RTP as - per RFC 2198 are also provided (rtpredenc and rtpreddec), mostly for - chrome webrtc compatibility, as chrome will wrap ULPFEC-protected - streams in RED packets, and such streams need to be wrapped and - unwrapped in order to use ULPFEC with chrome. - -  -- a few new buffer flags for FEC support: - GST_BUFFER_FLAG_NON_DROPPABLE can be used to mark important buffers, - e.g. to flag RTP packets carrying keyframes or codec setup data for - RTP Forward Error Correction purposes, or to prevent still video - frames from being dropped by elements due to QoS. There already is a - GST_BUFFER_FLAG_DROPPABLE. GST_RTP_BUFFER_FLAG_REDUNDANT is used to - signal internally that a packet represents a redundant RTP packet - and used in rtpstorage to hold back the packet and use it only for - recovery from packet loss. Further work is still needed in - payloaders to make use of these. - -- rtpbin now has an option for increasing timestamp offsets gradually: - Instant large changes to the internal ts_offset may cause timestamps - to move backwards and also cause visible glitches in media playback. - The new "max-ts-offset-adjustment" and "max-ts-offset" properties - let the application control the rate to apply changes to ts_offset. - There have also been some EOS/BYE handling improvements in rtpbin. - -- rtpjitterbuffer has a new fast start mode: in many scenarios the - jitter buffer will have to wait for the full configured latency - before it can start outputting packets. The reason for that is that - it often can't know what the sequence number of the first expected - RTP packet is, so it can't know whether a packet earlier than the - earliest packet received will still arrive in future. This behaviour - can now be bypassed by setting the "faststart-min-packets" property - to the number of consecutive packets needed to start, and the jitter - buffer will start output packets as soon as it has N consecutive - packets queued internally. This is particularly useful to get a - first video frame decoded and rendered as quickly as possible. - -- rtpL8pay and rtpL8depay provide RTP payloading and depayloading for - 8-bit raw audio - -New element features - -- playbin3 has gained support or gapless playback via the - "about-to-finish" signal where users can set the uri for the next - item to play. For non-live streams this will be emitted as soon as - the first uri has finished downloading, so with sufficiently large - buffers it is now possible to pre-buffer the next item well ahead of - time (unlike playbin where there would not be a lot of time between - "about-to-finish" emission and the end of the stream). If the stream - format of the next stream is the same as that of the previous - stream, the data will be concatenated via the concat element. - Whether this will result in true gaplessness depends on the - container format and codecs used, there might still be codec-related - gaps between streams with some codecs. - -- tee now does allocation query aggregation, which is important for - zero-copy and efficient data handling, especially for video. Those - who want to drop allocation queries on purpose can use the identity - element's new "drop-allocation" property for that instead. - -- audioconvert now has a "mix-matrix" property, which obsoletes the - audiomixmatrix element. There's also mix matrix support in the audio - conversion and channel mixing API. - -- x264enc: new "insert-vui" property to disable VUI (Video Usability - Information) parameter insertion into the stream, which allows - creation of streams that are compatible with certain legacy hardware - decoders that will refuse to decode in certain combinations of - resolution and VUI parameters; the max. allowed number of B-frames - was also increased from 4 to 16. - -- dvdlpcmdec: has gained support for Blu-Ray audio LPCM. - -- appsrc has gained support for buffer lists (see above) and also seen - some other performance improvements. - -- flvmux has been ported to the GstAggregator base class which means - it can work in defined-latency mode with live input sources and - continue streaming if one of the inputs stops producing data. - -- jpegenc has gained a "snapshot" property just like pngenc to make it - easier to just output a single encoded frame. - -- jpegdec will now handle interlaced MJPEG streams properly and also - handle frames without an End of Image marker better. - -- v4l2: There are now video encoders for VP8, VP9, MPEG4, and H263. - The v4l2 video decoder handles dynamic resolution changes, and the - video4linux device provider now does much faster device probing. The - plugin also no longer uses the libv4l2 library by default, as it has - prevented a lot of interesting use cases like CREATE_BUFS, DMABuf, - usage of TRY_FMT. As the libv4l2 library is totally inactive and not - really maintained, we decided to disable it. This might affect a - small number of cheap/old webcams with custom vendor formats for - which we do not provide conversion in GStreamer. It is possible to - re-enable support for libv4l2 at run-time however, by setting the - environment variable GST_V4L2_USE_LIBV4L2=1. - -- rtspsrc now has support for RTSP protocol version 2.0 as well as - ONVIF audio backchannels (see below for more details). It also - sports a new ["accept-certificate"] signal for "manually" checking a - TLS certificate for validity. It now also prints RTSP/SDP messages - to the gstreamer debug log instead of stdout. - -- shout2send now uses non-blocking I/O and has a configurable network - operations timeout. - -- splitmuxsink has gained a "split-now" action signal and new - "alignment-threshold" and "use-robust-muxing" properties. If robust - muxing is enabled, it will check and set the muxer's reserved space - properties if present. This is primarily for use with mp4mux's - robust muxing mode. - -- qtmux has a new _prefill recording mode_ which sets up a moov header - with the correct sample positions beforehand, which then allows - software like Adobe Premiere and FinalCut Pro to import the files - while they are still being written to. This only works with constant - framerate I-frame only streams, and for now only support for ProRes - video and raw audio is implemented but adding new codecs is just a - matter of defining appropriate maximum frame sizes. - -- qtmux also supports writing of svmi atoms with stereoscopic video - information now. Trak timescales can be configured on a per-stream - basis using the "trak-timescale" property on the sink pads. Various - new formats can be muxed: MPEG layer 1 and 2, AC3 and Opus, as well - as PNG and VP9. - -- souphttpsrc now does connection sharing by default, shares its - SoupSession with other elements in the same pipeline via a - GstContext if possible (session-wide settings are all the defaults). - This allows for connection reuse, cookie sharing, etc. Applications - can also force a context to use. In other news, HTTP headers - received from the server are posted as element messages on the bus - now for easier diagnostics, and it's also possible now to use other - types of proxy servers such as SOCKS4 or SOCKS5 proxies, support for - which is implemented directly in gio. Before only HTTP proxies were - allowed. - -- qtmux, mp4mux and matroskamux will now refuse caps changes of input - streams at runtime. This isn't really supported with these - containers (or would have to be implemented differently with a - considerable effort) and doesn't produce valid and spec-compliant - files that will play everywhere. So if you can't guarantee that the - input caps won't change, use a container format that does support on - the fly caps changes for a stream such as MPEG-TS or use - splitmuxsink which can start a new file when the caps change. What - would happen before is that e.g. rtph264depay or rtph265depay would - simply send new SPS/PPS inband even for AVC format, which would then - get muxed into the container as if nothing changed. Some decoders - will handle this just fine, but that's often more luck than by - design. In any case, it's not right, so we disallow it now. - -- matroskamux had Table of Content (TOC) support now (chapters etc.) - and matroskademux TOC support has been improved. matroskademux has - also seen seeking improvements searching for the right cluster and - position. - -- videocrop now uses GstVideoCropMeta if downstream supports it, which - means cropping can be handled more efficiently without any copying. - -- compositor now has support for _crossfade blending_, which can be - used via the new "crossfade-ratio" property on the sink pads. - -- The avwait element has a new "end-timecode" property and posts - "avwait-status" element messages now whenever avwait starts or stops - passing through data (e.g. because target-timecode and end-timecode - respectively have been reached). - -  -- h265parse and h265parse will try harder to make upstream output the - same caps as downstream requires or prefers, thus avoiding - unnecessary conversion. The parsers also expose chroma format and - bit depth in the caps now. - -- The dtls elements now longer rely on or require the application to - run a GLib main loop that iterates the default main context - (GStreamer plugins should never rely on the application running a - GLib main loop). - -- openh264enc allows to change the encoding bitrate dynamically at - runtime now - -- nvdec is a new plugin for hardware-accelerated video decoding using - the NVIDIA NVDEC API (which replaces the old VDPAU API which is no - longer supported by NVIDIA) - -- The NVIDIA NVENC hardware-accelerated video encoders now support - dynamic bitrate and preset reconfiguration and support the I420 - 4:2:0 video format. It's also possible to configure the gop size via - the new "gop-size" property. - -- The MPEG-TS muxer and demuxer (tsmux, tsdemux) now have support for - JPEG2000 - -- openjpegdec and jpeg2000parse support 2-component images now (gray - with alpha), and jpeg2000parse has gained limited support for - conversion between JPEG2000 stream-formats. (JP2, J2C, JPC) and also - extracts more details such as colorimetry, interlace-mode, - field-order, multiview-mode and chroma siting. - -- The decklink plugin for Blackmagic capture and playback cards have - seen numerous improvements: - -- decklinkaudiosrc and decklinkvideosrc now put hardware reference - timestamp on buffers in form of GstReferenceTimestampMetas. - This can be useful to know on multi-channel cards which frames from - different channels were captured at the same time. - -- decklinkvideosink has gained support for Decklink hardware keying - with two new properties ("keyer-mode" and "keyer-level") to control - the built-in hardware keyer of Decklink cards. - -- decklinkaudiosink has been re-implemented around GstBaseSink instead - of the GstAudioBaseSink base class, since the Decklink APIs don't - fit very well with the GstAudioBaseSink APIs, which used to cause - various problems due to inaccuracies in the clock calculations. - Problems were audio drop-outs and A/V sync going wrong after - pausing/seeking. - -- support for more than 16 devices, without any artificial limit - -- work continued on the msdk plugin for Intel's Media SDK which - enables hardware-accelerated video encoding and decoding on Intel - graphics hardware on Windows or Linux. More tuning options were - added, and more pixel formats and video codecs are supported now. - The encoder now also handles force-key-unit events and can insert - frame-packing SEIs for side-by-side and top-bottom stereoscopic 3D - video. - -- dashdemux can now do adaptive trick play of certain types of DASH - streams, meaning it can do fast-forward/fast-rewind of normal (non-I - frame only) streams even at high speeds without saturating network - bandwidth or exceeding decoder capabilities. It will keep statistics - and skip keyframes or fragments as needed. See Sebastian's blog post - _DASH trick-mode playback in GStreamer_ for more details. It also - supports webvtt subtitle streams now and has seen improvements when - seeking in live streams. - -  -- kmssink has seen lots of fixes and improvements in this cycle, - including: - -- Raspberry Pi (vc4) and Xilinx DRM driver support - -- new "render-rectangle" property that can be used from the command - line as well as "display-width" and "display-height", and - "can-scale" properties - -- GstVideoCropMeta support +Of course support for this has also been implemented in the various +audio helper and conversion APIs, base classes, and in elements such as +audioconvert, audioresample, audiotestsrc, audiorate. -Plugin and library moves +Support for Closed Captions and Other Ancillary Data in Video + +The video support library has gained support for detecting and +extracting Ancillary Data from videos as per the SMPTE S291M +specification, including: + +- a VBI (Vertical Blanking Interval) parser that can detect and + extract Ancillary Data from Vertical Blanking Interval lines of + component signals. This is currently supported for videos in v210 + and UYVY format. + +- a new GstMeta for closed captions: GstVideoCaptionMeta. This + supports the two types of closed captions, CEA-608 and CEA-708, + along with the four different ways they can be transported (other + systems are a superset of those). + +- a VBI (Vertical Blanking Interval) encoder for writing ancillary + data to the Vertical Blanking Interval lines of component signals. + +The new closedcaption plugin in gst-plugins-bad then makes use of all +this new infrastructure and provides the following elements: + +- cccombiner: a closed caption combiner that takes a closed captions + stream and another stream and adds the closed captions as + GstVideoCaptionMeta to the buffers of the other stream. + +- ccextractor: a closed caption extractor which will take + GstVideoCaptionMeta from input buffers and output them as a separate + closed captions stream. + +- ccconverter: a closed caption converter that can convert between + different formats + +- line21encoder, line21decoder: inject/extract line21 closed captions + to/from SD video streams + +- cc708overlay: decodes CEA 608/708 captions and overlays them on + video + +Additionally, the following elements have also gained Closed Caption +support: + +- qtdemux and qtmux support CEA 608/708 Closed Caption tracks + +- mpegvideoparse, h264parse extracts Closed Captions from MPEG-2/H.264 + video streams + +- avviddec, avvidenc, x264enc got support for extracting/injecting + Closed Captions + +- decklinkvideosink can output closed captions and decklinkvideosrc + can extract closed captions + +- playbin and playbin3 learned how to autoplug CEA 608/708 CC overlay + elements + +- the externally maintained ajavideosrc element for AJA capture cards + has support for extracting closed captions + +The rsclosedcaption plugin in the Rust plugins collection includes a +MacCaption (MCC) file parser and encoder. -MPEG-1 audio (mp1, mp2, mp3) decoders and encoders moved to -good +New Elements + +- overlaycomposition: New element that allows applications to draw + GstVideoOverlayCompositions on a stream. The element will emit the + "draw" signal for each video buffer, and the application then + generates an overlay for that frame (or not). This is much more + performant than e.g. cairooverlay for many use cases, e.g. because + pixel format conversions can be avoided or the blitting of the + overlay can be delegated to downstream elements (such as + gloverlaycompositor). It’s particularly useful for cases where only + a small section of the video frame should be drawn on. + +- gloverlaycompositor: New OpenGL-based compositor element that + flattens any overlays from GstVideoOverlayCompositionMetas into the + video stream. This element is also always part of glimagesink. + +- glalpha: New element that adds an alpha channel to a video stream. + The values of the alpha channel can either be set to a constant or + can be dynamically calculated via chroma keying. It is similar to + the existing alpha element but based on OpenGL. Calculations are + done in floating point so results may not be identical to the output + of the existing alpha element. + +- rtpfunnel funnels together RTP streams into a single session. Use + cases include multiplexing and bundle. webrtcbin uses it to + implement BUNDLE support. + +- testsrcbin is a source element that provides an audio and/or video + stream and also announces them using the recently-introduced + GstStream API. This is useful for testing elements such as playbin3 + or uridecodebin3 etc. + +- New closed caption elements: cccombiner, ccextractor, ccconverter, + line21encoder, line21decoder and cc708overlay (see above) + +- wpesrc: new source element acting as a Web Browser based on WebKit + WPE + +- Two new OpenCV-based elements: cameracalibrate and cameraundistort + that can communicate to figure out distortion correction parameters + for a camera and correct for the distortion. + +- New sctp plugin based on usrsctp with sctpenc and sctpdec elements. + These elements are used inside webrtcbin for implementing data + channels. + +New element features and additions + +- playbin3, playbin and playsink have gained a new "text-offset" + property to adjust the positioning of the selected subtitle stream + vis-a-vis the audio and video streams. This uses subtitleoverlay’s + new "subtitle-ts-offset" property. GstPlayer has gained matching API + for this, namely gst_player_get_text_video_offset(). + +- playbin3 buffering improvements: in network playback scenarios there + may be multiple inputs to decodebin3, and buffering will be done + before decodebin3 using queue2 or downloadbuffer elements inside + urisourcebin. Since this is before any parsers or demuxers there may + not be any bitrate information available for the various streams, so + it was difficult to configure the buffering there smartly within + global constraints. This was improved now: The queue2 elements + inside urisourcebin will now use the new bitrate query to figure out + a bitrate estimate for the stream if no bitrate was provided by + upstream, and urisourcebin will use the bitrates of the individual + queues to distribute the globally-set "buffer-size" budget in bytes + to the various queues. urisourcebin also gained "low-watermark" and + "high-watermark" properties which will be proxied to the internal + queues, as well as a read-only "statistics" property which allows + querying of the minimum/maximum/average byte and time levels of the + queues inside the urisourcebin in question. + +- splitmuxsink has gained a couple of new features: + + - new "async-finalize" mode: This mode is useful for muxers or + outputs that can take a long time to finalize a file. Instead of + blocking the whole upstream pipeline while the muxer is doing + its stuff, we can unlink it and spawn a new muxer + sink + combination to continue running normally. This requires us to + receive the muxer and sink (if needed) as factories via the new + "muxer-factory" and "sink-factory" properties, optionally + accompanied by their respective properties structures (set via + the new "muxer-properties" and "sink-properties" properties). + There are also new "muxer-added" and "sink-added" signals in + case custom code has to be called for them to configure them. + + - "split-at-running-time" action signal: When called by the user, + this action signal ends the current file (and starts a new one) + as soon as the given running time is reached. If called multiple + times, running times are queued up and processed in the order + they were given. + + - "split-after" action signal to finish outputting the current GOP + to the current file and then start a new file as soon as the GOP + is finished and a new GOP is opened (unlike the existing + "split-now" which immediately finishes the current file and + writes the current GOP into the next newly-started file). + + - "reset-muxer" property: when unset, the muxer is reset using + flush events instead of setting its state to NULL and back. This + means the muxer can keep state across resets, e.g. mpegtsmux + will keep the continuity counter continuous across segments as + required by hlssink2. + +- qtdemux gained PIFF track encryption box support in addition to the + already-existing PIFF sample encryption support, and also allows + applications to select which encryption system to use via a + "drm-preferred-decryption-system-id" context in case there are + multiple options. + +- qtmux: the "start-gap-threshold" property determines now whether an + edit list will be created to account for small gaps or offsets at + the beginning of a stream in case the start timestamps of tracks + don’t line up perfectly. Previously the threshold was hard-coded to + 1% of the (video) frame duration, now it is 0 by default (so edit + list will be created even for small differences), but fully + configurable. + +- rtpjitterbuffer has improved end-of-stream handling + +- rtpmp4vpay will be preferred over rtpmp4gpay for MPEG-4 video in + autoplugging scenarios now + +- rtspsrc now allows applications to send RTSP SET_PARAMETER and + GET_PARAMETER requests using action signals. + +- rtspsrc has a small (100ms) configurable teardown delay by default + to try and make sure an RTSP TEARDOWN request gets sent out when the + source element shuts down. This will block the downward PAUSED to + READY state change for a short time, but can be disabled where it’s + a problem. Some servers only allow a limited number of concurrent + clients, so if no proper TEARDOWN is sent new clients may have + problems connecting to the server for a while. + +- souphttpsrc behaves better with low bitrate streams now. Before it + would increase the read block size too quickly which could lead to + it not reading any data from the socket for a very long time with + low bitrate streams that are output live downstream. This could lead + to servers kicking off the client. + +- filesink: do internal buffering to avoid performance regression with + small writes since we bypass libc buffering by using writev() + instead of fwrite() + +- identity: add "eos-after" property and fix "error-after" property + when the element is reused + +- input-selector: lets context queries pass through, so that + e.g. upstream OpenGL elements can use contexts and displays + advertised by downstream elements + +- queue2: avoid ping-pong between 0% and 100% buffering messages if + upstream is pushing buffers larger than one of its limits, plus + performance optimisations + +- opusdec: new "phase-inversion" property to control phase inversion. + When enabled, this will slightly increase stereo quality, but + produces a stream that when downmixed to mono will suffer audio + distortions. + +- The x265enc HEVC encoder also exposes a "key-int-max" property to + configure the maximum allowed GOP size now. + +- decklinkvideosink has seen stability improvements for long-running + pipelines (potential crash due to overflow of leaked clock refcount) + and clock-slaving improvements when performing flushing seeks + (causing stalls in the output timeline), pausing and/or buffering. + +- srtpdec, srtpenc: add support for MKIs which allow multiple keys to + be used with a single SRTP stream + +- srtpdec, srtpenc: add support for AES-GCM and also add support for + it in gst-rtsp-server and rtspsrc. + +- The srt Secure Reliable Transport plugin has integrated server and + client elements srt{client,server}{src,sink} into one (srtsrc and + srtsink), since SRT connection mode can be changed by uri + parameters. + +- h264parse and h265parse will handle SEI recovery point messages and + mark recovery points as keyframes as well (in addition to IDR + frames) + +- webrtcbin: "add-turn-server" action signal to pass multiple ICE + relays (TURN servers). + +- The removesilence element has received various new features and + properties, such as a "threshold" property, detecting silence only + after minimum silence time/buffers, a "silent" property to control + bus message notifications as well as a "squash" property. + +- AOMedia AV1 decoder gained support for 10/12bit decoding whilst the + AV1 encoder supports more image formats and subsamplings now and + acquired support for rate control and profile related configuration. + +- The Fraunhofer fdkaac plugin can now be built against the 2.0.0 + version API and has improved multichannel support + +- kmssink now supports unpadded 24-bit RGB and can configure mode + setting from video info, which enables display of multi-planar + formats such as I420 or NV12 with modesetting. It has also gained a + number of new properties: The "restore-crtc" property does what it + says on the tin and is enabled by default. "plane-properties" and + "connector-properties" can be used to pass custom properties to the + DRM. + +- waylandsink has a "fullscreen" property now and supports the + XDG-Shell protocol. + +- decklinkvideosink, decklinkvideosrc support selecting between + half/full duplex -Following the expiration of the last remaining mp3 patents in most -jurisdictions, and the termination of the mp3 licensing program, as well -as the decision by certain distros to officially start shipping full mp3 -decoding and encoding support, these plugins should now no longer be -problematic for most distributors and have therefore been moved from --ugly and -bad to gst-plugins-good. Distributors can still disable these -plugins if desired. +- The vulkan plugin gained support for macOS and iOS via MoltenVK in + addition to the existing support for X11 and Wayland -In particular these are: +- imagefreeze has a new num-buffers property to limit the number of + buffers that are produced and to send an EOS event afterwards -- mpg123audiodec: an mp1/mp2/mp3 audio decoder using libmpg123 -- lamemp3enc: an mp3 encoder using LAME -- twolamemp2enc: an mp2 encoder using TwoLAME +- webrtcbin has a new, introspectable get-transceiver signal in + addition to the old get-transceivers signal that couldn’t be used + from bindings -GstAggregator moved from -bad to core +- Support for per-element latency information was added to the latency + tracer -GstAggregator has been moved from gst-plugins-bad to the base library in -GStreamer and is now stable API. +Plugin and library moves -GstAggregator is a new base class for mixers and muxers that have to -handle multiple input pads and aggregate streams into one output stream. -It improves upon the existing GstCollectPads API in that it is a proper -base class which was also designed with live streaming in mind. -GstAggregator subclasses will operate in a mode with defined latency if -any of the inputs are live streams. This ensures that the pipeline won't -stall if any of the inputs stop producing data, and that the configured -maximum latency is never exceeded. +- The stereo element was moved from -bad into the existing audiofx + plugin in -good. If you get duplicate type registration warnings + when upgrading, check that you don’t have a stale stereoplugin lying + about somewhere. -GstAudioAggregator, audiomixer and audiointerleave moved from -bad to -base +GstVideoAggregator, compositor, and OpenGL mixer elements moved from -bad to -base -GstAudioAggregator is a new base class for raw audio mixers and muxers -and is based on GstAggregator (see above). It provides defined-latency -mixing of raw audio inputs and ensures that the pipeline won't stall -even if one of the input streams stops producing data. +GstVideoAggregator is a new base class for raw video mixers and muxers +and is based on GstAggregator. It provides defined-latency mixing of raw +video inputs and ensures that the pipeline won’t stall even if one of +the input streams stops producing data. As part of the move to stabilise the API there were some last-minute API changes and clean-ups, but those should mostly affect internal elements. - -It is used by the audiomixer element, which is a replacement for -'adder', which did not handle live inputs very well and did not align -input streams according to running time. audiomixer should behave much -better in that respect and generally behave as one would expected in -most scenarios. - -Similarly, audiointerleave replaces the 'interleave' element which did -not handle live inputs or non-aligned inputs very robustly. - -GstAudioAggregator and its subclases have gained support for input -format conversion, which does not include sample rate conversion though -as that would add additional latency. Furthermore, GAP events are now -handled correctly. - -We hope to move the video equivalents (GstVideoAggregator and -compositor) to -base in the next cycle, i.e. for 1.16. - -GStreamer OpenGL integration library and plugin moved from -bad to -base - -The GStreamer OpenGL integration library and opengl plugin have moved -from gst-plugins-bad to -base and are now part of the stable API canon. -Not all OpenGL elements have been moved; a few had to be left behind in -gst-plugins-bad in the new openglmixers plugin, because they depend on -the GstVideoAggregator base class which we were not able to move in this -cycle. We hope to reunite these elements with the rest of their family -for 1.16 though. - -This is quite a milestone, thanks to everyone who worked to make this -happen! - -Qt QML and GTK plugins moved from -bad to -good - -The Qt QML-based qmlgl plugin has moved to -good and provides a -qmlglsink video sink element as well as a qmlglsrc element. qmlglsink -renders video into a QQuickItem, and qmlglsrc captures a window from a -QML view and feeds it as video into a pipeline for further processing. -Both elements leverage GStreamer's OpenGL integration. In addition to -the move to -good the following features were added: - -- A proxy object is now used for thread-safe access to the QML widget - which prevents crashes in corner case scenarios: QML can destroy the - video widget at any time, so without this we might be left with a - dangling pointer. - -- EGL is now supported with the X11 backend, which works e.g. on - Freescale imx6 - -The GTK+ plugin has also moved from -bad to -good. It includes gtksink -and gtkglsink which both render video into a GtkWidget. gtksink uses -Cairo for rendering the video, which will work everywhere in all -scenarios but involves an extra memory copy, whereas gtkglsink fully -leverages GStreamer's OpenGL integration, but might not work properly in -all scenarios, e.g. where the OpenGL driver does not properly support -multiple sharing contexts in different threads; on Linux Nouveau is -known to be broken in this respect, whilst NVIDIA's proprietary drivers -and most other drivers generally work fine, and the experience with -Intel's driver seems to be fixed; some proprietary embedded Linux -drivers don't work; macOS works). - -GstPhysMemoryAllocator interface moved from -bad to -base - -GstPhysMemoryAllocator is a marker interface for allocators with -physical address backed memory. +Most notably, the "ignore-eos" pad property was renamed to +"repeat-after-eos" and the conversion code was moved to a +GstVideoAggregatorConvertPad subclass to avoid code duplication, make +things less awkward for subclasses like the OpenGL-based video mixer, +and make the API more consistent with the audio aggregator API. + +It is used by the compositor element, which is a replacement for +‘videomixer’ which did not handle live inputs very well. compositor +should behave much better in that respect and generally behave as one +would expected in most scenarios. + +The compositor element has gained support for per-pad blending mode +operators (SOURCE, OVER, ADD) which determines what operator to use for +blending this pad over the previous ones. This can be used to implement +crossfading and the available operators can be extended in the future as +needed. + +A number of OpenGL-based video mixer elements (glvideomixer, glmixerbin, +glvideomixerelement, glstereomix, glmosaic) which are built on top of +GstVideoAggregator have also been moved from -bad to -base now. These +elements have been merged into the existing OpenGL plugin, so if you get +duplicate type registration warnings when upgrading, check that you +don’t have a stale openglmixers plugin lying about somewhere. Plugin removals -- the sunaudio plugin was removed, since it couldn't ever have been - built or used with GStreamer 1.0, but no one even noticed in all - these years. +The following plugins have been removed from gst-plugins-bad: + +- The experimental daala plugin has been removed, since it’s not so + useful now that all effort is focused on AV1 instead, and it had to + be enabled explicitly with --enable-experimental anyway. + +- The spc plugin has been removed. It has been replaced by the gme + plugin. + +- The acmmp3dec and acmenc plugins for Windows have been removed. ACM + is an ancient legacy API and there was no point in keeping the + plugins around for a licensed MP3 decoder now that the MP3 patents + have expired and we have a decoder in -good. We also didn’t ship + these in our cerbero-built Windows packages, so it’s unlikely that + they’ll be missed. + + +Miscellaneous API additions + +- GstBitwriter: new generic bit writer API to complement the existing + bit reader + +- gst_buffer_new_wrapped_bytes() creates a wrap buffer from a GBytes + +- gst_caps_set_features_simple() sets a caps feature on all the + structures of a GstCaps + +- New GST_QUERY_BITRATE query: This allows determining from downstream + what the expected bitrate of a stream may be which is useful in + queue2 for setting time based limits when upstream does not provide + timing information. tsdemux, qtdemux and matroskademux have basic + support for this query on their sink pads. + +- elements: there is a new “Hardware” class specifier. Elements + interacting with hardware devices should specify this classifier in + their element factory class metadata. This is useful to advertise as + one might need to put such elements into READY state to test if the + hardware is present in the system for example. + +- protection: Add a new definition for unspecified system protection, + GST_PROTECTION_UNSPECIFIED_SYSTEM_ID + +- take functions for various mini objects that didn’t have them yet: + gst_query_take(), gst_message_take(), gst_tag_list_take(), + gst_buffer_list_take(). Unlike the various _replace() functions + _take() does not increase the reference count but takes ownership of + the mini object passed. + +- clear functions for various mini object types and GstObject which + unrefs the object or mini object (if non-NULL) and sets the variable + pointed to to NULL: gst_clear_structure(), gst_clear_tag_list(), + gst_clear_query(), gst_clear_message(), gst_clear_event(), + gst_clear_caps(), gst_clear_buffer_list(), gst_clear_buffer(), + gst_clear_mini_object(), gst_clear_object() + +- miniobject: new API gst_mini_object_add_parent() and + gst_mini_object_remove_parent() to set parent pointers on mini + objects to ensure correct writability: Every container of + miniobjects now needs to store itself as parent in the child object, + and remove itself again later. A mini object is then only writable + if there is at most one parent, that parent is writable itself, and + the reference count of the mini object is 1. GstBuffer (for + memories), GstBufferList (for buffers), GstSample (for caps, buffer, + bufferlist), and GstVideoOverlayComposition were updated + accordingly. Without this it was possible to have e.g. a buffer list + with a refcount of 2 used in two places at once that both modify the + same buffer with refcount 1 at the same time wrongly thinking it is + writable even though it’s really not. + +- poll: add API to watch for POLLPRI and stop treating POLLPRI as a + read. This is useful to wait for video4linux events which are + signalled via POLLPRI. + +- sample: new API to update the contents of a GstSample and make it + writable: gst_sample_set_buffer(), gst_sample_set_caps(), + gst_sample_set_segment(), gst_sample_set_info(), plus + gst_sample_is_writable() and gst_sample_make_writable(). This makes + it possible to reuse a sample object and avoid unnecessary memory + allocations, for example in appsink. + +- ClockIDs now keep a weak reference to underlying clock to avoid + crashes in basesink in corner cases where a clock goes away while + the ClockID is still in use, plus some new API + (gst_clock_id_get_clock(), gst_clock_id_uses_clock()) to check the + clock a ClockID is linked to. + +- The GstCheck unit test library gained a + fail_unless_equals_clocktime() convenience macro as well as some new + GstHarness API for for proposing meta APIs from the allocation + query: gst_harness_add_propose_allocation_meta(). ASSERT_CRITICAL() + checks in unit tests are now skipped if GStreamer was compiled with + GST_DISABLE_GLIB_CHECKS. + +- gst_audio_buffer_truncate() convenience function to truncate a raw + audio buffer + +- GstDiscoverer has support for caching the results of discovery in + the default cache directory. This can be enabled with the use-cache + property and is disabled by default. + +- GstMeta that are attached to GstBuffers are now always stored in the + order in which they were added. + +- Additional support for signalling ONVIF specific features were + added: the SEEK event can store a trickmode-interval now and support + for the Rate-Control and Frames RTSP headers was added to the RTSP + library. + + +Miscellaneous performance and memory optimisations + +As always there have been many performance and memory usage improvements +across all components and modules. Some of them (such as dmabuf +import/export) have already been mentioned elsewhere so won’t be +repeated here. + +The following list is only a small snapshot of some of the more +interesting optimisations that haven’t been mentioned in other contexts +yet: + +- The GstVideoEncoder and GstVideoDecoder base classes now release the + STREAM_LOCK when pushing out buffers, which means (multi-threaded) + encoders and decoders can now receive and continue to process input + buffers whilst waiting for downstream elements in the pipeline to + process the buffer that was pushed out. This increases throughput + and reduces processing latency, also and especially for + hardware-accelerated encoder/decoder elements. -- the schroedinger-based Dirac encoder/decoder plugin has been - removed, as there is no longer any upstream or anyone else - maintaining it. Seeing that it's quite a fringe codec it seemed best - to simply remove it. +- GstQueueArray has seen a few API additions + (gst_queue_array_peek_nth(), gst_queue_array_set_clear_func(), + gst_queue_array_clear()) so that it can be used in other places like + GstAdapter instead of a GList, which reduces allocations and + improves performance. -API removals +- appsink now reuses the sample object in pull_sample() if possible -- some MPEG video parser API in the API unstable codecutils library in - gst-plugins-bad was removed after having been deprecated for 5 - years. +- rtpsession only starts the RTCP thread when it’s actually needed now + +- udpsrc uses a buffer pool now and the GstUdpSrc object structure was + optimised for better cache performance + +GstPlayer + +- API was added to fine-tune the synchronisation offset between + subtitles and video Miscellaneous changes -- The video support library has gained support for a few new pixel - formats: -- NV16_10LE32: 10-bit variant of NV16, packed into 32bit words (plus 2 - bits padding) -- NV12_10LE32: 10-bit variant of NV12, packed into 32bit words (plus 2 - bits padding) -- GRAY10_LE32: 10-bit grayscale, packed in 32bit words (plus 2 bits - padding) - -- decodebin, playbin and GstDiscoverer have seen stability - improvements in corner cases such as shutdown while still starting - up or shutdown in error cases (hat tip to the oss-fuzz project). - -- floating reference handling was inconsistent and has been cleaned up - across the board, including annotations. This solves various - long-standing memory leaks in language bindings, which e.g. often - caused elements and pads to be leaked. - -- major gobject-introspection annotation improvements for large parts - of the library API, including nullability of return types and - function parameters, correct types (e.g. strings vs. filenames), - ownership transfer, array length parameters, etc. This allows to use - bigger parts of the GStreamer API to be safely used from dynamic - language bindings (e.g. Python, Javascript) and allows static - bindings (e.g. C#, Rust, Vala) to autogenerate more API bindings - without manual intervention. +- As a result of moving to newer FFmpeg APIs, encoder and decoder + elements exposed by the GStreamer FFmpeg wrapper plugin (gst-libav) + may have seen possibly incompatible changes to property names and/or + types, and not all properties exposed might be functional. We are + still reviewing the new properties and aim to minimise breaking + changes at least for the most commonly-used properties, so please + report any issues you run into! OpenGL integration -- The GStreamer OpenGL integration library has moved to - gst-plugins-base and is now part of our stable API. +- The OpenGL mixer elements have been moved from -bad to + gst-plugins-base (see above) + +- The Mesa GBM backend now supports headless mode + +- gloverlaycompositor: New OpenGL-based compositor element that + flattens any overlays from GstVideoOverlayCompositionMetas into the + video stream. -- new MESA3D GBM BACKEND. On devices with working libdrm support, it - is possible to use Mesa3D's GBM library to set up an EGL context - directly on top of KMS. This makes it possible to use the GStreamer - OpenGL elements without a windowing system if a libdrm- and - Mesa3D-supported GPU is present. +- glalpha: New element that adds an alpha channel to a video stream. + The values of the alpha channel can either be set to a constant or + can be dynamically calculated via chroma keying. It is similar to + the existing alpha element but based on OpenGL. Calculations are + done in floating point so results may not be identical to the output + of the existing alpha element. -- Prefer wayland display over X11: As most Wayland compositors support - XWayland, the X11 backend would get selected. +- glupload: Implement direct dmabuf uploader, the idea being that some + GPUs (like the Vivante series) can actually perform the YUV->RGB + conversion internally, so no custom conversion shaders are needed. + To make use of this feature, we need an additional uploader that can + import DMABUF FDs and also directly pass the pixel format, relying + on the GPU to do the conversion. -- gldownload can export dmabufs now, and glupload will advertise - dmabuf as caps feature. +- The OpenGL library no longer restores the OpenGL viewport. This is a + performance optimization to not require performing multiple + expensive glGet*() function calls per frame. This affects any + application or plugin use of the following functions and objects: + - glcolorconvert library object (not the element) + - glviewconvert library object (not the element) + - gst_gl_framebuffer_draw_to_texture() + - custom GstGLWindow implementations Tracing framework and debugging improvements -- NEW MEMORY RINGBUFFER BASED DEBUG LOGGER, useful for long-running - applications or to retrieve diagnostics when encountering an error. - The GStreamer debug logging system provides in-depth debug logging - about what is going on inside a pipeline. When enabled, debug logs - are usually written into a file, printed to the terminal, or handed - off to a log handler installed by the application. However, at - higher debug levels the volume of debug output quickly becomes - unmanageable, which poses a problem in disk-space or bandwidth - restricted environments or with long-running pipelines where a - problem might only manifest itself after multiple days. In those - situations, developers are usually only interested in the most - recent debug log output. The new in-memory ringbuffer logger makes - this easy: just installed it with gst_debug_add_ring_buffer_logger() - and retrieve logs with gst_debug_ring_buffer_logger_get_logs() when - needed. It is possible to limit the memory usage per thread and set - a timeout to determine how long messages are kept around. It was - always possible to implement this in the application with a custom - log handler of course, this just provides this functionality as part - of GStreamer. - -  -- 'fakevideosink is a null sink for video data that advertises - video-specific metas ane behaves like a video sink. See above for - more details. - -- gst_util_dump_buffer() prints the content of a buffer to stdout. - -- gst_pad_link_get_name() and gst_state_change_get_name() print pad - link return values and state change transition values as strings. - -- The LATENCY TRACER has seen a few improvements: trace records now - contain timestamps which is useful to plot things over time, and - downstream synchronisation time is now excluded from the measured - values. - -- Miniobject refcount tracing and logging was not entirley - thread-safe, there were duplicates or missing entries at times. This - has now been made reliable. - -- The netsim element, which can be used to simulate network jitter, - packet reordering and packet loss, received new features and - improvements: it can now also simulate network congestion using a - token bucket algorithm. This can be enabled via the "max-kbps" - property. Packet reordering can be disabled now via the - "allow-reordering" property: Reordering of packets is not very - common in networks, and the delay functions will always introduce - reordering if delay > packet-spacing, so by setting - "allow-reordering" to FALSE you guarantee that the packets are in - order, while at the same time introducing delay/jitter to them. By - using the new "delay-distribution" property the use can control how - the delay applied to delayed packets is distributed: This is either - the uniform distribution (as before) or the normal distribution; in - addition there is also the gamma distribution which simulates the - delay on wifi networks better. +- There is now a GDB PRETTY PRINTER FOR VARIOUS GSTREAMER TYPES: For + GstObject pointers the type and name is added, e.g. + 0x5555557e4110 [GstDecodeBin|decodebin0]. For GstMiniObject pointers + the object type is added, e.g. 0x7fffe001fc50 [GstBuffer]. For + GstClockTime and GstClockTimeDiff the time is also printed in human + readable form, e.g. 150116219955 [+0:02:30.116219955]. +- GDB EXTENSION WITH TWO CUSTOM GDB COMMANDS gst-dot AND gst-print: -Tools + - gst-dot creates dot files that a very close to what + GST_DEBUG_BIN_TO_DOT_FILE() produces, but object properties and + buffer contents such as codec-data in caps are not available. + + - gst-print produces high-level information about a GStreamer + object. This is currently limited to pads for GstElements and + events for the pads. The output may look like this: -- gst-inspect-1.0 now prints pad properties for elements that have pad - subclasses with special properties, such as compositor or - audiomixer. This only works for elements that use the newly-added - GstPadTemplate API API or the - gst_element_class_add_static_pad_template_with_gtype() convenience - function to tell GStreamer about the special pad subclass. +- gst_structure_to_string() now serialises the actual value of + pointers when serialising GstStructures instead of claiming they’re + NULL. This makes debug logging in various places less confusing, + because it’s clear now that structure fields actually hold valid + objects. Such object pointer values will never be deserialised + however. -- gst-launch-1.0 now generates a gstreamer pipeline diagram (.dot - file) whenever SIGHUP is sent to it on Linux/*nix systems. -- gst-discoverer-1.0 can now analyse live streams such as rtsp:// URIs +Tools + +- gst-inspect-1.0 has coloured output now and will automatically use a + pager if the output does not fit on a page. This only works in a + UNIX environment and if the output is not piped, and on Windows 10 + build 16257 or newer. If you don’t like the colours you can disable + them by setting the GST_INSPECT_NO_COLORS=1 environment variable or + passing the --no-color command line option. GStreamer RTSP server -- Initial support for [RTSP protocol version - 2.0][rtsp2-lightning-talk] was added, which is to the best of our - knowledge the first RTSP 2.0 implementation ever! - -- ONVIF audio backchannel support. This is an extension specified by - ONVIF that allows RTSP clients (e.g. a control room operator) to - send audio back to the RTSP server (e.g. an IP camera). - Theoretically this could have been done also by using the RECORD - method of the RTSP protocol, but ONVIF chose not to do that, so the - backchannel is set up alongside the other streams. Format - negotiation needs to be done out of band, if needed. Use the new - ONVIF-specific subclasses GstRTSPOnvifServer and - GstRTSPOnvifMediaFactory to enable this functionality. - -  -- The internal server streaming pipeline is now dynamically - reconfigured on PLAY based on the transports needed. This means that - the server no longer adds the pipeline plumbing for all possible - transports from the start, but only if needed as needed. This - improves performance and memory footprint. - -- rtspclientsink has gained an "accept-certificate" signal for - manually checking a TLS certificate for validity. - -- Fix keep-alive/timeout issue for certain clients using TCP - interleave as transport who don't do keep-alive via some other - method such as periodic RTSP OPTION requests. We now put netaddress - metas on the packets from the TCP interleaved stream, so can map - RTCP packets to the right stream in the server and can handle them - properly. - -- Language bindings improvements: in general there were quite a few - improvements in the gobject-introspection annotations, but we also - extended the permissions API which was not usable from bindings - before. - -- Fix corner case issue where the wrong mount point was found when - there were multiple mount points with a common prefix. +- Improved backlog handling when using TCP interleaved for data + transport. Before there was a fixed maximum size for backlog + messages, which was prone to deadlocks and made it difficult to + control memory usage with the watch backlog. The RTSP server now + limits queued TCP data messages to one per stream, moving queuing of + the data into the pipeline and leaving the RTSP connection + responsive to RTSP messages in both directions, preventing all those + problems. + +- Initial ULP Forward Error Correction support in rtspclientsink and + for RECORD mode in the server. + +- API to explicitly enable retransmission requests (RTX) + +- Lots of multicast-related fixes + +- rtsp-auth: Add support for parsing .htdigest files GStreamer VAAPI -- this section will be filled in shortly {FIXME!} +- Support Wayland’s display for context sharing, so the application + can pass its own wl_display in order to be used for the VAAPI + display creation. + +- A lot of work to support new Intel hardware using media-driver as VA + backend. + +- For non-x86 devices, VAAPI display can instantiate, through DRM, + with no PCI bus. This enables the usage of libva-v4l2-request + driver. + +- Added support for XDG-shell protocol as wl_shell replacement which + is currently deprecated. This change add as dependency + wayland-protocol. + +- GstVaapiFilter, GstVaapiWindow, and GstVaapiDecoder classes now + inherit from GstObject, gaining all the GStreamer’s instrumentation + support. + +- The metadata now specifies the plugin as Hardware class. + +- H264 decoder is more stable with problematic streams. + +- In H265 decoder added support for profiles main-422-10 (P010_10LE), + main-444 (AYUV) and main-444-10 (Y410) + +- JPEG decoder handles dynamic resolution changes. + +- More specification adherence in H264 and H265 encoders. + + +GStreamer OMX + +- Add support of NV16 format to video encoders input. + +- Video decoders now handle the ALLOCATION query to tell upstream + about the number of buffers they require. Video encoders will also + use this query to adjust their number of allocated buffers + preventing starvation when using dynamic buffer mode. + +- The OMX_PERFORMANCE debug category has been renamed to OMX_API_TRACE + and can now be used to track a widder variety of interactions + between OMX and GStreamer. + +- Video encoders will now detect frame rate only changes and will + inform OMX about it rather than doing a full format reset. + +- Various Zynq UltraScale+ specific improvements: + - Video encoders are now able to import dmabuf from upstream. + - Support for HEVC range extension profiles and more AVC profiles. + - We can now request video encoders to generate an IDR using the + force key unit event. GStreamer Editing Services and NLE -- this section will be filled in shortly {FIXME!} +- Added a gesdemux element, it is an auto pluggable element that + allows decoding edit list like files supported by GES + +- Added gessrc which wraps a GESTimeline as a standard source element + (implementing the ges protocol handler) + +- Added basic support for videorate::rate property potentially + allowing changing playback speed + +- Layer priority is now fully automatic and they should be moved with + the new ges_timeline_move_layer method, ges_layer_set_priority is + now deprecated. + +- Added a ges_timeline_element_get_layer_priority so we can simply get + all information about GESTimelineElement position in the timeline + +- GESVideoSource now auto orientates the images if it is defined in a + meta (overridable). + +- Added some PyGObject overrides to make the API more pythonic + +- The threading model has been made more explicit with safe guard to + make sure not thread safe APIs are not used from the wrong threads. + It is also now possible to properly handle in what thread the API + should be used. + +- Optimized GESClip and GESTrackElement creation + +- Added a way to compile out the old, unused and deprecated + GESPitiviFormatter + +- Re implemented the timeline editing API making it faster and making + the code much more maintainable + +- Simplified usage of nlecomposition outside GES by removing quirks in + it API usage and removing the need to treat it specially from an + application perspective. + +- ges-launch-1.0: + + - Added support to add titles to the timeline + - Enhance the help auto generating it from the code + +- Deprecate ges_timeline_load_from_uri as loading the timeline should + be done through a project now + +- MANY leaks have been plugged and the unit testsuite is now “leak + free” GStreamer validate -- this section will be filled in shortly {FIXME!} +- Added an action type to verify the checksum of the sink last-sample + +- Added an include keyword to validate scenarios + +- Added the notion of variable in scenarios, with the set-vars keyword + +- Started adding support for “performance” like tests by allowing to + define the number of dropped buffers or the minimum buffer frequency + on a specific pad + +- Added a validateflow plugin which allows defining the data flow to + be seen on a particular pad and verifying that following runs match + the expectations + +- Added support for appsrc based test definition so we can instrument + the data pushed into the pipeline from scenarios + +- Added a mockdecryptor allowing adding tests with on encrypted files, + the element will potentially be instrumented with a validate + scenario + +- gst-validate-launcher: + + - Cleaned up output + + - Changed the default for “muting” tests as user doesn’t expect + hundreds of windows to show up when running the testsuite + + - Fixed the outputted xunit files to be compatible with GitLab + + - Added support to run tests on media files in push mode (using + pushfile://) + + - Added support for running inside gst-build + + - Added support for running ssim tests on rendered files + + - Added a way to simply define tests on pipelines through a simple + .json file + + - Added a python app to easily run python testsuite reusing all + the launcher features + + - Added flatpak knowledge so we can print backtrace even when + running from within flatpak + + - Added a way to automatically generated “known issues” + suppressions lines + + - Added a way to rerun tests to check if they are flaky and added + a way to tolerate tests known to be flaky + + - Add a way to output html log files GStreamer Python Bindings -- this section will be filled in shortly {FIXME!} +- add binding for gst_pad_set_caps() +- pygobject dependency requirement was bumped to >= 3.8 -Build and Dependencies +- new audiotestsrc, audioplot, and mixer plugin examples, and a + dynamic pipeline example -- the new WebRTC support in gst-plugins-bad depends on the GStreamer - elements that ship as part of libnice, and libnice version 1.1.14 is - required. Also the dtls and srtp plugins. -- gst-plugins-bad no longer depends on the libschroedinger Dirac codec - library. +GStreamer C# Bindings + +- bindings for the GstWebRTC library + + +GStreamer Rust Bindings + +The GStreamer Rust bindings are now officially part of the GStreamer +project and are also maintained in the GStreamer GitLab. + +The releases will generally not be synchronized with the releases of +other GStreamer parts due to dependencies on other projects. + +Also unlike the other GStreamer libraries, the bindings will not commit +to full API stability but instead will follow the approach that is +generally taken by Rust projects, e.g.: + +1) 0.12.X will be completely API compatible with all other 0.12.Y + versions. +2) 0.12.X+1 will contain bugfixes and compatible new feature additions. +3) 0.13.0 will _not_ be backwards compatible with 0.12.X but projects + will be able to stay at 0.12.X without any problems as long as they + don’t need newer features. + +The current stable release is 0.12.2 and the next release series will be +0.13, probably around March 2019. + +At this point the bindings cover most of GStreamer core (except for most +notably GstAllocator and GstMemory), and most parts of the app, audio, +base, check, editing-services, gl, net. pbutils, player, rtsp, +rtsp-server, sdp, video and webrtc libraries. + +Also included is support for creating subclasses of the following types +and writing GStreamer plugins: + +- gst::Element +- gst::Bin and gst::Pipeline +- gst::URIHandler and gst::ChildProxy +- gst::Pad, gst::GhostPad +- gst_base::Aggregator and gst_base::AggregatorPad +- gst_base::BaseSrc and gst_base::BaseSink +- gst_base::BaseTransform + +Changes to 0.12.X since 0.12.0 + +Fixed + +- PTP clock constructor actually creates a PTP instead of NTP clock + +Added + +- Bindings for GStreamer Editing Services +- Bindings for GStreamer Check testing library +- Bindings for the encoding profile API (encodebin) + +- VideoFrame, VideoInfo, AudioInfo, StructureRef implements Send and + Sync now +- VideoFrame has a function to get the raw FFI pointer +- From impls from the Error/Success enums to the combined enums like + FlowReturn +- Bin-to-dot file functions were added to the Bin trait +- gst_base::Adapter implements SendUnique now +- More complete bindings for the gst_video::VideoOverlay interface, + especially + gst_video::is_video_overlay_prepare_window_handle_message() + +Changed + +- All references were updated from GitHub to freedesktop.org GitLab +- Fix various links in the README.md +- Link to the correct location for the documentation +- Remove GitLab badge as that only works with gitlab.com currently + +Changes in git master for 0.13 + +Fixed + +- gst::tag::Album is the album tag now instead of artist sortname + +Added + +- Subclassing infrastructure was moved directly into the bindings, + making the gst-plugin crate deprecated. This involves many API + changes but generally cleans up code and makes it more flexible. + Take a look at the gst-plugins-rs crate for various examples. + +- Bindings for CapsFeatures and Meta +- Bindings for + ParentBufferMeta,VideoMetaandVideoOverlayCompositionMeta` +- Bindings for VideoOverlayComposition and VideoOverlayRectangle +- Bindings for VideoTimeCode + +- UniqueFlowCombiner and UniqueAdapter wrappers that make use of the + Rust compile-time mutability checks and expose more API in a safe + way, and as a side-effect implement Sync and Send now + +- More complete bindings for Allocation Query +- pbutils functions for codec descriptions +- TagList::iter() for iterating over all tags while getting a single + value per tag. The old ::iter_tag_list() function was renamed to + ::iter_generic() and still provides access to each value for a tag +- Bus::iter() and Bus::iter_timed() iterators around the corresponding + ::pop\*() functions + +- serde serialization of Value can also handle Buffer now + +- Extensive comments to all examples with explanations +- Transmuxing example showing how to use typefind, multiqueue and + dynamic pads +- basic-tutorial-12 was ported and added + +Changed + +- Rust 1.31 is the minimum supported Rust version now +- Update to latest gir code generator and glib bindings -- The srtp plugin can now also be built against libsrtp2. - -- some plugins and libraries have moved between modules, see the - _Plugin and_ _library moves_ section above, and their respective - dependencies have moved with them of course, e.g. the GStreamer - OpenGL integration support library and plugin is now in - gst-plugins-base, and mpg123, LAME and twoLAME based audio decoder - and encoder plugins are now in gst-plugins-good. - -- Unify static and dynamic plugin interface and remove plugin specific - static build option: Static and dynamic plugins now have the same - interface. The standard --enable-static/--enable-shared toggle is - sufficient. This allows building static and shared plugins from the - same object files, instead of having to build everything twice. - -- The default plugin entry point has changed. This will only affect - plugins that are recompiled against new GStreamer headers. Binary - plugins using the old entry point will continue to work. However, - plugins that are recompiled must have matching plugin names in - GST_PLUGIN_DEFINE and filenames, as the plugin entry point for - shared plugins is now deduced from the plugin filename. This means - you can no longer have a plugin called foo living in a file called - libfoobar.so or such, the plugin filename needs to match. This might - cause problems with some external third party plugin modules when - they get rebuilt against GStreamer 1.14. - - -Note to packagers and distributors - -A number of libraries, APIs and plugins moved between modules and/or -libraries in different modules between version 1.12.x and 1.14.x, see -the _Plugin and_ _library moves_ section above. Some APIs have seen -minor ABI changes in the course of moving them into the stable APIs -section. - -This means that you should try to ensure that all major GStreamer -modules are synced to the same major version (1.12 or 1.13/1.14) and can -only be upgraded in lockstep, so that your users never end up with a mix -of major versions on their system at the same time, as this may cause -breakages. - -Also, plugins compiled against >= 1.14 headers will not load with -GStreamer <= 1.12 owing to a new plugin entry point (but plugin binaries -built against older GStreamer versions will continue to load with newer -versions of GStreamer of course). - -There is also a small structure size related ABI breakage introduced in -the gst-plugins-bad codecparsers library between version 1.13.90 and -1.13.91. This should "only" affect gstreamer-vaapi, so anyone who ships -the release candidates is advised to upgrade those two modules at the -same time. - - -Platform-specific improvements +- Functions returning e.g. gst::FlowReturn or other “combined” enums + were changed to return split enums like + Result to allow usage of the + standard Rust error handling. + +- MiniObject subclasses are now newtype wrappers around the underlying + GstRc wrapper. This does not change the API in any breaking + way for the current usages, but allows MiniObjects to also be + implemented in other crates and makes sure rustdoc places the + documentation in the right places. + +- BinExt extension trait was renamed to GstBinExt to prevent conflicts + with gtk::Bin if both are imported + +- Buffer::from_slice() can’t possible return None + +- Various clippy warnings + + +GStreamer Rust Plugins + +Like the GStreamer Rust bindings, the Rust plugins are now officially +part of the GStreamer project and are also maintained in the GStreamer +GitLab. + +In the 0.3.x versions this contained infrastructure for writing +GStreamer plugins in Rust, and a set of plugins. + +In git master that infrastructure was moved to the GLib and GStreamer +bindings directly, together with many other improvements that were made +possible by this, so the gst-plugins-rs repository only contains +GStreamer elements now. + +Elements included are: + +- Tutorials plugin: identity, rgb2gray and sinesrc with extensive + comments + +- rsaudioecho, a port of the audiofx element + +- rsfilesrc, rsfilesink + +- rsflvdemux, a FLV demuxer. Not feature-equivalent with flvdemux yet + +- threadshare plugin: ts-appsrc, ts-proxysrc/sink, ts-queue, ts-udpsrc + and ts-tcpclientsrc elements that use a fixed number of threads and + share them between instances. For more background about these + elements see Sebastian’s talk “When adding more threads adds more + problems - Thread-sharing between elements in GStreamer” at the + GStreamer Conference 2017. + +- rshttpsrc, a HTTP source around the hyper/reqwest Rust libraries. + Not feature-equivalent with souphttpsrc yet. + +- togglerecord, an element that allows to start/stop recording at any + time and keeps all audio/video streams in sync. + +- mccparse and mccenc, parsers and encoders for the MCC closed caption + file format. + +Changes to 0.3.X since 0.3.0 + +- All references were updated from GitHub to freedesktop.org GitLab +- Fix various links in the README.md +- Link to the correct location for the documentation + +Changes in git master for 0.4 + +- togglerecord: Switch to parking_lot crate for mutexes/condition + variables for lower overhead +- Merge threadshare plugin here +- New closedcaption plugin with mccparse and mccenc elements +- New identity element for the tutorials plugin + +- Register plugins statically in tests instead of relying on the + plugin loader to find the shared library in a specific place + +- Update to the latest API changes in the GLib and GStreamer bindings +- Update to the latest versions of all crates + + +Build and Dependencies + +- The MESON BUILD SYSTEM BUILD IS NOW FEATURE-COMPLETE (*) and it is + now the recommended build system on all platforms and also used by + Cerbero to build GStreamer on all platforms. The Autotools build is + scheduled to be removed in the next cycle. Developers who currently + use gst-uninstalled should move to gst-build. The build option + naming has been cleaned up and made consistent and there are now + feature options to enable/disable plugins and various other features + on a case-by-case basis. (*) with the exception of plugin docs which + will be handled differently in future + +- Symbol export in libraries is now controlled via explicit exports + using symbol visibility or export defines where supported, to ensure + consistency across all platforms. This also allows libraries to have + exports that vary based on detected platform features and configure + options as is the case with the GStreamer OpenGL integration library + for example. A few symbols that had been exported by accident in + earlier versions may no longer be exported. These symbols will not + have had declarations in any public header files then though and + would not have been usable. + +- The GStreamer FFmpeg wrapper plugin (gst-libav) now depends on + FFmpeg 4.x and uses the new FFmpeg 4.x API and stopped relying on + ancient API that was removed with the FFmpeg 4.x release. This means + that it is no longer possible to build this module against an older + system-provided FFmpeg 3.x version. Use the internal FFmpeg 4.x copy + instead if you build using autotools, or use gst-libav 1.14.x + instead which targets the FFmpeg 3.x API and _should_ work fine in + combination with a newer GStreamer. It’s difficult for us to support + both old and new FFmpeg APIs at the same time, apologies for any + inconvenience caused. + +- Hardware-accelerated Nvidia video encoder/decoder plugins nvdec and + nvenc can be built against CUDA Toolkit versions 9 and 10.0 now. The + dynlink interface has been dropped since it’s deprecated in 10.0. + +- The (optional) OpenCV requirement has been bumped to >= 3.0.0 and + the plugin can also be built against OpenCV 4.x now. + +- New sctp plugin based on usrsctp (for WebRTC data channels) + +Cerbero + +Cerbero is a meta build system used to build GStreamer plus dependencies +on platforms where dependencies are not readily available, such as +Windows, Android, iOS and macOS. + +Cerbero has seen a number of improvements: + +- Cerbero has been ported to Python 3 and requires Python 3.5 or newer + now + +- Source tarballs are now protected by checksums in the recipes to + guard against download errors and malicious takeover of projects or + websites. In addition, downloads are only allowed via secure + transports now and plain HTTP, FTP and git:// transports are not + allowed anymore. + +- There is now a new fetch-bootstrap command which downloads sources + required for bootstrapping, with an optional --build-tools-only + argument to match the bootstrap --build-tools-only command. + +- The bootstrap, build, package and bundle-source commands gained a + new --offline switch that ensures that only sources from the cache + are used and never downloaded via the network. This is useful in + combination with the fetch and fetch-bootstrap commands that acquire + sources ahead of time before any build steps are executed. This + allows more control over the sources used and when sources are + updated, and is particularly useful for build environments that + don’t have network access. + +- bootstrap --assume-yes will automatically say ‘yes’ to any + interactive prompts during the bootstrap stage, such as those from + apt-get or yum. + +- bootstrap --system-only will only bootstrap the system without build + tools. + +- Manifest support: The build manifest can be used in continuous + integration (CI) systems to fixate the Git revision of certain + projects so that all builds of a pipeline are on the same reference. + This is used in GStreamer’s gitlab CI for example. It can also be + used in order to re-produce a specific build. To set a manifest, you + can set manifest = 'my_manifest.xml' in your configuration file, or + use the --manifest command line option. The command line option will + take precedence over anything specific in the configuration file. + +- The new build-deps command can be used to build only the + dependencies of a recipe, without the recipe itself. + +- new --list-variants command to list available variants + +- variants can now be set on the command line via the -v option as a + comma-separated list. This overrides any variants set in any + configuration files. + +- new qt5, intelmsdk and nvidia variants for enabling Qt5 and hardware + codec support. See the Enabling Optional Features with Variants + section in the Cerbero documentation for more details how to enable + and use these variants. + +- When building on Windows, Cerbero can now build GStreamer recipes + and core dependencies such as glib with Visual Studio. This is + controlled by the visualstudio variant. Visual Studio 2015, 2017, + and 2019 are supported. Currently, only 64-bit x86 is supported due + to a known bug which will be fixed for the next release. + +- A new -t / --timestamp command line switch makes commands print + timestamps + + +Platform-specific changes and improvements Android -- ahcsrc (Android camera source) does autofocus now +- toolchain: update compiler to clang and NDKr18. NDK r18 removed the + armv5 target and only has Android platforms that target at least + armv7 so the armv5 target is not useful anymore. + +- The way that GIO modules are named has changed due to upstream GLib + natively adding support for loading static GIO modules. This means + that any GStreamer application using gnutls for SSL/TLS on the + Android or iOS platforms (or any other setup using static libraries) + will fail to link looking for the g_io_module_gnutls_load_static() + function. The new function name is now + g_io_gnutls_load(gpointer data). data can be NULL for a static + library. Look at this commit for the necessary change in the + examples. + +- various build issues on Android have been fixed. macOS and iOS -- this section will be filled in shortly {FIXME!} +- various build issues on iOS have been fixed. -Windows +- the minimum required iOS version is now 9.0. The difference in + adoption between 8.0 and 9.0 is 0.1% and the bump to 9.0 fixes some + build issues. -- The GStreamer wasapi plugin was rewritten and should not only be - usable now, but in top shape and suitable for low-latency use cases. - The Windows Audio Session API (WASAPI) is Microsoft's most modern - method for talking with audio devices, and now that the wasapi - plugin is up to scratch it is preferred over the directsound plugin. - The ranks of the wasapisink and wasapisrc elements have been updated - to reflect this. Further improvements include: +- The way that GIO modules are named has changed due to upstream GLib + natively adding support for loading static GIO modules. This means + that any GStreamer application using gnutls for SSL/TLS on the + Android or iOS platforms (or any other setup using static libraries) + will fail to link looking for the g_io_module_gnutls_load_static() + function. The new function name is now + g_io_gnutls_load(gpointer data). data can be NULL for a static + library. Look at this commit for the necessary change in the + examples. + +Windows -- support for more than 2 channels +- The webrtcdsp element is shipped again as part of the Windows binary + packages, the build system issue has been resolved. -- a new "low-latency" property to enable low-latency operation (which - should always be safe to enable) +- ‘Inconsistent DLL linkage’ warnings when building with MSVC have + been fixed -- support for the AudioClient3 API which is only available on Windows - 10: in wasapisink this will be used automatically if available; in - wasapisrc it will have to be enabled explicitly via the - "use-audioclient3" property, as capturing audio with low latency and - without glitches seems to require setting the realtime priority of - the entire pipeline to "critical", which cannot be done from inside - the element, but has to be done in the application. +- Hardware-accelerated Nvidia video encoder/decoder plugins nvdec and + nvenc build on Windows now, also with MSVC and using Meson. -- set realtime thread priority to avoid glitches +- The ksvideosrc camera capture plugin supports 16-bit grayscale video + now -- allow opening devices in exclusive mode, which provides much lower - latency compared to shared mode where WASAPI's engine period is - 10ms. This can be activated via the "exclusive" property. +- The wasapisrc audio capture element implements loopback recording + from another output device or sink -- There are now GstDeviceProvider implementations for the wasapi and - directsound plugins, so it's now possible to discover both audio - sources and audio sinks on Windows via the GstDeviceMonitor API +- wasapisink recover from low buffer levels in shared mode and some + exclusive mode fixes -- debug log timestamps are now higher granularity owing to - g_get_monotonic_time() now being used as fallback in - gst_utils_get_timestamp(). Before that, there would sometimes be - 10-20 lines of debug log output sporting the same timestamp. +- dshowsrc now implements the GstDeviceMonitor interface Contributors -Aaron Boxer, Adrián Pardini, Adrien SCH, Akinobu Mita, Alban Bedel, -Alessandro Decina, Alex Ashley, Alicia Boya García, Alistair Buxton, -Alvaro Margulis, Anders Jonsson, Andreas Frisch, Andrejs Vasiljevs, -Andrew Bott, Antoine Jacoutot, Antonio Ospite, Antoni Silvestre, Anton -Obzhirov, Anuj Jaiswal, Arjen Veenhuizen, Arnaud Bonatti, Arun Raghavan, -Ashish Kumar, Aurélien Zanelli, Ayaka, Branislav Katreniak, Branko -Subasic, Brion Vibber, Carlos Rafael Giani, Cassandra Rommel, Chris -Bass, Chris Paulson-Ellis, Christoph Reiter, Claudio Saavedra, Clemens -Lang, Cyril Lashkevich, Daniel van Vugt, Dave Craig, Dave Johnstone, -David Evans, David Schleef, Deepak Srivastava, Dimitrios Katsaros, -Dmitry Zhadinets, Dongil Park, Dustin Spicuzza, Eduard Sinelnikov, -Edward Hervey, Enrico Jorns, Eunhae Choi, Ezequiel Garcia, fengalin, -Filippo Argiolas, Florent Thiéry, Florian Zwoch, Francisco Velazquez, -François Laignel, fvanzile, George Kiagiadakis, Georg Lippitsch, Graham -Leggett, Guillaume Desmottes, Gurkirpal Singh, Gwang Yoon Hwang, Gwenole -Beauchesne, Haakon Sporsheim, Haihua Hu, HÃ¥vard Graff, Heekyoung Seo, -Heinrich Fink, Holger Kaelberer, Hoonhee Lee, Hosang Lee, Hyunjun Ko, -Ian Jamison, James Stevenson, Jan Alexander Steffens (heftig), Jan -Schmidt, Jason Lin, Jens Georg, Jeremy Hiatt, Jérôme Laheurte, Jimmy -Ohn, Jochen Henneberg, John Ludwig, John Nikolaides, Jonathan Karlsson, -Josep Torra, Juan Navarro, Juan Pablo Ugarte, Julien Isorce, Jun Xie, -Jussi Kukkonen, Justin Kim, Lasse Laursen, Lubosz Sarnecki, Luc -Deschenaux, Luis de Bethencourt, Marcin Lewandowski, Mario Alfredo -Carrillo Arevalo, Mark Nauwelaerts, Martin Kelly, Matej Knopp, Mathieu -Duponchelle, Matteo Valdina, Matt Fischer, Matthew Waters, Matthieu -Bouron, Matthieu Crapet, Matt Staples, Michael Catanzaro, Michael -Olbrich, Michael Shigorin, Michael Tretter, Michał Dębski, Michał Górny, -Michele Dionisio, Miguel París, Mikhail Fludkov, Munez, Nael Ouedraogo, -Neos3452, Nicholas Panayis, Nick Kallen, Nicola Murino, Nicolas -Dechesne, Nicolas Dufresne, Nirbheek Chauhan, Ognyan Tonchev, Ole André -Vadla RavnÃ¥s, Oleksij Rempel, Olivier Crête, Omar Akkila, Orestis -Floros, Patricia Muscalu, Patrick Radizi, Paul Kim, Per-Erik Brodin, -Peter Seiderer, Philip Craig, Philippe Normand, Philippe Renon, Philipp -Zabel, Pierre Pouzol, Piotr Drąg, Ponnam Srinivas, Pratheesh Gangadhar, -Raimo Järvi, Ramprakash Jelari, Ravi Kiran K N, Reynaldo H. Verdejo -Pinochet, Rico Tzschichholz, Robert Rosengren, Roland Peffer, Руслан -Ижбулатов, Sam Hurst, Sam Thursfield, Sangkyu Park, Sanjay NM, Satya -Prakash Gupta, Scott D Phillips, Sean DuBois, Sebastian Cote, Sebastian -Dröge, Sebastian Rasmussen, Sejun Park, Sergey Borovkov, Seungha Yang, -Shakin Chou, Shinya Saito, Simon Himmelbauer, Sky Juan, Song Bing, -Sreerenj Balachandran, Stefan Kost, Stefan Popa, Stefan Sauer, Stian -Selnes, Thiago Santos, Thibault Saunier, Thijs Vermeir, Tim Allen, -Tim-Philipp Müller, Ting-Wei Lan, Tomas Rataj, Tom Bailey, Tonu Jaansoo, -U. Artie Eoff, Umang Jain, Ursula Maplehurst, VaL Doroshchuk, Vasilis -Liaskovitis, Víctor Manuel Jáquez Leal, vijay, Vincent Penquerc'h, -Vineeth T M, Vivia Nikolaidou, Wang Xin-yu (王昕宇), Wei Feng, Wim -Taymans, Wonchul Lee, Xabier Rodriguez Calvar, Xavier Claessens, -XuGuangxin, Yasushi SHOJI, Yi A Wang, Youness Alaoui, - -... and many others who have contributed bug reports, translations, sent +Aaron Boxer, Aleix Conchillo Flaqué, Alessandro Decina, Alexandru Băluț, +Alex Ashley, Alexey Chernov, Alicia Boya García, Amit Pandya, Andoni +Morales Alastruey, Andreas Frisch, Andre McCurdy, Andy Green, Anthony +Violo, Antoine Jacoutot, Antonio Ospite, Arun Raghavan, Aurelien Jarno, +Aurélien Zanelli, ayaka, Bananahemic, Bastian Köcher, Branko Subasic, +Brendan Shanks, Carlos Rafael Giani, Charlie Turner, Christoph Reiter, +Corentin Noël, Daeseok Youn, Damian Vicino, Dan Kegel, Daniel Drake, +Daniel Klamt, Danilo Spinella, Dardo D Kleiner, David Ing, David +Svensson Fors, Devarsh Thakkar, Dimitrios Katsaros, Edward Hervey, +Emilio Pozuelo Monfort, Enrique Ocaña González, Erlend Eriksen, Ezequiel +Garcia, Fabien Dessenne, Fabrizio Gennari, Florent Thiéry, Francisco +Velazquez, Freyr666, Garima Gaur, Gary Bisson, George Kiagiadakis, Georg +Lippitsch, Georg Ottinger, Geunsik Lim, Göran Jönsson, Guillaume +Desmottes, H1Gdev, Haihao Xiang, Haihua Hu, Harshad Khedkar, Havard +Graff, He Junyan, Hoonhee Lee, Hosang Lee, Hyunjun Ko, Ilya Smelykh, +Ingo Randolf, Iñigo Huguet, Jakub Adam, James Stevenson, Jan Alexander +Steffens, Jan Schmidt, Jerome Laheurte, Jimmy Ohn, Joakim Johansson, +Jochen Henneberg, Johan Bjäreholt, John-Mark Bell, John Bassett, John +Nikolaides, Jonathan Karlsson, Jonny Lamb, Jordan Petridis, Josep Torra, +Joshua M. Doe, Jos van Egmond, Juan Navarro, Julian Bouzas, Jun Xie, +Junyan He, Justin Kim, Kai Kang, Kim Tae Soo, Kirill Marinushkin, Kyrylo +Polezhaiev, Lars Petter Endresen, Linus Svensson, Louis-Francis +Ratté-Boulianne, Lucas Stach, Luis de Bethencourt, Luz Paz, Lyon Wang, +Maciej Wolny, Marc-André Lureau, Marc Leeman, Marco Trevisan (Treviño), +Marcos Kintschner, Marian Mihailescu, Marinus Schraal, Mark Nauwelaerts, +Marouen Ghodhbane, Martin Kelly, Matej Knopp, Mathieu Duponchelle, +Matteo Valdina, Matthew Waters, Matthias Fend, memeka, Michael Drake, +Michael Gruner, Michael Olbrich, Michael Tretter, Miguel Paris, Mike +Wey, Mikhail Fludkov, Naveen Cherukuri, Nicola Murino, Nicolas Dufresne, +Niels De Graef, Nirbheek Chauhan, Norbert Wesp, Ognyan Tonchev, Olivier +Crête, Omar Akkila, Pat DeSantis, Patricia Muscalu, Patrick Radizi, +Patrik Nilsson, Paul Kocialkowski, Per Forlin, Peter Körner, Peter +Seiderer, Petr Kulhavy, Philippe Normand, Philippe Renon, Philipp Zabel, +Pierre Labastie, Piotr Drąg, Roland Jon, Roman Sivriver, Roman Shpuntov, +Rosen Penev, Russel Winder, Sam Gigliotti, Santiago Carot-Nemesio, +Sean-Der, Sebastian Dröge, Seungha Yang, Shi Yan, Sjoerd Simons, Snir +Sheriber, Song Bing, Soon, Thean Siew, Sreerenj Balachandran, Stefan +Ringel, Stephane Cerveau, Stian Selnes, Suhas Nayak, Takeshi Sato, +Thiago Santos, Thibault Saunier, Thomas Bluemel, Tianhao Liu, +Tim-Philipp Müller, Tobias Ronge, Tomasz Andrzejak, Tomislav Tustonić, +U. Artie Eoff, Ulf Olsson, Varunkumar Allagadapa, Víctor Guzmán, Víctor +Manuel Jáquez Leal, Vincenzo Bono, Vineeth T M, Vivia Nikolaidou, Wang +Fei, wangzq, Whoopie, Wim Taymans, Wind Yuan, Wonchul Lee, Xabier +Rodriguez Calvar, Xavier Claessens, Haihao Xiang, Yacine Bandou, +Yeongjin Jeong, Yuji Kuwabara, Zeeshan Ali, + +… and many others who have contributed bug reports, translations, sent suggestions or helped testing. -Bugs fixed in 1.14 +Stable 1.16 branch -More than 800 bugs have been fixed during the development of 1.14. +After the 1.16.0 release there will be several 1.16.x bug-fix releases +which will contain bug fixes which have been deemed suitable for a +stable branch, but no new features or intrusive changes will be added to +a bug-fix release usually. The 1.16.x bug-fix releases will be made from +the git 1.16 branch, which is a stable branch. + +1.16.0 + +1.16.0 was released on 19 April 2019. + +1.16.1 + +The first 1.16 bug-fix release (1.16.1) was released on 23 September +2019. + +This release only contains bugfixes and it _should_ be safe to update +from 1.16.0. + +Highlighted bugfixes in 1.16.1 + +- GStreamer-vaapi: fix green frames and decoding artefacts in some + cases +- OpenGL: fix wayland event source burning CPU in certain + circumstances +- Memory leak fixes and memory footprint improvements +- Performance improvements +- Stability and security fixes +- Fix enum for GST_MESSAGE_DEVICE_CHANGED which is technically an API + break, but this is only used internally in GStreamer and duplicated + another message enum +- hls: Make crypto dependency optional when hls-crypto is auto +- player: fix switching back and forth between forward and reverse + playback +- decklinkaudiosink: Drop late buffers +- openh264enc: Fix compilation with openh264 v2.0 +- wasapisrc: fix segtotal value being always 2 +- android: Fix gnutls issue causing a FORTIFY crash on Android Q +- windows: Fix two crashes due to cross-CRT free when using MSVC + +gstreamer core + +- device: gst_device_create_element() is transfer floating, not + transfer full +- filesink, fdsink: respect IOV_MAX for the writev iovec array + (Solaris) +- miniobject: free qdata array when the last qdata is removed (reduces + memory footprint) +- bin: Fix minor race when adding to a bin +- aggregator: Actually handle NEED_DATA return from update_src_caps() +- aggregator: Ensure that the source pad is created as a + GstAggregatorPad if no type is given in the pad template +- latency: fix custom event leaks +- registry: Use plugin directory from the build system for + relocateable Windows builds +- message: fix up enum value for GST_MESSAGE_DEVICE_CHANGED +- info: Fix deadlock in gst_ring_buffer_logger_log() +- downloadbuffer: Check for flush after seek +- identity: Non-live upstream have no max latency +- identity: Fix the ts-offset property getter +- aggregator: Make parsing of explicit sink pad names more robust +- bufferpool: Fix the buffer size reset code +- fakesink, fakesrc, identity: sync gst_buffer_get_flags_string() with + new flags +- multiqueue: never unref queries we do not own +- concat: Reset last_stop on FLUSH_STOP too +- aggregator: fix flow-return boolean return type mismatch +- gstpad: Handle probes that reset the data field +- gst: Add support for g_autoptr(GstPromise) +- gst-inspect: fix unused-const-variable error in windows +- base: Include gstbitwriter.h in the single-include header +- Add various Since: 1.16 markers +- GST_MESSAGE_DEVICE_CHANGED duplicates GST_MESSAGE_REDIRECT +- Targetting wrong meson version +- meson: Make get_flex_version.py script executable +- meson: Link to objects instead of static helper library +- meson: set correct install path for gdb helper +- meson: fix warning about configure_file() install kwarg + +gst-plugins-base + +- video-info: parse field-order for all interleaved formats +- tests: fix up valgrind suppressions for glibc getaddrinfo leaks +- meson: Reenable NEON support (in audio resampler) +- audio-resampler: Update NEON to handle remainders not multiples of 4 +- eglimage: Fix memory leak +- audiodecoder: Set output caps with negotiated caps to avoid critical + info printed +- video-frame: Take TFF flag from the video info if it was set in + there +- glcolorconvert: Fix external-oes shader +- video-anc: Fix ADF detection when trying to extract data from vanc +- gl/wayland: fix wayland event source burning CPU +- configure: add used attribute in order to make NEON detection + working with -flto. +- audioaggregator: Return a valid rate range from caps query if + downstream supports a whole range +- rtspconnection: data-offset increase not set +- rtpsconnection: Fix number of n_vectors +- video-color: Add compile-time assert for ColorimetryInfo enum +- audiodecoder: Fix leak on failed audio gaps +- glupload: Keep track of cached EGLImage texture format +- playsink: Set ts-offset to text sink. +- meson.build: use join_paths() on prefix +- compositor: copy frames as-is when possible +- compositor: Skip background when a pad obscures it completely +- rtspconnection: Start CSeq at 1 (some servers don’t cope well with + seqnum 0) +- viv-fb: fix build break for GST_GL_API +- gl/tests: fix shader creation tests part 2 +- gl/tests: fix shader creation tests +- wayland: set the event queue also for the xdg_wm_base object +- video: Added GI annotation for gstvideoaffinetransformationmeta + apply_matrix +- compositor: Remove unneeded left shift for ARGB/AYUV SOURCE operator +- Colorimetry fixes +- alsasrc: Don’t use driver timestamp if it’s zero +- gloverlaycompositor: fix crash if buffer doesn’t have video meta +- meson: Don’t try to find gio-unix on Windows +- glshader: fix default external-oes shaders +- subparse: fix pushing WebVTT cue with no newline at the end +- meson: Missing “android” choice in gl_winsys +- video test: Keep BE test inline with LE test +- id3tag: Correctly validate the year from v1 tags before passing to + GstDateTime +- gl/wayland: Don’t prefix wl_shell struct field +- eglimage: Add compatibility define for DRM_FORMAT_NV24 +- Add various Since: 1.16 markers +- video-anc: Handle SD formats correctly +- Docs: add GL_CFLAGS to GTK_DOC_CFLAGS +- GL: using vaapi and showing on glimagesink on wayland loads one core + for 100% on 1.16 +- GL: external-oes shader places precision qualifier before #extension + (was: androidmedia amcviddec fail after 1.15.90 1.16.0 update) + +gst-plugins-good + +- alpha: Fix one_over_kc calculation on arm/aarch64 +- souphttpsrc: Fix incompatible type build warning +- rtpjitterbuffer: limit max-dropout-time to maxint32 +- rtpjitterbuffer: Clear clock master before unreffing +- qtdemux: Use empty-array safe way to cleanup GPtrArray +- v4l2: Fix type compatibility issue with glibc 2.30 +- valgrind: suppress Cond error coming from gnutls and Ignore leaks + caused by shout/sethostent +- rtpfunnel: forward correct segment when switching pad +- gtkglsink: fix crash when widget is resized after element + destruction +- jpegdec: Don’t dereference NULL input state if we have no caps in + TIME segments +- rtp: opuspay: fix memory leak in gst_rtp_opus_pay_setcaps +- v4l2videodec: return right type for drain. +- rtpssrcdemux: Avoid taking streamlock out-of-band +- Support v4l2src buffer orphaning +- splitmuxsink: Only set running time on finalizing sink element when + in async-finalize mode +- rtpsession: Always keep at least one NACK on early RTCP +- rtspsrc: do not try to send EOS with invalid seqnum +- rtpsession: Call on-new-ssrc earlier +- rtprawdepay: Don’t get rid of the buffer pool on FLUSH_STOP +- rtpbin: Free storage when freeing session +- scaletempo: Advertise interleaved layout in caps templates +- Support v4l2src buffer orphaning + +gst-plugins-bad + +- hls: Make crypto dependency optional when hls-crypto is auto +- player: fix switching back and forth between forward and reverse + playback +- decklinkaudiosink: Drop late buffers +- srt: Add stats property, include sender-side statistics and fix a + crash +- dshowsrcwrapper: fix regression on device selection +- tsdemux: Limit the maximum PES payload size +- wayland: Define libdrm_dep in meson.build to fix meson configure + error when kms is disabled +- sctp: Fix crash on free() when using the MSVC binaries +- webrtc: Fix signals documentation +- h264parse: don’t critical on VUI parameters > 2^31 +- rtmp: Fix crash inside free() with MSVC on Windows +- iqa: fix leak of map_meta.data +- d3dvideosink: Fix crash on WinProc handler +- amc: Fix crash when a sync_meta survives its sink +- pitch: Fix race between putSamples() and setting soundtouch + parameters +- webrtc: fix type of max-retransmits, make it work +- mxfdemux: Also allow picture essence element type 0x05 for VC-3 +- wasapi: fix symbol redefinition build error +- decklinkvideosrc: Retrieve mode of the ancillary data from the frame +- decklinkaudiosrc/decklinkvideosrc: Do nothing in + BaseSrc::negotiate() and… +- adaptivedemux: do not retry downloads during shutdown. +- webrtcbin: fix GInetAddress leak +- dtls: fix dtls connection object leak +- siren: fix a global buffer overflow spotted by asan +- kmssink: Fix implicit declaration build error +- Fix -Werror=return-type error in configure. +- aiff: Fix infinite loop in header parsing. +- nvdec: Fix possible frame drop on EOS +- srtserversrc: yields malformed rtp payloads +- srtsink: Fix crash in case no URI +- dtlsagent: Fix leaked dtlscertificate +- meson: bluez: Early terminate configure on Windows +- decklink: Correctly ensure >=16 byte alignment for the buffers we + allocate +- webrtcbin: fix DTLS when receivebin is set to DROP +- zbar: Include running-time, stream-time and duration in the messages +- uvch264src: Make sure we set our segment +- avwait: Allow start and end timecode to be set back to NULL +- avwait: Don’t print warnings for every buffer passed +- hls/meson: fix dependency logic +- Waylandsink gnome shell workaround +- avwait: Allow setting start timecode after end timecode; protect + propeties with mutex +- wayland/wlbuffer: just return if used_by_compositor is true when + attach +- proxy: Set SOURCE flag on the source and SINK flag on the sink +- ivfparse: Check the data size against IVF_FRAME_HEADER_SIZE +- webrtc: Add various Since markers to new types after 1.14.0 +- msdk: fix the typo in debug category +- dtlsagent: Do not overwrite openssl locking callbacks +- meson: Fix typo in gsm header file name +- srt: handle races in state change +- webrtc: Add g_autoptr() support for public types +- openh264enc: Fix compilation with openh264 v2.0 +- meson: Allow CUDA_PATH fallback on linux +- meson: fix build with opencv=enabled and opencv4. Fixes #964 +- meson: Add support for the colormanagement plugin +- autotools: gstsctp: set LDFLAGS +- nvenc/nvdec: Add NVIDIA SDK headers to noinst_HEADERS +- h264parse: Fix typo when setting multiview mode and flags +- Add various Since: 1.16 markers +- opencv: allow compilation against 4.1.x +- Backport of some minor srt commits without MR into 1.16 +- meson: fix build with opencv=enabled and opencv4 +- wasapisrc: fix segtotal value being always 2 due to an unused + variable +- meson: colormanagement missing +- androidmedia amcviddec fail after 1.15.90 1.16.0 update + +gst-plugins-ugly + +- meson: Always require the gmodule dependency + +gst-libav + +- docs: don’t include the type hierarchy, fixing build with gtk-doc + 1.30 +- avvidenc: Correctly signal interlaced input to ffmpeg when the input + caps are interlaced +- autotools: add bcrypt to win32 libs +- gstav: Use libavcodec util function for version check +- API documentation fails to build with gtk-doc 1.30 + +gst-rtsp-server + +- rtsp-client: RTP Info must exist in PLAY response +- onvif-media: fix “void function returning a value” compiler warning +- Add various Since: 1.16 markers + +gstreamer-vaapi + +- fix egl context leak and display creation race +- pluginutil: Remove Mesa from drivers white list +- Classify vaapidecodebin as a hardware decoder +- Fix two leak +- vaapivideomemory: demote error message to info +- encoder: vp8,vp9: reset frame_counter when input frame’s format + changes +- encoder: mpeg2: No packed header for SPS and PPS +- decoder: vp9: clear parser pointer after release +- encoder: Fixes deadlock in change state function +- encoder: h265: reset num_ref_idx_l1_active_minus1 when low delay B. +- encoder: not call ensure_num_slices inside g_assert() +- encoder: continue if roi meta is NULL +- decoder: vp9: Set chroma_ ype by VP9 bit_depth +- vaapipostproc: don’t do any color conversion when GL_TEXTURE_UPLOAD +- libs: surface: fix double free when dmabuf export fails +- h264 colors and artifacts upon upgrade to GStreamer Core Library + version 1.15.90 + +gst-editing-services + +- element: Properly handle the fact that pasting can return NULL +- Add various missing Since markers +- launch: Fix caps restriction short names +- python: Avoid warning about using deprecated methods +- video-transition: When using non crossfade effect use ‘over’ + operations +- meson: Generate a pkgconfig file for the GES plugin + +gst-devtools + +- launcher: testsuites: skip systemclock stress tests +- validate: fix build on macOS + +gst-build + +- Update win flex bison binaries +- Update the flexmeson windows binary version +- Don’t allow people to run meson inside the uninstalled env + +Cerbero build tool and packaging changes in 1.16.1 + +- cerbero: Add enums for Fedora 30, Fedora 31 and Debian bullseye +- gnutls.recipe: Fix crash when running on Android Q +- recipes: Upgrade openssl to 1.1.1c +- Fix some typos +- add support for vs build tools 2019, fixes #183 +- android: Adjust gstreamer-1.0.mk for NDK r20 +- Fix license enums +- bootstrap: Fix dnf usage on CentOS +- Make _add_system_libs reentrant +- meson.recipe: Fix setting of bitcode compiler options +- cerbero: support Ubuntu disco dingo +- cerbero: Set utf-8 to execution character set also on MSVC +- git: simplify the reset of the source branch. +- FORTIFY: %n not allowed on Android Q +- Fails to build if there’s no license file for the given license + (GPL/LGPL without Plus, Proprietary, …) + +Contributors to 1.16.1 + +Aaron Boxer, Adam Duskett, Alicia Boya García, Andoni Morales Alastruey, +Antonio Ospite, Arun Raghavan, Askar Safin, A. Wilcox, Charlie Turner, +Christoph Reiter, Damian Hobson-Garcia, Daniel Klamt, Danny Smith, David +Gunzinger, David Ing, David Svensson Fors, Doug Nazar, Edward Hervey, +Eike Hein, Fabrice Bellet, Fernando Herrrera, Georg Lippitsch, Göran +Jönsson, Guillaume Desmottes, Haihao Xiang, Haihua Hu, HÃ¥vard Graff, Hou +Qi, Ignacio Casal Quinteiro, Ilya Smelykh, Jan Schmidt, Javier Celaya, +Jim Mason, Jonas Larsson, Jordan Petridis, Jose Antonio Santos Cadenas, +Juan Navarro, Knut Andre Tidemann, Kristofer Björkström, Lucas Stach, +Marco Felsch, Marcos Kintschner, Mark Nauwelaerts, Martin Liska, Martin +Theriault, Mathieu Duponchelle, Matthew Waters, Michael Olbrich, Mike +Gorse, Nicola Murino, Nicolas Dufresne, Niels De Graef, Niklas +Hambüchen, Nirbheek Chauhan, Olivier Crête, Philippe Normand, Ross +Burton, Sebastian Dröge, Seungha Yang, Song Bing, Thiago Santos, +Thibault Saunier, Thomas Coldrick, Tim-Philipp Müller, Víctor Manuel +Jáquez Leal, Vivia Nikolaidou, Xavier Claessens, Yeongjin Jeong, + +… and many others who have contributed bug reports, translations, sent +suggestions or helped testing. Thank you all! + +List of merge requests and issues fixed in 1.16.1 + +- List of Merge Requests applied in 1.16 +- List of Issues fixed in 1.16.1 + +1.16.2 + +The second 1.16 bug-fix release (1.16.2) was released on 03 December +2019. + +This release only contains bugfixes and it _should_ be safe to update +from 1.16.1. + +Highlighted bugfixes in 1.16.2 + +- Interlaced video scaling fixes +- CineForm video support in AVI +- audioresample: avoid glitches due to rounding errors after changing + rate +- Command line tool output printing improvements on Windows +- various performance improvements, memory leak fixes and security + fixes +- VP9 decoding fixes +- avfvideosrc: Explicitly request video permission on macOS 10.14+ +- wasapi: bug fixes and stability improvements +- webrtc-audio-processing: fix segmentation fault on 32-bit windows +- tsdemux: improved handling of certain discontinuities +- vaapi h265 decoder: wait for I-frame before trying to decode + +gstreamer + +- gst-launch: Fix ugly stdout on Windows +- tee: Make sure to actually deactivate pads that are released +- bin: Drop need-context messages without source instead of crashing +- gst: Don’t pass miniobjects to GST_DEBUG_OBJECT() and similar macros +- tracers: Don’t leak temporary GstStructure + +gst-plugins-base + +- xvimagepool: Update size, stride, and offset with allocated XvImage +- video-converter: Fix RGB-XYZ-RGB conversion +- audiorate: Update next_offset on rate change +- audioringbuffer: Reset reorder flag before check +- audio-buffer: Don’t fail to map buffers with zero samples +- videorate: Fix max-duplication-time handling +- gl/gbm: ensure we call the resize callback before attempting to draw +- video-converter: Various fixes for interlaced scaling +- gstrtspconnection: messages_bytes not decreased +- check: Don’t use real audio devices for tests +- riff: add CineForm mapping +- glfilters: Don’t use static variables for storing per-element state +- glupload: Add VideoMetas and GLSyncMeta to the raw uploaded buffers +- streamsynchronizer: avoid pad release race during logging. +- gst-play: Use gst_print* to avoid broken stdout string on Windows + +gst-plugins-good + +- vp9dec: Fix broken 4:4:4 8bits decoding +- rtpsession: add locking for clear-pt-map +- rtpL16depay: don’t crash if data is not modulo channels*width +- wavparse: Fix push mode ignoring audio with a size smaller than + segment buffer +- wavparse: Fix push mode ignoring last audio payload chunk +- aacparse: fix wrong offset of the channel number in adts header +- jpegdec: Fix incorrect logic in EOI tag detection +- videocrop: Also update the coordinate when in-place +- jpegdec: don’t overwrite the last valid line +- vpx: Error out if enabled and no features found +- v4l2videodec: ensure pool exists before orphaning it +- v4l2videoenc: fix type conversion errors +- v4l2bufferpool: Queue number of allocated buffers to capture +- v4l2object: fix mpegversion number typo +- v4l2object: Work around bad TRY_FMT colorimetry implementations + +gst-plugins-bad + +- avfvideosrc: Explicitly request video permission on macOS 10.14+ +- wasapi: Various fixes and a workaround for a specific driver bug +- wasapi: Move to CoInitializeEx for COM initialization +- wasapi: Fix runtime/build warnings +- waylandsink: Commit the parent after creating subsurface +- msdkdec: fix surface leak in msdkdec_handle_frame +- tsmux: Fix copying of buffer region +- tsdemux: Handle continuity mismatch in more cases +- tsdemux: Always issue a DTS even when it’s equal to PTS +- openexr: Fix build with OpenEXR 2.4 (and also OpenEXR 2.2 on Ubuntu + 18.04) +- ccextractor: Always forward all sticky events to the caption pad +- pnmdec: Return early on ::finish() if we have no actual data to + parse +- ass: avoid infinite unref loop with bad data +- fluidsynth: add sf3 to soundfont search path +- webrtcdsp/webrtcechoprobe segmentation fault on windows (1.16.0 x86) + +gst-libav + +- avvidenc: Fix error propagation +- avdemux: Fix segmentation fault if long_name is NULL +- avviddec: Fix huge leak caused by circular reference +- avviddec: Enforce allocate new AVFrame per input frame +- avdec_mpeg2video (and probably more): Huge memory leak in git master + +gst-rtsp-server + +- rtsp-media: Use lock in gst_rtsp_media_is_receive_only +- rtsp-client: RTP Info when completed_sender +- rtsp-client: fix location uri-format by getting uri directly from + context instead + +gstreamer-vaapi + +- meson build: halt configuration if no renderer API +- libs: decoder: h265: skip all pictures prior the first I-frame +- libs: window: x11: Avoid usage of deprecated API + +gst-editing-services + +- Initialize debug categories before usage + +gst-build + +- gst-env: Use locally built GStreamer utility programs + +Cerbero build tool and packaging changes in 1.16.2 + +General + +- openssl: Update to 1.1.1d +- Updated ffmpeg, expat, flac, freetype, croco, ogg, xml2, mpg123, + openjpeg, opus, pixman, speex, tiff recipes +- Fix setting of git credentials in local source repos -This list does not include issues that have been cherry-picked into the -stable 1.12 branch and fixed there as well, all fixes that ended up in -the 1.12 branch are also included in 1.14. +Windows -This list also does not include issues that have been fixed without a -bug report in bugzilla, so the actual number of fixes is much higher. +- webrtc-audio-processing: fix segmentation fault on 32-bit windows + with webrtcdsp/webrtcechoprobe elemens +- vpx plugin has no features when built with Visual Studio 2019 +- libvpx: Add support for Visual Studio 2019 +- mingw-runtime.recipe: Correctly package pkg-config in the MSI +- GIO doesn’t load any modules on Windows with MSVC, which breaks TLS + support since glib-networking’s giognutls module isn’t loaded +- Make the instructions for running Cerbero the same on all platforms +macOS + iOS -Stable 1.14 branch +- Add support for macOS 10.15 Catalina +- Updates for Xcode 11 +- macos/ios: expose objc++ compilers in env variables +- srt.recipe: Fix crash in constructor on iOS +- osx-framework.recipe: Dynamically generate the list of libraries and + ship pkg-config +- macos: add -mmacosx-version-min for framework +- gstreamer-1.0-osx-framework.recipe contains an outdated hard-coded + list of libraries +- We need to ship pkg-config with macOS -After the 1.14.0 release there will be several 1.14.x bug-fix releases -which will contain bug fixes which have been deemed suitable for a -stable branch, but no new features or intrusive changes will be added to -a bug-fix release usually. The 1.14.x bug-fix releases will be made from -the git 1.14 branch, which is a stable branch. +Linux -1.14.0 +- Fix filesprovider.find_shlib_regex when a lib_suffix is used in the + cerbero config file -1.14.0 is scheduled to be released in early March 2018. +Contributors to 1.16.2 + +Adam Nilsson, Amr Mahdi, Angus Ao, Charlie Turner, Edward Hervey, Fabian +Greffrath, Fuwei Tang, Havard Graff, Hu Qian, James Cowgill, Jan +Alexander Steffens (heftig), Jeffy Chen, Jeremy Lempereur, Joakim +Johansson, Jochen Henneberg, Julien Isorce, Kevin Joly, Kristofer +Bjorkstrom, Kyrylo Polezhaiev, Matthew Waters, Michael Olbrich, Muhammet +Ilendemli, Nicolas Dufresne, Nirbheek Chauhan, Pablo Marcos Oltra, Roman +Shpuntov, Ruben Gonzalez, Scott Kanowitz, Sebastian Dröge, Seungha Yang, +Thibault Saunier, Tim-Philipp Müller, Víctor Manuel Jáquez Leal, Vivia +Nikolaidou, + +… and many others who have contributed bug reports, translations, sent +suggestions or helped testing. Thank you all! + +List of merge requests and issues fixed in 1.16.2 + +- List of Merge Requests applied in 1.16 +- List of Issues fixed in 1.16.2 Known Issues -- The webrtcdsp element (which is unrelated to the newly-landed - GStreamer webrtc support) is currently not shipped as part of the - Windows binary packages due to a build system issue. +- possibly breaking/incompatible changes to properties of wrapped + FFmpeg decoders and encoders (see above). + +- The way that GIO modules are named has changed due to upstream GLib + natively adding support for loading static GIO modules. This means + that any GStreamer application using gnutls for SSL/TLS on the + Android or iOS platforms (or any other setup using static libraries) + will fail to link looking for the g_io_module_gnutls_load_static() + function. The new function name is now + g_io_gnutls_load(gpointer data). See Android/iOS sections above for + further details. -Schedule for 1.16 +Schedule for 1.18 -Our next major feature release will be 1.16, and 1.15 will be the -unstable development version leading up to the stable 1.16 release. The -development of 1.15/1.16 will happen in the git master branch. +Our next major feature release will be 1.18, and 1.17 will be the +unstable development version leading up to the stable 1.18 release. The +development of 1.17/1.18 will happen in the git master branch. -The plan for the 1.16 development cycle is yet to be confirmed, but it -is expected that feature freeze will be around August 2017 followed by -several 1.15 pre-releases and the new 1.16 stable release in September. +The plan for the 1.18 development cycle is yet to be confirmed, but it +is now expected that feature freeze will take place in December 2019, +with the first 1.18 stable release ready in late January or February. -1.16 will be backwards-compatible to the stable 1.14, 1.12, 1.10, 1.8, -1.6, 1.4, 1.2 and 1.0 release series. +1.18 will be backwards-compatible to the stable 1.16, 1.14, 1.12, 1.10, +1.8, 1.6, 1.4, 1.2 and 1.0 release series. ------------------------------------------------------------------------ _These release notes have been prepared by Tim-Philipp Müller with_ -_contributions from Sebastian Dröge._ +_contributions from Sebastian Dröge, Guillaume Desmottes, Matthew +Waters, _ _Thibault Saunier, and Víctor Manuel Jáquez Leal._ _License: CC BY-SA 4.0_