Compartilhar via


estrutura DXVA_MBctrl_P_OffHostIDCT_1 (dxva.h)

A estrutura DXVA_MBctrl_P_OffHostIDCT_1 é enviada uma vez por macroblock pelo decodificador de host para o acelerador para especificar comandos de controle de macroblock para a maioria das imagens nonintra usando IDCT fora do host.

Sintaxe

typedef struct _DXVA_MBctrl_P_OffHostIDCT_1 {
  WORD         wMBaddress;
  WORD         wMBtype;
  DWORD        dwMB_SNL;
  WORD         wPatternCode;
  BYTE         bNumCoef[DXVA_NumBlocksPerMB_420];
  DXVA_MVvalue MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off];
} DXVA_MBctrl_P_OffHostIDCT_1;

Membros

wMBaddress

Especifica o endereço de macroblock do macroblock atual na ordem de varredura de varredura. Para obter exemplos de endereços de macroblock, consulte endereços de macroblock.

wMBtype

Especifica o tipo de macroblock que está sendo processado. Os bits a seguir definem o processamento de macroblock.

Bits Descrição
15 a 12 MvertFieldSel_3 (bit 15, o bit mais significativo) até MvertFieldSel_0 (bit 12)
Especifica a seleção de campo vertical para vetores de movimento correspondentes enviados posteriormente no comando de controle macroblock. Para movimento baseado em quadro com uma estrutura de imagem de quadro (por exemplo, para H.261 e H.263), todos esses bits devem ser zero. O uso desses bits é o mesmo especificado para os bits correspondentes na Seção 6.3.17.2 do MPEG-2.
11 Bit Reservado
Deve ser zero.
10 HostResidDiff
Especifica se os blocos decodificados de diferença residual de domínio espacial são enviados ou se os coeficientes de transformação são enviados para IDCT fora do host para o macroblock atual.
Esse sinalizador deverá ser zero se bConfigResidDiffHost for zero. Esse sinalizador deverá ser 1 se bConfigResidDiffAccelerator for zero. Esse sinalizador é sempre igual a zero em DXVA_MBctrl_P_OffHostIDCT_1.
9 e 8 MotionType
Especifica o tipo de movimento na imagem. Por exemplo, para movimento baseado em quadro com uma estrutura de imagem de quadro (como em H.261), o bit 9 deve ser 1 e o bit 8 deve ser zero.
O uso desses bits corresponde diretamente ao uso de frame_motion_type ou field_motion_type bits no MPEG-2 quando esses bits estiverem presentes no MPEG-2. O uso desses bits é explicado na seção Comentários a seguir.
7 e 6 MBscanMethod
Especifica o método de verificação a ser usado.
Isso deve ser igual a bPicScanMethod se bPicScanFixed for 1.
Se bConfigHostInverseScan for zero, MBscanMethod deverá ser um dos seguintes valores:
  • O bit 6 é zero e o bit 7 é zero para verificação em ziguezague (MPEG-2 Figura 7-2).
  • O bit 6 é 1 e o bit 7 é zero para verificação vertical alternativa.
  • O bit 6 é zero e o bit 7 é 1 para verificação horizontal alternativa.
Se bConfigHostInverseScan for 1, MBscanMethod deverá ser igual ao seguinte valor:
  • O bit 6 é 1 e o bit 7 é 1 para verificação arbitrária com endereço coeficiente absoluto.
