Formatos de vídeo YUV de 10 bits e 16 bits
Este tópico descreve os formatos YUV de 10 e 16 bits recomendados para captura, processamento e exibição de vídeo no sistema operacional Microsoft Windows.
Este tópico contém as seguintes seções:
- Visão geral
- Códigos FOURCC para YUV de 10 bits e 16 bits
- Definições do Surface
- Formatos YUV preferenciais
- Tópicos relacionados
Visão geral
Esses formatos usam uma representação de ponto fixo para o canal luma e os canais chroma (C'b e C'r). Os valores de exemplo são valores dimensionados de 8 bits, usando um fator de dimensionamento de 2^(n – 8), em que n é 10 ou 16, de acordo com as seções 7.7-7.8 e 7.11-7.12 de SMPTE 274M. Conversões de precisão podem ser executadas usando turnos de bits simples. Por exemplo, se o ponto branco de um formato de 8 bits for 235, o formato de 10 bits correspondente terá um ponto branco em 940 (235 × 4).
As representações de 16 bits descritas aqui usam valores WORD little-endian para cada canal. Os formatos de 10 bits também usam 16 bits para cada canal, com os 6 bits mais baixos definidos como zero, conforme mostrado no diagrama a seguir.
Como as representações de 10 bits e 16 bits do mesmo formato YUV têm o mesmo layout de memória, é possível converter uma representação de 10 bits em uma representação de 16 bits sem perda de precisão. Também é possível converter uma representação de 16 bits para uma representação de 10 bits. (Os formatos Y416 e Y410 são uma exceção a essa regra geral, no entanto, porque eles não compartilham o mesmo layout de memória.)
Quando o hardware gráfico lê uma superfície que contém uma representação de 10 bits, ele deve ignorar os 6 bits de baixa ordem de cada canal. No entanto, se uma superfície contiver dados válidos de 16 bits, ela deverá ser identificada como uma superfície de 16 bits.
Nos formatos que contêm alfa, um pixel completamente transparente tem um valor alfa de zero e um pixel completamente opaco tem um valor alfa de (2^n) – 1, em que n é o número de bits alfa. Acredita-se que Alpha seja um valor linear aplicado a cada componente após o componente ter sido convertido em sua forma linear normalizada.
Para imagens na memória de vídeo, o driver de gráficos seleciona o alinhamento de memória da superfície. A superfície deve estar alinhada ao DWORD . Ou seja, as linhas individuais dentro de uma superfície têm a garantia de iniciar em um limite de 32 bits, embora o alinhamento possa ser maior que 32 bits. A origem (0,0) é sempre o canto superior esquerdo da superfície.
Para fins desta documentação, o termo U é equivalente a Cb e o termo V é equivalente a Cr.
Códigos FOURCC para YUV de 10 bits e 16 bits
Os códigos FOURCC para os formatos descritos aqui usam a seguinte convenção:
Se o formato for planar, o primeiro caractere no código FOURCC será 'P'. Se o formato estiver empacotado, o primeiro caractere será 'Y'.
O segundo caractere no código FOURCC é determinado pela amostragem de chroma, conforme mostrado na tabela a seguir.
Amostragem de chroma Letra de código FOURCC 4:4:4 '4' 4:2:2 '2' 4:2:1 '1' 4:2:0 '0' Os dois últimos caracteres no FOURCC indicam o número de bits por canal, '16' para 16 bits ou '10' para 10 bits.
Usando esse esquema, os seguintes códigos FOURCC foram definidos. Nenhum formato 4:2:1 para YUV de 10 bits ou 16 bits foi definido neste momento.
FOURCC | Descrição |
---|---|
P016 | Planar, 4:2:0, 16 bits. |
P010 | Planar, 4:2:0, 10 bits. |
P216 | Planar, 4:2:2, 16 bits. |
P210 | Planar, 4:2:2, 10 bits. |
Y216 | Embalado, 4:2:2, 16 bits. |
Y210 | Embalado, 4:2:2, 10 bits. |
Y416 | Embalado, 4:4:4, 16 bits |
Y410 | Embalado, 4:4:4, 10 bits. |
GuiDs de subtipo também foram definidos a partir desses FOURCCs; consulte GUIDs de subtipo de vídeo.
Definições do Surface
Esta seção descreve o layout de memória de cada formato. Nas descrições a seguir, o termo WORD refere-se a um valor de 16 bits little-endian e o termo DWORD refere-se a um valor de 32 bits little-endian.
4:2:0 Formatos
Dois formatos 4:2:0 são definidos, com os códigos FOURCC P016 e P010. Eles compartilham o mesmo layout de memória, mas p016 usa 16 bits por canal e P010 usa 10 bits por canal.
P016 e P010
Nesses dois formatos, todos os exemplos Y aparecem primeiro na memória como uma matriz de WORDs com um número par de linhas. O passo da superfície pode ser maior que a largura do plano Y. Essa matriz é seguida imediatamente por uma matriz de WORDs que contém exemplos de V e você intercalados, conforme mostrado no diagrama a seguir.
Se a matriz U-V combinada for endereçada como uma matriz de DWORDs, a palavra menos significativa (LSW) conterá o valor U e a palavra mais significativa (MSW) conterá o valor V. O passo do avião U-V combinado é igual ao passo do plano Y. O avião U-V tem metade das linhas que o avião Y.
Esses dois formatos são os formatos de pixel planar preferenciais 4:2:0 para representações yuv de precisão mais alta. Espera-se que eles sejam um requisito de termo intermediário para aceleradores de Aceleração de Vídeo DirectX (DXVA) que dão suporte a vídeos de 10 bits ou 16 bits 4:2:0.
4:2:2 Formatos
Quatro formatos 4:2:2 são definidos, dois planar e dois empacotados. Eles têm os seguintes códigos FOURCC:
- P216
- P210
- Y216
- Y210
P216 e P210
Nesses dois formatos planares, todos os exemplos Y aparecem primeiro na memória como uma matriz de WORDs com um número par de linhas. O passo da superfície pode ser maior que a largura do plano Y. Essa matriz é seguida imediatamente por uma matriz de WORDs que contém exemplos de V e você intercalados, conforme mostrado no diagrama a seguir.
Se a matriz U-V combinada for endereçada como uma matriz de DWORDs, o LSW conterá o valor U e o MSW conterá o valor V. O passo do avião U-V combinado é igual ao passo do plano Y. O plano U-V tem o mesmo número de linhas que o plano Y.
Esses dois formatos são os formatos de pixel planar preferenciais 4:2:2 para representações YUV de precisão mais alta. Espera-se que eles sejam um requisito de termo intermediário para aceleradores de Aceleração de Vídeo DirectX (DXVA) que dão suporte a vídeos de 10 bits ou 16 bits 4:2:2.
Y216 e Y210
Nesses dois formatos empacotados, cada par de pixels é armazenado como uma matriz de quatro WORDs, conforme mostrado na ilustração a seguir.
O primeiro WORD na matriz contém o primeiro exemplo Y no par, o segundo WORD contém o exemplo U, o terceiro WORD contém o segundo exemplo Y e o quarto WORD contém o exemplo V.
Y210 é idêntico ao Y216, exceto que cada amostra contém apenas 10 bits de dados significativos. Os 6 bits menos significativos são definidos como zero, conforme descrito anteriormente.
Formatos 4:4:4
Dois formatos 4:4:4 são definidos, com os códigos FOURCC Y410 e Y416. Ambos são formatos empacotados.
Y410
Esse formato é uma representação de 10 bits empacotada que inclui 2 bits de alfa. Cada pixel é codificado como um único DWORD com o layout de memória mostrado no diagrama a seguir.
Os bits 0-9 contêm o exemplo U, os bits 10-19 contêm o exemplo Y, os bits 20-29 contêm o exemplo V e os bits 30-31 contêm o valor alfa. Para indicar que um pixel é totalmente opaco, um aplicativo deve definir os dois bits alfa iguais a 0x03.
Y416
Esse formato é uma representação de 16 bits empacotada que inclui 16 bits de alfa. Cada pixel é codificado como um par de DWORDs, conforme mostrado na ilustração a seguir.
Os bits 0-15 contêm o exemplo U, os bits 16-31 contêm o exemplo Y, os bits 32-47 contêm o exemplo V e os bits 48-63 contêm o valor alfa.
Para indicar que um pixel é totalmente opaco, um aplicativo deve definir os dois bytes alfa iguais a 0xFFFF. Esse formato destina-se principalmente como um formato intermediário durante o processamento de imagens para evitar o acúmulo de erros.
Formatos YUV preferenciais
A tabela a seguir lista os formatos YUV preferenciais, incluindo formatos de 8 bits.
Formatar | Amostragem de croma | Empacotado ou planar | Bits por canal |
---|---|---|---|
AYUV | 4:4:4 | Embalado | 8 |
Y410 | 4:4:4 | Embalado | 10 |
Y416 | 4:4:4 | Embalado | 16 |
AI44 | 4:4:4 | Embalado | Palettized |
YUY2 | 4:2:2 | Embalado | 8 |
Y210 | 4:2:2 | Embalado | 10 |
Y216 | 4:2:2 | Embalado | 16 |
P210 | 4:2:2 | Planar | 10 |
P216 | 4:2:2 | Planar | 16 |
NV12 | 4:2:0 | Planar | 8 |
P010 | 4:2:0 | Planar | 10 |
P016 | 4:2:0 | Planar | 16 |
NV11 | 4:1:1 | Planar | 8 |
É recomendável que, se um objeto der suporte a um determinado esquema de amostragem de chroma e profundidade de bits, ele deve dar suporte aos formatos YUV correspondentes listados nesta tabela. (Os objetos podem dar suporte a formatos adicionais não listados aqui.)
Tópicos relacionados