libvdpau-sunxi is a [VDPAU] (ftp://download.nvidia.com/XFree86/vdpau/doxygen/html/index.html) backend driver for Allwinner based (sunxi) SoCs.
It is based on the [reverse engineering effort] (http://linux-sunxi.org/Cedrus) of the [linux-sunxi] (http://linux-sunxi.org) community. It does neither depend on code, which was released by Allwinner, nor does it act like a wrapper around some precompiled binary libraries. libvdpau-sunxi is a clean implementation, that is based on reverse engineering.
It currently supports decoding of MPEG1 and MPEG2, some limited MPEG4 types and H.264. On H3/A64 it also decodes H.265. It also supports all the basic features of the VDPAU API - including presentation. As this is WorkInProgress, not all features are implemented yet. Some of them probably will never get fully supported due to hardware specific limitations.
- libvdpau >= 1.1
- libcedrus (https://github.com/linux-sunxi/libcedrus)
- pixman (http://www.pixman.org)
$ make
$ make install
$ export VDPAU_DRIVER=sunxi
$ mpv --vo=vdpau --hwdec=vdpau --hwdec-codecs=all [filename]
Note: Make sure that you have write access to both /dev/disp
and /dev/cedar_dev
OSD support is available either
- via G2D mixer processor (hardware accelerated) on A10/A20 or
- via pixman (CPU/Neon based) on H3/A33/A80/A64.
To enable OSD support for e.g. subtitles or GUI, set VDPAU_OSD environment variable to 1:
$ export VDPAU_OSD=1
To disable G2D mixer processor usage (for debugging purposes and forcing pixman usage on A10/A20), set VDPAU_DISABLE_G2D environment variable to 1:
$ export VDPAU_DISABLE_G2D=1
If using G2D (A10/A20), make sure to have write access to /dev/g2d
.
Because X video driver is baypassed and own disp layers are directly used, physical screen number must be specified using VDPAU_SCREEN env var. If VDPAU_SCREEN is not specified, the same screen number than the one used by the X server will be used.
This is enough for the most common Xorg configurations:
- 1 screen: Xorg screen 0 is physical screen 0
- 2 screens: Xorg screen 0 is physical screen 0 and Xorg screen 1 is physical screen 1.
If your Xorg configuration is different, you must set VDPAU_SCREEN env var to 0 or 1 (even if using extended desktop configurations, see limitations below).
- Output bypasses X video driver by opening own disp layers. You can't use Xv from fbturbo at the same time, and on H3 the video is always on top and can't be overlapped by other windows.
- OSD partly breaks X11 integration due to hardware limitations. The video area can't be overlapped by other windows. For fullscreen use this is no problem.
- There is no [OpenGL interoperation feature] (https://www.opengl.org/registry/specs/NV/vdpau_interop.txt) because we are on ARM and only have OpenGL/ES available.
- VDPAU_SCREEN must be specified if Xorg screen numbers doesn't match physical screen numbers. Also if video is played in second monitor when using a extended desktop configuration (such as Xinerama). In this case, video can't be played partially in one monitor and partially in the other.