Decodificação de vídeo
O runtime do Microsoft Direct3D chama as funções DecodeBeginFrame e DecodeEndFrame do driver de exibição do modo de usuário para indicar um período de tempo entre essas chamadas de função que o driver de exibição do modo de usuário pode decodificar o vídeo. Antes que o driver de exibição do modo de usuário possa executar qualquer operação de decodificação de vídeo, o runtime do Microsoft Direct3D deve chamar a função SetDecodeRenderTarget do driver de exibição do modo de usuário para definir a superfície de destino de renderização para essas operações de decodificação. No entanto, a chamada para SetDecodeRenderTarget só pode ocorrer fora do período de início e de fim do período.
No modo protegido e na chamada para DecodeBeginFrame, o runtime do Direct3D define ou altera uma chave de conteúdo do DirectX VA em uma variável para a qual o membro pPVPSetKey da estrutura D3DDDIARG_DECODEBEGINFRAME aponta. O dispositivo decodificado usa essa chave para transferências protegidas dos buffers de VA DirectX compactados para esse e os quadros subsequentes.
Nota O runtime do Direct3D define o ponteiro pPVPSetKey apenas para alterar ou definir a chave. Para manter a chave definida anteriormente em uso, o runtime define o ponteiro como NULL para evitar o recarregamento potencialmente demorado da mesma chave. O driver não elimina as configurações redundantes. Um aplicativo de decodificador deve evitar configurações redundantes.
Depois que a superfície de destino de renderização para operações de decodificação for definida, o driver de exibição do modo de usuário poderá receber chamadas para sua função DecodeExecute para executar operações de decodificação de vídeo entre o período de tempo de início e de fim.
Em chamadas para DecodeExecute, nem todos os tipos de buffer especificados nos membros CompressedBufferType das estruturas DXVADDI_DECODEBUFFERDESC da matriz pCompressedBuffers da estrutura D3DDDIARG_DECODEEXECUTE são usados para cada GUID de decodificação especificado pelo membro hDecode do D3DDDIARG_DECODEEXECUTE. Por exemplo, os buffers de controle de fatia (D3DDDIFMT_SLICECONTROLDATA), de quantização inversa (D3DDDIFMT_INVERSEQUANTIZATIONDATA) e de fluxo de bits (D3DDDIFMT_BITSTREAMDATA) são necessários apenas para processamento de VLD (decodificação de comprimento variável) e o buffer de controle de desbloqueio (D3DDDIFMT_DEBLOCKINGDATA) não é usado pelo MPEG-2.
No modo protegido, os buffers que foram criptografados para uma transferência protegida com uma chave de conteúdo contêm um ponteiro para valores de contador iniciais em seus descritores de buffer (ou seja, em variáveis para as quais os membros pCipherCounter do DXVADDI_DECODEBUFFERDESC estruturas apontam). Cada chamada para a função DecodeExecute do driver de exibição do modo de usuário deve executar uma transferência protegida desses buffers para a memória de vídeo local antes que DecodeExecute use os dados dos buffers na operação de decodificação. No entanto, não existem planos para criptografar buffers compactados do DirectX VA de tipos diferentes dos tipos de diferença residual (D3DDDIFMT_RESIDUALDIFFERENCEDATA) e de fluxo de bits (D3DDDIFMT_BITSTREAMDATA).