VDPAU
Contents
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.
- 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):
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.
Performance-wise, the 9400M from the Ion platform is known to be able to decode 1080 content (i or p is to be confirmed), so most cards should be able to. Cards with less shaders (only 8 vs. 16 for the 9400M) includes the Quadro FX 370M, Quadro NVS 130M, 9300M GS, 9200M GS, 9100M G and 8400M G, it's likely 1080p will not work on those cards. Not that this metric doesn't take core frequency into account, so YMMV : some entry-level cards with 16 shaders may also by unable to play 1080 content. Cards with only 16 shaders are numerous: 8400GT, 8500GT, G100, 8400GS, 8400M GS, 9300M G and 9500M G ; also Quadro FX 370, FX 360M, NVS 290, NVS 140M and NVS 135M.
Supported Drivers
Support started with version 180.06. Version 185 is available in 32bit and 64bit versions. Bugs are fixed with every new release.
MythTV Support
Trunk first supported VDPAU in November 2008.
What works?
- Deinterlacing (select "Advanced (2x, Hw)" for best results, if video card can handle it - many can't)
- OSD
- Color controls
What doesn't?
- Live TV with EPG (due to VDPAU not yet being able to decode more than one stream at once)
Issac Richards suggests making sure composite extension is disabled:
Section "Extensions" Option "Composite" "Disable" EndSection
MythTV 0.21-fixes and Ubuntu repository
Jean-Yves Avenard has posted a patch for MythTV 0.21-fixes that backports VDPAU from the development branch. He also provides a Ubuntu/Mythbuntu repository, including mplayer and the Nvidia drivers, for those running that distribution. Add to /etc/apt/sources.list:
deb http://www.avenard.org/files/ubuntu-repos jaunty release
you need to install the GPG signing key with:
wget http://www.avenard.org/files/ubuntu-repos/ubuntu-repos.key -O- -q | sudo apt-key add -
In addition to "aptitude safe-upgrade", the package nvidia-glx-180 needs to be installed to replace the earlier version of nvidia-glx-*.
Warning: Unlike the support in trunk that sees steady ongoing improvements, the backport is unsupported, unofficial, and only is updated as Avenard finds time and the inclination to do so. As he says, "please do not bother [the mythtv-dev mailing list], and do not lodge bugs in the mythtv TRAC system."
Display Profiles
Setup a display profile with:
decoder = nvidia vdpau acceleration video + osd renderers: vdpau
and a second recommended as a fallback:
decoder = ffmpeg (Standard) video + osd renderers: vdpau
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 (But PCI versions exist)
- 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.
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
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)
- Enable Extra Audio Buffering (same page)
- Disable Real-Time Priority (same page) 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"
AMD Powernow Kernel Module
If you are using the powernow kernel module with an AMD CPU and are having problems playing HD video with VDPAU (stuttering video or audio) then it maybe that your processor is causing a bottleneck. An 8300 chipset should be capable of running the Temporal x2 deinterlacer, if you are getting stuttering then this is likely to be the issue.
- Execute the following command as root to find the current clockspeed of your processor "cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq".
- If it reports back a value less than 1800000 then you need to set the minimum processor speed.
- Modify the MIN_SPEED line in /etc/sysconfig/cpuspeed (Fedora, maybe different for other distro's) -
### FREQUENCIES ### # NOTE: valid max/min frequencies for your cpu(s) can be found in # /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_frequencies # on systems that support frequency scaling (though only after the # appropriate drivers have been loaded via the cpuspeed initscript). # maximum speed to scale up to # default value: empty (use cpu reported maximum) MAX_SPEED= # minimum speed to scale down to # default value: empty (use cpu reported minimum) MIN_SPEED=1800000
External Links
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 | SVN Ver | 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% | |
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, 612 MHz GPU Clock) | 512mb | 180.29 | Temporal 2x HW | 0.21-fixes + patch r20005 | HDHomeRun (1080i+720p), FireWire (1080i+720p) | Retro | Retro | Ratpoison | 1080p | Yes | Pentium 4 3000 5% -10% | Temporal 2x/1x work great, albeit with slight stuttering when OSD displays; Advanced 2x/1x still stutter. Bob 2x works too, but pointless given Temporal 2x. |
GeForce 9300. Motherboard Asus P5N7A-VM | 256MB | 180.22 | One Field 1x HW | 0.21-fixes + patch | From disk (originally from pcHDTV HD-5500) | Mythbuntu | Mythbuntu | Xfce | 1080p | Yes | Intel(R) Core(TM)2 Duo CPU E7400 @ 2.80GHz 10% overall | Slight oddness on top line. Before VDPAU, CPU usage at .74. I am including complete load average, mythfrontend.real at 5-7%. |
GeForce 9200. Motherboard Jetway JNC62K | 512MB (shared) | 180.27 | One Field 1x HW | 0.21-fixes + Jean-Yves Avenard testing patches | SD MPEG-2 DVB, SD H.264, 720p H.264 sample videos | Mythbuntu | Mythbuntu | Xfce | 1080p | Yes | AMD Athlon 64 X2 4850e 2.5GHz 2-5% | No problems so far - before VDPAU, CPU usage at 80% and whirring fans. |
Quadro NVS 140M in a Lenovo T61 Laptop | 512MB (shared) | 180.29 | One Field 1x HW | 0.21-fixes + patches | SD MPEG-2, HD MPEG-2 720p and 1080i from either QAM tuner or Firewire Cable Box | Blue | Retro | Gnome | 1440x900 | Yes | Core 2 Duo T9300 2.5 GHz ~50% on one core | OSD sometimes fails to show. Before VDPAU, CPU usage was up to 90% on one core used by Myth and additional 20-30% used by X. |
9300 IGP (EVGA 113-YW-E115-TR) | 512mb | 180.29 (Debian experimental package -1) | Temporal 2x | r20207 trunk | OTA HD 1080i | Blue | Terra | fvwm | 1080p | Yes | Core 2 Duo E5200 2.5GHz <10% | Jerky playback w/ Advanced 2x on 1080i. Had to set 512MB GPU mem in BIOS to play 1080i at all. Using Advanced 2x w/o problems for 480i. |
GeForce 9300. Motherboard Asus P5N7A-VM | 512MB (Shared) | 180.51 | Temporal 2x HW | 0.21-fixes + patch | TechnoTrend Premium DVB-C 2300 on remote backend | Mythbuntu | Mythbuntu | Xfce | 720p | Yes | Intel(R) Core(TM)2 Duo CPU E5400 @ 2.50GHz CPU Load approx 5-7 %. | Advanced (2x, Hw) used for 720x576i SD, had to change to Temporal 2x HW to have smooth playback of 1080i |
GeForce 9400GT. Motherboard Gigabyte Intel G35 | 512MB (Dedicated) | 180.60 | Advanced 2X HW for SD, Temporal 2x HW for HD | 0.21-fixes + VDPAU patch | DVB-T on remote backend | Mythbuntu + Avenard repo | Mythbuntu | Xfce | 1080P | Yes | Intel(R) C2D CPU E8200 @ 2.66GHz CPU Load approx 4-5 %. | Advanced (2x, Hw) used for <= 720, Temporal 2x HW or Advanced 1X HW for > 720 |
GeForce 9400M. Motherboard Gigabyte GA-E7AUM-DS2H | 256MB (Shared) | 180.60 | Advanced 2X HW for SD, Temporal 2x HW for HD | 0.21-fixes + VDPAU patch | DVB-T on remote backend | Mythbuntu + Avenard repo | Mythbuntu | Xfce | 1080P | Yes | Intel(R) C2D CPU 8500 @ 3.16GHz CPU Load approx 4-5 %. | Advanced (2x, Hw) used for <= 720, Temporal 2x HW or Advanced 1X HW for > 720 |
GeForce 9400M. Apple macbook | 256MB (Shared) | 180.60 | Advanced 2X HW | 0.21-fixes + VDPAU patch | DVB-T on remote backend | Mythbuntu + Avenard repo | Mythbuntu | Xfce | 1280x800 | Yes | Intel(R) C2D CPU @ 2.4 GHz CPU Load approx 4-5 %. | Advanced (2x, Hw) for all content on laptop display |
GeForce 8600GT. Gigabyte Intel P35 | 256MB or 512MB (dedicated) | 180.60 | Advanced 2X HW | 0.21-fixes + VDPAU patch | DVB-T on remote backend | Mythbuntu + Avenard repo | Mythbuntu | Xfce | 1080p | Yes | Intel(R) C2D E8200 CPU @ 2.66 GHz CPU Load approx 4-5 %. | Advanced (2x, Hw) for all content. |
nvidia ion - GeForce 9400. Zotac IONITX-C | 512MB | 180.51 | Temporal 2X HW | 0.21-fixes + VDPAU patch (20549) | ATSC 720p & 1080i + HDPVR 720p | blootube | blootube | fluxbox | 720p | Yes | Atom(TM) CPU 230 @ 1.60GHz CPU Load approx 4-7 %. | Works great even w/ single core atom. No fans. 20W power draw. |
NVIDIA GeForce 8300 Motherboard ASUS M3N78 PRO | 512mb (shared) | 185.18.14 | Temporal 2x | trunk 20694M | BBC HD H.264 1080i 21Mb/s | blootube | Terra | KDE | 1920x1080 | Yes | Athlon 64 X2 5200 2.7Ghz 10-15% | Temporal 2x/1x work great, albeit with slight stuttering when OSD displays; Advanced 2x/1x still stutter. Bob 2x works too, but pointless given Temporal 2x. |