di  -  giovedì 4 giugno 2009

Parlando con amici e colleghi della riproduzione video su personal computer ho riscontrato più volte che, anche per gli appassionati, il concetto di video renderer è per lo più sconosciuto e, di fronte alla scelta che alcuni software di riproduzione consentono di compiere, si sceglie quello che capita.

Approfitto, quindi, di questo spazio nella rubrica Multimedia & dintorni per mettere ordine nel caos dei video renderer al quale mamma Microsoft ci ha sottoposto nel corso degli anni. Nell’intricato mondo dell’API DirectShow, il framework multimediale proposto da Microsoft allo scopo di consentire agli sviluppatori software di trattare ed elaborare uno stream di dati audio/video, i renderer rappresentano l’ultima parte del percorso di elaborazione cui sottoporre il proprio file multimediale.

Normalmente un percorso di calcolo DirectShow prevede tre tipi di filtri: Source filter, che ha il compito di leggere lo stream di dati multimediali (è il caso dei vari splitter, cioè i lettori dei formati di file), Transform filter, rappresentati essenzialmente dai codec che compiono la decodifica audio/video (H264, Mpeg2, MP3, AAC, ecc…), e Renderer filter. Questi ultimi possono essere audio o video a seconda della tipologia di stream di dati trattati.

Le versioni del DirectShow antecedenti alla 6.0, siamo nell’epoca di Windows 95, proponevano un video renderer chiamato con molta fantasia proprio Video Renderer. Il suo funzionamento si basava essenzialmente sul rendering del flusso video attraverso il DirectDraw.

A quei tempi il concetto di accelerazione in hardware della riproduzione video era ancora molto acerbo ed infatti la riproduzione video attraverso il Video Renderer finiva con il poggiarsi direttamente sulle API GDI di Windows la cui accelerazione in hardware era nulla. Il risultato era una visualizzazione fortemente dipendente dalla potenza di calcolo della CPU con tutto ciò che ne conseguiva per i possessori di processori meno prestanti: frame persi, fluidità a tratti e quant’altro.

Per sollevare la CPU dal compito di eseguire il rendering dei flussi video, il DirectShow 6.0 introdusse l’Overlay Mixer renderer. Il concetto alla base di questo video renderer è di proiettare direttamente nella memoria della scheda video il flusso video da visualizzare. Tale scopo fu raggiunto introducendo nelle schede video un componente hardware dedicato ad eseguire tale operazione.

Utilizzando un supporto hardware specifico, l’Overlay Mixer raggiunse pienamente l’obiettivo di ridurre al minimo l’occupazione della CPU per quanto concerne le operazioni di rendering del flusso video e rappresenta ad oggi ancora la modalità computazionalmente meno costosa limitatamente a tale operazione. Tuttavia l’Overlay Mixer introdusse anche una serie di limitazioni che all’epoca non ebbero molta risonanza a causa dell’uso limitato dei personal computer per le applicazioni multimediali.

La limitazione maggiore è legata al numero di Overlay Mixer in hardware delle schede video. Nella maggioranza dei casi, infatti, le schede video avevano un solo mixer hardware il che limitava non solo il numero massimo di video visualizzabili contemporaneamente a uno, ma solo una delle due (o più) uscite della scheda video potevano utilizzarlo. Non capita di rado ancora oggi di assistere ad una presentazione nella quale il notebook è collegato ad un videoproiettore utilizzando l’uscita video secondaria e, per questo motivo, al posto di visionare il filmato la platea assiste ad un bel rettangolo nero. Un ulteriore limite dell’Overlay Mixer renderer è quello di rendere a dir poco impossibile effettuare screenshot di un filmato perché la regione di schermo nella quale ricade il video è trattata da hardware dedicato che invia direttamente i dati all’uscita video, senza ricadere nel classico rendering via GDI o DirectDraw.

