We're hiring!
*

Collabora contributions to GStreamer 1.12

Olivier Crête avatar

Olivier Crête
May 04, 2017

Share this post:

Reading time:

Today, the GStreamer community released version 1.12. This new release includes a number of exciting improvements, some of which I previewed two weeks ago. To see all the details about all the changes, you must read the well written release notes created by the community. Along with the usual load of memory leaks, crashes and other bugs, Collabora's multimedia team once again contributed a number of improvements across a wide number of areas.

Frustrated by the inability to set the stride of each plane in the new rawvideoparse element from gst-launch, Nicolas Dufresne decided to fix the problem once and for all and implemented support to serialize and deserialize GstValueArray types, so they can be used directly from the gst-launch command line. He then went on a spree of improvements to make GStreamer specific types available from the command line and from the Python bindings. In particular, it is now possible to set all kind of range types (int, int64, double & fraction) natively in Python. Nicolas also enabled the direct conversion of GStreamer's List and Array types from and to the matching Python types.

We also enabled a number of new raw formats, as Nicolas added support for the VYUY raw video format, while Vincent Penquerc'h and myself added support for a couple more encoded formats to the GstAudioBaseSink class, in particular for raw MPEG AAC (non-ADTS), FLAC, and fixed some bugs in the MPEG audio handling.

In preparation to making it possible to build statically linkable plugins at the same time as dynamic ones, Nicolas renamed all of the plugin files to match the plugin names, so, for example, the encoding plugin containing the encodebin element is no longer called "libgstencoding.so", but instead "libgstencodebin.so". This will make it possible to load plugins by their plugin name in the next version.

George Kiagiadakis and myself also made some improvements to the splitmux elements that allow reading from a series of ordered files as if they were one long file. George added better support for reading "sparse" streams, like subtitles, that don't have valid data for the whole duration of the stream. I made it possible for splitmuxsink to accept a stream that changes format (like resolution) by simply creating a new file at that point.

Nicolas reviewed, merged and improved support for DMABuf in Waylandsink that had originally been contributed by Fabien Dessenne of ST Microelectronics. This now allows a compatible Wayland compositor to directly use the buffers created by a compatible hardware decoder in a completely zero-copy path. This is especially important for embedded processors. Nicolas also merged Fabien's fix to hint the black border subsurface as opaque, which allows using a single HW plane to display a video on some hardware platforms.

Nicolas also improved the OpenCV based elements, completing the port of the GstOpencvVideoFilter base class to the GstVideoFilter base class, while also porting a number of elements to this GstOpencvVideoFilter class. This was mostly cleanup, code re-use, however it also fixed an issue with GstVideoMeta being ignored and an unbalanced buffer_map/unmap.

After spending way too much time trying to debug a custom sink, I discovered that the expected behaviour of GstBaseSink subclasses when entering the PAUSE state was not very well documented. I documented it and fixed a number of elements where the behaviour was incorrect resulting in either lost data or a slower state change to pause, in particular, I fixed fdsink and v4l2sink, but there are other elements that still need to be fixed in the next release. Wonchul Lee, on his part, made it possible for udpsrc to join multicast groups on more than one network interface.

Some improvements were added that will please authors of custom elements. Notably, Wonchul added support for multiple specifiers in request pad name, so a request pad can now be named "src_%u_%u" instead of just "src_%u".

Last, but not least, Guillaume Desmottes added support for GstStream and GstStreamCollection to the GStreamer debug printing system, giving debug logs that are easier to understand. I added example command lines to the output of the gst-device-monitor tool, this makes it easier to select devices on platforms where the devices are accessed with numbers instead of human friendly names, in particular, audio devices on macOS.

If you or your team would like to leverage or implement the latest features of GStreamer 1.12, Collabora's multimedia team would be happy to assist. Please get in touch with us to see how we can help!

Comments (0)


Add a Comment






Allowed tags: <b><i><br>Add a new comment:


Search the newsroom

Latest Blog Posts

Re-converging control flow on NVIDIA GPUs - What went wrong, and how we fixed it

25/04/2024

While I managed to land support for two extensions, implementing control flow re-convergence in NVK did not go as planned. This is the story…

Automatic regression handling and reporting for the Linux Kernel

14/03/2024

In continuation with our series about Kernel Integration we'll go into more detail about how regression detection, processing, and tracking…

Almost a fully open-source boot chain for Rockchip's RK3588!

21/02/2024

Now included in our Debian images & available via our GitLab, you can build a complete, working BL31 (Boot Loader stage 3.1), and replace…

What's the latest with WirePlumber?

19/02/2024

Back in 2022, after a series of issues were found in its design, I made the call to rework some of WirePlumber's fundamentals in order to…

DRM-CI: A GitLab-CI pipeline for Linux kernel testing

08/02/2024

Continuing our Kernel Integration series, we're excited to introduce DRM-CI, a groundbreaking solution that enables developers to test their…

Persian Rug, Part 4 - The limitations of proxies

23/01/2024

This is the fourth and final part in a series on persian-rug, a Rust crate for interconnected objects. We've touched on the two big limitations:…

Open Since 2005 logo

We use cookies on this website to ensure that you get the best experience. By continuing to use this website you are consenting to the use of these cookies. To find out more please follow this link.

Collabora Ltd © 2005-2024. All rights reserved. Privacy Notice. Sitemap.