Hardware video acceleration
| This page could use some expansion. If you'd like to help out, feel free to edit this article! |
Hardware video acceleration makes it possible for the video decoder/encoder to decode/encode video, thus offloading the CPU and saving power.
Supported codecs
Decode
| Hardware | Description | API | H.263 | H.264 | H.264 MVC | H.265 | VP8 | VP9 | MPEG-2 | MPEG-4 | VC1 | VC1RCV | Xvid | AV1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Venus | Qualcomm Snapdragon SoCs | v4l2m2m | Y | Y | - | Y | Y | Y | Y | Y | Y | - | Y | N |
| Hantro | Rockchip SoCs / NXP i.MX8 SoCs | - | Y | - | - | Y | - | Y | - | - | - | - | - | |
| rkvdec1 | Rockchip SoCs (rk32xx - rk33xx) | v4l2-request | - | Y | - | N | - | Y | - | - | - | - | - | - |
| rkvdec2 | Rockchip SoCs (rk356x) | - | N | - | N | - | N | - | - | - | - | - | - | |
| MFC v5 | Exynos 4, S5PV210 | v4l2m2m | N | N | - | - | - | - | N | N | N | N | - | - |
| MFC v6+ | Exynos 5250 (v6), 5420 (v7), 3250 (v7), 5800 (v8) | v4l2m2m | Y | Y | Y | N | Y | Y | Y | Y | Y | Y | - | - |
| mtk-vpu | MediaTek SoCs | v4l2-request | - | Y | - | - | - | - | - | - | - | |||
| mtk-vcodec | MediaTek 2nd Gen SoCs | v4l2-request | N | Y | - | Y | Y | Y | N | N | - | - | - | Y |
| VDE | Nvidia Tegra T20/T30/T114. T124 is not supported. | - | P | N | - | N | - | N | N | N | - | - | - |
Encode
| Hardware | Description | API | H.263 | H.264 | H.264 MVC | H.265 | VP8 | VP9 | MPEG-2 | MPEG-4 | VC1 | VC1RCV | Xvid |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Venus | Qualcomm Snapdragon SoCs | v4l2m2m | Y | Y | Y | Y | Y | - | - | Y | - | - | - |
| Hantro | Rockchip SoCs | - | N | - | - | N | - | - | - | - | - | - | |
| rkvenc2 | Rockchip SoCs (rk356x) | - | - | - | N | - | N | - | - | - | - | - | |
| MFC v5 | Exynos 4, S5PV210 | v4l2m2m | N | N | - | - | - | - | - | N | - | - | - |
| MFC v6+ | Exynos 5250 (v6), 5420 (v7), 3250 (v7), 5800 (v8) | v4l2m2m | Y | Y | Y | N | Y | - | - | Y | - | - | - |
| mtk-vpu | MediaTek SoCs | v4l2-request | - | Y | - | - | - | - | - | - | |||
| mtk-vcodec | MediaTek 2nd Gen SoCs | v4l2-request | N | Y | - | N | Y | N | N | N | - | - | - |
| VDE | Nvidia Tegra T20/T30/T114/T124. | - | N | N | - | N | - | - | - | - | - | - |
Status legend
| Code | Meaning |
|---|---|
| Y | Fully implemented |
| P | Partially implemented |
| N | Broken / unsupported in mainline |
| Untested / unknown | |
| - | Unsupported by hardware |
APIs
v4l2-request
TODO
v4l2m2m
TODO
libvdpau
TODO
VA-API
TODO
Usage
Applications
Chromium
Chromium has related code, but it is enabled only for Chrome OS builds.
Firefox
v4l2m2m works for h264 if libavcodec is build with this path https://github.com/LibreELEC/LibreELEC.tv/blob/master/packages/multimedia/ffmpeg/patches/v4l2-request/ffmpeg-001-v4l2-request.patch
Clapper
https://flathub.org/apps/com.github.rafostar.Clapper can use v4l2-request api
mpv
mpv can do video decoding with v4l2m2m with --hwdec=v4l2m2m-copy
If your device has no working audio and your video has audio, the CPU load will be higher under systemd. Disabling audio using --no-audio is a good workaround.
Moonlight
Works with va-api and v4l2m2m
Testing
TODO: Add potential good examples and validate. Potential candidates:
- https://developer.qualcomm.com/qualcomm-robotics-rb5-kit/software-reference-manual/camera-and-video/video-decode
- https://wiki.postmarketos.org/wiki/Qualcomm_Snapdragon_450/625/626/632_(MSM8953)#Video_Encoder_.2F_Decoder_.28Venus.29
gst-launch-1.0 videotestsrc ! videoconvert ! v4l2vp8enc ! queue ! v4l2vp8dec ! xvimagesink(from https://wiki.postmarketos.org/wiki/Xiaomi_Mi_Note_2_(xiaomi-scorpio)#Mainline)- for v4l2m2m:
ffplay -vcodec h264_v4l2m2m file.mp4 - for v4l2m2m:
mpv --hwdec=v4l2m2m-copy file.mp4 - https://github.com/fluendo/fluster - packaged in Alpine:
fluster