Qualcomm Technologies, Inc.’s leadership in mobile market with Linux Android support is well established. As the demand for Qualcomm® Snapdragon™ processors, a product of Qualcomm Technologies, Inc., increase in adjacent markets, the need for non-Android Linux support becomes evident.
Recently, we announced the availability of Linaro Linux release based Ubuntu 14.04 on Snapdragon 600 processors. In the short time since that announcement, eInfochips - a leading engineering services provider - ported a video conferencing demo attaining less than 50ms latency on the Linaro Linux release using Inforce’s IFC6410 – Single Board Computer based on Snapdragon 600 processor.
I invited eInfochips to present their solution at the 2014 Uplinq Conference in San Francisco. Here’s a summary of the project and some tips for developers working on non-Android Linux release for Snapdragon 600 processor. To accelerate your development efforts, developers can now get Linux pre-loaded on IFC6410 from Inforce Computing. eInfochips also offers design, development, test and optimization services for products based on Snapdragon.
Watch the session video above and view the presentation slides on SlideShare.
So what does it take to implement a low-latency (50ms glass-to-glass) video conferencing solution based on OpenEmbedded build with Linaro Linux Kernel? It is a greater challenge, as we use only software codecs (H.263 and Speex) and limit CPU utilization to 25%.
The Video Conferencing Demo and Expert Session
eInfochips conducted a session with Linaro entitled “Ubuntu Linux on the Qualcomm® Snapdragon™ 600 Processor” at Uplinq 2014. This session detailed on how Linux and embedded community developers can download and install this release on Inforce Computing’s IFC6410 Single Board Computer incorporating the Snapdragon 600 processor to accelerate their next Linux project. A demonstration of the solution was also be showcased at the event.
The primary components of the solution are:
- IFC 6410 SBC based on Snapdragon 600 (APQ8064) processor
- Linaro OpenEmbedded Release
- Linaro Linux Kernel 3.4.0 with V4L2 based video capture
- Qt5 graphics framework
- Gstreamer 1.4 with H.263 and Speex software codecs
- Sofia SIP
Qt5 based user interface is the backbone of this conferencing solution. Initially we enabled this solution for the Ubuntu-based Member build release and later we ported the complete solution with OpenEmbedded project using OpenEmbedded Core, Qt5 and Qualcomm board support package (BSP) layers.
It uses Sofia SIP VoIP Stack for session and call management and GStreamer plugins for the Audio-Video pipeline. The Qt5 uses X11 platform plugin for graphics rendering. In future version of this solution, we plan to support EGLFS and Wayland to gain the advantage of Qualcomm® Adreno™ GPU acceleration, a product of Qualcomm Technologies, Inc.
Implementation and Optimization
When we put these components together, the solution operated on more than 75% CPU utilization with more than 250ms glass-to-glass latency. Of the multiple ‘cheat-codes’ we applied to the solution, we achieved significant gains in performance by modifying the Qt5 SDK to bypass the qt-gstreamer plugin and directly calling Gstreamer native APIs. The video was rendered using OpenGL based sink plugin.
The result of a robust optimization process that leverages on-board accelerators and Adreno GPU from the Snapdragon, we achieved 500% improvement in the latency, and 300% improvement in the CPU utilization. Note that this performance is with software codec implementation. With hardware accelerated codecs, we expect considerably higher performance metrics from the solution.
While the solution is capable of delivering HD resolution conferencing, we developed this solution at capture resolution of 640x480 and encode/decode resolution of 352x288. With hardware accelerated codecs in place, we should be able to achieve the full potential of the Snapdragon platform, with HD resolution conferencing.