Using nVidia VDPAU with Ubuntu 9.04

nvidia-logoTempo fa nVidia ha introdotto VDPAU (Video Decode and Presentation API for Unix), un set di API sviluppate per le sue schede video dalla serie 8 in poi, per poter fornire agli utenti unix in generale (i sitemi operativi supportati spaziano da Linux a FreeBSD passando per Solaris) capacità simili a quelle offerte da PureVideoHD in ambiente Windows.

Ma più precisamente cosa fanno queste API? In pratica permettono di demandare parte della decodifica video e del post-processing all’hardware della GPU con un drastico abbattimento del carico di lavoro sulla CPU. Al momento è possibile accelerare la decodifica dei filmanti codificati in MPEG-1, MPEG-2, MPEG-4 AVC (H.264), VC-1 e WMV3/WMV9.

Il software che supporta VDPAU include Xine, mPlayer, VLC , FFmpeg, MythTV e XBMC; inoltre nVidia ha sviluppato un backend per VA-API (Video Acceleration API, la libreria concorrente sviluppata da Intel) in modo che il software che supporta solo VA-API e non VDPAU venga accelerato comunque.

Installazione e configurazione

Occorre fare attenzione però al fatto che le GPU della serie 8 più vecchie non supportano questa libreria. Per sfruttare queste capacità è necessario avere almeno i driver nVidia per X11 dalla versione  180.06 in poi.

Un programmino molto comodo per vedere quali feature supporta la vostra VGA è vdpinfo, comoda utility che fornisce un output simile a quello di glxinfo ed affini, a quel sito è possibile scaricare i sorgenti, per compilarli è sufficiente avere installato la libreria nvidia-180-libvdpau-dev ed eseguire make. L’output fornito è simile al seguente…

paolomargara@merdbook:~/vdpinfo$ ./vdpinfo
display: :0.0   screen: 0
API version: 0
Information string: Unknown

Video surface:

name   width height types
-------------------------------------------
420     4096  4096  NV12 YV12
422     4096  4096  UYVY YUYV 

Decoder capabilities:

name          level macbs width height
------------------------------------
MPEG1             0  8192  2048  2048
MPEG2_SIMPLE      3  8192  2048  2048
MPEG2_MAIN        3  8192  2048  2048
H264_MAIN        41  8190  2032  2048
H264_HIGH        41  8190  2032  2048
VC1_SIMPLE        1  8190  2048  2048
VC1_MAIN          2  8190  2048  2048
VC1_ADVANCED      4  8190  2048  2048
...

…che ci permette di vedere quali sono i formati per cui è possibile sfruttare l’accelerazione della nostra VGA. Prima di eseguirlo abbiate cura di verificare che l’utente da voi utilizzato sia nel gruppo video, altrimenti non riuscirete ad accedere al device /dev/nvidiactl.

In questa parte del post vedremo come installare mPlayer col supporto VDPAU. Visto che, almeno in questo periodo, non ho intenzione di mettermi a ricompilarlo, per questa volta mi sono appoggiato a launchpad, dopo un po’ di navigazione ho trovato un package mainteiner  i cui pacchetti mi sono sembrati di qualità ed ho scaricato dal suo repository quanto necessario. Il suo repository è raggiungibile all’indirizzo https://launchpad.net/~brandonsnider/+archive/ppa

I passi richiesti per installare il tutto si possono riassumere con le seguenti righe di comando:

wget https://launchpad.net/~brandonsnider/+archive/ppa/+files/mplayer_1.0~rc3+svn20090410-0ubuntu20~ppa4_amd64.deb
wget https://launchpad.net/~brandonsnider/+archive/ppa/+files/smplayer-translations_0.6.7-0ubuntu1~ppa2_all.deb
wget https://launchpad.net/~brandonsnider/+archive/ppa/+files/smplayer_0.6.7-0ubuntu1~ppa2_amd64.deb
dpkg -i *.deb

Ora la versione di mPlayer che avete installato sulla vostra macchina vi permetterà di accelerare la decodifica dei filmati codificati in  Mpeg2, VC1, WMV3 e H264; da notare che si è installato anche un comodo front-end per mplayer.

Ora è solo necessario eseguire pochi semplici passi (che lo stesso package mainteiner ci illustra) per abilitare l’accelerazione VDPAU nel video player appena installato.

