Première partie de la structure de commande de contrôle Macroblock

Les quatre premiers membres d’une structure de commande de contrôle macroblock générique sont toujours les mêmes. Le tableau suivant décrit les membres de la première partie de cette structure.

Membre Description

wMBaddress

Spécifie l’adresse macroblock du macroblock en cours de traitement.

wMBtype

Spécifie le type de macroblock en cours de traitement. Ce membre contient des indicateurs qui indiquent si la compensation de mouvement est utilisée pour prédire la valeur du macroblock et quel type de données de différence résiduelle est envoyé.

dwMB_SNL

Contient les deux champs MBskipsFollowing (dans les 8 bits supérieurs) et MBdataLocation (dans les 24 bits inférieurs).

MBskipsFollowing spécifie le nombre de macroblocks ignorés à générer après le macroblock actuel.

MBdataLocation est un index dans la mémoire tampon de données de bloc de différence résiduelle IDCT, qui indique l’emplacement des données de différence résiduelle pour les blocs du macroblock actuel.

wPatternCode

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

wMBaddress

Le membre de structure wMBaddress spécifie l’adresse macroblock du macroblock actuel dans l’ordre d’analyse raster. Le tableau suivant présente des exemples d’adresses macroblock.

Macrobloc Adresse

en haut à gauche

Zéro

en haut à droite

wPicWidthInMBminus1

en bas à gauche

wPicHeightInMBminus1 x (wPicWidthInMBminus1+1)

en bas à droite

(wPicHeightInMBminus1+1) x (wPicWidthInMBminus1+1) - 1

Les adresses wPicWidthInMBminus1 et wPicHeightInMBminus1 sont membres de la structure DXVA_PictureParameters .

wMBtype

Le membre de structure wMBtype spécifie le type de macroblock en cours de traitement. Ce membre contient un ensemble de bits qui définissent la façon dont les macroblocks et les vecteurs de mouvement sont traités. Les adresses bPic4MVallowed, bPicScanMethod, bPicBackwardPrediction, bPicStructure et bPicScanFixed sont membres de la structure DXVA_PictureParameters. L’adresse bConfigHostInverseScan est membre de la structure DXVA_ConfigPictureDecode .

Bits Description

15 à 12

MvertFieldSel_3 (bit 15, le plus significatif) via MvertFieldSel_0 (bit 12)

Spécifie la sélection verticale des champs pour les vecteurs de mouvement correspondants envoyés ultérieurement dans la commande de contrôle macroblock, comme indiqué dans les tableaux suivants. Pour le mouvement basé sur un cadre avec une structure d’image de cadre (par exemple, pour H.261 et H.263), ces bits doivent tous être zéro. Les bits dans MvertFieldSel_0, MvertFieldSel_1, MvertFieldSel_2 et MvertFieldSel_3 correspondent aux bits motion_vertical_field_select[r][s] de 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 résiduelle de domaine spatial sont envoyés ou si des coefficients de transformation sont envoyés pour idct hors hôte pour le macroblock actuel. Doit être égal à zéro si bConfigResidDiffHost est égal à zéro. Doit être égal à 1 si bConfigResidDiffAccelerator est égal à zéro.

9 et 8

MotionType

Spécifie le type de mouvement dans l’image. Par exemple, pour un mouvement basé sur un cadre avec une structure d’image de cadre (comme dans H.261), le bit 9 doit être 1 et le bit 8 doit être égal à zéro.

L’utilisation de ces bits correspond directement à l’utilisation des bits frame_motion_type ou field_motion_type dans la section 6.3.17.1 et les tables 6-17 et 6-18 de la norme vidéo MPEG-2 lorsque ces bits sont présents dans un flux de bits MPEG-2. L’utilisation de ces bits est expliquée plus en détail à la suite de ce tableau.

7 et 6

MBscanMethod

Spécifie la méthode d’analyse macroblock. Cette valeur doit être égale à bPicScanMethod si bPicScanFixed a la valeur 1. Si HostResidDiff a la valeur 1, cette variable n’a aucune signification et ces bits doivent être définis sur zéro.

