NEWS 70.4 KB
Newer Older
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1 2 3 4


GSTREAMER 1.14 RELEASE NOTES

Sebastian Dröge's avatar
Sebastian Dröge committed
5

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
6
GStreamer 1.14.0 was originally released on 19 March 2018.
Sebastian Dröge's avatar
Sebastian Dröge committed
7

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
8 9
The latest bug-fix release in the 1.14 series is 1.14.3 and was released
on 16 September 2018.
Sebastian Dröge's avatar
Sebastian Dröge committed
10

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
11
See https://gstreamer.freedesktop.org/releases/1.14/ for the latest
Sebastian Dröge's avatar
Sebastian Dröge committed
12 13
version of this document.

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
14
_Last updated: Sunday 16 September 2018, 13:00 UTC (log)_
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
15 16 17 18 19 20 21 22 23 24 25 26 27


Introduction

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.


Highlights
Sebastian Dröge's avatar
Sebastian Dröge committed
28

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
-   WebRTC support: real-time audio/video streaming to and from web
    browsers

-   Experimental support for the next-gen royalty-free AV1 video codec

-   Video4Linux: encoding support, stable element names and faster
    device probing

-   Support for the Secure Reliable Transport (SRT) video streaming
    protocol

-   RTP Forward Error Correction (FEC) support (ULPFEC)

-   RTSP 2.0 support in rtspsrc and gst-rtsp-server

-   ONVIF audio backchannel support in gst-rtsp-server and rtspsrc

-   playbin3 gapless playback and pre-buffering support

-   tee, our stream splitter/duplication element, now does allocation
    query aggregation which is important for efficient data handling and
    zero-copy

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

-   rtpjitterbuffer fast-start mode and timestamp offset adjustment
    smoothing

-   souphttpsrc connection sharing, which allows for connection reuse,
    cookie sharing, etc.

-   nvdec: new plugin for hardware-accelerated video decoding using the
    NVIDIA NVDEC API

-   Adaptive DASH trick play support

-   ipcpipeline: new plugin that allows splitting a pipeline across
    multiple processes

-   Major gobject-introspection annotation improvements for large parts
    of the library API
Sebastian Dröge's avatar
Sebastian Dröge committed
72

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
73 74 75 76 77 78 79
-   GStreamer C# bindings have been revived and seen many updates and
    fixes

-   The externally maintained GStreamer Rust bindings had many usability
    improvements and cover most of the API now. Coinciding with the 1.14
    release, a new release with the 1.14 API additions is happening.

Sebastian Dröge's avatar
Sebastian Dröge committed
80

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
81
Major new features and changes
Sebastian Dröge's avatar
Sebastian Dröge committed
82

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
83 84 85 86 87 88 89
WebRTC support

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,
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
90
zero-copy and embedded platform support. And it’s easy to build and
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
91 92 93 94 95
integrate into your application too!

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.
Sebastian Dröge's avatar
Sebastian Dröge committed
96

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
97
GStreamer’s new WebRTC implementation uses libnice for Interactive
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
98 99 100 101 102 103 104 105 106
Connectivity Establishment (ICE) to figure out the best way to
communicate with other peers, punch holes into firewalls, and traverse
NATs.

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.

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
107 108 109
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.
Sebastian Dröge's avatar
Sebastian Dröge committed
110

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
111
New Elements
Sebastian Dröge's avatar
Sebastian Dröge committed
112

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
113 114 115 116 117 118 119
-   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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
120
    implementation in GStreamer in Olivier’s blog post _SRT in
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
    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.

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
141
-   ’fakevideosink is basically a null sink for video data and very
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
142 143 144 145 146 147 148 149 150 151
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
152
    access to all the other elements’ memory space however, including
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
153 154 155 156
    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.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
157
    Check out George’s blog post _ipcpipeline: Splitting a GStreamer
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
158
    pipeline into multiple processes_ or his lightning talk from last
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
159
    year’s GStreamer Conference in Prague for all the gory details.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
160 161 162 163 164 165

-   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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
166 167
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
168 169 170 171 172 173 174 175
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
176
    pipeline thread gets stuck in the proxysrc pipeline, e.g. when that
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
177 178 179 180 181
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
182
    information see Nirbheek’s blog post _Decoupling GStreamer
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
183 184 185 186 187 188 189 190 191 192 193 194 195 196
    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.
Sebastian Dröge's avatar
Sebastian Dröge committed
197

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
198 199 200
-   The msdk plugin has gained a MPEG-2 video decoder(msdkmpeg2dec), VP8
    decoder(msdkvp8dec) and a VC1/WMV decoder(msdkvc1dec)

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
201
Noteworthy new API
Sebastian Dröge's avatar
Sebastian Dröge committed
202

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
203 204 205 206
-   GstPromise provides future/promise-like functionality. This is used
    in the GStreamer WebRTC implementation.

-   GstReferenceTimestampMeta is a new meta that allows you to attach
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
207
    additional reference timestamps to a buffer. These timestamps don’t
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
208 209 210 211 212
    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.

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
213
-   GstVideoRegionOfInterestMeta: it’s now possible to attach generic
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
250
    samples after the previous buffer’s samples, but keep track of the
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269
    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.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
