Stéphane Cerveau
October 06, 2020
Reading time:
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 D3D11
and v4L2
, with the latter supporting new drivers such as I.MX8M
, Rockchip
, Allwinner
, and Blaize
with codecs such as JPEG
, H264
and H265
. And alongside this long-running effort, 4x4
and 32x32
tiled NV12
formats are now supported for the Hantro
and Allwinner
codecs.
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 1.20
.
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:
transcodebin
by adding new convertersIf 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.
20/12/2024
The Rockchip RK3588 upstream support has progressed a lot over the last few years. As 2024 comes to a close, it is a great time to have…
09/12/2024
Collabora will be at NeurIPs this week to dive into the latest academic findings in machine learning and research advancements that are…
05/12/2024
Now based on Debian Bookworm, Apertis is a collaborative OS platform that includes an operating system, but also tools and cloud services…
Comments (0)
Add a Comment