Difference between revisions of "VDPAU"

From MythTV Official Wiki
Jump to: navigation, search
(External Links)
(Added xorg lines to disable Composite)
Line 270: Line 270:
 
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):
 
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
 
     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).
 
This may also help eliminate sporadic single-frame ''stuttering'' glitches (e.g. slight jerks in long panning shots or scrolling backgrounds).
  

Revision as of 21:29, 11 January 2010

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

Desktop GPUs Mobile GPUs Motherboard GPUs Professional GPUs
  • GeForce Go 7700
  • GeForce 200 Series
  • GeForce 9 Series
  • GeForce 8300 GS
  • GeForce 84xx Series
  • GeForce 85xx Series
  • GeForce 86xx Series
  • GeForce 8800 GTS 512
  • GeForce 8800 GT
  • GeForce 8800 GS
  • GeForce 9500 GT
  • GeForce 9800 GT
  • GeForce 96xxM
  • GeForce 8200M G
  • GeForce 8800M
  • GeForce 8800M GTS
  • GeForce 8800M GTX
  • GeForce 8600M
  • GeForce 8400M
  • GeForce 9200M
  • GeForce 9300M
  • GeForce 9400M
  • GeForce 9500M
  • GeForce 9650M GT
  • GeForce 9700M
  • GeForce 9700M GT
  • GeForce 98xxM
  • GeForce 9800M GTX
  • GeForce 9800M GT
  • GeForce 9800M GS
  • Quadro NVS 140M
  • GeForce 8200
  • GeForce 8300
  • GeForce 9100
  • GeForce 9300
  • GeForce 9400
  • Quadro FX 370 LP
  • Quadro NVS 450
  • Quadro FX 470
  • Quadro FX 2700M
  • Quadro FX 4800
  • Quadro FX 5800
  • Quadro CX

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 (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 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
210 X X X X X X (SD only, maybe HD at PAL frame-rates)
GT 220 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.

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)
  • 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 minimum requirement and most results suggest 512MB is adequate. 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) 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"


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

NVIDIA Linux Forum

More info on VDPAU from NVIDIA

List of all NVIDIA chipsets and level of VDPAU support

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 works well only with SD video. 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 8200 Motherboard ASUS M3N78-VM 512MB (Shared) 190.18.03 Bob 2x trunk 21145 HD-PVR 1080i + 720p blootube blootube KDE 1080p Yes Athlon 64 X2 6000 3.0GHz 1-3% No tearing. Audio stuttering with Advanced 2x/1x. Box 2x works.
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.
NVIDIA GeForce 9500GT Motherboard Gigabyte GA-M571SL1-S4 512mb 180.51.1.fc10.8 Advanced 2x HW trunk 21075 HD-PVR Comcast max variable bitrate retro retro Gnome 1080i Yes Athlon X2 5200+ 2.7GHz 8%-10% Minimal tearing, some recent xorg.conf tweaks (reported in users list) will hopefully fix this.