October 06, 2020
It has been more than a year since the last official 1.16 release for the GStreamer project. There were good reasons for the long wait for
1.18 as much has changed since the previous release, with the biggest improvement being the move to Gitlab, a more productive environment. This has led to a significant increase in contributors, which now total 300 (200 more than
1.16!). In addition,
1.18 contains almost 4000 commits for only the core GStreamer repositories, as opposed to 3000 in
1.16. A full description of this important release can be found here.
As usual, our team has been quite actively involved in this release, and we are proud to present some of the highlights of our contributions.
As a major change in this release, GStreamer has replaced its historical build system, Autotools, with the faster, more powerful Meson. An extra effort was made to achieve feature parity with the previous build system, and many patches were written for both the GStreamer (
gst-build) and Meson projects thanks to Xavier, who worked hard to review and merge many of these contributions.
New HDR capabilities has been introduced by the community and extended by our team, especially for the AVC (
h264) and HEVC (
h265) parsers. For the moment only the
HDR10 profile is supported but we are very confident that we will support
HDR10+ in the next release.
Besides the great work migrating to Gitlab, much effort has been spent by Nicolas and Guillaume to achieve a fast, reliable and professional CI system. Guillaume gave a special effort to the very promising GStreamer Rust project's CI, helping make Rust a first class citizen in the GStreamer project. He has also implemented a CI to test and validate contributions to the
gst-omx project. And Nicolas improved the Gitlab API support, allowing on-demand jobs for merge requests : the CI can now combine jobs or offer a cache server to speed up Cerbero builds.
Thanks to Nicolas and Ezequiel's tireless efforts, GStreamer now has a common library for stateless codecs, with growing support for DXVA (DirectX Video Acceleration), V4L (Video4Linux) and VA-API (Video Acceleration API).
libgstcodecs has been created to share code between stateless codec such as
v4L2, with the latter supporting new drivers such as
Blaize with codecs such as
H265. And alongside this long-running effort,
NV12 formats are now supported for the
As with our work on the
1.16 release, reducing the latency of GStreamer pipelines is still an obsession for us here at Collabora. One large part of this effort is the introduction of support for items smaller than a frame for encoders, allowing intermediate subframes to be processed by downstream elements. We first implemented this in the OpenMAX IL stack used on the Xilinx Zynq UltraScale+ MPSoC This dramatically reduces the latency of the pipeline. The OMX and OpenJPEG encoders demonstrate this new features, and it is now available for AVC (h264) and HEVC (h265) content. This work, initiated by Guillaume and Nicolas, has been continued by Stéphane, who is now working on landing the decoder part for
In addition to the video decoder subframe work, Nicolas, Olivier, Guillaume and Stéphane have reduced latency in demuxers, parsers and codecs, reducing memory copies by providing an API to negotiate the optimal buffer layout or add an alternate interlace mode.
Olivier and Nicolas have been working actively on a new plugin for the new transport protocol RIST, providing sink and source elements that implement the Simple Profile of this RTP based protocol. Nicolas also enhanced RTP stack performance with a better jitterbuffer, while Antonio improved the RTP stack to reduce overhead for high bitrate streaming.
To promote Rust as a solid alternative to the common C language when implementing new plugins and features, Guillaume has improved the API bindings for the parser and decoder base class and has also improved the high level caps API.
In addition to enhancements, our team also made numerous bug-fixes and improvements to the code. Aaron improved Windows support, added support for AFD and Bar Data, and improved support for JPEG2000. Xavier added support for Magic Leap codec SDK based on Android Media Codec, and Stéphane finalized the offer for DASH by writing a sink to produce DASH contents (see his blog post on how to generate MPEG-DASH streams with GStreamer).
As maintainers and active long-term contributors, Guillaume, Nicolas and Olivier also contributed many bug fixes and improvements, including:
transcodebinby adding new converters
If you have any questions about how to take advantage of GStreamer 1.18 and it's new features, or how to extract maximum performance from your hardware, please don't hesitate to contact us.
The Panfrost project started as a reverse engineering effort to understand Arm Mali Midgard and Bifrost GPU internals. With the driver getting…
Join us this week at the Spring edition of Linaro Virtual Connect, as we discuss bringing stateless video decoding support to Linux, and…
One year ago, we announced a new partnership with Microsoft to build OpenGL mapping layers to DirectX 12. Today, we're excited to share…