May 04, 2017
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!
Did you know you could run a permissively-licensed MTP implementation with minimal dependencies on an embedded device? Here's a step-by-step…
Earlier this year, the Rust compiler gained support for LLVM source-base code coverage. In this post we'll explain how to setup a CI job…
Over the past few months, I've been working on a side project to improve Meson sub-project support. The best stress test is to build projects…
The most complete automated testing and continuous integration tool for the Linux kernel continues to evolve at a rapid pace. Here's a look…
In the embedded world, many modern SoCs such as the ST Microelectronics STM32MP1 now include coprocessor cores which can be used for a wide…
Our recent efforts on the Hantro kernel driver have resulted in the addition of H.264 decoding support and multiple performance improvements.…