Condividi tramite


Sincronizzazione delle operazioni di decodifica video

Il meccanismo di sincronizzazione per DirectX VA 2.0 è stato migliorato rispetto alla versione 1.0 ed è più simile ai meccanismi di sincronizzazione usati dalle operazioni di Microsoft Direct3D.

In DirectX VA 1.0 la sincronizzazione viene eseguita principalmente dal decodificatore. Prima che il decodificatore possa usare un buffer compresso, chiama la funzione DdMoCompQueryStatus per determinare se il buffer è disponibile per l'uso, ovvero l'hardware non accede al buffer. Se il buffer non è disponibile, il decodificatore deve sospendere, eseguire il polling o eseguire un'altra operazione.

DirectX VA 2.0 usa il modello di sincronizzazione già usato da Direct3D nei vertex buffer e nei buffer di indice. In DirectX VA 2.0 la sincronizzazione viene eseguita dal decodificatore che blocca il buffer compresso. Se il driver di visualizzazione in modalità utente tenta di bloccare il buffer compresso e il buffer è in uso, il driver può non riuscire il blocco o rinominare il buffer. Il driver di visualizzazione in modalità utente richiede che gestione memoria video rinomina il buffer quando il driver imposta il membro Discard della struttura D3DDDICB_LOCKFLAGS in una chiamata alla funzione pfnLockCb . Se il driver di visualizzazione in modalità utente rinomina il buffer, il driver restituisce un puntatore a un buffer alternativo in modo che il decodificatore possa continuare senza essere bloccato.

In genere, per DirectX VA 2.0, la sincronizzazione è solo un problema se l'hardware può utilizzare direttamente i buffer compressi senza copie del buffer aggiuntive.