November 02, 2016
Yesterday, we celebrated the release of GStreamer 1.10, the culmination of 7 months of very hard work from the GStreamer community. Collabora's multimedia team is extremely proud of our contributions to this new major feature release.
Our contributions had two main targets: improve GStreamer's overall reliability and improve support for hardware accelerated plugins. We've also contributed a number of improvements that we've done in relation to the work we do with our clients! If you would like more information or assistance on how to leverage these improvements into your products, please get in touch with us!
Guillaume Desmottes added a GstTracer plugin to trace memory leaks in GStreamer applications and plugins. This traces GStreamer objects and mini-objects in a very quick way so it can be run in cases where valgrind is too heavy. For example, it can be enabled in regular testing or used on constrained embedded devices. He also fixed dozens of leaks all over GStreamer that he discovered based on this new plugin. In particular, he fixed a large number of leaks in the new decodebin3/playbin3 code. The objective is to have leak tracing always on in unit tests in the next version.
Guillaume also added support for ALSA devices that have a number of channels, but no specific position associated with them. Those are present in industrial devices that capture N independent channels instead of a 5.1 or a 7.1 positional audio.
Nicolas Dufresne added a new element to do Acoustic Echo Cancellation (AEC), this is necessary if you have a microphone that can capture what comes out of the speaker when doing a phone call, for example, when using speakerphone. This was previously left to PulseAudio on Linux and to other platform specific features on other platforms, but with this new GStreamer element, it is possible to have AEC on all platforms. It uses the webrtc-audio-processing library containing code published by Google as part of the WebRTC library (using by Chromium and Firefox). This library represents the best Open Source Echo canceller out there and can correct echo even in the presence of bad conditions, such as hardware lying about its latency.
|Figure 1. GStreamer Echo Cancellation.|
He's also been contributing heavily to the Wayland sink, in particular, he's reviewed and committed support for the new wl_viewporter extensions allowing video scaling and cropping to be delegated to the Wayland compositor. But he's also made it optional so that waylandsink can also work on current compositor that don't support it. He's also added support for the video meta, allowing zero-copy operations in more cases.
Nicolas also made a number of smaller improvements. He cleaned up the rfbsrc element that is used to receive from the RFB protocol used by VNC. Among those, he enabled the GObject property notification when the name of a GstObject is changed, he made the libvpx decoder (VP8, VP9) use multiple threads on multi-core systems, and he made a number of small fixes to the V4L2 elements. Nicolas has also be continuing in his role as V4L2 maintainer and he reviewed a large number of patches from the community.
This covers the work done by Nicolas and Guillaume on GStreamer 1.10. Tomorrow, I'll give an overview of the work done by the rest of Collabora's multimedia team, including Vincent, Wonchul, Thibault and myself.
Introducing cmtp-responder - a permissively licensed Media Transfer Protocol (MTP) responder implementation which allows embedded devices…
Up until now, talking in-depth about userspace tracing was deliberately avoided because it merits special treatment, hence this part devoted…
After a successful team effort, the patch enabling the Chromium Embedded Framework (CEF) Ozone builds to run with different platform backends,…
Now that we've studied the mainstream way of developing and using eBPF programs on top of the low-level VM mechanisms, we'll look at projects…
A previous post introduced the SPURV Android compatibility layer for Wayland based Linux environment. In this post, we're going to dig into…
In part 1 and 2 of this series, we took a condensed in-depth look at the eBPF VM. In part 3, we define the high-level components of an eBPF…