Con Windows XP, il primo sistema operativo Microsoft dedicato agli home user e basato sul kernel NT, fu esplicita la volontà della casa di Redmond di abbattere le limitazioni dell’Overlay Mixer renderer, introducendo il Video Mixer Renderer 7 (VMR 7), parte delle API DirectShow 7. Questo nuovo renderer non si poggiava più sull’hardware dedicato dell’Overlay Mixer, ma offriva un percorso simile a quello del primo Video Renderer, con, però, l’obbligo di basare il rendering video sul DirectDraw e non sulle GDI, consci del fatto che la maggioranza delle schede video offrivano un’accelerazione in hardware del DirectDraw molto più efficace di quanto possibile con le GDI. Inoltre il VMR 7 consentiva di eseguire il mixing di più stream video tra loro, dando la possibilità di introdurre, ad esempio, uno stream video dedicato ai sottotitoli.

Con il rilascio delle DirectX 9, Microsoft presenta anche il suo nuovo Video Mixer Renderer 9 che, contrariamente alla versione precedente, non si poggia più sul DirectDraw, bensì sul Direct3D 9. Nonostante il VMR 9 non fosse la modalità predefinita in Windows Media Player, divenne la preferita perché grazie alla sua associazione con il Direct3D 9 consentì ai produttori di schede video di avvalersi delle capacità di pixel shading dei loro processori grafici per eseguire la decodifica ed il post-processing.

In realtà l’accelerazione in hardware della riproduzione video (che si poggia sull’API DXVA) fu estesa anche al renderer Overlay Mixer per garantire la retrocompatibilità con i software di riproduzione più datati. Nonostante tutto, il VMR 9 resta il renderer più avanzato disponibile sotto Windows XP ed è l’unico a garantire, scheda video permettendo, la piena accelerazione in hardware della riproduzione video senza le limitazioni dell’Overlay Mixer.

In questo percorso evolutivo un aspetto che sicuramente alcuni avranno notato è la quantità notevole di API introdotte per eseguire sempre la stessa operazione. Il risultato è che in Windows XP esistono ben quattro differenti modalità per eseguire il video renderer, ognuna delle quali si poggia su API distinte: GDI, overlay mixer, DirectDraw e Direct3D.

Quando si tratta di migliorare qualcosa in informatica esiste spesso sia un approccio evolutivo, che un approccio rivoluzionario. Non nego che spesso il sottoscritto preferisca il secondo perché evolvere più volte conservando la retrocompatibilità porta inevitabilmente a scelte di compromesso che limitano l’orizzonte di innovazione ed introducono spesso confusione. In tal senso mi trovo d’accordo con Microsoft che ha colto al balzo l’occasione di ristrutturare profondamente la riproduzione multimediale con l’arrivo del pluricriticato Windows Vista.

Con il nuovo sistema operativo, infatti, Microsoft abbandona lo sviluppo dell’API DirectShow in favore del framework multimediale Media Foundation, assieme al quale debutta il nuovo Enhanced Video Renderer (EVR) e la versione 2.0 dell’API DXVA.  L’EVR si poggia sul Direct3D ed ha funzionalità analoghe al VMR 9, alle quali aggiunge altre caratteristiche proprie di Windows Vista come il nuovo Multimedia Class Scheduler Service, un gestore dei thread dedicato alla riproduzione multimediale che assicura un timing molto più preciso e ad elevata priorità.

Il DXVA 2.0 garantisce una maggiore flessibilità nella programmazione delle operazioni accelerate in hardware dalla scheda video e può essere richiamato direttamente dai codec senza passare attraverso il video renderer. L’intero nuovo ecosistema per la riproduzione multimediale è disponibile solo in Windows Vista e richiede driver video WDDM compatibili con l’API DXVA 2.0 e l’EVR. Nel complesso, quindi, si può affermare che solo con l’ultimo sistema operativo Microsoft è stato raggiunto l’obiettivo di definire un’API per la riproduzione multimediale che possa facilmente avvalersi della potenza delle GPU senza particolari limitazioni.

10 Commenti »

