structure DXVA_MBctrl_P_OffHostIDCT_1 (dxva.h)

La structure DXVA_MBctrl_P_OffHostIDCT_1 est envoyée une fois par macroblock par le décodeur hôte à l’accélérateur pour spécifier les commandes de contrôle macroblock pour la plupart des images nonintra à l’aide d’IDCT hors hôte.

Syntaxe

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;

Membres

wMBaddress

Spécifie l’adresse macroblock du macroblock actuel dans l’ordre d’analyse raster. Pour obtenir des exemples d’adresses macroblock, consultez les adresses macroblock.

wMBtype

Spécifie le type de macroblock en cours de traitement. Les bits suivants définissent le traitement macroblock.

Bits Description
15 à 12 MvertFieldSel_3 (bit 15 le bit le plus significatif) via MvertFieldSel_0 (bit 12)
Spécifie la sélection de champs verticaux pour les vecteurs de mouvement correspondants envoyés plus loin dans la commande de contrôle macroblock. Pour le mouvement basé sur des images avec une structure d’image de cadre (par exemple, pour H.261 et H.263), ces bits doivent tous être zéro. L’utilisation de ces bits est identique à celle spécifiée pour les bits correspondants dans la section 6.3.17.2 de MPEG-2.
11 Bit réservé
Doit être zéro.
10 HostResidDiff
Spécifie si les blocs décodés de différence de domaine spatial sont envoyés ou si les coefficients de transformation sont envoyés pour l’IDCT hors hôte pour le macroblock actuel.
Cet indicateur doit être zéro si bConfigResidDiffHost est zéro. Cet indicateur doit être 1 si bConfigResidDiffAccelerator est zéro. Cet indicateur est toujours égal à zéro dans DXVA_MBctrl_P_OffHostIDCT_1.
9 et 8 MotionType
Spécifie le type de mouvement dans l’image. Par exemple, pour le mouvement basé sur le cadre avec une structure d’image de cadre (comme dans H.261), le bit 9 doit être égal à 1 et 8 bits doit être égal à zéro.
L’utilisation de ces bits correspond directement à l’utilisation de frame_motion_type ou de bits field_motion_type dans MPEG-2 lorsque ces bits sont présents dans MPEG-2. L’utilisation de ces bits est expliquée plus en détail dans la section Remarques suivantes.
7 et 6 MBscanMethod
Spécifie la méthode d’analyse à utiliser.
Cela doit être égal à bPicScanMethod si bPicScanFixed est 1.
Si bConfigHostInverseScan est zéro, MBscanMethod doit être l’une des valeurs suivantes :
  • Le bit 6 est zéro et le bit 7 est zéro pour l’analyse zigzag (MPEG-2 Figure 7-2).
  • Le bit 6 est 1 et le bit 7 est égal à zéro pour l’analyse verticale alternative.
  • Le bit 6 est zéro et le bit 7 est 1 pour l’analyse horizontale alternative.
Si bConfigHostInverseScan est 1, MBscanMethod doit être égal à la valeur suivante :
  • Le bit 6 est 1 et le bit 7 est 1 pour l’analyse arbitraire avec l’adresse de coefficient absolu.
