DXVA_MBctrl_P_OffHostIDCT_1 estrutura (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 verificação de raster. 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 deve ser zero se bConfigResidDiffHost for zero. Esse sinalizador deve 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 um 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 bits frame_motion_type ou field_motion_type no MPEG-2 quando esses bits estão presentes no MPEG-2. O uso desses bits é explicado ainda 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 de IDCT de campo conforme especificado no MPEG-2.
Esse sinalizador deve ser 1 se o membro bPicStructure do 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 cairia fora do bloco. Nesses casos, o filtro é alterado para ter coeficientes 0, 1, 0. A precisão aritmética completa é retida com arredondamento para inteiros de 8 bits na saída do processo de filtro 2D (valores de meio inteiro ou mais altos sendo arredondados).
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 devem ser zero se MotionForward for zero ou se o membro bPic4MVallowed do 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 ainda 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 ainda 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 ainda 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 de IDCT. Esse índice indica o local dos dados de diferença residual para os blocos do macroblock atual, expressos 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) do 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 nos números MPEG-2 6-10, 6-11 e 6-12 (raster-scan order for Y, seguido por 4:2:0 blocos de Cb em ordem de varredura raster, seguido por blocos 4:2:0 de Cr, seguido por blocos 4:2:2 de Cb, seguido por blocos 4:2:2 de Cr, seguido por 4:4:4 blocos de Cb, seguido por blocos 4:2:2 de Cr, seguido por blocos 4:4:4 de Cb, seguido por 4:4:4 blocos 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 de 4:2:0, o valor do wPatternCode corresponde à alteração do valor decodificado do CBP para a esquerda por seis posições de bit (essas posições de bits inferiores que estão sendo usadas para 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 croma correspondente à do formato de pixel YUV em uso. Nesse caso, cada par de blocos cr correspondente espacialmente e Cb é tratado como uma única unidade de estrutura de dados de diferença residual. Isso não altera o valor ou o significado do 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.

A matriz subscript 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 verificação de raster para Y, seguida por Cb, seguido por Cr).

Esse membro é usado somente quando o sinalizador HostResidDiff (bit 10 no wMBtype) é zero e bChromaFormat é 1 (4:2:0). Se usado em formatos 4:2:2 ou 4:4:4, aumentaria o tamanho de comandos de controle de macroblock típicos além de um limite de alinhamento de memória crítico. 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 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 do wMBaddress e repetir o mesmo comando de controle macroblock. Qualquer comando de controle de macroblock com um valor não 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 nonskip explícita da geração do primeiro da série de macroblocks ignorados. Assim, sempre que MBskipsFollowing não for zero, todos os seguintes valores devem 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

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

Confira também

DXVA_ConfigPictureDecode

DXVA_MBctrl_P_HostResidDiff_1

DXVA_MVvalue

DXVA_PictureParameters

DXVA_TCoefSingle