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

Mesa CI and the power of pre-merge testing

08/10/2024

Having multiple developers work on pre-merge testing distributes the process and ensures that every contribution is rigorously tested before…

A shifty tale about unit testing with Maxwell, NVK's backend compiler

15/08/2024

After rigorous debugging, a new unit testing framework was added to the backend compiler for NVK. This is a walkthrough of the steps taken…

A journey towards reliable testing in the Linux Kernel

01/08/2024

We're reflecting on the steps taken as we continually seek to improve Linux kernel integration. This will include more detail about the…

Building a Board Farm for Embedded World

27/06/2024

With each board running a mainline-first Linux software stack and tested in a CI loop with the LAVA test framework, the Farm showcased Collabora's…

Smart audio filters with WirePlumber 0.5

26/06/2024

WirePlumber 0.5 arrived recently with many new and essential features including the Smart Filter Policy, enabling audio filters to automatically…

The latest on cmtp-responder, a permissively-licensed MTP responder implementation

12/06/2024

Part 3 of the cmtp-responder series with a focus on USB gadgets explores several new elements including a unified build environment with…

Open Since 2005 logo

Our website only uses a strictly necessary session cookie provided by our CMS system. To find out more please follow this link.

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