


provide libraries and APIs of their own to other applications but can (importantly!) also output directly to the framebuffer. Different applications may make recourse to one or another of these APIs. For Cedrus, there is the unmaintained libva-v4l2-request backend which implements VA-API, the legacy VDPAU implementation libvdpau-sunxi, and as of kernel version 5.11, H.264 has been merged into the uAPI headers. These are all still in development, but Cedrus already fully supports H.264, and partially supports HEVC, and is already usable in the mainline kernel.ĪPIs: In order for anything (userspace APIs, libraries) to make use of the VPU drivers, you need backends/APIs. These are Sunxi- Cedrus/ Cedrus V4L2 M2M and Cedar on Allwinner Hantro and Rkvdec on Rockchip. Working hardware decoding is particularly important for underpowered ARM CPUs.ĭrivers: Topmost in the stack are the VPU drivers. Modern GPUS and ARM SoCs therefore contain specialised hardware (VPUs) to delegate these tasks to. Software en-/decoding is very CPU-intensive. are standardised methods which serve to more efficiently encode and decode videos, reducing their filesize. I will speak only of H.264 and H.265/HEVC I don't understand the high/low stuff and didn't pay attention to other codecs.)īasics: Video codecs like H.264, H.265/HEVC, MPEG-2, etc. (This post is going to focus on mainline implementations of Cedrus/Allwinner, I haven't looked into Hantro/Rkvdec/Rockchip specifics yet. Stuff which I am highly uncertain of I will print in italics. I hope people more knowledgeable will correct me when I get something wrong or cite outdated information. In this post I will attempt to compile what I've learned on the different software components involved, their relationships, their current status, and solutions to the problem. Today I sat down and read up on these subjects, scouring wikis, documentation, this forum, and assorted other sources to try and understand how this works. Being a complete amateur, I find the topic very opaque and confusing, with various different components that need to interface with each other, be patched in sync, and sometimes change drastically between kernel versions, etc. I've taken peeks at threads related to hardware decoding (of H.264 and HEVC, mainly) on Allwinner and Rockchip platforms on and off, sometimes dabbled in trying and failing to implement solutions recommended there.
