General

What is it

VDPAU (Video Decode and Presentation API for Unix) lets Nvidia cards play video with hardware acceleration. It lets any Linux, Solaris, and FreeBSD system play files, including highly complex H.264 formats produced by the Hauppauge HD-PVR, that would otherwise require a high-end multicore CPU.

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 (A/B/C). See more details regarding feature set capabilities here and the nvidia driver readme Appendix A. Supported NVIDIA GPU Products

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).

Card status

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 (G86)

X

X

X

X (tearing at 1080i)

X (choppy at 1080i)

(SD only)

(SD only)

8400 PCI-e (G98)

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)

GT 220

X

X

X

X

X

X

X

GT 240

X

X

X

X

X

X

X

GT 430

X

X

X

X

X

X

X

GT 520

X

X

X

X

X

X

(SD only, maybe HD at PAL frame-rates)

Should do all of the rest but I have not tried them.

Supported Drivers

Support started with version 180.06. Latest version available at NVIDIA's website. Bugs are fixed with every new release.

MythTV Support

Fully supported in MythTV 0.22 and above

What works?

Any codec support by VDPAU can be offloaded with the MythTV video player.

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 revision 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.

In MythTV, it is not possible to configure video playback profiles to filter based on video format (only by resolution). So it is not currently possible to use VDPAU for H.264/HD-PVR and Xv for Mpeg2.

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

The following configuration changes should be used to prevent issues with VDPAU when used with MythTV:

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"

Tearing/Stuttering

Disabling the Composite Extension

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" "Disable"
EndSection

This may also help eliminate sporadic single-frame stuttering glitches (e.g. slight jerks in long panning shots or scrolling backgrounds).

GPU Power Management

Another common problem is the "adaptive clocking" PowerMizer capability of some NVidia cards: if this is active, frames will occasionally be dropped as the clock rate is adjusted. To switch to performance mode temporarily, use the nvidia-settings application in interactive mode to set "Preferred Mode" to "Prefer Maximum Performance" under each GPU's "PowerMizer" page.

NOTE: YOU MUST REBOOT YOUR SYSTEM AND HAVE POWERMIZER DISABLED, AS DESCRIBED BELOW, TO CORRECT ANY PROBLEMS CREATED BY RUNNING POWERMIZER.

Unfortunately, due to a bug in recent versions of nvidia-settings, this setting may not be preserved across reboots: in order to switch to performance mode automatically, you may need to create a script that executes:

nvidia-settings -a '[gpu:0]/GPUPowerMizerMode=1'

for each GPU (in this case, for GPU 0). Note that this must be done after X starts: if you use GDM to manage your console logins, /etc/gdm/Init/Default may be a good place to put this. Confirm the setting by running:

nvidia-settings -q '[gpu:0]/GPUPowerMizerMode'

after the following reboot.

Artifacts

Adding "vdpaubuffersize=32" (or higher: eg. 42 works well for the Zotac HD-ID11 box) in the list of filters in Playback Settings may help with artifacts during playback. Remove this filter if running on 0.25 or later.

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.

intel_idle Power Management

You may be seeing a problem with intel_idle if you are using an Atom- or i3/5/7-based system (e.g., the Zotac MAG): this driver causes occasional stuttering when power management is enabled. You can disable this by adding

intel_idle.max_cstate=0

to your boot options (e.g., to GRUB_CMDLINE_LINUX in /etc/default/grub, followed by executing update-grub). After rebooting, confirm that power management has been disabled:

$ cat /proc/acpi/processor/CPU0/info | grep power
power management: no

Disabling intel_idle power management actually results in power management falling back to ACPI, which does not appear to have the same stuttering issue.

User results

Note: Reports on 1080i content are of greatest interest for deinterlacers. Do not list a deinterlacer if testing on progressive content like 720p. If reports for 720p and 1080i differ (as they will if using a deinterlacer) consider making two entries or indicating the difference in your success/fail results.

Chipset

Onboard / Allocated Memory

Driver

De-interlacer

Version

Source

OSD

Theme

Window Manager

Display res

Working

CPU Usage when playing

Comments

8200 IGP

512mb

180.29

Temporal 2x

r20038 trunk

BBC HD H.264 1080i 21Mb/s

Metallurgy

Terra

KWin

1440x900

Yes

Athlon 4850e 2.5Ghz 10-15%

Some amount of tearing. Visual artifacts for the first 20 seconds.

8200 IGP

512mb

180.29

Temporal 2x

r20038 trunk

HD-DVD VC-1 1080p 35Mb/s

Metallurgy

Terra

KWin

1440x900

Yes

Athlon 4850e 2.5Ghz 35%

8200 IGP - Asus M3N78-VM

512mb

256.35

Temporal 1x

0.23-fixes 25260

HD-PVR h.264 1080i 14Mb/s

BlackCurves

Mythbuntu

Gnome

1152x720

Yes

Athlon 64 X2 4800+ 7%

vdpaubuffersize=64,vdpauskipchroma

Sparkle SFPC84GS512U2LP GeForce 8400 GS PCI

512mb

180.35

Temporal 1x HW

0.21-fixes w/patch

OTA 720p and 1080i

Retro

Retro

fluxbox

VGA (analog) 1280x1024

Yes

AMD Geode NX1750 (1.4 Ghz), ~30%

Looks super, OSD set to non-fade. Bob 2x is *almost* useable as is Temporal 2x HW. One field also works well.

Asus EN8400GS Silent PCIe (G98 chipset, 567 MHz Core Clock)

512mb

180.29

Temporal 1x HW

0.21-fixes w/VDPAU patch

OTA HDTV (1080i & 720p)

Retro

Retro

Fluxbox

1080p

Yes

AMD BE-2350 (2.1 GHz) 2% - 5%

Temporal 1x HW and One Field are the only deinterlacers that don't cause jerky picture and out of sync audio. All h264 test files from HD Playback Reports are nice and smooth.

Asus EN8400GS Silent PCIe (G98 chipset, 500MHz Core/333Mhz Mem)

256mb

180.53

Temporal 1x HW

0.22

OTA HDTV (1080i & 720p)

default

default

mwm

1080p

Yes

Pentium-D (3.4 GHz) 2% - 5%

Temporal 1x HW and Bob deinterlacers work ok. Temporal 1x HW is a little jerky on some stations. H.264 1080p files play perfect

External Links

Note: This list is dependent on the driver version. This currently points to the version 260.19.36 README file appendix. Newer versions of the driver may add other GPUs to the list and other capabilities.