Si bConfigHostInverseScan est égal à zéro, MBscanMethod doit avoir l’une des valeurs suivantes :

  • Bit 6 est zéro et bit 7 est zéro pour l’analyse en zigzag (MPEG-2 Figure 7-2)

  • Bit 6 est 1 et bit 7 est zéro pour l’analyse verticale alternative (MPEG-2 Figure 7-3)

  • Bit 6 est zéro et bit 7 est 1 pour l’analyse horizontale alternative (H.263 Figure I.2 Partie a)

Si bConfigHostInverseScan a la valeur 1, MBscanMethod doit être égal à la valeur suivante :

  • Bit 6 est 1 et bit 7 est 1 pour l’analyse arbitraire avec une adresse à coefficient absolu.

5

FieldResidual

Indique si les blocs de différence résiduelle utilisent une structure IDCT de champ spécifiée dans MPEG-2.

Cet indicateur doit être égal à 1 si bPicStructure a la valeur 1 ou 2. Cet indicateur doit être égal à zéro lorsqu’il est utilisé pour MPEG-2 si l’indicateur frame_pred_frame_DCT dans la syntaxe MPEG-2 est 1. Cet indicateur doit être égal à l’élément dct_type de la syntaxe MPEG-2 lorsqu’il est utilisé pour 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 macroblock actuelle. Le filtre de boucle H.261 est un filtre séparable 1/4, 1/2, 1/4 appliqué horizontalement et verticalement aux six blocs d’un macroblock H.261, sauf sur les bords de bloc où l’un des appuis serait en dehors 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 filtrage 2D (les valeurs de moitié ou supérieures sont arrondies vers le haut).

3

Motion4MV

Indique que le mouvement vers l’avant utilise un vecteur de mouvement distinct pour chacun des quatre blocs de luminance dans le bloc macro, comme utilisé dans les annexes F et J H.263. Motion4MV doit être égal à zéro si MotionForward est égal à zéro ou si bPic4MVallowed a la valeur zéro.

2

MotionBackward

Cette variable est utilisée comme spécifié pour le paramètre macroblock_motion_backward correspondant dans MPEG-2. Si le membre bPicBackwardPrediction de la structure DXVA_PictureParameters est égal à zéro, MotionBackward doit être égal à zéro.

1

MotionForward

Cette variable est utilisée 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 le texte qui suit ce tableau.

0

IntraMacroblock

Indique que le macroblock est codé comme intra et qu’aucun vecteur de mouvement n’est utilisé pour le macroblock actuel.

Cette variable correspond à la variable macroblock_intra dans MPEG-2. L’utilisation de ce bit est expliquée plus en détail dans le texte qui suit ce tableau.

Lorsque les macroblocks sont codés de manière prédictive, ils ont des valeurs de vecteur de mouvement associées. Les valeurs sont générées selon que les macroblocks sont utilisés pour les images codées sur le champ ou avec un frame. Il est important pour toute implémentation de prendre correctement en compte chaque type macroblock utilisé (en particulier pour les images structurées sur le champ ou les mouvements à double nombre premier).

Les deux tableaux suivants de cette section indiquent des combinaisons valides d’IntraMacroblock, MotionForward, MotionBackward, MotionType, MvertFieldSel et MVector pour les images codées sur un cadre et sur champ. MVector contient les composants horizontaux et verticaux d’un vecteur de mouvement. Les variables et indicateurs restants spécifient l’opération de vecteur de mouvement. Cela est déterminé en fonction du type de macroblock traité et si les macroblocks sont utilisés pour les images codées par frame ou par champ.

Les valeurs indiquées dans les tableaux suivants (dans cette section) se produisent pour les conditions suivantes :

  • H261LoopFilter, Motion4MV et bPicOBMC sont zéro.

  • L’indicateur PicCurrentField est égal à zéro, sauf si bPicStructure a la valeur 2 (champ inférieur). Dans ce cas, PicCurrentField est 1.

