Codificação de vídeo D3D12

Esta página fornece informações gerais para desenvolvedores de driver sobre o recurso de codificação de vídeo Direct3D12. Para obter informações adicionais, 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 forneceu APIs e DDIs (interfaces no nível do driver) 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, o D3D12 adicionou um recurso de codificação de vídeo à família DDI/API de vídeo existente. Esse recurso fornece um conjunto coerente de APIs/DDIs de codificaçã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 de codificação de vídeo para diferentes cenários, como IoT (Internet das Coisas), nuvem, APIs de mídia, aprendizado de máquina e streaming de jogos.

Codecs compatíveis

A partir de 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 AV1.

Os aspectos específicos do codec da interface da estrutura são delegados a estruturas específicas do codec e seu acesso a tipos de união. Por exemplo, a estrutura D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_0082_0 contém uma união com ponteiros para estruturas de D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_0082_0 e D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_0082_0 específicas do codec que contêm as 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 (ou que contêm tipos de união anônimos) alterem seus tamanhos de tipo ao estender 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.

Relatórios de recursos e suporte à codificação de vídeo

A estrutura relacionada ao vídeo existente foi estendida para permitir que os drivers relatem 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 D3D12 introduzidos no Windows 11.

  • A enumeração D3D12DDICAPS_TYPE_VIDEO_0020 foi estendida para incluir os seguintes valores de suporte à 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 retorno de chamada 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 ao runtime D3D 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 de codificação de vídeo D3D12

Um driver implementa as seguintes funções de retorno de chamada para dar suporte à codificação de vídeo D3D12.

Testando

Os testes a seguir são incluídos como parte do WHLK (Kit de Laboratório de Hardware) do Windows. Consulte o WHLK para obter detalhes.

Nome do teste Descrição
CreateVideoEncoder Valida a criação de VideoEncoder/VideoEncoderHeap com base 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 QR predefinido, codificada e decodificada e, por fim, verificada para garantir que os valores de saída (e, até certo ponto, qualidade), sejam o esperado.
EncodeProfileLevelSuggestionsH264/HEVC Valida que o D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT. Os valores 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(10bit) Transcodifica um vídeo de entrada usando resoluções diferentes, padrões GOP, modos de fatia e outras configurações de codec e valida se a diferença do fluxo de vídeo de entrada é aceitável. Essa comparação é feita usando a PSNR (taxa de sinal de pico para ruído).
EncodeSubregions/ResolutionReconfiguration Valida reconfigurações em tempo real.
EncodeH264LongTermReferences Valida o uso de referências de imagem de longo prazo.
EncodeIntraRefresh Valida um cenário simples de intra-atualização com um IPP aberto... P... P... GOP.
VideoEncodeCommandListFeatures Valida listas de comandos predication e markers for Video encode.
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. Isso inclui as várias SKUs de 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

Os recursos de codificação de vídeo de maneira portátil e de baixo nível podem ser acessados por todos os fornecedores de hardware. Isso permite que APIs de mídia de nível superior (como o 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 mais alto podem otimizar para seus cenários tendo controle refinado de sincronização e alocação de memória/aspectos de residência da sessão de codificação de vídeo, como controle total do gerenciamento de imagens de referência e responsabilidades de gravação de cabeçalhos bitstream. Essa mudança 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ística de DPB, como GOP adaptável) na camada de mídia que pode ser reutilizado 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 a codificação de vídeo D3D12 e os cenários de gráficos, computação e aprendizado de máquina D3D12, o que é interessante para cenários como a execução de inferência de aprendizado de máquina 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.