Una volta avviato smplayer cliccate su  Options>Preferences e eliminate ogni percorso per memorizzare gli screenshot, passare al tab Video e cambiare l’output driver in VDPAU. Infine cliccate su Advanced>Options for Mplayer e nell’Options box inserite  -vc ffmpeg12vdpau,ffh264vdpau,ffwmv3vdpau,ffvc1vdpau, avendo cura di lascire la virgola finale. Infine disabilitate il Post-Processing ed il multithreading.

Tenete presente che se volete utilizzare mPlayer a riga di comando potete digitare…

mplayer -vo help

…per verificare di avere il supporto VDPAU abilitato e…

mplayer -vo vdpau -vc ffmpeg12vdpau,ffh264vdpau,ffwmv3vdpau,ffvc1vdpau, $filmato

…per vedere un $filmanto qualsiasi.

Analisi di prestazioni

Tuttavia ciò che mi sono chiesto non appena installato tutto quanto è necessario per sfruttare VDPAU è: ma dopo tutto questo di quanto viene sgravata la CPU?

Così ho eseguito un paio di test, la macchina su cui sono stati eseguiti è un MacBook unibody late 2008 equipaggiato con un processore Intel Core2 Duo P7350 a 2.00GHz e 2GB di memoria RAM, ci tengo a precisare che la VGA (una 9400m) non ha memoria dedicata ma bensì condivisa con quella di sistema. Il test è stato eseguito campionando ogni secondo la percentuale di utilizzo di CPU e memoria, mPlayer è stato eseguito a riga di comando come indicato precedentemente.

Ho eseguito due test con e senza VDPAU abilitata.

Nel primo caso si tratta del trailer di Serenity, scaricato dal sito h264info,  nel formato 720p (equivalente a HDready), nel test eseguito senza VDPAU la percentuale di utilizzo della CPU si attesta attorno ad una media del 40% mentre nel caso con VDPAU attivato il risultato è stato di un utilizzo attorno al 2.2%, non male il miglioramento riscontrato è di circa 18 volte!!!

Riguardo l’uso della memoria di sistema non ho diagrammato il risultato, l’andamento dell’utilizzo si attestava attorno al 2% nel caso senza VDPAU e attorno al 1.1% nel caso con VDPAU.

Grafico 1

Grafico 1

Successivamente si è eseguita la prova con un trailer nel formato 1080p (equivalente al FullHD), in questo caso si tratta del trailer di Transformer – revenge of the fallen, nel test eseguito senza VDPAU la percentuale di utilizzo della CPU si attesta attorno ad una media del 56% con picchi ben oltre il 67% mentre nel caso con VDPAU attivato il risultato è stato di un utilizzo attorno al 3.5%, non male il miglioramento riscontrato è di circa 16 volte!!!

Riguardo l’uso della memoria di sistema non ho diagrammato il risultato, l’andamento dell’utilizzo si attestava attorno al 2.1% nel caso senza VDPAU e attorno al 1.6% nel caso con VDPAU.

Grafico 2

Grafico 2

Che dire? Il miglioramento è netto e non lascia spiraglio a discussioni. Con una scheda video nVidia col supporto sia hardware che software a VDPAU è possibile visionare filmati ad altissima definizione anche con processori molto poco potenti, a questo punto pare chiaro il perchè nVidia sta spingendo sulla piattaforma ION che a questo punto pare essere il candidato perfetto per un mediacenter a bassisimo consumo ma dall’elevata flessibilità.

Related post:

3 Comments

  1. Becuc says:

    Grazie per la guida Nvidia/VDPAU, ho appena comprato un Acer Revo (Atom+ION) ed ero contretto ad usare XBMC per gli .mkv …fino ad ora.

    Grazie davvero!

  2. giacomo says:

    grazie mille
    fantastico!
    la mia cpu ringrazia 😀

  3. Nicola says:

    Grazie Paolo,

    come al solito è sempre un piacere leggere gli articoli nel tuo blog, davvero stimolanti.

    Peccato che la mia vecchia Fx 5700 non possa sfruttare queste funzionalità dei nuovi driver, il mio Athlon64 3000+ ringrazierebbe. 🙁