MVector est membre des structures DXVA_MBctrl_P_HostResidDiff_1 et DXVA_MBctrl_P_OffHostIDCT_1 . Les indicateurs et variables IntraMacroblock, MotionForward, MotionBackward, MotionType, MvertFieldSel, H261LoopFilter et Motion4MV sont des champs de bits contenus dans le membre wMBtype des structures DXVA_MBctrl_P_HostResidDiff_1 et DXVA_MBctrl_P_OffHostIDCT_1. bPicOBMC est membre de la structure DXVA_PictureParameters . L’indicateur PicCurrentField est dérivé du membre bPicStructure de DXVA_PictureParameters.

Les considérations suivantes s’appliquent lors de l’examen des tableaux suivants dans cette section :

  • À plusieurs endroits, le nom de variable MPEG-2 PMV est utilisé pour indiquer la valeur d’un vecteur de mouvement. Cette notation est utilisée pour faire la distinction entre la variable PMV telle que définie dans MPEG-2, qui est en coordonnées de trame, et un vecteur de mouvement qui peut être en coordonnées de champ (en d’autres termes, à la résolution à moitié verticale). Dans tous les cas, PMV fait référence à la valeur de PMV après sa mise à jour par la valeur actuelle du vecteur de mouvement (comme spécifié dans la section vidéo MPEG-2 section 7.6.3.1).

  • Les définitions de vector'[2][0] et vector'[3][0] se trouvent dans MPEG-2 Section 7.6.3.6. L’opération de décalage vers la gauche-affichée indique que le composant vertical est modifié en coordonnées de trame.

  • Dans les deux cas de « aucun mouvement » (0,0,0), les paramètres macroblock émulent un macroblock de prédiction avant (0,1,0) avec un vecteur de mouvement à valeur nulle. (Voir aussi MPEG-2 Section 7.6.3.5.)

  • Les valeurs affichées pour MotionType entre guillemets simples sont des représentations binaires (le premier nombre correspond au bit 9 et le second au bit 8).

  • L’opérateur de décalage vers la gauche dans la première table s’applique uniquement à la deuxième valeur affichée.

Images structurées par cadre

Le tableau suivant montre les combinaisons valides de paramètres d’élément pour les images structurées par cadre (lorsque le membre bPicStructure de la structure DXVA_PictureParameters est égal à 3).

IntraMacroblock, MotionForward, MotionBackward MotionType(la signification dépend du type d’image) MVector[0]MvertFieldSel_0 (1er, dir1) MVector[1]MvertFieldSel_1 (1er, dir2) MVector[2]MvertFieldSel_2 (2e, dir1) MVector[3]MvertFieldSel_3 (2e, dir2)

1,0,0 (intra)

'00' (intra)

-

-

-

-

-

-

-

-

0,0,0 (aucun mouvement)

'10' (aucun mouvement)

0

-

-

-

-

-

-

-

0,1,0

'10' (frame MC)

PMV[0][0]

-

-

-

-

-

-

-

0,0,1

'10' (frame MC)

-

-

PMV[0][1]

-

-

-

-

-

0,1,1

'10' (frame MC)

PMV[0][0]

-

PMV[0][1]

-

-

-

-

-

0,1,0

'01' (mc de champ)

PMV[0][0]

sel[0][0]

-

-

PMV[1][0]

sel[1][0]

-

-

0,0,1

'01' (mc de champ)

-

-

PMV[0][1]

sel[0][1]

-

-

PMV[1][1]

sel[1][1]

0,1,1

'01' (mc de champ)

PMV[0][0]

sel[0][0]

PMV[0][1]

sel[0][1]

PMV[1][0]

sel[1][0]

PMV[1][1]

sel[1][1]

0,1,0

'11' (double nombre premier)

PMV[0][0]

0 (haut)

vector'[2][0][0],

vector'[2][0][1]<<1

1 (bas)

PMV[0][0]

1

vector'[3][0][0],

vector'[3][0][1]<<1

0

Images structurées sur les champs

Le tableau suivant montre les combinaisons valides de paramètres d’élément pour les images structurées par champ (lorsque le membre bPicStructure de la structure DXVA_PictureParameters est égal à 1 ou 2).

