Compartir a través de


estructura DXVA_MBctrl_P_OffHostIDCT_1 (dxva.h)

El descodificador de host envía una vez por cada macrobloqueo a la estructura de DXVA_MBctrl_P_OffHostIDCT_1 para especificar comandos de control de macroblock para la mayoría de las imágenes que no son detraer mediante IDCT fuera del host.

Sintaxis

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;

Miembros

wMBaddress

Especifica la dirección de bloqueo de macros del bloque de macros actual en orden de examen de trama. Para obtener ejemplos de direcciones de macroblock, vea Direcciones de bloqueo de macros.

wMBtype

Especifica el tipo de macroblock que se está procesando. Los bits siguientes definen el procesamiento de macrobloqueos.

Bits Descripción
De 15 a 12 MvertFieldSel_3 (bit 15 el bit más significativo) a través de MvertFieldSel_0 (bit 12)
Especifica la selección de campo vertical para los vectores de movimiento correspondientes enviados más adelante en el comando de control de macroblock. Para el movimiento basado en fotogramas con una estructura de imagen de marco (por ejemplo, para H.261 y H.263), estos bits deben ser cero. El uso de estos bits es el mismo que el especificado para los bits correspondientes de la sección 6.3.17.2 de MPEG-2.
11 Bit reservado
Debe ser cero.
10 HostResidDiff
Especifica si se envían bloques descodificados de diferencia residual de dominio espacial o si se envían coeficientes de transformación para idCT fuera del host para el bloque de macros actual.
Esta marca debe ser cero si bConfigResidDiffHost es cero. Esta marca debe ser 1 si bConfigResidDiffAccelerator es cero. Esta marca siempre es igual a cero en DXVA_MBctrl_P_OffHostIDCT_1.
9 y 8 MotionType
Especifica el tipo de movimiento de la imagen. Por ejemplo, para el movimiento basado en fotogramas con una estructura de imagen de marco (como en H.261), el bit 9 debe ser 1 y el bit 8 debe ser cero.
El uso de estos bits corresponde directamente al uso de frame_motion_type o field_motion_type bits en MPEG-2 cuando estos bits están presentes en MPEG-2. El uso de estos bits se explica aún más en la sección Comentarios siguiente.
7 y 6 MBscanMethod
Especifica el método de examen que se va a usar.
Debe ser igual a bPicScanMethod si bPicScanFixed es 1.
Si bConfigHostInverseScan es cero, MBscanMethod debe ser uno de los valores siguientes:
  • El bit 6 es cero y el bit 7 es cero para el examen de zigzag (MPEG-2 Figura 7-2).
  • El bit 6 es 1 y el bit 7 es cero para el examen vertical alternativo.
  • El bit 6 es cero y el bit 7 es 1 para el examen horizontal alternativo.
Si bConfigHostInverseScan es 1, MBscanMethod debe ser igual al valor siguiente:
  • El bit 6 es 1 y el bit 7 es 1 para el examen arbitrario con dirección absoluta del coeficiente.
