Made available earlier this month, GStreamer 1.20 is the fruitful result of 17 months of hard work from the entire community. Over 250 developers contributed code to make this release happen, and once again, Collabora had more contributors than any other organization.
Our work focused on the two areas in which we believe GStreamer shines the brightest: embedded systems, and network streaming, in particular WebRTC. Below is a summary of the impact our team of engineers had on this latest release.
As usual, you can also learn more about the enhancements done by the rest of the community by looking at the project’s 1.20 release notes.
Contributions related to embedded systems
GStreamer is already the pre-eminent media framework for embedded systems, and this is an area where Collabora has been very active over the last release cycle. Here are some of the improvements that we’ve made.
After many years of efforts by Guillaume, Nicolas, Stéphane, and Aaron, we finally landed the support for sub-frame decoding. This has made it possible to start decoding video frames before the entire frame has been received from the network if the decoder supports this. We’ve implemented this for JPEG2000 with OpenJPEG, with H.264 with ffmpeg, as well as in gst-omx when using the Allegro extensions present on the Xilinx Zynq UltraScale+ MPSoC EV processors.
In partnership with Huawei, we also improved the GStreamer build system to make it possible to create a library containing only the specific parts of GStreamer used by a particular application or a set of applications. Take a look at this blog post to learn more.
Nicolas added MPEG2 and VP9 Stateless Linux support and contributed to enhancing the VP9 parser. The H264 Stateless Linux decoder also gained support for interlaced video streams, though only for slice-based decoders and not for frame-based decoders since no driver in the mainline Linux kernel supports that. Nicolas also added support for a rendering delay that allows multiple frames to be queued in a stateless decoder and enhances throughput at the cost of higher latency. He implemented this for the MPEG 2 Video, VP8, and VP9 decoders. He also added support for HEVC decoding to the new “va” plug-in that uses the new GStreamer common decoder implementation to support VA-API-based decoders.
Nicolas also implemented videocodectestsink: a small element that computes the checksum of incoming frames to compare them against a known good reference. This is useful fo