General
What is it
VDPAU (Video Decode and Presentation API for Unix) provides a large subset of PureVideo HD functionality for NVIDIA Linux, Solaris, and FreeBSD users. It in essence provides what PureVideo/DirectX Video Acceleration is on the Windows platform. In addition to updated NVIDIA binary drivers that support the API, extensive documentation is available.
Some highlights of VDPAU:
- Defines an API for GPU-accelerated decode of MPEG-1, MPEG-2, H.264, and VC-1 bitstreams.
- GT2xx and newer GPUs can additionally decode ASP (divx/xvid/mpeg4)
- Defines an API for post-processing of decoded video, including temporal and spatial deinterlacing, inverse telecine, and noise reduction.
- Defines an API for timestamp-based presentation of final video frames.
- Defines an API for compositing sub-picture, on-screen display, and other UI elements.
Note that VDPAU does not address content protection issues.
Some highlights/limitations of NVIDIA's current implementation:
- Supported on NVIDIA GPUs with the NVIDIA second generation video processors (see list further below)
- Currently, only one video stream can be decoded at a time; NVIDIA hopes to lift this restriction eventually.
Supported Cards
VDPAU is currently supported on the following NVIDIA GPUs (driver version 180.44). An up-to-date list is available at the Nvidia link given below under 'External Links'. Feature Set, when known, is reflected in parenthesis (). See more details regarding feature set capabilities here.
Desktop GPUs | Mobile GPUs | Motherboard GPUs | Professional GPUs |
---|---|---|---|
|
|
|
|
Rules of thumb: anything from before the 8xxx series is unsupported ; anything with the original G80 GPU (8800 GTX, 8800 Ultra, Quadro FX5600, the first 8800 GTS) is unsupported ; everything newer in the 8xxx, 9xxx and 2xx series should work if the driver supports the card.
Since video decoding is done in dedicated hardware, all supported cards have the same level of performance. Specifically, this means H.264 High 4.1, VC-1 Advanced 3, or MPEG-2 MP@HL at up to 40Mbps. Deinterlacing is performed within the shader hardware, so a more powerful card will be capable of more advanced filters at higher resolutions and framerates Increased memory bandwidth will also help. Detailed specs on shaders, memory bandwidth, etc. can be found at this GeForce Chipsets page. Just click on the link for the relevant chipset to see the details.(see User results table below for examples).
High Def 1080i De-interlacing capabilities On Each Card
GPU | None | One Field (1x) | Bob (2x) | Temporal (1x) | Temporal (2x) | Advanced (1x) | Advanced (2x) |
---|---|---|---|---|---|---|---|
Example | X | X | X | X | X | X | X |
8200 | X | X | X | (>= 512Mb) | (SD only) | (>= 512Mb) | (SD only) |
8400 PCI | X | X | X | ? | (SD only) | (SD only) | (SD only) |
8400 PCI-e | X | X | X | X | X | (SD only) | (SD only) |
8500 GT | X | X | X | X | X | X | - |
8600 GT | X | X | X | X | X | X | X |
9300 | X | X | X | X | X | X | (SD only) |
9400 | X | X | X | X | X | X | (SD only) |
9500 GT | X | X | X | X | X | X | X (occasional stutter, skip_chroma helps) |
9600 GT | X | X | X | X | X | X | X |
GT 210 | X | X | X | X | X | X | (SD only, maybe HD at PAL frame-rates) |
GT 220 | X | X | X | X | X | X | X |
GT 240 | X | X | X | X | X | X | X |
/* Should do all of the rest but I have not tried them.
Supported Drivers
Support started with version 180.06. Latest version available here 32bit and 64bit. Bugs are fixed with every new release.
MythTV Support
Fully supported in MythTV .22 and above
What works?
- Any codec support by VDPAU can be offloaded with the MythTV video player.
- Color OSD
- OSD Menus
- PiP
What doesn't?
- No known problems.
Enabling VDPAU in MythFrontend
Navigate to:
"Utilities -> Setup -> TV Settings -> Playback -> Playback Profiles (3/9)"
VDPAU Playback Profiles are automatically created in current versions.
- VDPAU High Quality: use Temporal Spatial 2X (Advanced 2X) for all content. To be used with nvidia cards >= 8600GT, >= 9500GT, GT120 or >= GT220
- VDPAU Normal: use Temporal 2X for HD content, and Temporal Spatial 2X (Advanced 2X) for SD content. To be used with nvidia cards >= 8400, >= 9300, GT110 or >= GT210
- VDPAU Slim: use Bob 2X with skip chroma option, with One Field as fall back, to be used with nvidia cards >= 8200 or when VDPAU Normal doesn't work for some reasons.
Profiles using 2X deinterlacers give better motion playback than 1X ones.
VDPAU filters
Add filters there:
"Utilities/Setup -> Setup -> TV Settings -> Playback -> Playback Profiles -> Custom Filters"
Some options will hurt performance, so don't enable unnecessarily.
This is a comma seperated list of options such as:
vdpauivtc, vdpauskipchroma, vdpaudenoise=0.5, vdpausharpen=1.0
- vdpaucolorspace
- Sets ITU BT601 and ITU BT709 (BT709 for HD videos and BT601 for SD) colour spaces, by default or automatically
- Why/when it should be used: always, used in MythTV default profiles
- Set as vdpaucolorspace=[auto|itu709|itu601]
- example: vdpaucolorspace=auto
- vdpaustudio
- Will prevent converting RGB studio (16-235) levels to RGB PC levels (0-255)
- Why/when it should be used: If you are using a TV/projector for playback: almost always. Set by default in default playback profiles
- Type: toggle
- Example: vdpaustudio
- vdpaubuffersize
- VDPAU video buffer size
- Why/when it should be used: If some H264 videos don't play properly
- The valid range is X to Y
- Example: vdpaubuffersize=14
- vdpauivtc
- Enabling VDPAU inverse telecine, requires Basic or Advanced deinterlacer
- Why/when it should be used: When playing telecined content.
- Type: toggle
- Example: vdpauivtc
- vdpauskipchroma
- Enabling Skip Chroma Deinterlace
- Why/when it should be used: It may help with lower-end graphic cards. This is the default for VDPAU Low quality profile
- Type: toggle
- Example: vdpauskipchroma
- vdpaudenoise
- VDPAU Denoise
- Why/when it should be used:
- Will hurt performance
- The valid range is 0.0 to 1.0, with 0.0 disabling it
- Example: vdpaudenoise=0.5
- vdpausharpen
- VDPAU Sharpen
- Why/when it should be used:
- Will hurt performance
- The valid range is -1.0 to 1.0, with 0.0 disabling it
- Example: vdpausharpen=0.7
- vdpauhqscaling
- enables High Quality scaling
- Why/when it should be used: If you have a VDPAU features C card (nVidia 210, 220)
- Type: toggle
- Example: vdpauhqscaling
Compiling MythTV with VDPAU
For Myth to support VDPAU it must be built in. MythTV's compilation script supports this. To enable it use the configure script and the --enable-vdpau option.
The following is an example of how to compile MythTV with VDPAU:
MythTV
./configure --prefix=/usr --enable-proc-opt --disable-joystick-menu \ --disable-firewire --disable-hdhomerun --disable-xvmcw --enable-xvmc-opengl \ --enable-vdpau --disable-directfb --enable-opengl-vsync
MythPlugins
./configure --prefix=/usr --enable-opengl --enable-mytharchive \ --disable-mythbrowser --disable-mythcontrols --disable-mythflix \ --enable-mythgallery --disable-mythgame --enable-mythmusic --disable-mythnews \ --disable-mythphone --enable-mythvideo --disable-mythweather \ --disable-mythzoneminder --disable-mythmovies
Caveats
- No AGP cards support this feature (PCI cards exist but lack the necessary bandwidth for non-VDPAU HD)
- Warning: Do not install the vdpau beta driver unless you intend to use an NVidia-based video cards exclusively thereafter. Merely installing the nvidia driver breaks digital playback on Intel (and probably any other) video/graphics cards. The nvidia installer *replaces* standard header files (/usr/include/glext.h, glext.h,glxext.h and glx.h) and library files (/usr/lib/libGLcore.so, libGL,so, libGLU.so and libGL.la), with nvidia specific versions which breaks OpenGL playback on other graphic cards. (The 180 series drivers do appear to be usable with non-vdpau capable nvidia GPUs (6200 etc.))
- If you wish to try an nvidia video board instead of your other video/graphic chipset, be careful. Make a mythconverg database backup, and note the SVN of your present working version. In addition, it would be wise to extract the NVidia pkg.run file (NVIDIA-LINUX....pkg.run -x) and make backups of the original files for which copies exist in the ../include/GL, ../lib and ../X11R6 folders. The package help states that the option '--no-opengl-headers' will skip installing the Nvidia OpenGL headers, however it appears that the other libraries will be replaced anyway. It also does not appear to be the case that the '--uninstall' option actually reverses the install, as the orginal files do not appear to be retained. This is a real time-killer ( and WAF killer) and may require a complete re-installation of the system if you wish to revert to a different family of GPU chip.
- Video profiles can not filter based on video format (only by resolution). So if you wanted to use VDPAU for H.264/HD-PVR and Xv for Mpeg2 this is not currently possible.
- Off loading to the GPU may increase its heat out-put. It may seem obvious, but check your GPU temperature and cooling arrangements.
- Many playback issues can be resolved by making sure enough memory has been allocated to the video card, 256MB is a bare minimum requirement and 512MB is strongly recommended. For on-board video this is usually configured via the "GPU Window" BIOS option.
Troubleshooting
Tearing of the OSD over a perfect video playback can be avoided by stopping playback, exiting playback, and re-starting playback of the stream. (No idea why this works..only that it does.)
To prevent vertical and horizontal tearing of the image when viewing live tv or recordings, run the following to disable X Composite Extension (may also cure the all white/gray OSD):
sudo nvidia-xconfig --no-composite
or with the following lines in /etc/X11/xorg.conf:
Section "Extensions" Option "Composite" "Disabled" EndSection
This may also help eliminate sporadic single-frame stuttering glitches (e.g. slight jerks in long panning shots or scrolling backgrounds).
The following configuration changes should be used to prevent issues with VDPAU when used with MythTV:
- Enable OpenGL VSync within MythTV at Setup -> TV Settings -Playback (Page 1) - This may no longer be required - I haved this disabled with no playback issues (Dave K - 05/10/2009)
- Enable Extra Audio Buffering (same page)
- Disable Real-Time Priority (same page) (or limits.conf) if you have intermittent playback freezes (playback stops for about 30 seconds,the computer is COMPLETELY unresponsive during this period and then playback resumes as is nothing had happened)
- Adding 'Option "TripleBuffer" "true"' to the Device section of xorg.conf (following the 'Driver nvidia' line) will allocate more memory buffers to 2D playback (and less to 3D).
Option "TripleBuffer" "True"
Artefacts
- If you have problems with Artefacts while playing, you can try to add "vdpaubuffersize=32" in the special filters on the Playback Settings Page!
CPU Frequency Scaling
If you are using CPU frequency scaling and are having problems playing HD video with VDPAU (stuttering video or audio) then it maybe that your processor is causing a bottleneck. Two known issues exist:
- Some AMD processors reduce the bus speed along with the CPU clock, at the lowest scaling level this may be enough to cause VDPAU problems in transferring data fast enough across the bus. One solution is to increase the minimum speed by changing the value in /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq, see sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies for a list of valid values. e.g. On for a CPU with a min speed of 1000Mhz you may need to bump the min speed to 1800Mhz.
As root:
echo 1800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
- If frequency scaling is still causing problems then it may be due to too high a threshold being set for frequency changes. Ubuntu for example uses a ridiculous threshold of 95% utilisation per core which is beyond what many userspace applications are even allowed to achieve at their priority level. So an application like MythTV would be choking and the ondemand governor would never increase the CPU frequency to cope. You should first check that your distribution has a reasonable value configured for the 'up threshold', what's reasonable will vary but 50% is a good place to start.
External Links
More info on VDPAU from NVIDIA
List of all NVIDIA chipsets and level of VDPAU support
Note: This list is dependent on the driver version. This currently points to the version 190.53 README file appendix. Newer versions of the driver may add other GPUs to the list and other capabilities.
No comments:
Post a Comment