Posted on 04/05/2017 by Olivier Crête
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!
Earlier this year I worked on a certain GStreamer plugin that is called “ipcpipeline”. This plugin provides elements that make it possible…
Running crosvm outside Chromium OS is quite easy, with the only complication being that minijail isn't widely packaged in distros. In these…
Kmemleak allows you to track possible memory leaks inside the Linux kernel. Basically, it tracks dynamically allocated memory blocks in…
Earlier this month I had the pleasure of attending the Web Engines Hackfest, hosted by Igalia at their offices in A Coruña, and also sponsored…
In this post, I will show one more example of how easy it is to disrupt performance of a modern CPU, and also run a quick discussion on…
Many thanks to Google for recording all the XDC2017 talks. To make them easier to watch, here are direct links to each talk recorded at…