Génération de macros ignorées

La génération d’un macroblock ignoré dans DirectX VA diffère quelque peu de celle de MPEG-2 Video Section 7.6.6. Dans DirectX VA, les macroblocks ignorés sont générés dans une commande de contrôle macroblock distincte, plutôt que d’être déduits du type du macroblock non ignoré précédent et du type d’image affiché (par exemple, dans MPEG-2, la méthode de génération de macroblocks ignorés dépend du fait que l’image est une image P ou une image B.)

Les conditions suivantes sont requises lors de la génération et de l’utilisation de macroblocks ignorés :

  • Les macroblocks ignorés n’ont aucune différence résiduelle.

  • Les macroblocks ignorés peuvent être générés en répétant l’opération d’une commande de contrôle macroblock avec une adresse wMBaddress incrémentée. (Chaque macroblock ignoré suivant est généré de la même façon que le premier, à l’exception de l’incrémentation de la valeur de wMBaddress.)

  • L’évitement de macroblock est limité à l’habillage vers une nouvelle ligne de macroblocks dans l’image. (Une commande de contrôle macroblock distincte doit être envoyée pour générer le premier macroblock de chaque ligne de macroblocks.)

  • Le contenu d’une commande de contrôle macroblock avec une valeur différente de zéro pour MBskipsFollowing est équivalent (à l’exception de la valeur de MBskipsFollowing) au contenu d’une spécification explicite du premier de la série de macroblocks ignorés. Ainsi, chaque fois que MBskipsFollowing n’est pas égal à zéro, les membres de structure et les variables suivants doivent tous être égaux à zéro : Motion4MV, IntraMacroblock,wPatternCodeetwPC_Overflow.

En raison des trois premières conditions précédentes, un accélérateur peut implémenter la compensation de mouvement (lorsque Motion4MV est égal à zéro) en appliquant les vecteurs de mouvement spécifiés à un rectangle de largeur égale à l’expression suivante dans le composant de luminance et à un rectangle spécifié de la même façon dans les composants de chrominance. Cette méthode de compensation de mouvement en zone rectangulaire peut être effectuée par l’accélérateur plutôt qu’à l’aide de MBskipsFollowing+1 répétitions de la même opération de contrôle macrobloc.

(bMacroblockWidthMinus1+1) X (MBskipsFollowing+1)

Le membre bMacroblockWidthMinus1 est contenu dans DXVA_PictureParameters. La variable MBskipsFollowing se trouve dans le membre wMBtype de chaque structure de contrôle macroblock.

Macroblocks ignorés dans H.263 (Annexe F)

La génération de macroblocks ignorés dans H.263 avec le mode de prédiction avancé actif (Annexe F) nécessite la représentation de certains macroblocks ignorés en tant que macroblocks non ignorés dans les commandes de contrôle macroblock DirectX VA. Cette opération est effectuée afin de générer l’effet OBMC dans ces macroblocks.

Exemple de génération de macros ignorées dans MPEG-2

L’exemple suivant montre comment les commandes de contrôle macroblock sont utilisées lorsque des macroblocks ignorés sont générés. À des fins de démonstration, supposons que dans un flux MPEG-2, sept macroblocks sont utilisés de la manière suivante.

Numéro de macrobloc Description

0

Codé avec une différence résiduelle

1

Ignoré

2

Codé avec une différence résiduelle

3

Ignoré

4

Ignoré

5

Ignoré

6

Codé avec une différence résiduelle

Ces sept macroblocks nécessitent la génération (au moins) des cinq commandes de contrôle macroblock DirectX VA indiquées dans le tableau suivant. La variable MBskipsFollowing indique le nombre de macroblocks ignorés. Le membre wMBaddress indique l’adresse du macroblock. MBskipsFollowing et wMBaddress sont contenus dans les structures DXVA_MBctrl_P_OffHostIDCT_1 et DXVA_MBctrl_P_HostResidDiff_1 . (La variable MBskipsFollowing est définie dans le membre de structure dwMB_SNL .)

Macroblock, commande Valeurs de membre

First

wMBaddress = 0

MBskipsFollowing = 0

Second

wMBaddress = 1

MBskipsFollowing = 0

Third

wMBaddress = 2

MBskipsFollowing = 0

Quatrième

wMBaddress = 3

MBskipsFollowing = 2

Cinquième

wMBaddress = 6

MBskipsFollowing = 0