Considerações sobre programação DDI DXVA-HD
Esta seção se aplica somente ao Windows 7 e posterior e ao Windows Server 2008 R2 e versões posteriores do sistema operacional Windows.
Ao implementar o DDI DXVA-HD no driver de exibição do modo de usuário, considere as seguintes dicas de programação:
O driver deve definir o bit D3DCAPS3_DXVAHD (0x00000400L) no membro Caps3 da estrutura D3DCAPS9 para indicar que ele dá suporte ao DDI DXVA-HD, caso contrário, o runtime do Direct3D não chamará a função CreateVideoProcessor para criar um dispositivo DXVA-HD. A estrutura D3DCAPS9 é descrita na documentação do SDK do DirectX 9.0. O driver define o bit D3DCAPS3_DXVAHD em resposta a uma chamada para sua função GetCaps na qual o valor D3DDDICAPS_GETD3D9CAPS é definido no membro Type da estrutura D3DDDIARG_GETCAPS para a qual o parâmetro pData aponta.
O valor DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE da enumeração de DXVAHD_SURFACE_TYPE no nível do aplicativo não tem nenhum valor DDI correspondente. Um aplicativo define o valor DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE para uma superfície simples fora da tela alocada em um tipo de formato diferente para a CPU ou um plug-in de processador de vídeo base de sombreador.
O valor DXVAHD_SURFACE_TYPE_VIDEO_OUTPUT da enumeração DXVAHD_SURFACE_TYPE no nível do aplicativo corresponde ao sinalizador de campo de bits VideoProcessRenderTarget da estrutura D3DDDI_RESOURCEFLAGS . O runtime do Direct3D define VideoProcessRenderTarget no membro Flags da estrutura D3DDDIARG_CREATERESOURCE quando o runtime chama a função CreateResource do driver para criar um destino de renderização de processamento de vídeo.
O runtime do Direct3D mantém os estados de transferência de bloco de bits (bitblt) e de fluxo. O runtime retorna ao aplicativo quando o runtime é consultado.
O método IDXVAHD_VideoProcessor::GetVideoProcessBltState no nível do aplicativo não tem nenhuma função DDI correspondente. No entanto, quando um aplicativo chama IDXVAHD_VideoProcessor::GetVideoProcessBltState para recuperar os dados de estado bitblt privados de um processador de vídeo, o runtime do Direct3D chama a função GetVideoProcessBltStatePrivate do driver.
O método IDXVAHD_VideoProcessor::GetVideoProcessStreamState no nível do aplicativo não tem nenhuma função DDI correspondente. No entanto, quando um aplicativo chama IDXVAHD_VideoProcessor::GetVideoProcessBltState para recuperar os dados de estado do fluxo privado para um processador de vídeo, o runtime do Direct3D chama a função GetVideoProcessStreamStatePrivate do driver.
O valor DXVAHD_STREAM_STATE_D3DFORMAT da enumeração DXVAHD_STREAM_STATE no nível do aplicativo não tem nenhum valor DDI correspondente na enumeração DXVAHDDDI_STREAM_STATE . O plug-in do processador de vídeo usa o valor DXVAHD_STREAM_STATE_D3DFORMAT para uma superfície alocada com o valor DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE da enumeração de DXVAHD_SURFACE_TYPE no nível do aplicativo.
A enumeração DXVAHD_DEVICE_TYPE não tem nenhuma enumeração DDI correspondente (por exemplo, sem DXVAHDDDI_DEVICE_TYPE). O primeiro membro da estrutura DXVAHDDDI_VPDEVCAPS é reservado, enquanto o primeiro membro da estrutura de DXVAHD_VPDEVCAPS no nível do aplicativo é definido como um valor DXVAHD_DEVICE_TYPE no membro DeviceType . O membro DeviceType é definido pelo runtime ou pelo plug-in do processador de vídeo, que sempre relata o driver como DXVAHD_DEVICE_TYPE_HARDWARE.
O membro multiplicador da estrutura DXVAHDDDI_FILTER_RANGE_DATA é um valor de ponto flutuante. O driver deve usar um valor que pode ser representado exatamente como uma fração base 2. Por exemplo, 0,25 pode ser representado exatamente como uma fração base 2, mas 0,1 não pode.
Qualquer função DDI DXVA-HD deve retornar S_OK, E_INVALIDARG ou E_OUTOFMEMORY.