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 bitstream 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. Deve ser um múltiplo de oito para MPEG-1, MPEG-2, MPEG-4. Ele também deve estar no modo estruturado por fatia de H.263, pois os códigos de início 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 início de fatia nessas especificações são alinhados por 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 iniciais 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 iniciais que não estão alinhados a 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 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 dos dados de macroblock inicial 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 por fatia em 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 dentro de uma fatia para um buffer de dados de bitstream correspondente. Se zero, indica que todos os bits para a fatia estão no buffer de dados de bitstream. Se diferente de zero, indica qual parte dos bits da fatia está ausente 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 de 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] Os valores não zero de wBadSliceChopping geralmente devem ser evitados pelo decodificador de software host.
Comentários
Buffers de controle de fatia são fornecidos para orientar a operação do processamento de bitstream do VLD fora do host. Buffers de controle de fatia são enviados somente quando o membro bConfigBitstreamRaw de DXVA_ConfigPictureDecode é 1. O decodificador de software 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 fluxos de bits H.261, um GOB é considerado uma fatia. Em fluxos de bits H.263, uma sequência de um ou mais GOBs começando com um código de início 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 de bitstream correspondente.
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | dxva.h (inclua Dxva.h) |