BPicScanMethod e bPicScanFixed são membros do DXVA_PictureParameters . bConfigHostInverseScan é membro do DXVA_ConfigPictureDecode.
5 FieldResidual
Indica se os blocos de diferença residual usam uma estrutura IDCT de campo, conforme especificado em MPEG-2.
Esse sinalizador deverá ser 1 se o membro bPicStructure de DXVA_PictureParameters for 1 ou 2.
Quando usado para MPEG-2, FieldResidual deverá ser zero se o sinalizador frame_pred_frame_DCT na sintaxe MPEG-2 for 1 e precisar ser igual ao elemento dct_type da sintaxe MPEG-2 se dct_type estiver presente para o macroblock.
4 H261LoopFilter
Especifica se o filtro de loop H.261 (Seção 3.2.3 de H.261) está ativo para a previsão de macroblock atual. O filtro de loop H.261 é um filtro separado Â1/4, Â1/2, Â1/4 aplicado horizontal e verticalmente a todos os seis blocos em um macroblock H.261, exceto em bordas de bloco em que um dos toques ficaria fora do bloco. Nesses casos, o filtro é alterado para ter coeficientes 0, 1, 0. A precisão aritmética completa é mantida com arredondamento para inteiros de 8 bits na saída do processo de filtro 2D (valores de meio inteiro ou mais altos sendo arredondados para cima).
3 Motion4MV
Indica que o movimento de encaminhamento usa um vetor de movimento distinto para cada um dos quatro blocos de luminância no macroblock, conforme usado nos Anexos H.263 F e J.Motion4MV deve ser zero se MotionForward for zero ou se o membro bPic4MVallowed de DXVA_PictureParameters for zero.
2 MotionBackward
Usado conforme especificado para o macroblock_motion_backwardparameter correspondente no MPEG-2. Se o membro bPicBackwardPrediction de DXVA_PictureParameters for zero, MotionBackward deverá ser zero. O uso desse bit é explicado mais detalhadamente na seção Comentários a seguir.
1 MotionForward
Usado conforme especificado para o macroblock_motion_forward correspondente no MPEG-2. O uso desse bit é explicado mais detalhadamente na seção Comentários a seguir.
0 IntraMacroblock
Indica que o macroblock é codificado como intra e nenhum vetor de movimento é usado para o macroblock atual. Corresponde a macroblock_intrain MPEG-2. O uso desse bit é explicado mais detalhadamente na seção Comentários a seguir.

dwMB_SNL

Especifica o número de macroblocks ignorados a serem gerados após o macroblock atual e indica o local dos dados de diferença residual para os blocos do macroblock atual. Esse membro contém duas variáveis: MBskipsFollowing nos 8 bits mais significativos e MBdataLocation nos 24 bits menos significativos. MBskipsFollowing indica o número de macroblocks ignorados a serem gerados após o macroblock atual. MBdataLocation é um índice no buffer de dados de bloco de diferença residual IDCT. Esse índice indica o local dos dados de diferença residual para os blocos do macroblock atual, expresso como um múltiplo de 32 bits.

wPatternCode

Indica se os dados de diferença residual são enviados para cada bloco no macroblock.

Bit (11-i) de wPatternCode (em que i é o índice do bloco dentro do macroblock e o bit 0 representa o bit menos significativo) indica se os dados de diferença residual são enviados para o bloco i (consulte Decodificação de imagem orientada a macroblock para obter mais informações). O valor i é o índice do bloco dentro do macroblock, conforme especificado nas figuras de MPEG-2 6-10, 6-11, e 6-12 (ordem de varredura para Y, seguido por blocos 4:2:0 de Cb em ordem de varredura, seguido por blocos 4:2:0 de Cr, seguido por blocos 4:2:2 de Cb, seguido por 4:2:2 blocos de Cr, seguido por 4:4:4 blocos de Cb, seguido por blocos 4:4:4 de Cr). Os dados dos blocos codificados (blocos com bit (11-i) iguais a 1) são encontrados no buffer de codificação residual na mesma ordem de indexação (aumentando i). Para dados MPEG-2 4:2:0, o valor de wPatternCode corresponde ao deslocamento do valor decodificado de CBP para a esquerda em posições de seis bits (essas posições de bits inferiores sendo usadas para os formatos de croma 4:2:2 e 4:4:4).