270
    The property wasn’t added to the interface itself as that would
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
271 272 273 274 275 276 277 278 279 280 281 282
    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:
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
283 284 285 286 287
    -   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.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303

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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
304
    Correction is that it doesn’t add latency, whereas retransmission
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
305 306 307 308 309 310 311 312 313 314 315 316 317 318 319
    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,
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
320
    e.g. to flag RTP packets carrying keyframes or codec setup data for
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
321 322 323 324 325 326 327 328 329
    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:
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
330 331 332 333 334 335
    Sudden large changes to the internal ts_offset may cause timestamps
    to move backwards and may 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.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
336 337 338 339

-   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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
340 341
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
370
    element’s new "drop-allocation" property for that instead.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
371 372

-   audioconvert now has a "mix-matrix" property, which obsoletes the
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
373
    audiomixmatrix element. There’s also mix matrix support in the audio
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
393
    easier to output just a single encoded frame.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
394 395

-   jpegdec will now handle interlaced MJPEG streams properly and also
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
396
    handles frames without an End of Image marker better.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
397 398 399 400 401 402 403 404 405 406 407 408 409 410 411

-   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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
412
    sports a new "accept-certificate" signal for “manually” checking a
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
413 414 415 416 417 418 419 420
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
421 422
    muxing is enabled, it will check and set the muxer’s reserved space
    properties if present. This is primarily for use with mp4mux’s
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
423 424 425 426 427 428 429
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
430 431 432
    video and raw audio is implemented. Adding support for additional
    codecs is just a matter of defining appropriate maximum frame sizes
    though.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
433 434 435 436 437 438 439

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

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
440
-   souphttpsrc now does connection sharing by default: it shares its
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
441 442 443 444 445
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
446
    now for easier diagnostics, and it’s also possible now to use other
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
447 448 449 450 451
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
452
    streams at runtime. This isn’t really supported with these
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
453
    containers (or would have to be implemented differently with a
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
454 455 456
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
457 458 459 460 461
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
462 463
    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.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
464

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
465
-   matroskamux has Table of Content (TOC) support now (chapters etc.)
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
466 467 468 469 470 471 472 473 474 475 476 477
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
478
    passing through data (e.g. because target-timecode and end-timecode
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
479 480
    respectively have been reached).

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
481
-   ‘alsamidisrc’ element has been broken for many many years and has
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
482 483
    now been repaired allowing live capture from your MIDI HW.

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502
-   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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
503
    4:2:0 video format. It’s also possible to configure the gop size via
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
504 505 506 507 508 509 510 511 512 513 514 515 516 517
    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:

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
518 519 520 521
    -   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.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
522

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
523 524 525
    -   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.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
526

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
527 528 529 530 531 532
    -   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.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
533

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
534
    -   support for more than 16 devices, without any artificial limit
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
535

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
536
-   work continued on the msdk plugin for Intel’s Media SDK which
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
537
    enables hardware-accelerated video encoding and decoding on Intel
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
538 539 540 541 542 543 544 545 546 547 548 549
    graphics hardware on Windows or Linux. Added the video memory,
    buffer pool, and context/session sharing support which helps to
    improve the performance and resource utilization. Rendernode support
    is in place which helps to avoid the constraint of having a running
    graphics server as DRM-Master. Encoders are exposing a number rate
    control algorithms now. More encoder tuning options like
    trellis-quantiztion (h264), slice size control (h264), B-pyramid
    prediction(h264), MB-level bitrate control, frame partitioning and
    adaptive I/B frame insertion 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.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
550 551 552 553 554

-   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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
555
    and skip keyframes or fragments as needed. See Sebastian’s blog post
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
556 557 558 559 560 561 562
    _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:

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
563
    -   Raspberry Pi (vc4) and Xilinx DRM driver support
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
564

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
565 566 567
    -   new "render-rectangle" property that can be used from the
        command line as well as "display-width" and "display-height",
        and "can-scale" properties
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
568

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
569
    -   GstVideoCropMeta support
Sebastian Dröge's avatar
Sebastian Dröge committed
570

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
571
Plugin and library moves
Sebastian Dröge's avatar
Sebastian Dröge committed
572

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598
MPEG-1 audio (mp1, mp2, mp3) decoders and encoders moved to -good

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.

In particular these are:

-   mpg123audiodec: an mp1/mp2/mp3 audio decoder using libmpg123
-   lamemp3enc: an mp3 encoder using LAME
-   twolamemp2enc: an mp2 encoder using TwoLAME

GstAggregator moved from -bad to core

GstAggregator has been moved from gst-plugins-bad to the base library in
GStreamer and is now stable API.

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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
599
any of the inputs are live streams. This ensures that the pipeline won’t
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
600 601 602 603 604 605 606
stall if any of the inputs stop producing data, and that the configured
maximum latency is never exceeded.

GstAudioAggregator, audiomixer and audiointerleave 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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
607
mixing of raw audio inputs and ensures that the pipeline won’t stall
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
608 609 610 611 612 613
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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
614
‘adder’, which did not handle live inputs very well and did not align
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
615 616 617 618
input streams according to running time. audiomixer should behave much
better in that respect and generally behave as one would expected in
most scenarios.

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
619
Similarly, audiointerleave replaces the ‘interleave’ element which did
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
620 621 622 623 624 625 626 627
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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
628
compositor) to -base in the next cycle, i.e. for 1.16.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648

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.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
649
Both elements leverage GStreamer’s OpenGL integration. In addition to
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
650 651 652 653 654 655 656
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.

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
657
-   EGL is now supported with the X11 backend, which works e.g. on
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
658 659 660 661 662 663
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
664 665
leverages GStreamer’s OpenGL integration, but might not work properly in
all scenarios, e.g. where the OpenGL driver does not properly support
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
666
multiple sharing contexts in different threads; on Linux Nouveau is
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
667
known to be broken in this respect, whilst NVIDIA’s proprietary drivers
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
668
and most other drivers generally work fine, and the experience with
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
669 670
Intel’s driver seems to be mixed; some proprietary embedded Linux
drivers don’t work; macOS works.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
671 672 673 674 675

