estrutura DXVA_MBctrl_P_HostResidDiff_1 (dxva.h)

A estrutura DXVA_MBctrl_P_HostResidDiff_1 é enviada uma vez por macroblock pelo decodificador de host para o acelerador para especificar comandos de controle de macroblock para a maioria dos casos de imagem nonintra ao usar IDCT baseado em host.

Sintaxe

typedef struct _DXVA_MBctrl_P_HostResidDiff_1 {
  WORD         wMBaddress;
  WORD         wMBtype;
  DWORD        dwMB_SNL;
  WORD         wPatternCode;
  WORD         wPC_Overflow;
  DWORD        dwReservedBits2;
  DXVA_MVvalue MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off];
} DXVA_MBctrl_P_HostResidDiff_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 conteúdo de wMBtype.

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.
O sinalizador HostResidDif é sempre igual a 1 nessa estrutura. Esse sinalizador deverá ser zero se bConfigResidDiffHost for zero. Esse sinalizador deverá ser 1 se bConfigResidDiffAccelerator for zero.
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 na Seção 6.3.17.1 e tabelas 6-17 e 6-18 de vídeo 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
Essa variável não tem significado e esses bits devem ser definidos como zero nessa estrutura.
5 FieldResidual
Indica se os blocos de diferença residual usam uma estrutura IDCT de campo, conforme especificado em MPEG-2.
Deve ser 1 se o membro bPicStructure de DXVA_PictureParameters for 1 ou 2. Quando usado para MPEG-2, FieldResidual deverá ser zero se a variável frame_pred_frame_DCT na sintaxe MPEG-2 for 1 e precisar ser igual à variável dct_type na 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 de 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
Uma variável que 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 deverá ser zero se MotionForward for zero ou se o membro bPic4MVallowed do DXVA_PictureParameters for zero.
2 MotionBackward
Usado da maneira especificada para a variável macroblock_motion_backward correspondente em 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 para a variável de macroblock_motion_forward correspondente em 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. 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 atual.

Bit (11-i) de wPatternCode (em que o bit zero é o bit menos significativo) indica se os dados de diferença residual são enviados para o bloco i, em que i é o índice do bloco dentro do macroblock, conforme especificado nas figuras mpeg-2 6-10, 6-11 e 6-12 (ordem de varredura para Y, seguido por blocos 4:2:0 de Cb na ordem de varredura, seguido por 4:2:0 blocos 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 4:4:4 blocos de Cr). Os dados dos blocos codificados (aqueles 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 do CBP (padrão de bloco codificado) 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 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 precisar enviar um bloco de dados de diferença residual para um bloco com um bit wPatternCode igual a zero.

wPC_Overflow

Especifica quais blocos do macroblock usam dados de diferença residual de estouro.

Ao usar a decodificação de diferença residual baseada em host com o membro bPicOverflowBlocks de DXVA_PictureParameters igual a 1 e IntraMacroblock igual a zero (o método de estouro de 8 a 8), wPC_Overflow contém o código padrão dos blocos de estouro. (O código padrão é especificado da mesma maneira que para wPatternCode.) Os dados dos blocos de estouro codificados (aqueles 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).

dwReservedBits2

Bits reservados usados para empacotamento e alinhamento. Deve ser zero.

MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off]

Uma matriz que contém o valor dos vetores de movimento para o macroblock, cada vetor de movimento é representado por 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.

O conteúdo de um comando de controle macroblock com um valor diferente de zero para MBskipsFollowing é equivalente (exceto pelo valor de MBskipsFollowing) ao conteúdo do primeiro da série de macroblocks ignorados. Assim, sempre que MBskipsFollowing não for zero, os seguintes membros e variáveis de estrutura deverão ser todos iguais a zero: Motion4MV, IntraMacroblock, wPatternCodee wPC_Overflow. Cada macroblock ignorado subsequente é gerado da mesma forma que o primeiro, exceto para incrementar o valor de wMBaddress.

MBdataLocation deve ser zero para o primeiro macroblock no buffer de comando de controle de macroblock. Para macroblocks diferentes do primeiro macroblock no buffer de comando de controle 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_OffHostIDCT_1

DXVA_MVvalue

DXVA_PictureParameters