Se o membro bConfigSpatialResidInterleaved de DXVA_ConfigPictureDecode for 1, as diferenças residuais baseadas em host serão enviadas em uma forma intercalada por chroma correspondente à do formato de pixel YUV em uso. Nesse caso, cada par de blocos Cb e Cr espacialmente correspondente é tratado como uma única unidade de estrutura de dados de diferença residual. Isso não altera o valor ou o significado de wPatternCode, mas implica que ambos os membros de cada par de blocos de dados Cb e Cr são enviados sempre que qualquer um desses blocos de dados tem o bit correspondente definido em wPatternCode. Se o bit em wPatternCode para um bloco de dados específico for zero, os valores de dados de diferença residual correspondentes deverão ser enviados como zero sempre que esse emparelhamento exigir o envio de um bloco de dados de diferença residual para um bloco com um bit wPatternCode igual a zero.

bNumCoef[DXVA_NumBlocksPerMB_420]

Cada valor na matriz bNumCoef indica o número de coeficientes no buffer de dados de diferença residual para cada bloco i do macroblock.

O subscrito de matriz i é o índice do bloco dentro do macroblock, conforme especificado nas Figuras de vídeo MPEG-2 6-10, 6-11 e 6-12 (ordem de varredura para Y, seguido por Cb, seguido por Cr).

Esse membro é usado somente quando o sinalizador HostResidDiff (bit 10 em wMBtype) é zero e bChromaFormat é 1 (4:2:0). Se usado em formatos 4:2:2 ou 4:4:4, isso aumentaria o tamanho dos comandos de controle de macroblock típicos além de um limite crítico de alinhamento de memória. Como resultado, o bit TCoefEOB dentro da estrutura DXVA_TCoefSingle é usado para determinar o número de coeficientes em cada bloco em casos não 4:2:0.

A finalidade de bNumCoef é indicar a quantidade de dados presentes para cada bloco no buffer de dados de diferença residual, expresso como o número de coeficientes presentes. Quando o membro bConfig4GroupedCoefs da estrutura DXVA_ConfigPictureDecode for 1, bNumCoef poderá conter o número real de coeficientes enviados para o bloco ou esse valor arredondado para cima para ser um múltiplo de quatro. Os dados desses coeficientes são encontrados no buffer de diferença residual na mesma ordem.

MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off]

Uma matriz que contém o valor dos vetores de movimento para o macroblock, cada um representado usando uma estrutura DXVA_MVvalue .

Comentários

Cada macroblock ignorado especificado por MBskipsFollowing deve ser gerado de uma maneira matematicamente equivalente a incrementar o valor de wMBaddress e repetir o mesmo comando de controle macroblock. Qualquer comando de controle macroblock com um valor diferente de zero para MBskipsFollowing especifica como a previsão compensada por movimento deve ser executada para cada macroblock a ser ignorado e é equivalente (exceto pelo valor de MBskipsFollowing) a uma especificação explícita nonskip da geração da primeira da série de macroblocks ignorados. Assim, sempre que MBskipsFollowing não for zero, todos os valores a seguir deverão ser iguais a zero: Motion4MV, IntraMacroblock e bNumCoef.

MBdataLocation é um índice no buffer de dados de bloco de diferença residual de IDCT, indicando o local dos dados de diferença residual para os blocos do macroblock atual, expresso como um múltiplo de 32 bits. Deve ser zero para o primeiro macroblock no buffer de comando de controle de macroblock. MBdataLocation poderá conter qualquer valor se wPatternCode for zero. Quando wPatternCode é zero, os decodificadores são recomendados, mas não são necessários para definir esse valor como zero ou para o mesmo valor que no próximo comando de controle macroblock.

Para obter mais informações sobre como os macroblocks ignorados são gerados, consulte Gerando macroblocks ignorados.

Combinações válidas de IntraMacroblock, MotionForward, MotionBackward, MotionType, MvertFieldSel e MVector são mostradas nas tabelas na Primeira Parte da Estrutura de Comando de Controle de Macroblock.

Requisitos

Requisito Valor
Cabeçalho dxva.h (inclua Dxva.h)

Confira também

DXVA_ConfigPictureDecode

DXVA_MBctrl_P_HostResidDiff_1

DXVA_MVvalue

DXVA_PictureParameters

DXVA_TCoefSingle