Condividi tramite


Decodifica video

Il runtime di Microsoft Direct3D chiama le funzioni DecodeBeginFrame e DecodeEndFrame del driver di visualizzazione in modalità utente per indicare un periodo di tempo tra queste chiamate di funzione che il driver di visualizzazione in modalità utente può decodificare il video. Prima che il driver di visualizzazione in modalità utente possa eseguire qualsiasi operazione di decodifica video, il runtime di Microsoft Direct3D deve chiamare la funzione SetDecodeRenderTarget del driver di visualizzazione in modalità utente per impostare la superficie di destinazione di rendering per tali operazioni di decodifica. Tuttavia, la chiamata a SetDecodeRenderTarget può essere eseguita solo all'esterno del periodo di tempo di inizio e di fine.

In modalità protetta e nella chiamata a DecodeBeginFrame il runtime Direct3D imposta o modifica una chiave simmetrica directX VA in una variabile a cui punta il membro pPVPSetKey della struttura D3DDDIARG_DECODEBEGINFRAME . Il dispositivo di decodifica usa questa chiave per i trasferimenti protetti dei buffer DIRECTX VA compressi per questo e i frame successivi.

Nota Il runtime Direct3D imposta il puntatore pPVPSetKey solo per modificare o impostare la chiave. Per mantenere in uso la chiave impostata in precedenza, il runtime imposta il puntatore su NULL per evitare un potenziale consumo di tempo della stessa chiave. Il driver non elimina le impostazioni ridondanti. Un'applicazione decodificatore deve evitare impostazioni ridondanti.

Dopo aver impostato la superficie di destinazione di rendering per le operazioni di decodifica, il driver di visualizzazione in modalità utente può ricevere chiamate alla relativa funzione DecodeExecute per eseguire operazioni di decodifica video tra il periodo di tempo di inizio frame e di fine.

Nelle chiamate a DecodeExecute, non tutti i tipi di buffer specificati nei membri CompressedBufferType delle strutture DXVADDI_DECODEBUFFERDESC della matrice pCompressedBuffers della struttura D3DDDIARG_DECODEEXECUTE vengono usati per ogni GUID decodifica specificato dal membro hDecode di D3DDDIARG_DECODEEXECUTE. Ad esempio, i buffer slice-control (D3DDDIFMT_SLICECONTROLDATA), inverse-quantiization (D3DDDIFMT_INVERSEQUANTIZATIONDATA) e bit-stream (D3DDDIFMT_BITSTREAMDATA) sono necessari solo per l'elaborazione VLD (Variable-Length Decode) e il buffer di deblocking-control (D3DDDIFMT_DEBLOCKINGDATA) non viene usato affatto da MPEG-2.

In modalità protetta, i buffer crittografati per un trasferimento protetto con una chiave simmetrica contengono un puntatore ai valori dei contatori iniziali nei descrittori di buffer, ovvero nelle variabili a cui puntano i membri pCipherCounter delle strutture DXVADDI_DECODEBUFFERDESC . Ogni chiamata alla funzione DecodeExecute del driver di visualizzazione in modalità utente deve eseguire un trasferimento protetto di tali buffer nella memoria video locale prima che DecodeExecute usi i dati dei buffer nell'operazione di decodifica. Tuttavia, non esistono piani per crittografare i buffer compressi directX VA di tipi diversi dai tipi di differenza residua (D3DDDIFMT_RESIDUALDIFFERENCEDATA) e dai tipi di flusso di bit (D3DDDIFMT_BITSTREAMDATA).