BPicScanMethod et bPicScanFixed sont membres de DXVA_PictureParameters . bConfigHostInverseScan est membre de DXVA_ConfigPictureDecode.
5 FieldResidual
Indique si les blocs de différence résiduelle utilisent une structure IDCT de champ comme spécifié dans MPEG-2.
Cet indicateur doit être 1 si le membre bPicStructure de DXVA_PictureParameters est 1 ou 2.
Lorsqu’il est utilisé pour MPEG-2, FieldResidual doit être zéro si l’indicateur frame_pred_frame_DCT dans la syntaxe MPEG-2 est 1 et doit être égal à l’élément dct_type de la syntaxe MPEG-2 si dct_type est présent pour le macroblock.
4 H261LoopFilter
Spécifie si le filtre de boucle H.261 (section 3.2.3 de H.261) est actif pour la prédiction de macroblock actuelle. Le filtre de boucle H.261 est un filtre de boucle Â1/4, Â1/2, Â1/4 appliqué horizontalement et verticalement à tous les six blocs d’un macroblock H.261, sauf aux bords des blocs où l’un des appuis se trouve à l’extérieur du bloc. Dans ce cas, le filtre est modifié pour avoir des coefficients 0, 1, 0. La précision arithmétique complète est conservée avec l’arrondi à des entiers 8 bits à la sortie du processus de filtre 2D (demi-entier ou valeurs supérieures arrondies).
3 Motion4MV
Indique que le mouvement avant utilise un vecteur de mouvement distinct pour chacun des quatre blocs de luminance dans le macroblock, comme utilisé dans les annexes H.263 F et J.Motion4MV doit être zéro si MotionForward est zéro ou si le membre bPic4MVallowed de DXVA_PictureParameters est zéro.
2 MotionBackward
Utilisé comme spécifié pour le macroblock_motion_backwardparameter correspondant dans MPEG-2. Si le membre bPicBackwardPrediction de DXVA_PictureParameters est zéro, MotionBackward doit être zéro. L’utilisation de ce bit est expliquée plus en détail dans la section Remarques suivantes.
1 MotionForward
Utilisé comme spécifié pour le macroblock_motion_forward correspondant dans MPEG-2. L’utilisation de ce bit est expliquée plus en détail dans la section Remarques suivantes.
0 IntraMacroblock
Indique que le macroblock est codé comme intra et qu’aucun vecteur de mouvement n’est utilisé pour le macroblock actuel. Correspond à macroblock_intrain MPEG-2. L’utilisation de ce bit est expliquée plus en détail dans la section Remarques suivantes.

dwMB_SNL

Spécifie le nombre de macroblocks ignorés à générer en suivant le macroblock actuel et indique l’emplacement des données de différence résiduelles pour les blocs du macroblock actuel. Ce membre contient deux variables : MBskipsFollowing dans les 8 bits les plus significatifs et MBdataLocation dans les 24 bits les moins significatifs. MBskipsFollowing indique le nombre de macroblocks ignorés à générer en suivant le macroblock actuel. MBdataLocation est un index dans la mémoire tampon de données des blocs de différence résiduelle IDCT. Cet index indique l’emplacement des données de différence résiduelles pour les blocs du macroblock actuel, exprimé sous la forme d’un multiple de 32 bits.

wPatternCode

Indique si les données de différence résiduelles sont envoyées pour chaque bloc dans le macroblock.

Le bit (11-i) de wPatternCode (où i est l’index du bloc dans le bloc de macroblock et le bit 0 représente le bit le moins significatif) indique si les données de différence résiduelles sont envoyées pour le bloc i (Voir décodage d’image orientée macroblock pour plus d’informations). La valeur i est l’index du bloc dans le macroblock comme spécifié dans les chiffres MPEG-2 6-10, 6-11 et 6-12 (ordre de raster-scan pour Y, suivi de 4:2:0 blocs de Cb dans l’ordre raster-scan, suivi de 4:2:0 blocs de Cr, suivi de 4:2:2 blocs de Cb, suivi de 4:2:2 blocs de Cr, suivi de 4:4:4 blocs de Cb, suivi de 4:4:4 blocs de Cr). Les données des blocs codés (blocs ayant le bit (11-i) égal à 1) sont trouvées dans la mémoire tampon de codage résiduelle dans le même ordre d’indexation (augmentant i). Pour les données MPEG-2:0, la valeur de wPatternCode correspond au déplacement de la valeur décodée de CBP vers la gauche par six positions de bits (les positions de bits inférieures utilisées pour les formats de couleur 4:2:2 et 4:4:4).

Si le membre bConfigSpatialResidInterleaved de DXVA_ConfigPictureDecode est 1, les différences résiduelles basées sur l’hôte sont envoyées dans une forme chromatique correspondant à celle du format de pixel YUV en cours d’utilisation. Dans ce cas, chaque paire cb et spatialement correspondante cr de blocs est traitée comme une unité de structure de données de différence résiduelle unique. Cela ne modifie pas la valeur ou la signification de wPatternCode, mais implique que les deux membres de chaque paire de blocs de données Cb et Cr sont envoyés chaque fois que l’un de ces blocs de données a le jeu de bits correspondant dans wPatternCode. Si le bit dans wPatternCode pour un bloc de données particulier est zéro, les valeurs de données de différence résiduelle correspondantes doivent être envoyées comme zéro chaque fois que cette paire nécessite l’envoi d’un bloc de données de différence résiduelle pour un bloc avec un bit wPatternCode égal à zéro.

