estrutura DXVA_SliceInfo (dxva.h)
A estrutura DXVA_SliceInfo é enviada pelo decodificador de host para o acelerador para especificar os parâmetros de nível de fatia de uma fatia de dados bitstream para decodificação de imagem compactada de bits fora do host.
Sintaxe
typedef struct _DXVA_SliceInfo {
WORD wHorizontalPosition;
WORD wVerticalPosition;
DWORD dwSliceBitsInBuffer;
DWORD dwSliceDataLocation;
BYTE bStartCodeBitOffset;
BYTE bReservedBits;
WORD wMBbitOffset;
WORD wNumberMBsInSlice;
WORD wQuantizerScaleCode;
WORD wBadSliceChopping;
} DXVA_SliceInfo, *LPDXVA_SliceInfo;
Membros
wHorizontalPosition
Especifica a posição horizontal do primeiro macroblock da fatia expressa em unidades de macroblocks, com zero indicando o macroblock mais à esquerda ou superior da imagem.
wVerticalPosition
Especifica a posição vertical do primeiro macroblock da fatia expressa em unidades de macroblocks, com zero indicando o macroblock mais à esquerda ou superior da imagem.
dwSliceBitsInBuffer
Especifica o número total de bits no buffer de dados de bitstream correspondente que contêm dados para a fatia atual. Isso deve ser um múltiplo de oito para MPEG-1, MPEG-2, MPEG-4. Ele também deve estar no modo estruturado por fatia do H.263, pois os códigos de inicialização de fatia nesses casos são alinhados por bytes.
dwSliceDataLocation
Especifica o local do primeiro byte que contém dados para a fatia (por exemplo, o local de um código inicial de fatia) no buffer de dados de bitstream. Deve ser zero se o início da fatia não estiver dentro do buffer de dados de bitstream correspondente.
bStartCodeBitOffset
Especifica o número de bits mais significativos do byte em dwSliceDataLocation que não contêm dados para a fatia. bStartCodeBitOffset deve ser zero para MPEG-1, MPEG-2 e MPEG-4, pois os códigos de inicialização de fatia nessas especificações estão alinhados a bytes. bStartCodeBitOffset poderia ser diferente de zero para H.261 e H.263, pois esses padrões não forçam o alinhamento de bytes de códigos de início gob (grupo de blocos). Esse membro deve estar no intervalo de zero a 7 e deve ser zero se o início da fatia não estiver dentro do buffer de dados de bitstream correspondente. Os bits mais significativos marcados como irrelevantes para a fatia atual por bStartCodeBitOffset podem conter dados para uma fatia anterior no caso de códigos iniciem que não estão alinhados por bytes (por exemplo, no modo de linha de base H.263).
bReservedBits
Bits reservados usados para empacotamento e alinhamento. Deve ser zero.
wMBbitOffset
Especifica o número de bits de dados de cabeçalho de fatia antes do primeiro bit de dados de camada de macroblock no buffer de bitstream. Por exemplo, se wMBbitOffset for 83, os dados da camada de macroblock da fatia serão iniciados após 83 bits de dados de cabeçalho de fatia. Deve ser zero se o início da fatia não estiver dentro do buffer de dados de bitstream correspondente.
wNumberMBsInSlice
Especifica o número de macroblocks de dados na fatia, incluindo macroblocks ignorados. Pode ser zero se esse número não puder ser prontamente determinado do cabeçalho da imagem e dos cabeçalhos e dados de macroblock iniciais da fatia atual e próxima no bitstream, como na fatia retangular e nos submodes arbitrários de ordenação de fatia do modo de fatia de H.263. Não deve ser zero para H.261, MPEG-1, MPEG-2, MPEG-4 ou quando não estiver usando a fatia retangular ou submodes de fatia arbitrária do modo estruturado em fatia no H.263.
wQuantizerScaleCode
O código de dimensionamento do quantizador do nível de fatia do bitstream, conforme especificado na especificação de codificação de vídeo específica (variando de 1 a 31 para H.261, H.262/MPEG-2, H.263, MPEG-1 e MPEG-4).
wBadSliceChopping
Especifica o local dos dados em uma fatia para um buffer de dados bitstream correspondente. Se zero, indica que todos os bits da fatia estão no buffer de dados de bitstream. Se não zero, indica qual parte dos bits para a fatia estão ausentes do buffer de dados de bitstream correspondente da seguinte maneira.
Valor | Descrição |
---|---|
1 | Os bits para o início da fatia estão dentro do buffer de dados de bitstream correspondente e os bits para o final da fatia não estão (porque o buffer de dados de bitstream está cheio). |
2 | Os bits para o início da fatia não estão dentro do buffer de dados bitstream correspondente (porque o buffer de dados bitstream anterior estava cheio), mas os bits para o final da fatia estão dentro do buffer de dados de bitstream correspondente. |
3 | Os bits para o início da fatia não estão dentro do buffer de dados de bitstream correspondente (porque o buffer de dados bitstream anterior estava cheio) e os bits para o final da fatia também não estão dentro do buffer de dados de bitstream correspondente (porque o buffer de dados de bitstream correspondente também está cheio). |
[! OBSERVAÇÕES] Valores não zero de wBadSliceChopping geralmente devem ser evitados pelo decodificador de software host.
Observações
Os buffers de controle de fatia são fornecidos para orientar a operação do processamento de bitstream de VLD fora do host. Os buffers de controle de fatia são enviados somente quando o bConfigBitstreamRaw membro do DXVA_ConfigPictureDecode for 1. O decodificador de software de host deve determinar o local dos pontos de ressincronização de nível de fatia no bitstream. Uma fatia é definida como uma camada multimacroblock que inclui um ponto de ressincronização nos dados de bitstream.
Em bitstreams H.261, um GOB é considerado uma fatia. Em bitstreams H.263, uma sequência de um ou mais GOBs começando com um código inicial GOB e sem códigos de início GOB adicionais é considerada uma fatia. Um buffer de controle de fatia deve conter uma ou mais estruturas DXVA_SliceInfo, de acordo com o conteúdo de um buffer de dados bitstream correspondente.
Requisitos
Requisito | Valor |
---|---|
cabeçalho | dxva.h (inclua Dxva.h) |