Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo fornece informações gerais para desenvolvedores de driver sobre o recurso de codificação de vídeo Direct3D12. Para obter mais informações, incluindo as especificações no nível do aplicativo, consulte a Especificação de Codificação de Vídeo D3D.
Sobre a codificação de vídeo do Direct3D 12
Antes do Windows 11 (WDDM 3.0), o DirectX 12 oferecia interfaces em nível de aplicativo e driver (APIs e DDIs) para dar suporte à aceleração de GPU para vários aplicativos de vídeo, incluindo decodificação de vídeo, processamento de vídeo e estimativa de movimento.
A partir do Windows 11, d3D12 adiciona um recurso de codificação de vídeo à família de API/DDI de vídeo existente. Esse recurso fornece um conjunto coerente de APIs/DDIs de codificação que são consistentes com a estrutura D3D12 existente e permite que os desenvolvedores executem a codificação de vídeo usando mecanismos de vídeo acelerados por GPU.
A estrutura de codificação de vídeo fornece acesso aos recursos de aceleração de hardware do codificador de vídeo. Ele pode ser usado em diferentes cenários, como Internet das Coisas (IoT), nuvem, APIs de mídia, ML (machine learning) e streaming de jogos.
O suporte para codificação AV1 é adicionado ao Windows 11, versão 24H2 (WDDM 3.2). Para obter mais informações, consulte codificação de vídeo D3D12 AV1.
Codecs com suporte
A partir do Windows 11, os codecs com suporte são H.264 e HEVC, embora a estrutura de codificação de vídeo D3D12 forneça extensibilidade aberta para codecs mais recentes, como a AV1.
Os aspectos específicos de codec da interface do framework são delegados a estruturas específicas de codec e ao seu acesso a tipos union. Por exemplo, a estrutura D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_0082_0 contém uma união com ponteiros para D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_0082_0 e D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_0082_0, que contêm informações de configuração específicas do codec.
Para preservar a compatibilidade da interface binária na extensibilidade, os tipos de união sempre contêm ponteiros para as estruturas específicas do codec. Os tipos de união têm um tamanho constante com base no tamanho do ponteiro da arquitetura do host. Essa decisão também impede que estruturas que contêm membros de tipos de união (ou tipos de união anônimos) alterem seus tamanhos de tipo ao expandir a interface. Algumas das uniões contêm apenas ponteiros para tipos de enumeração; para serem consistentes, esses tipos de enumeração também são referenciados como ponteiros no caso de um novo codec exigir algum tipo mais complexo do que uma enumeração para representar esses conceitos.
Relatar recursos e suporte à codificação de vídeo
A estrutura relacionada a vídeos existente foi estendida para permitir que os drivers reportem suporte e recursos de codificação de vídeo.
D3D12DDI_FEATURE_VERSION_VIDEO_0083_0 é o número de versão que define a primeira implementação completa de todos os marcos de codificação de vídeo do D3D12 que foram introduzidos no Windows 11.
A enumeração D3D12DDICAPS_TYPE_VIDEO_0020 foi estendida para incluir os seguintes valores de suporte de codificação de vídeo:
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_CODEC = 31,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_PROFILE_LEVEL = 32,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_OUTPUT_RESOLUTION_RATIOS_COUNT = 33,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_OUTPUT_RESOLUTION = 34,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_INPUT_FORMAT = 35,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_RATE_CONTROL_MODE = 36,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_INTRA_REFRESH_MODE = 37,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_FRAME_SUBREGION_LAYOUT_MODE = 38,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_HEAP_SIZE = 39,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_CODEC_CONFIGURATION_SUPPORT = 40,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_SUPPORT = 41,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT = 42,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_RESOURCE_REQUIREMENTS = 43
O runtime D3D chama o callback PFND3D12DDI_VIDEO_GETCAPS do driver para consultar o suporte à codificação de vídeo.
Um driver que dá suporte à codificação de vídeo fornece o runtime D3D com ponteiros para suas funções de retorno de chamada de codificação de vídeo na estrutura D3D12DDI_DEVICE_FUNCS_VIDEO_0082_0 .
Funções de retorno de chamada para codificação de vídeo no D3D12
Um driver implementa as seguintes funções de callback para suportar a codificação de vídeo D3D12.
Crie o objeto driver que representa o codificador de vídeo:
PFND3D12DDI_CALCPRIVATEVIDEOENCODERSIZE_0082_0 calcula a quantidade de memória que o runtime D3D precisa alocar para o objeto driver.
PFND3D12DDI_CREATEVIDEOENCODER_0082_0 cria o objeto do codificador de vídeo real que contém o estado da sessão de codificação de vídeo.
Crie o objeto driver que representa o heap do codificador de vídeo:
PFND3D12DDI_CALCPRIVATEVIDEOENCODERHEAPSIZE_0080_2 calcula a quantidade de memória que o runtime D3D precisa alocar para o objeto de driver.
PFND3D12DDI_CREATEVIDEOENCODERHEAP_0080_2 cria o objeto heap do codificador de vídeo que contém os recursos e o estado do driver dependentes da resolução.
Codificar um quadro:
PFND3D12DDI_VIDEO_ENCODE_FRAME_0082_0 registra uma operação de codificação de quadro na lista de comandos.
Após a operação de codificação, PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0 também deve ser chamado para resolver os metadados de saída da operação de codificação em um formato legível. O layout dos metadados resolvidos do driver é semelhante ao exemplo mostrado em um diagrama na especificação.
Destrua o codificador de vídeo e o heap associado:
Teste
Os testes a seguir são incluídos como parte do WHLK (Windows Hardware Lab Kit). Consulte o WHLK para obter detalhes.
| Nome do teste | Descrição |
|---|---|
| CreateVideoEncoder | Valida a criação do VideoEncoder/VideoEncoderHeap baseando-se nos casos relacionados a CheckFeatureSupport relatados. |
| SingleEncodeH264/HEVC | Testes baseados em código QR para verificações básicas de imagem estrutural. A sequência de imagens de entrada é carimbada com conteúdo de QR predefinido e, em seguida, codificada e decodificada. Por fim, os valores de saída (e até certo ponto, qualidade) são verificados para garantir que eles sejam o esperado. |
| EncodeProfileLevelSuggestionsH264/HEVC | Valida que os valores de D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT.SuggestedProfile/Level são conforme o esperado com base nas especificações H.264/HEVC e nas configurações passadas como entrada para D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT. |
| EncodeHeapSizeCap | Valida o aumento do volume de memória com diferentes argumentos de entrada crescentes. |
| SimpleGOPEncodeH264/HEVC(10 bits) | Transcodifica um vídeo de entrada usando resoluções diferentes, padrões GOP, modos de fatia e outras configurações de codec e valida que o vídeo codificado na saída em relação à diferença do fluxo de vídeo de entrada é aceitável. Essa comparação faz-se utilizando a razão sinal-ruído de pico (PSNR). |
| CodificaçãoDeSubregiões/ReconfiguraçãoDeResolução | Valida reconfigurações dinâmicas. |
| EncodeH264LongTermReferences | Valida o uso de referências de imagem de longo prazo. |
| EncodeIntraRefresh | Valida um cenário simples de intra-refresh com um IPP...P...P... GOP aberto. |
| RecursosDeListaDeComandosDeCodificaçãoDeVídeo | Valida listas de comandos de predicação e marcadores para codificação de vídeo. |
| VideoEncodeTimestamps | Valida carimbos de data/hora para listas de comandos de codificação de vídeo. |
Cenários de codificação de vídeo
OneCore
O suporte à codificação de vídeo D3D12 permite codificação de vídeo acelerada por hardware portátil em plataformas em que apenas D3D12 está disponível. Essas plataformas incluem as várias SKUs do OneCore usadas pela computação em nuvem e plataformas de IoT. A aceleração de codificação de vídeo está disponível nesses cenários sem a necessidade de usar soluções específicas da plataforma.
APIs de mídia
As funcionalidades de codificação de vídeo de um nível baixo e portátil são acessíveis em todos os fornecedores de hardware. Essa acessibilidade permite que APIs de Mídia de nível superior (como a Media Foundation) criem suas camadas de mídia sobre essa API que cuida da abstração das diferentes plataformas de hardware. Considerando o design de baixo nível da API, essas camadas de mídia de nível superior podem otimizar seus cenários tendo um controle refinado de sincronização e alocação/residência na memória da sessão de codificação de vídeo, como controle total do gerenciamento das imagens de referência e das responsabilidades de escrita dos cabeçalhos do fluxo de bits. Essa transição de responsabilidades para a camada acima dessa API também permite que os fornecedores de hardware tenham um conjunto consistente de políticas de codificação (por exemplo, heurísticas de DPB como GOP adaptável) na camada de mídia que podem ser reutilizadas em diferentes plataformas de hardware.
Interoperabilidade com gráficos D3D, computação e machine learning
A API de codificação de vídeo D3D12 permite uma interoperabilidade eficiente entre o código de vídeo D3D12 e os cenários gráficos, computação e ML D3D12. Essa interoperabilidade é interessante para cenários como executar inferência de ML em um fluxo de câmera.
Cenários de streaming de jogos
A API de codificação de vídeo D3D12 permite cenários de streaming de jogos que exigem uma API de baixo nível de alto desempenho.