Tanto bPicScanMethod como bPicScanFixed son miembros de DXVA_PictureParameters . bConfigHostInverseScan es miembro de DXVA_ConfigPictureDecode.
5 FieldResidual
Indica si los bloques de diferencia residual usan una estructura IDCT de campo como se especifica en MPEG-2.
Esta marca debe ser 1 si el miembro bPicStructure de DXVA_PictureParameters es 1 o 2.
Cuando se usa para MPEG-2, FieldResidual debe ser cero si la marca frame_pred_frame_DCT en la sintaxis MPEG-2 es 1 y debe ser igual al elemento dct_type de la sintaxis MPEG-2 si dct_type está presente para el bloque de macros.
4 H261LoopFilter
Especifica si el filtro de bucle H.261 (sección 3.2.3 de H.261) está activo para la predicción actual de macroblock. El filtro de bucle H.261 es un filtro separable Â1/4, Â1/2, Â1/4 aplicado horizontal y verticalmente a los seis bloques de un macroblock H.261, excepto en los bordes de bloque donde uno de los taps caería fuera del bloque. En tales casos, el filtro se cambia para tener coeficientes 0, 1, 0. La precisión aritmética completa se conserva con redondeo a enteros de 8 bits en la salida del proceso de filtro 2D (valores enteros medio o superior redondeados hacia arriba).
3 Motion4MV
Indica que el movimiento hacia delante usa un vector de movimiento distinto para cada uno de los cuatro bloques de luminancia del macrobloque, como se usa en los anexos H.263 F y J.Motion4MV debe ser cero si MotionForward es cero o si el miembro bPic4MVallowed de DXVA_PictureParameters es cero.
2 MotionBackward
Se usa como se especifica para el macroblock_motion_backwardparameter correspondiente en MPEG-2. Si el miembro bPicBackwardPrediction de DXVA_PictureParameters es cero, MotionBackward debe ser cero. El uso de este bit se explica aún más en la sección Comentarios siguiente.
1 MotionForward
Se usa como se especifica para el macroblock_motion_forward correspondiente en MPEG-2. El uso de este bit se explica aún más en la sección Comentarios siguiente.
0 IntraMacroblock
Indica que el bloque de macros se codifica como intra y no se usan vectores de movimiento para el bloque de macros actual. Corresponde a macroblock_intrain MPEG-2. El uso de este bit se explica aún más en la sección Comentarios siguiente.

dwMB_SNL

Especifica el número de macroblocks omitidos que se van a generar después del bloque de macros actual e indica la ubicación de los datos de diferencia residual para los bloques del bloque de macros actual. Este miembro contiene dos variables: MBskipsFollowing en los 8 bits más significativos y MBdataLocation en los 24 bits menos significativos. MBskipsFollowing indica el número de macroblocks omitidos que se van a generar después del bloque de macros actual. MBdataLocation es un índice en el búfer de datos de bloque de diferencia residual idCT. Este índice indica la ubicación de los datos de diferencia residual para los bloques del bloque de macrobloque actual, expresado como múltiplo de 32 bits.

wPatternCode

Indica si se envían datos de diferencia residual para cada bloque del macroblock.

Bit (11-i) de wPatternCode (donde i es el índice del bloque dentro del bloque macroblock y bit 0 representa el bit menos significativo) indica si los datos de diferencia residual se envían para el bloque i (vea Macroblock-Oriented Picture Descoding para obtener más información). El valor i es el índice del bloque dentro del macrobloqueo tal y como se especifica en las figuras MPEG-2 6-10, 6-11 y 6-12 (ráster-scan order for Y, seguido de 4:2:0 bloques de Cb en orden de examen ráster, seguido de 4:2:0 bloques de Cr, seguidos de 4:2:2 bloques de Cb, seguidos de 4:2:2 bloques de Cr, seguidos de 4:4:4 bloques de Cb, seguido de 4:4:4 bloques de Cr). Los datos de los bloques codificados (bloques que tienen bit (11-i) igual a 1) se encuentran en el búfer de codificación residual en el mismo orden de indexación ( aumentando i). Para los datos MPEG-2 de 4:2:0, el valor de wPatternCode corresponde a cambiar el valor descodificado de CBP a la izquierda por seis posiciones de bits (esas posiciones de bits inferiores que se usan para los formatos de cromática 4:2:2 y 4:4:4).

Si el miembro bConfigSpatialResidInterleaved de DXVA_ConfigPictureDecode es 1, las diferencias residuales basadas en host se envían en una forma intercalada cromática que coincida con la del formato de píxel YUV en uso. En este caso, cada par cb y cr correspondiente espacialmente de bloques se trata como una única unidad de estructura de datos de diferencia residual. Esto no modifica el valor ni el significado de wPatternCode, pero implica que ambos miembros de cada par de bloques de datos Cb y Cr se envían siempre que alguno de estos bloques de datos tenga el bit correspondiente establecido en wPatternCode. Si el bit de wPatternCode para un bloque de datos determinado es cero, los valores de datos de diferencia residual correspondientes se deben enviar como cero siempre que este emparejamiento requiera enviar un bloque de datos de diferencia residual para un bloque con un bit wPatternCode igual a cero.

