estrutura DXVA_MBctrl_P_OffHostIDCT_1 (dxva.h)
A estrutura de 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 nonintras 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 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 |
de bits reservados 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 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 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 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:
|
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 de 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 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 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 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 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 do 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) 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 Macroblock-Oriented de decodificação de imagem para obter mais informações). O valor 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 varredura raster, seguido por 4:2:0 blocos de Cr, seguido por 4:2:2 blocos 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 4:4:4 blocos 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 de MPEG-2 4:2:0, o valor de wPatternCode corresponde à alteração do valor decodificado de CBP para a esquerda por seis posições de bit (essas posições de bits inferiores sendo usadas para formatos de croma 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 em 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 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.
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 verificação de raster 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 de alinhamento de memória crítico. Como resultado, o TCoefEOB bit 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 bConfig4GroupedCoefs membro da estrutura de 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.
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. Qualquer comando de controle de 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 de nonskip explícita da geração do primeiro da série de macroblocks ignorados. Portanto, 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 IDCT, indicando o local dos dados de diferença residual para os blocos do macroblock atual, expressos 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 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) |