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 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 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 de macroblock. Para movimento baseado em quadros 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 deve 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 nas Tabelas 6-17 e 6-18 do 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 nas 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 superior 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 de DXVA_PictureParameters for zero. |
2 |
MotionBackward Usado da maneira especificada para a variável de macroblock_motion_backward correspondente no MPEG-2. Se o membro bPicBackwardPrediction de DXVA_PictureParameters for zero, MotionBackward deverá ser zero. O uso desse bit é explicado 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 na seção Comentários a seguir. |
0 |
IntraMacroblock Indica que o macroblock está codificado como intra e nenhum vetor de movimento é usado para o macroblock atual. Corresponde a macroblock_intrain MPEG-2. O uso desse bit é explicado 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 do bloco de diferença residual. 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 dados de diferença residual é enviado para cada bloco no macroblock atual.
Bit (11-i) de wPatternCode (em que o bit zero é os bits menos significativos) 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 (raster-scan order for Y, seguido por 4:2:0 blocos de Cb em ordem de raster-scan, seguido por 4:2:0 blocos de Cr, seguido por 4:2:2 blocos 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) igual a 1) são encontrados no buffer de codificação residual na mesma ordem de indexação (aumentando i). Para dados de MPEG-2 4:2:0, o valor de wPatternCode corresponde à alteração do valor decodificado do CBP (padrão de bloco codificado) para a esquerda por seis posições de bit (essas posições de bits inferiores sendo usadas para formatos de chroma 4:2:2 e 4:4:4).
Se o bConfigSpatialResidInterleaved membro do 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 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 tiver 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 wPatternCode bit 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 bPicOverflowBlocks membro 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.
Observações
Cada macroblock ignorado especificado por MBskipsFollowing deve ser gerado de maneira matematicamente equivalente a incrementar o valor de wMBaddress e repetir o mesmo comando de controle de macroblock.
O conteúdo de um comando de controle de 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 devem 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 de macroblock, MBdataLocation poderá conter qualquer valor se wPatternCode for zero. Quando wPatternCode for 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 de 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 em Primeira Parte da Estrutura de Comandos de Controle de Macroblock.
Requisitos
Requisito | Valor |
---|---|
cabeçalho | dxva.h (inclua Dxva.h) |