bNumCoef[DXVA_NumBlocksPerMB_420]

Cada valor de la matriz bNumCoef indica el número de coeficientes en el búfer de datos de diferencia residual para cada bloque i del macroblock.

El subíndice de matriz i es el índice del bloque dentro del macrobloque, tal y como se especifica en el vídeo MPEG-2 Figuras 6-10, 6-11 y 6-12 (orden de examen de trama para Y, seguido de Cb, seguido de Cr).

Este miembro solo se usa cuando la marca HostResidDiff (bit 10 en wMBtype) es cero y bChromaFormat es 1 (4:2:0). Si se usa en formatos 4:2:2 o 4:4:4, aumentaría el tamaño de los comandos típicos de control de macroblock más allá de un límite crítico de alineación de memoria. Como resultado, el bit TCoefEOB dentro de la estructura de DXVA_TCoefSingle se usa para determinar el número de coeficientes de cada bloque en casos no 4:2:0.

El propósito de bNumCoef es indicar la cantidad de datos presentes para cada bloque en el búfer de datos de diferencia residual, expresado como el número de coeficientes presentes. Cuando el miembro bConfig4GroupedCoefs de la estructura de DXVA_ConfigPictureDecode es 1, bNumCoef puede contener el número real de coeficientes enviados para el bloque o ese valor redondeado hasta ser un múltiplo de cuatro. Los datos de estos coeficientes se encuentran en el búfer de diferencia residual en el mismo orden.

MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off]

Matriz que contiene el valor de los vectores de movimiento para el bloque de macros, cada uno representado mediante una estructura DXVA_MVvalue .

Comentarios

Cada macroblock omitido especificado por MBskipsFollowing debe generarse de forma matemáticamente equivalente a incrementar el valor de wMBaddress y, a continuación, repetir el mismo comando de control de macroblock. Cualquier comando de control de macroblock con un valor distinto de cero para MBskipsFollowing especifica cómo se va a realizar la predicción compensada por movimiento para cada macroblock que se omitirá y es equivalente (excepto el valor de MBskipsFollowing) a una especificación de noskip explícita de la generación de la primera de las series de macroblocks omitidos. Por lo tanto, siempre que MBskipsFollowing no sea cero, todos los valores siguientes deben ser iguales a cero: Motion4MV, IntraMacroblock y bNumCoef.

MBdataLocation es un índice en el búfer de datos de bloque de diferencia residual IDCT, que indica la ubicación de los datos de diferencia residual para los bloques del bloque de macrobloque actual, expresado como múltiplo de 32 bits. Debe ser cero para el primer bloque de macros del búfer de comandos de control de macroblock. MBdataLocation puede contener cualquier valor si wPatternCode es cero. Cuando wPatternCode es cero, se recomiendan descodificadores, pero no es necesario establecer este valor en cero o en el mismo valor que en el siguiente comando de control de macroblock.

Para obtener más información sobre cómo se generan los macroblocks omitidos, vea Generar macroblocks omitidos.

Las combinaciones válidas de IntraMacroblock, MotionForward, MotionBackward, MotionType, MvertFieldSel y MVector se muestran en las tablas de la primera parte de la estructura de comandos de control de macrobloque.

Requisitos

Requisito Valor
Header dxva.h (incluir Dxva.h)

Consulte también

DXVA_ConfigPictureDecode

DXVA_MBctrl_P_HostResidDiff_1

DXVA_MVvalue

DXVA_PictureParameters

DXVA_TCoefSingle