IntraMacroblock, MotionForward, MotionBackward MotionType (la signification dépend du type d’image) MVector[0]MvertFieldSel_0 (1er, dir1) MVector[1]MvertFieldSel_1 (1er, dir2) MVector[2]MvertFieldSel_2 (2e, dir1) MVector[3]MvertFieldSel_3(2nd, dir2)

1,0,0 (intra)

'00' (intra)

-

-

-

-

-

-

-

-

0,0,0 (aucun mouvement)

'01' (aucun mouvement)

0

PicCurrentField

-

-

-

-

-

-

0,1,0

'01' (mc de champ)

PMV[0][0]

sel[0][0]

-

-

-

-

-

-

0,0,1

'01' (mc de champ)

-

-

PMV[0][1]

sel[0][1]

-

-

-

-

0,1,1

'01' (champ MC)

PMV[0][0]

sel[0][0]

PMV[0][1]

sel[0][1]

-

-

-

-

0,1,0

'10' (16x8 MC)

PMV[0][0]

sel[0][0]

-

-

PMV[1][0]

sel[1][0]

-

-

0,0,1

'10' (16x8 MC)

-

-

PMV[0][1]

sel[0][1]

-

-

PMV[1][1]

sel[1][1]

0,1,1

'10' (16x8 MC)

PMV[0][0]

sel[0][0]

PMV[0][1]

sel[0][1]

PMV[1][0]

sel[1][0]

PMV[1][1]

sel[1][1]

0,1,0

'11' (double nombre premier)

PMV[0][0]

PicCurrentField

vector'[2][0]

PicCurrentField

-

-

-

-

Paramètres d’élément valide supplémentaires pour les images de champ et de cadre

Les autres cas autorisés pour les images structurées par image et structurées sur le champ sont les suivants.

Valeurs Description

H261LoopFilter = 1

bPicOBMC = 0

Motion4MV = 0

Indique qu’un vecteur de mouvement vers l’avant est envoyé dans MVector[0] et que le filtre de boucle H.261 est actif pour la prédiction avant dans le macroblock.

MotionForward doit être égal à 1 dans ce cas, et IntraMacroblock et MotionBackward doivent être tous deux égal à zéro.

bPicOBMC = 0

Motion4MV = 1

Indique que quatre vecteurs de mouvement avant sont envoyés dans MVector[0] via MVector[3]. MotionForward doit être égal à 1 dans ce cas, et IntraMacroblock doit être égal à zéro.

Si MotionBackward a la valeur 1, un vecteur de cinquième mouvement est envoyé pour la prédiction descendante dans MVector[4].

bPicOBMC = 1

Motion4MV = 0

Indique que 10 vecteurs de mouvement vers l’avant sont envoyés dans MVector[0] via MVector[9] pour la spécification du mouvement OBMC, et que les valeurs des quatre premiers vecteurs de mouvement sont toutes égales.

Si MotionBackward a la valeur 1, un vecteur de mouvement onzième est envoyé pour la prédiction descendante dans MVector[10].

bPicOBMC = 1

Motion4MV = 1

Indique que 10 vecteurs de mouvement vers l’avant sont envoyés dans MVector[0] via MVector[9] pour la spécification du mouvement OBMC, et que les valeurs des quatre premiers vecteurs de mouvement peuvent différer les unes des autres.

Si MotionBackward a la valeur 1, un vecteur de mouvement onzième est envoyé pour la prédiction descendante dans MVector[10].

Note L’opérateur moyen est mathématiquement identique ((s1+s2+1)>>1) pour MPEG-1, le filtrage de prédiction mpeg-2 demi-échantillon, la moyenne bidirectionnelle et la combinaison de parités identique-opposée à deux nombres premiers. L’opérateur de moyenne bidirectionnelle H.263 n’ajoute pas le décalage de +1 avant le déplacement vers la droite. Le membre bBidirectionalAveragingMode de DXVA_PictureParameters détermine laquelle de ces méthodes est utilisée.