I commenti inseriti dai lettori di AppuntiDigitali non sono oggetto di moderazione preventiva, ma solo di eventuale filtro antispam. Qualora si ravvisi un contenuto non consono (offensivo o diffamatorio) si prega di contattare l'amministrazione di Appunti Digitali all'indirizzo info@appuntidigitali.it, specificando quale sia il commento in oggetto.

  • # 1
    Nenco
     scrive: 

    madVR é il renderer con la migliore qualità, se avete un htpc è praticamente obbligatorio!

  • # 2
    densou
     scrive: 

    il nocciolo della questione: installare robaccia come Codec Pack oramai non serve più sul parco macchine disponibile – tutto supporta DXVA a dovere (tramite Avivo, Purevideo, o quant’altro – inclusa la serie GMA 4000 di Intel)

    Semplicemente basta installare un riproduttore multimediale che implementa la possibilità di usare più GPU possibile e non serve pensare alle sole alternative commerciali (Cyberlink docet), basta guardarsi attorno ;)

    Mi riferisco alla sola questione ‘decoding’ sia ben chiaro.

  • # 3
    Jabberwock
     scrive: 

    Peccato che la mia ATI 3650 (e in generale con le ATI, AFAIK), usando DXVA, non si vedano bene i filmati HD con profilo High@L5.1!

  • # 4
    Overlay, VMR ed EVR: il caos dei video renderer - Appunti Digitali
     scrive: 

    […] a vedere articolo: Overlay, VMR ed EVR: il caos dei video renderer – Appunti Digitali Articoli correlati: LABORATORI DIGITALI: WebOS: il nuovo sistema operativo di […]

  • # 5
    v1
     scrive: 

    grazie, utilissimo!

  • # 6
    densou
     scrive: 

    usi Media Player Classic Home Cinema ?! Basta tenerlo aggiornarlo all’ultima SVN e relativi filtri.

    O hai avuto problemi di configurazione ? Anche per la miglior resa nella decodificazione devi installare l’AVIVO package oltre ai driver video & Catalyst Control Center.

    Esiste una utility chiamata DXVA Checker per sapere se hai qualcosa che non va con i tuoi driver installati. Controlla ;)

  • # 7
    Jabberwock
     scrive: 

    DXVA si attiva (MPC HC lo indica chiaramente nella barra di stato… ma, a parte questo, basta guardare l’occupazione della CPU per accorgersene), ma con quel tipo di video di cui parlavo si vedono una marea di artefatti, purtroppo!

    Un link che affronta il problema: http://tinyurl.com/de9cbq

  • # 8
    Kouta
     scrive: 

    @Nenco
    purtroppo madVR non supporta l’accellerazione DXVA nè mai la supporterà

    imo i migliori render restano VMR9 per xp con vga dx9
    VMR7 per schede dx7/8.1 e EVR per vista/7 con dx10.1

  • # 9
    Nenco
     scrive: 

    @Kouta
    Infatti non ho detto che supporta DXVA, ho solo detto che è il miglio renderer

  • # 10
    Raffaele Fanizzi (Autore del post)
     scrive: 

    In quanto renderer il DXVA c’entra poco in quanto si occupano solo di renderizzare a video. L’accelerazione DXVA ha lo scopo di accelerare in hardware le elaborazioni dei Transform Filter, cioè i decoder dei vari formati video. Se un renderer usa le DirectX 9 chiaramente sarà accelerato in hardware nel senso che usa l’hardware grafico per disegnare il flusso video, ma niente di più. madVR ha essenzialmente il vantaggio di supportare particolari modalità di scaling eseguite tutte via pixel shader a 16 bit per componente di colore.

Scrivi un commento!

Aggiungi il commento, oppure trackback dal tuo sito.

I commenti inseriti dai lettori di AppuntiDigitali non sono oggetto di moderazione preventiva, ma solo di eventuale filtro antispam. Qualora si ravvisi un contenuto non consono (offensivo o diffamatorio) si prega di contattare l'amministrazione di Appunti Digitali all'indirizzo info@appuntidigitali.it, specificando quale sia il commento in oggetto.