GstPhysMemoryAllocator interface moved from -bad to -base

GstPhysMemoryAllocator is a marker interface for allocators with
physical address backed memory.
Sebastian Dröge's avatar
Sebastian Dröge committed
676

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
677
Plugin removals
Sebastian Dröge's avatar
Sebastian Dröge committed
678

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
679
-   the sunaudio plugin was removed, since it couldn’t ever have been
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
680 681
    built or used with GStreamer 1.0, but no one even noticed in all
    these years.
Sebastian Dröge's avatar
Sebastian Dröge committed
682

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
683 684
-   the schroedinger-based Dirac encoder/decoder plugin has been
    removed, as there is no longer any upstream or anyone else
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
685
    maintaining it. Seeing that it’s quite a fringe codec it seemed best
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
686
    to simply remove it.
Sebastian Dröge's avatar
Sebastian Dröge committed
687

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
688
API removals
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
689

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
690 691 692
-   some MPEG video parser API in the API unstable codecutils library in
    gst-plugins-bad was removed after having been deprecated for 5
    years.
Sebastian Dröge's avatar
Sebastian Dröge committed
693 694


Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
695
Miscellaneous changes
Sebastian Dröge's avatar
Sebastian Dröge committed
696

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
697 698
-   The video support library has gained support for a few new pixel
    formats:
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
699 700 701 702 703 704
    -   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)
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
705 706 707 708 709 710
-   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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
711
    long-standing memory leaks in language bindings, which e.g. often
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
712 713 714 715
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
716
    function parameters, correct types (e.g. strings vs. filenames),
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
717 718
    ownership transfer, array length parameters, etc. This allows to use
    bigger parts of the GStreamer API to be safely used from dynamic
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
719 720
    language bindings (e.g. Python, Javascript) and allows static
    bindings (e.g. C#, Rust, Vala) to autogenerate more API bindings
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
721
    without manual intervention.
Sebastian Dröge's avatar
Sebastian Dröge committed
722

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
723
OpenGL integration
Sebastian Dröge's avatar
Sebastian Dröge committed
724

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
725 726 727 728
-   The GStreamer OpenGL integration library has moved to
    gst-plugins-base and is now part of our stable API.

-   new MESA3D GBM BACKEND. On devices with working libdrm support, it
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
729
    is possible to use Mesa3D’s GBM library to set up an EGL context
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
730 731 732 733 734 735 736 737 738
    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.

-   Prefer wayland display over X11: As most Wayland compositors support
    XWayland, the X11 backend would get selected.

-   gldownload can export dmabufs now, and glupload will advertise
    dmabuf as caps feature.
Sebastian Dröge's avatar
Sebastian Dröge committed
739 740


Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
741
Tracing framework and debugging improvements
Sebastian Dröge's avatar
Sebastian Dröge committed
742

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762
-   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.

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
763
-   ’fakevideosink is a null sink for video data that advertises
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
764
    video-specific metas and behaves like a video sink. See above for
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
791
    using the new "delay-distribution" property the user can control how
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
792 793 794 795
    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.
Sebastian Dröge's avatar
Sebastian Dröge committed
796 797


Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
798
Tools
Sebastian Dröge's avatar
Sebastian Dröge committed
799

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
800 801 802 803 804 805 806 807 808 809 810
-   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-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
Sebastian Dröge's avatar
Sebastian Dröge committed
811 812


Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
813
GStreamer RTSP server
Sebastian Dröge's avatar
Sebastian Dröge committed
814

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
815 816
-   Initial support for RTSP protocol version 2.0 was added, which is to
    the best of our knowledge the first RTSP 2.0 implementation ever!
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
817 818

-   ONVIF audio backchannel support. This is an extension specified by
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
819 820
    ONVIF that allows RTSP clients (e.g. a control room operator) to
    send audio back to the RTSP server (e.g. an IP camera).
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
838
    interleave as transport who don’t do keep-alive via some other
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
839 840 841 842 843 844 845 846 847 848 849 850
    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.
Sebastian Dröge's avatar
Sebastian Dröge committed
851 852


Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
853
GStreamer VAAPI
Sebastian Dröge's avatar
Sebastian Dröge committed
854

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
855
-   Improve DMABuf’s usage, both upstream and dowstream, and
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
856 857 858 859 860 861 862 863 864 865 866
    memory:DMABuf caps feature is also negotiated when the dmabuf-based
    buffer cannot be mapped onto user-space.

-   VA initialization was fixed when it is used in headless systems.

-   VA display sharing, through GstContext, among the pipeline, has been
    improved, adding the possibility to the application share its VA
    display (external display) via gst.vaapi.app.Display context.

-   VA display cache was removed.

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
867
-   libva’s log messages are now redirected into the GStreamer log
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
868 869 870 871 872 873
    handler.

-   Decoders improved their upstream re-negotiation by avoiding to
    re-instantiate the internal decoder if stream caps are compatible
    with the previous one.

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
874 875
-   When downstream doesn’t support GstVideoMeta and the decoded frames
    don’t have standard strides, they are copied onto system
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
876 877 878
    memory-based buffers.

-   H.264 decoder has a low-latency property, for live streams which
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
879
    doesn’t conform the H.264 specification but still it is required to
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924
    push the frames to downstream as soon as possible.

-   As part of the Google Summer of Code 2017 the H.264 decoder drops
    MVC and SVC frames when base-only property is enabled.

-   Added support for libva-2.0 (VA-API 1.0).

-   H.264 and H.265 encoders handle Region-Of-Interest metas by adding a
    delta-qp for every rectangle within the frame specified by those
    metas.

-   Encoders for H.264 and H.265 set the media profile by the downstream
    caps.

-   H.264 encoder inserts an AU delimiter for each encoded frame when
    aud property is enabled (it is only available for certain drivers
    and platforms).

-   H.264 encoder supports for P and B hierarchical prediction modes.

-   All encoders handles a quality-level property, which is a number
    from 1 to 8, where a lower number means higher quality, but slower
    processing, and vice-versa.

-   VP8 and VP9 encoders support constant bit-rate mode (CBR).

-   VP8, VP9 and H.265 encoders support variable bit-rate mode (VBR).

-   Resurrected GstGLUploadTextureMeta handling for EGL backends.

-   H.265 encoder can configure its number of reference frames via the
    refs property.

-   Add H.264 encoder mbbrc property, which controls the macro-block
    bitrate as auto, on or off.

-   Add H.264 encoder temporal-levels property, to select the number of
    temporal levels to be included.

-   Add to H.264 and H.265 encoders the properties qp-ip and qp-ib, to
    handle the QP (quality parameter) difference between the I and P
    frames, and the I and B frames, respectively.

-   vaapisink was demoted to marginal rank on Wayland because COGL
    cannot display YUV surfaces.
Sebastian Dröge's avatar
Sebastian Dröge committed
925

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
926
More details in Víctor’s blog post _GStreamer VA-API 1.14: what’s new?_.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
927

Sebastian Dröge's avatar
Sebastian Dröge committed
928

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
929
GStreamer Editing Services and NLE
Sebastian Dröge's avatar
Sebastian Dröge committed
930

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
931 932 933 934 935 936 937 938 939
-   Handle crossfade in complex scenarios by using the new
    compositorpad::crossfade-ratio property

-   Add API allowing to stop using proxies for clips in the timeline

-   Allow management of none square pixel aspect ratios by allowing
    application to deal with them in the way they want

-   Misc fixes around the timeline editing API
Sebastian Dröge's avatar
Sebastian Dröge committed
940 941


Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
942
GStreamer validate
Sebastian Dröge's avatar
Sebastian Dröge committed
943

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
944
-   Handle running scenarios on live pipelines (in the “content sense”,
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
945
    not the GStreamer one)
Sebastian Dröge's avatar
Sebastian Dröge committed
946

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
947 948
-   Implement RTSP support with a basic server based on gst-rtsp-server,
    and add RTSP 1.0 and 2.0 integration tests
Sebastian Dröge's avatar
Sebastian Dröge committed
949

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
950 951 952 953 954
-   Implement a plugin that allows users to implement configurable
    tests. It currently can check if a particular element is added a
    configurable number of time in the pipeline. In the future that
    plugin should allow us to implement specific tests of any kind in a
    descriptive way
Sebastian Dröge's avatar
Sebastian Dröge committed
955

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
956 957 958 959 960 961 962 963 964 965 966 967 968 969 970
-   Add a verbosity configuration which behaves in a similare way as the
    gst-launch-1.0 verbose flags allowing the informations to be
    outputed on any running pipeline when enabling GstValidate.

-   Misc optimization in the launcher, making the tests run much faster.


GStreamer C# bindings

-   Port to the meson build system, autotools support has been removed

-   Use a new GlibSharp version, set as a meson subproject

-   Update wrapped API to GStreamer 1.14

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
971
-   Removed the need for “glue” code
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
972 973 974 975

-   Provide a nuget

-   Misc API fixes
Sebastian Dröge's avatar
Sebastian Dröge committed
976 977


Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
978
Build and Dependencies
Sebastian Dröge's avatar
Sebastian Dröge committed
979

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
980 981 982 983 984 985 986 987 988 989 990
-   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.

-   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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
991
    dependencies have moved with them of course, e.g. the GStreamer
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034
    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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1035
1.13.91. This should “only” affect gstreamer-vaapi, so anyone who ships
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1036 1037
the release candidates is advised to upgrade those two modules at the
same time.
Sebastian Dröge's avatar
Sebastian Dröge committed
1038 1039


Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1040
Platform-specific improvements
Sebastian Dröge's avatar
Sebastian Dröge committed
1041

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1042
Android
Sebastian Dröge's avatar
Sebastian Dröge committed
1043

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1044
-   ahcsrc (Android camera source) does autofocus now
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1045 1046 1047

macOS and iOS

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1048
-   no major changes in macOS and iOS support, only bugfixes
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1049 1050 1051

Windows

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1052 1053
-   The GStreamer wasapi plugin was rewritten and should not only be
    usable now, but in top shape and suitable for low-latency use cases.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1054
    The Windows Audio Session API (WASAPI) is Microsoft’s most modern
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1055 1056 1057 1058 1059
    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:

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1060
    -   support for more than 2 channels
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1061

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1062 1063
    -   a new "low-latency" property to enable low-latency operation
        (which should always be safe to enable)
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1064

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1065 1066 1067 1068 1069 1070 1071 1072
    -   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.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1073

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1074
    -   set realtime thread priority to avoid glitches
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1075

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1076 1077 1078 1079
    -   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.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1080

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1081 1082
    -   Also see Nirbheek’s blog post _Low Latency Audio on Windows with
        GStreamer_.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1083

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1084
-   There are now GstDeviceProvider implementations for the wasapi and
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1085
    directsound plugins, so it’s now possible to discover both audio
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1086 1087 1088 1089 1090 1091
    sources and audio sinks on Windows via the GstDeviceMonitor API

-   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.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139


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
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1140
Liaskovitis, Víctor Manuel Jáquez Leal, vijay, Vincent Penquerc’h,
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1141 1142 1143
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,
Sebastian Dröge's avatar
Sebastian Dröge committed
1144

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1145
… and many others who have contributed bug reports, translations, sent
Sebastian Dröge's avatar
Sebastian Dröge committed
1146 1147
suggestions or helped testing.

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1148

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1149
Bugs fixed in 1.14
Sebastian Dröge's avatar
Sebastian Dröge committed
1150

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1151
More than 800 bugs have been fixed during the development of 1.14.
Sebastian Dröge's avatar
Sebastian Dröge committed
1152 1153

This list does not include issues that have been cherry-picked into the
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1154 1155 1156 1157 1158
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.

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.
Sebastian Dröge's avatar
Sebastian Dröge committed
1159 1160


Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1161
Stable 1.14 branch
Sebastian Dröge's avatar
Sebastian Dröge committed
1162

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1163 1164 1165 1166 1167
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.
Sebastian Dröge's avatar
Sebastian Dröge committed
1168

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1169
1.14.0
Sebastian Dröge's avatar
Sebastian Dröge committed
1170

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1171 1172 1173 1174
1.14.0 was released on 19 March 2018.

1.14.1

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1175
The first 1.14 bug-fix release (1.14.1) was released on 17 May 2018.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1176 1177 1178

This release only contains bugfixes and it should be safe to update from
1.14.0.
Sebastian Dröge's avatar
Sebastian Dröge committed
1179

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190
Noteworthy bugfixes in 1.14.1

-   GstPad: Fix race condition causing the same probe to be called
    multiple times
-   Fix occasional deadlocks on windows when outputting debug logging
-   Fix debug levels being applied in the wrong order
-   GIR annotation fixes for bindings
-   audiomixer, audioaggregator: fix some negotiation issues
-   gst-play-1.0: fix leaving stdin in non-blocking mode after exit
-   flvmux: wait for caps on all input pads before writing header even
    if source is live
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1191 1192
-   flvmux: don’t wake up the muxer unless there is data, fixes busy
    looping if there’s no input data
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215
-   flvmux: fix major leak of input buffers
-   rtspsrc, rtsp-server: revert to RTSP RFC handling of
    sendonly/recvonly attributes
-   rtpvrawpay: fix payloading with very large mtu sizes where
    everything fits into a single RTP packet
-   v4l2: Fix hard-coded enabled v4l2 probe on Linux/ARM
-   v4l2: Disable DMABuf for emulated formats when using libv4l2
-   v4l2: Always set colorimetry in S_FMT
-   asfdemux: Set stream-format field for H264 streams and handle H.264
    in bytestream format
-   x265enc: Fix tagging of keyframes on output buffers
-   ladspa: Fix critical during plugin load on Windows
-   decklink: Fix COM initialisation on Windows
-   h264parse: fix re-use across pipeline stop/restart
-   mpegtsmux: fix force-keyframe event handling and PCR/PMT changes
    that would confuse some players with generated HLS streams
-   adaptivedemux: Support period change in live playlist
-   rfbsrc: Fix support for applevncserver and support NULL pool in
    decide_allocation
-   jpegparse: Fix APP1 marker segment parsing
-   h265parse: Make caps writable before modifying them, fixes criticals
-   fakevideosink: request an extra buffer if enable-last-sample is
    enabled
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1216
-   wasapisrc: Don’t provide a clock based on WASAPI’s clock
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1217 1218
-   wasapi: Only use audioclient3 when low-latency, as it might
    otherwise glitch with slow CPUs or VMs
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1219
-   wasapi: Don’t derive device period from latency time, should make it
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1220 1221 1222 1223 1224 1225
    more robust against glitches
-   audiolatency: Fix wave detection in buffers and avoid bogus pts
    values while starting
-   msdk: fix plugin load on implementations with only HW support
-   msdk: dec: set framerate to the driver only if provided, not in 0/1
    case
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1226
-   msdk: Don’t set extended coding options for JPEG encode
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1227 1228 1229 1230 1231 1232 1233
-   rtponviftimestamp: fix state change function init/reset causing
    races/crashes on shutdown
-   decklink: fix initialization failure in windows binary
-   ladspa: Fix critical warnings during plugin load on Windows and fix
    dependencies in meson build
-   gl: fix cross-compilation error with viv-fb
-   qmlglsink: make work with eglfs_kms
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1234
-   rtspclientsink: Don’t deadlock in preroll on early close
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249
-   rtspclientsink: Fix client ports for the RTCP backchannel
-   rtsp-server: Fix session timeout when streaming data to client over
    TCP
-   vaapiencode: h264: find best profile in those available, fixing
    negotiation errors
-   vaapi: remove custom GstGL context handling, use GstGL instead.
    Fixes GL Context sharing with WebkitGtk on wayland
-   gst-editing-services: various fixes
-   gst-python: bump pygobject req to 3.8; fix
    GstPad.set_query_function(); dist autogen.sh and configure.ac in
    tarball
-   g-i: pick up GstVideo-1.0.gir from local build directory in GstGL
    build
-   g-i: update constant values for bindings
-   avoid duplicate symbols in plugins across modules in static builds
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1250
-   … and many, many more!
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263

Cerbero build tool and packaging changes in 1.14.1

Toolchain updates on iOS and Android necessitated a fairly large number
of changes in our cerbero build tool used to create our binary packages
for the various platforms we support:

-   Add support for Ubuntu 18.04 in cerbero
-   Fix generation of fat shared libraries on macOS
-   gnutls: also rename assembly functions on macos/ios to fix link
    errors
-   gnutls: fix assembly symbol names for windows x86
-   openssl: fix linking on android/armv7
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1264
-   openssl: fix linker issue with Android NDK’s r16 binutils
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1265 1266 1267 1268 1269 1270 1271 1272 1273 1274
-   ffmpeg: disable asm for android x86 to fix issues when linking with
    apps
-   x264: disable asm for android x86 to fix issues when linking with
    apps
-   gnutls: rename private symbols for armv8, x86 to not conflict with
    openssl
-   mpg123: disable assembly on android/x86 to fix linker problems with
    relocations
-   Check built version while loading recipe and rebuild if needed
-   Fix packaging of libgcc_s_sjlj which was missing in Windows packages
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1275
-   Make not-found in library search fatal so we don’t accidentally ship
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303
    broken packages
-   ship the proxy plugin which was new in 1.14
-   Fix git commands accidentally pulling in locally built libraries and
    failing

Contributors to 1.14.1

Antonio Ospite, Aurélien Zanelli, Brendan Shanks, Carlos Rafael Giani,
Edward Hervey, Emilio Pozuelo Monfort, Enrique Ocaña González, Garima
Gaur, Georg Lippitsch, Guillaume Desmottes, Havard Graff, Hoonhee Lee,
Hyunjun Ko, James Stevenson, Jan Alexander Steffens (heftig), Jan
Schmidt, Joakim Johansson, Jun Xie, Kai Kang, Kirill Marinushkin, Mark
Nauwelaerts, Matej Knopp, Mathieu Duponchelle, Matthew Waters, Matthias
Fend, Michael Olbrich, Mikhail Fludkov, Nicolas Dufresne, Nirbheek
Chauhan, Olivier Crête, Omar Akkila, Patrik Nilsson, Philippe Normand,
Pierre Labastie, Sebastian Dröge, Seungha Yang, Sreerenj Balachandran,
Stian Selnes, Takeshi Sato, Thibault Saunier, Tim-Philipp Müller, U.
Artie Eoff, Víctor Manuel Jáquez Leal, Vivia Nikolaidou, Whoopie, Xabier
Rodriguez Calvar, Xavier Claessens, Zeeshan Ali, and countless others.

List of bugs fixed in 1.14.1

For a full list of bugfixes see Bugzilla. Note that this is not the full
list of changes. For the full list of changes please refer to the GIT
logs or ChangeLogs of the particular modules.

1.14.2

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1304
The second 1.14 bug-fix release (1.14.2) was released on 20 July 2018.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1305 1306 1307 1308

This release only contains bugfixes and it should be safe to update from
1.14.x.

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392
Noteworthy bugfixes in 1.14.2

-   asfdemux: Only send flush-stop event for flushing seeks
-   glcolorbalance: Support OES textures for input/passthrough, avoids
    possibly-unnecessary extra texture copy on Android in the default GL
    path inside glimagesink.
-   parsebin: Don’t try to continue autoplugging a parser if we got raw
    caps
-   audiobasesrc: Round down segsize to an integer number of samples
-   scaletempo: Mark as Audio in classification
-   souphttpsrc: thread-safety fixes
-   v4l2bufferpool: Validate that capture buffers were queued, to detect
    when buffer importation was refused by the driver.
-   v4l2bufferpool: Only return eos for M2M devices not v4l2src when
    buggy driver sends empty buffer
-   v4l2allocator: Fix userptr importation
-   v4l2src: Try to avoid TRY_FMT when camera is streaming, some drivers
    don’t like it
-   v4l2videoenc: Only renegotiate with upstream, fixes use in
    GstRtspServer pipeline
-   v4l2: many other fixes
-   pitch: fix latency reporting, and various other things
-   dvb: fix wrong (GPL) license headers in camconditionalaccess code
-   webrtc: Fix transportsendbin to fix spurious shut-down failures in
    webrtcbin if DTLS negotiation hasn’t completed yet.
-   webrtc: Don’t deadlock on blocked pads on shutdown
-   webrtcbin: copy sticky events on our ghostpads so users can use
    gst_pad_get_current_caps() to determine what to do with newly-added
    pads.
-   webrtcbin: fix rtpstorage configuration on 32-bit systems
-   webrtcbin: implement support for FEC and RTX
-   gstplayer: Fix duration-changed CRITICAL warning if duration did not
    actually change
-   gstplayer: Avoid trying to join the player thread from itself
-   codecparsers: mpeg2 parsing fixes for zero-sized packets
-   wasapisink: fix a rounding error when calculating the buffer frame
    count
-   wasapisink: fix missing unlock in case IAudioClient_Start fails
-   wasapi: fix potential crash with MinGW
-   rtsp-server: fix race during udpsrc setup, avoiding pushing data on
    unlinked udpsrc pad
-   rtsp-server: fix waiting for multiple streams in rtspclientsink
-   gst-editing-services: group: Fix handling clips that are added to a
    layer
-   gst-editing-services: python binding fixes
-   gst-validate launcher: Allow retrieving coredumps from within
    flatpak
-   gst-validate launcher: Fix the –forever switch which was not
    stopping on error
-   vaapi: h264 encoder negotiation fixes
-   vaapi: fix issues with native EGL display
-   more GIR annotations fixes, especially for arrays
-   gstreamer-sharp bindings were updated for g-i annotation fixes in
    other modules
-   fuzzing fixes
-   memory leak fixes
-   build fixes:
    -   build fixes for MSVC compiler
    -   meson: Fix detection of glib-mkenums under MSYS2 plus other
        meson buil fixes
    -   Fix static build symbol redefinition errors (xvimage, gst-libav)
    -   qmlgl: build fixes for conflicting declaration of type GLsync
        for non-android
    -   gl: build fixes for missing EGLuint64KHR typedef
-   … and many more!

Contributors to 1.14.2

Alessandro Decina, Antoine Jacoutot, Brendan Shanks, Carlos Rafael
Giani, Christoph Reiter, Edward Hervey, Göran Jönsson, Guillaume
Desmottes, Hyunjun Ko, Iñigo Huguet, Jan Schmidt, Johan Bjäreholt,
Louis-Francis Ratté-Boulianne, Lyon Wang, Marian Mihailescu, Mark
Nauwelaerts, Mathieu Duponchelle, Matthew Waters, Michael Tretter,
Nicolas Dufresne, Nirbheek Chauhan, Philipp Zabel, Roland Jon, Sebastian
Dröge, Seungha Yang, Sreerenj Balachandran, Suhas Nayak, Thibault
Saunier, Tim-Philipp Müller, Víctor Manuel Jáquez Leal, Vivia
Nikolaidou, wangzq, and many others. Thank you all.

List of bugs fixed in 1.14.2

For a full list of bugfixes see Bugzilla. Note that this is not the full
list of changes. For the full list of changes please refer to the GIT
logs or ChangeLogs of the particular modules.

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482
1.14.3

The third 1.14 bug-fix release (1.14.3) was released on 16 September
2018.

This release only contains bugfixes and it should be safe to update from
1.14.x.

Highlighted bugfixes in 1.14.3

-   opusenc: fix crash on 32-bit platforms
-   compositor: fix major buffer leak when doing crossfading on some but
    not all pads
-   wasapi: various fixes for wasapisrc and wasapisink regressions
-   x264enc: Set bit depth to fix “This build of x264 requires 8-bit
    depth. Rebuild to…” runtime errors with x264 version ≥ 153
-   audioaggregator, audiomixer: caps negotiation fixes
-   input-selector: latency handling fixes
-   playbin, playsink: audio visualization support fixes
-   dashdemux: fix possible crash if stream is neither isobmff nor
    isoff_ondemand profile
-   opencv: Fix build for opencv >= 3.4.2
-   h265parse: miscellaneous fixes backported from h264parse
-   pads: fix changing of pad offsets from inside pad probes
-   pads: ensure that pads are blocked for IDLE probes if they are
    called from the streaming thread too

Other noteworthy bugfixes in 1.14.3

-   queries: Set default values for position and duration query results
-   segment: make gst_segment_position_from_running_time_full() handle
    positions before the segment properly
-   aggregator: annotate GstAggregatorClass::update_src_caps for
    bindings
-   aggregator: Don’t leak peer pad of inactive pads when (not)
    forwarding QoS events to them
-   baseparse: avg_bitrate calculation critical warning fix
-   typefind: improved flow return handling in pull mode, flushing is
    not an error
-   gl: Don’t steal callers reference when setting non-floating elements
    via properties
-   gl: Also don’t leak floating references to elements set via
    properties
-   tagdemux: Properly propagate gst_pad_pull_range() errors
-   aacparse: fix codec_data buffer leak
-   rtpgstpay: Add support for force-keyunit events
-   rtpL8pay: don’t try to modify a read-only structure
-   rtpvp8pay, rtpvp9pay, rtpopuspay: Fix VP8/VP9/OPUS dual encoding
    name handling
-   rtp payloaders: Use running_time instead of PTS for config-interval
    calculations
-   qtdemux: Don’t assert in prefill mode if a track has no samples at
    all
-   qmlgl: Ensure GL headers are included
-   v4l2src: fix first input used is always used next times
-   v4l2object: Only offer MMAP/DMABUF pool
-   v4l2object: stop V4L2 from zeroing extended colorimetry for
    non-mplane
-   v4l2object: improve colorspace handling for JPEG sources
-   splitmuxsink: fix handling of repeated timestamps and a leak if sink
    pads are not released explicitly
-   player: Set default position and duration value to
    GST_CLOCK_TIME_NONE
-   videoaggregator: Make sure to hold object lock while iterating sink
    pads
-   audiobuffersplit: improve resync handling and compensate better for
    accumulated errors
-   kmssink: add support for Xilinx DRM Driver, mxsfb-drm driver and the
    Allwinner DRM driver (sun4i-drm)
-   rsvg: Also accept </svg:svg> as ending tag
-   ges: project: Compute relocation URIs in missing-uri signal
-   ges: formatter: Serialize Transition border and invert properties
-   ges: clip: Resync priorities when removing an effect

Contributors to 1.14.3

Christoph Reiter, Devarsh Thakkar, Edward Hervey, Gary Bisson, Iñigo
Huguet, Jan Alexander Steffens (heftig), Jan Schmidt, Jerome Laheurte,
Marcos Kintschner, Mathieu Duponchelle, Matthew Waters, Michael Olbrich,
Nicolas Dufresne, Nirbheek Chauhan, Paul Kocialkowski, Philippe Normand,
Philipp Zabel, Roland Jon, Sebastian Dröge, Seungha Yang, Thibault
Saunier, Tim-Philipp Müller, Yuji Kuwabara, and many others. Thank you
all.

List of bugs fixed in 1.14.3

For a full list of bugfixes see Bugzilla. Note that this is not the full
list of changes. For the full list of changes please refer to the GIT
logs or ChangeLogs of the particular modules.

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1483
1.14.4
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1484

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520
The fourth 1.14 bug-fix release (1.14.4) was released on 2 October 2018.

This release only contains bugfixes and it should be safe to update from
1.14.x.

Highlighted bugfixes in 1.14.4

-   glviewconvert: wait and set the gl sync meta on buffers
-   glviewconvert: Copy composition meta from the primary buffer to both
    outputs
-   glcolorconvert: Don’t copy overlay composition meta over to NULL
    outbufs
-   matroskademux: add functionality needed for MSE use case fixing
    youtube playback in epiphany/webkit-gtk
-   msdk: fix build on windows
-   opusenc: fix another crash on 32-bit x86 on windows (alignment issue
    in SSE optimisations)
-   osxaudio: add support for parsing more channel layouts
-   tagdemux: Use upstream GST_EVENT_STREAM_START (and stream-id) if
    present
-   vorbisdec: fix header handling regression: init decoder immediately
    once we have headers
-   wasapisink: recover from low buffer levels in shared mode
-   fix GstSegment unit test which would fail on some 32-bit x86 CPUs

Contributors to 1.14.4

Alicia Boya García, Christoph Reiter, Edward Hervey, Jan Schmidt,
Matthew Waters, Nicola Murino, Nicolas Dufresne, Sebastian Dröge,
Tim-Philipp Müller, Wangfei, and many others. Thank you all.

List of bugs fixed in 1.14.4

For a full list of bugfixes see Bugzilla. Note that this is not the full
list of changes. For the full list of changes please refer to the GIT
logs or ChangeLogs of the particular modules.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1521

Sebastian Dröge's avatar
Sebastian Dröge committed
1522

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1523
Known Issues
Sebastian Dröge's avatar
Sebastian Dröge committed
1524

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1525 1526
-   The webrtcdsp element (which is unrelated to the newly-landed
    GStreamer webrtc support) is currently not shipped as part of the
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1527
    Windows binary packages due to a build system issue.
Sebastian Dröge's avatar
Sebastian Dröge committed
1528

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1529 1530 1531 1532 1533 1534 1535
-   The gst-libav module in 1.14 will only build against older ffmpeg
    3.x versions and won’t build against the newly-released ffmpeg 4.0
    (as in RPM Fusion for Fedora 28) due to API changes. Use the
    internal ffmpeg copy instead if you build using autotools. This is
    fixed in git master / upcoming 1.16, but won’t be backported to the
    1.14 branch as it is rather intrusive and difficult to support both
    old and new APIs at the same time.
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1536

Sebastian Dröge's avatar
Sebastian Dröge committed
1537

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1538
Schedule for 1.16
Sebastian Dröge's avatar
Sebastian Dröge committed
1539

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1540 1541 1542
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.
Sebastian Dröge's avatar
Sebastian Dröge committed
1543

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1544
The plan for the 1.16 development cycle is yet to be confirmed, but it
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1545 1546
is expected that feature freeze will be around September 2018 followed
by several 1.15 pre-releases and the new 1.16 stable release in October.
Sebastian Dröge's avatar
Sebastian Dröge committed
1547

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1548 1549
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.
Sebastian Dröge's avatar
Sebastian Dröge committed
1550

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1551
------------------------------------------------------------------------
Sebastian Dröge's avatar
Sebastian Dröge committed
1552

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1553
_These release notes have been prepared by Tim-Philipp Müller with_
Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1554 1555
_contributions from Sebastian Dröge, Sreerenj Balachandran, Thibault
Saunier_ _and Víctor Manuel Jáquez Leal._
Sebastian Dröge's avatar
Sebastian Dröge committed
1556

Tim-Philipp Müller's avatar
Tim-Philipp Müller committed
1557
_License: CC BY-SA 4.0_