Freigeben über


Generieren übersprungener Makroblocks

Die Generierung eines übersprungenen Makroblocks in DirectX VA unterscheidet sich etwas von dem in MPEG-2 Video Section 7.6.6. In DirectX VA werden übersprungene Makroblocks in einem separaten Makroblock-Steuerelementbefehl generiert, anstatt vom Typ des vorherigen nichtskippierten Makroblocks und der Art des angezeigten Bilds abgeleitet zu werden (z. B. in MPEG-2 hängt die Methode zum Generieren übersprungener Makroblocks davon ab, ob es sich bei dem Bild um ein P-Bild oder ein B-Bild handelt.)

Die folgenden Bedingungen sind beim Generieren und Verwenden übersprungener Makroblocks erforderlich:

  • Übersprungene Makroblocks weisen keine Restunterschiede auf.

  • Übersprungene Makroblocks können generiert werden, indem der Vorgang eines Makroblock-Steuerelementbefehls mit einer inkrementierten wMBaddress wiederholt wird. (Jeder nachfolgende übersprungene Makroblock wird auf die gleiche Weise wie der erste generiert, mit Ausnahme der Inkrementierung des Werts von wMBaddress.)

  • Das Überspringen von Makroblocks ist auf den Umbruch in eine neue Zeile mit Makroblocks im Bild beschränkt. (Ein separater Makroblock-Steuerelementbefehl muss gesendet werden, um den ersten Makroblock jeder Zeile mit Makroblocks zu generieren.)

  • Der Inhalt eines Makroblock-Steuerelementbefehls mit einem Wert ungleich Null für MBskipsFollowing ist gleichwertig (mit Ausnahme des Werts von MBskipsFollowing) mit dem Inhalt einer expliziten Spezifikation der ersten Reihe übersprungener Makroblocks. Wenn MBskipsFollowing also nicht null ist, müssen die folgenden Strukturelemente und Variablen gleich Null sein: Motion4MV, IntraMacroblock, wPatternCode und wPC_Overflow.

Aufgrund der ersten drei vorherigen Bedingungen kann eine Beschleuniger bewegungskorrekturen (wenn Motion4MV null ist) implementieren, indem sie die angegebenen Bewegungsvektoren auf ein Rechteck der Breite anwenden, das dem folgenden Ausdruck in der Leuchtdichtekomponente entspricht, und einem ähnlich angegebenen Rechteck in den Chrominanzkomponenten. Diese Rechteck-Bewegungskorrektur-Methode kann von der Beschleuniger anstelle von MBskipsFollowing+1 Wiederholungen desselben Makroblock-Steuerungsvorgangs durchgeführt werden.

(bMacroblockWidthMinus1+1) X (MBskipsFollowing+1)

Das bMacroblockWidthMinus1-Element ist in DXVA_PictureParameters enthalten. Die MBskipsFollowing-Variable befindet sich im wMBtype-Element jeder Makroblock-Steuerelementstruktur.

Übersprungene Makroblocks in H.263 (Anhang F)

Die Generierung von übersprungenen Makroblocks in H.263 mit aktiviertem erweiterten Vorhersagemodus (Anhang F) erfordert, dass einige übersprungene Makroblocks als nichtskippierte Makroblocks in DirectX VA-Makroblock-Steuerelementbefehlen dargestellt werden. Dies geschieht, um den OBMC-Effekt innerhalb dieser Makroblocks zu generieren.

Generieren von übersprungenen Makroblocks im MPEG-2-Beispiel

Das folgende Beispiel zeigt, wie Makroblock-Steuerelementbefehle verwendet werden, wenn übersprungene Makroblocks generiert werden. Gehen Sie zu Demonstrationszwecken davon aus, dass in einem MPEG-2-Bitstream sieben Makroblocks wie folgt verwendet werden.

Makroblocknummer Beschreibung

0

Codiert mit einem Restunterschied

1

Übersprungen

2

Codiert mit einem Restunterschied

3

Übersprungen

4

Übersprungen

5

Übersprungen

6

Codiert mit einem Restunterschied

Diese sieben Makroblocks erfordern die Generierung (mindestens) der fünf DirectX VA-Makroblock-Steuerelementbefehle, die in der folgenden Tabelle dargestellt sind. Die MBskipsFollowing-Variable gibt die Anzahl der übersprungenen Makroblocks an. Das wMBaddress-Element gibt die Adresse des Makroblocks an. MBskipsFollowing und wMBaddress sind in den DXVA_MBctrl_P_OffHostIDCT_1 und DXVA_MBctrl_P_HostResidDiff_1 Strukturen enthalten. (Die MBskipsFollowing-Variable wird im dwMB_SNL Strukturelement definiert.)

Makroblock-Befehl Memberwerte

First

wMBaddress = 0

MBskipsFollowing = 0

Second

wMBaddress = 1

MBskipsFollowing = 0

Third

wMBaddress = 2

MBskipsFollowing = 0

Viertes

wMBaddress = 3

MBskipsFollowing = 2

5.

wMBaddress = 6

MBskipsFollowing = 0