bNumCoef[DXVA_NumBlocksPerMB_420]

Chaque valeur du tableau bNumCoef indique le nombre de coefficients dans la mémoire tampon de données de différence résiduelle pour chaque bloc i du macroblock.

L’indice de tableau i est l’index du bloc dans le macroblock comme spécifié dans la vidéo MPEG-2 Figures 6-10, 6-11 et 6-12 (ordre raster-scan pour Y, suivi de Cb, suivi de Cr).

Ce membre est utilisé uniquement lorsque l’indicateur HostResidDiff (bit 10 dans wMBtype) est zéro et bChromaFormat est 1 (4:2:0). Si elle est utilisée dans les formats 4:2:2 ou 4:4:4, elle augmente la taille des commandes de contrôle macroblock classiques au-delà d’une limite d’alignement de mémoire critique. Par conséquent, le bit TCoefEOB dans la structure DXVA_TCoefSingle est utilisé pour déterminer le nombre de coefficients dans chaque bloc dans les cas autres que 4:2:0.

L’objectif de bNumCoef est d’indiquer la quantité de données présentes pour chaque bloc dans la mémoire tampon de données de différence résiduelle, exprimée en tant que nombre de coefficients présents. Lorsque le membre bConfig4GroupedCoefs de la structure DXVA_ConfigPictureDecode est 1, bNumCoef peut contenir le nombre réel de coefficients envoyés pour le bloc ou cette valeur arrondie à plusieurs de quatre. Les données de ces coefficients sont trouvées dans la mémoire tampon de différence résiduelle dans le même ordre.

MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off]

Tableau contenant la valeur du ou des vecteurs de mouvement pour le macroblock, chacun représenté à l’aide d’une structure de DXVA_MVvalue .

Notes

Chaque macroblock ignoré spécifié par MBskipsFollowing doit être généré de manière mathématiquement équivalente à l’incrémentation de la valeur de wMBaddress , puis en répétant la même commande de contrôle macroblock. Toute commande de contrôle macroblock avec une valeur non nulle pour MBskipsFollowing spécifie comment la prédiction compensée par mouvement doit être effectuée pour chaque macroblock à ignorer et est équivalente (sauf pour la valeur de MBskipsFollowing) à une spécification explicite de la génération de la première série de macroblocks ignorés. Ainsi, chaque fois que MBskipsFollowing n’est pas zéro, les valeurs suivantes doivent toutes être égales à zéro : Motion4MV, IntraMacroblock et bNumCoef.

MBdataLocation est un index dans la mémoire tampon de données de bloc de différence résiduelle IDCT, indiquant l’emplacement des données de différence résiduelles pour les blocs du macroblock actuel, exprimée sous la forme d’un multiple de 32 bits. Doit être égal à zéro pour le premier macroblock dans la mémoire tampon de commande de contrôle macroblock. MBdataLocation peut contenir une valeur si wPatternCode est égal à zéro. Lorsque wPatternCode est égal à zéro, les décodeurs sont recommandés, mais ne sont pas nécessaires pour définir cette valeur sur zéro ou sur la même valeur que dans la commande de contrôle macroblock suivante.

Pour plus d’informations sur la façon dont les macroblocks ignorés sont générés, consultez Génération de macros ignorées.

Les combinaisons valides d’IntraMacroblock, MotionForward, MotionBackward, MotionType, MvertFieldSel et MVector sont affichées dans les tableaux de la première partie de la structure de commande de contrôle Macroblock.

Spécifications

   
En-tête dxva.h (include Dxva.h)

Voir aussi

DXVA_ConfigPictureDecode

DXVA_MBctrl_P_HostResidDiff_1

DXVA_MVvalue

DXVA_PictureParameters

DXVA_TCoefSingle