estructura DXVA_MBctrl_P_HostResidDiff_1 (dxva.h)
El descodificador de host envía una DXVA_MBctrl_P_HostResidDiff_1 estructura una vez por cada macrobloqueo al acelerador para especificar comandos de control de macroblock para la mayoría de los casos de imagen que no son de entrada cuando se usa IDCT basado en host.
Sintaxis
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;
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 bloqueo de macros, vea direcciones de bloqueo de macros.
wMBtype
Especifica el tipo de macroblock que se está procesando. Los bits siguientes definen el contenido de wMBtype.
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 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. La marca HostResidDif siempre es igual a 1 en esta estructura. Esta marca debe ser cero si bConfigResidDiffHost es cero. Esta marca debe ser 1 si bConfigResidDiffAccelerator es cero. |
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 la sección 6.3.17.1 y tablas 6-17 y 6-18 de vídeo 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 Esta variable no tiene ningún significado y estos bits deben establecerse en cero en esta estructura. |
5 | FieldResidual Indica si los bloques de diferencia residual usan una estructura IDCT de campo como se especifica en MPEG-2. 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 variable frame_pred_frame_DCT en la sintaxis MPEG-2 es 1 y debe ser igual a la variable dct_type en 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 separado de 1/4, 1/2, 1/4 aplicado horizontal y verticalmente a los seis bloques de un macrobloque H.261, excepto en los bordes del bloque donde uno de los toques 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 de medio entero o superior redondeados). |
3 | Motion4MV Variable que 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 de la manera especificada para la variable macroblock_motion_backward 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 para la variable 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 usa ningún vector 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 macros 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 macros 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. Este índice indica la ubicación de los datos de diferencia residual para los bloques del bloque de macrobloque actual, expresado como un múltiplo de 32 bits.
wPatternCode
Indica si se envían datos de diferencia residual para cada bloque del bloque actual.
Bit (11-i) de wPatternCode (donde bit cero es los bits menos significativos) indica si los datos de diferencia residual se envían para el bloque i, donde i es el índice del bloque dentro del bloque macroblock, tal y como se especifica en las figuras MPEG-2 6-10, 6-11 y 6-12 (orden de examen de trama para Y, seguido de 4:2:0 bloques de Cb en orden de examen raster, 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, seguidos de 4:4:4:4 bloques de Cr). Los datos de los bloques codificados (esos 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 la COMBINACIÓN (patrón de bloque codificado) a la izquierda por seis posiciones de bits (esas posiciones de bits inferiores que se usan para 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 de 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 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 cualquiera 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.
wPC_Overflow
Especifica qué bloques del bloque de macros usan datos de diferencia residual de desbordamiento.
Al usar la descodificación residual basada en host con el miembro bPicOverflowBlocks de DXVA_PictureParameters igual a 1 e IntraMacroblock igual a cero (el método de desbordamiento 8-8), wPC_Overflow contiene el código de patrón de los bloques de desbordamiento. (El código de patrón se especifica de la misma manera que para wPatternCode). Los datos de los bloques de desbordamiento codificados (esos 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).
dwReservedBits2
Bits reservados usados para empaquetar y alinear. Debe ser cero.
MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off]
Matriz que contiene el valor de los vectores de movimiento para el bloque de macros, cada vector de movimiento se representa 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.
El contenido de un comando de control de macroblock con un valor distinto de cero para MBskipsFollowing es equivalente (excepto el valor de MBskipsFollowing) al contenido de la primera de las series de macros omitidas. Por lo tanto, siempre que MBskipsFollowing no sea cero, los siguientes miembros de estructura y variables deben ser iguales a cero: Motion4MV, IntraMacroblock, wPatternCodey wPC_Overflow. Cada macroblock omitido posterior se genera de la misma manera que la primera, excepto para incrementar el valor de wMBaddress.
MBdataLocation debe ser cero para el primer bloque de macros del búfer de comandos de control de macroblock. Para los macroblocks distintos del primer bloque de macros del búfer de comandos del control 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) |