This article was originally published at Imagination Technologies' website, where it is one of a series of articles. It is reprinted here with the permission of Imagination Technologies.
Writing and optimizing code for heterogeneous computing can be difficult, especially if you are starting from scratch.
Imagination has set up a new page where developers can access the source code for an example camera and video post-processing application that leverages the PowerVR Imaging Framework to implement efficient zero-copy flows for a range of image processing kernels. To download the PowerVR Imaging Framework SDK and examples, visit our dedicated GPU compute landing page, register your interest and sign a click-through NDA.
Because the framework requires low-level integration within Android, it is not generally available across all platforms in the market. Applications built using the PowerVR Imaging Framework are therefore not suitable for general release, for example in the Google Play store. Instead, the framework is intended to be used in a number of specific ways, outlined below:
- By silicon vendors that license PowerVR multimedia IP for their hardware designs. Vendors can enable the imaging framework in the Android BSPs they deliver to their customers (OEMs).
- By OEMs that design their products using PowerVR-based SoCs. OEMs can utilize the PowerVR Imaging Framework to develop applications that efficiently leverage all available SoC, which can be pre-packaged with the product.
- By third-party software companies working within Imagination’s software ecosystem, for example as a lead partner to a silicon vendor or OEM. Software companies can use our SDK with any supported reference platform available in the market to prototype new computational photography and computer vision algorithms on a PowerVR Rogue GPU.
The PowerVR Imaging Framework has been used extensively by silicon vendors and OEMs to improve their Android camera applications. The Android Camera HAL includes a number of optional features, which silicon vendors may selectively enable depending on the capabilities of their ISP hardware. Some partners have used the imaging framework to implement some of these optional features using GPU compute, including image de-noising, face detection, video stabilization and HDR (high dynamic range), overcoming limitations with their ISP hardware feature set.
OEMs have used the framework to process data from new types of image sensor, such as stereo sensors which require disparity to be computed to determine depth, and to implement differentiated features that are not available in the stock Android camera such as beautification and augmented reality.
In the TV market, OEMs have used the framework to implemented software codecs that are not yet supported in hardware such as HEVC and VP9, using GPU compute to accelerate vector computations found in tasks such as motion compensation and de-blocking filters.
In the automotive market, Tier 1 module makers have used the framework as the foundation of their computer vision software subsystems, for example to implement use cases such as lane departure warning and pedestrian detection, accelerating related workloads such as edge detection and histogram-of-gradients (HoG) calculation.
Partners are also deploying the framework in emerging markets such as smart security cameras, and retail analytics systems that track people in stores to determine demographic information (age, gender and ethnicity, for example) and dwell time.
The PowerVR Imaging Framework and SDK are now supported on a range of platforms available to purchase in the market including development boards and end-user products such as mobile phones and tablets. Imagination maintains a list of supported platforms online, complete with corresponding quick start guides and SDK source code.
To download our PowerVR Imaging Framework SDK, please visit http://www.imgtec.com/gpucompute
Developers can use the SDK as a starting point by substituting Imagination-supplied example kernels with their own source code. To ensure high performance, this code should be optimized based on the existing programming guidelines downloadable from our webpage. Once an initial implementation has been developed and tested, its performance can be profiled based on the useful metrics presented there.
Finally, the guidelines also offer several advanced suggestions to maximize performance.
By Salvatore De Dominicis
Leading Technical Specialist on OpenCL and GPU Compute, Imagination Technologies