DXVA_MBctrl_P_HostResidDiff_1-Struktur (dxva.h)
Die DXVA_MBctrl_P_HostResidDiff_1-Struktur wird einmal pro Makroblock vom Hostdecoder an die Zugriffstaste gesendet, um Makroblocksteuerungsbefehle für die meisten Nicht-Intra-Bildfälle anzugeben, wenn hostbasierte IDCT verwendet wird.
Syntax
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;
Member
wMBaddress
Gibt die Makroblockadresse des aktuellen Makroblocks in der Rasterscanreihenfolge an. Beispiele für Makroblockadressen finden Sie unter Makroblockadressen.
wMBtype
Gibt den Typ des zu verarbeitenden Makroblocks an. Die folgenden Bits definieren den Inhalt von wMBtype.
Bits | Beschreibung |
---|---|
15 bis 12 | MvertFieldSel_3 (Bit 15, das bedeutendste Bit) bis MvertFieldSel_0 (Bit 12) Gibt die vertikale Feldauswahl für die entsprechenden Bewegungsvektoren an, die später im Makroblock-Steuerelementbefehl gesendet werden. Für framebasierte Bewegungen mit einer Framebildstruktur (z. B. für H.261 und H.263) müssen diese Bits alle null sein. Die Verwendung dieser Bits ist die gleiche wie für die entsprechenden Bits in Abschnitt 6.3.17.2 von MPEG-2 angegeben. |
11 | Reserviertes Bit. Muss Null sein. |
10 | HostResidDiff Gibt an, ob für den aktuellen Makroblock entschlüsselte Blöcke für die Restdifferenz der räumlichen Domäne gesendet werden oder ob Transformationskoeffizienten für off-host IDCT gesendet werden. Das Flag HostResidDif ist in dieser Struktur immer gleich 1. Dieses Flag muss null sein, wenn bConfigResidDiffHost 0 ist. Dieses Flag muss 1 sein, wenn bConfigResidDiffAccelerator null ist. |
9 und 8 | MotionType Gibt den Bewegungstyp im Bild an. Beispiel: Für framebasierte Bewegungen mit einer Framebildstruktur (wie in H.261) muss Bit 9 1 und Bit 8 null sein. Die Verwendung dieser Bits entspricht direkt der Verwendung von frame_motion_type oder field_motion_type Bits in Abschnitt 6.3.17.1 und den Tabellen 6-17 und 6-18 von MPEG-2-Videos, wenn diese Bits in MPEG-2 vorhanden sind. Die Verwendung dieser Bits wird im folgenden Abschnitt "Hinweise" näher erläutert. |
7 und 6 | MBscanMethod Diese Variable hat keine Bedeutung, und diese Bits sollten in dieser Struktur auf 0 festgelegt werden. |
5 | FieldResidual Gibt an, ob die Restdifferenzblöcke eine IDCT-Feldstruktur verwenden, wie in MPEG-2 angegeben. Muss 1 sein, wenn das bPicStructure-Element von DXVA_PictureParameters 1 oder 2 ist. Bei Verwendung für MPEG-2 muss FieldResidual null sein, wenn die frame_pred_frame_DCT Variable in der MPEG-2-Syntax 1 ist, und muss gleich der variablen dct_type in der MPEG-2-Syntax sein, wenn dct_type für den Makroblock vorhanden ist. |
4 | H261LoopFilter Gibt an, ob der H.261-Schleifenfilter (Abschnitt 3.2.3 von H.261) für die aktuelle Makroblockvorhersage aktiv ist. Der H.261-Schleifenfilter ist ein trennbarer 1/4-, 1/2-, 1/4-Filter, der sowohl horizontal als auch vertikal auf alle sechs Blöcke in einem H.261-Makroblock angewendet wird, mit Ausnahme der Blockränder, an denen einer der Tipper außerhalb des Blocks fallen würde. In solchen Fällen wird der Filter so geändert, dass er die Koeffizienten 0, 1, 0 aufweist. Die vollständige arithmetische Genauigkeit wird beibehalten, indem bei der Ausgabe des 2D-Filterprozesses auf 8-Bit-Ganzzahlen gerundet wird (halbzahlige oder höhere Werte, die aufgerundet werden). |
3 | Motion4MV Eine Variable, die angibt, dass Vorwärtsbewegung einen eindeutigen Bewegungsvektor für jeden der vier Leuchtdichteblöcke im Makroblock verwendet, wie in den H.263-Anhängen F und J. Motion4MV muss null sein, wenn MotionForward null ist oder wenn der bPic4MVallowed-Member von DXVA_PictureParameters null ist. |
2 | MotionBackward Wird auf die für die entsprechende macroblock_motion_backward Variable in MPEG-2 angegebene Weise verwendet. Wenn der bPicBackwardPrediction-Member von DXVA_PictureParameters null ist, muss MotionBackward null sein. Die Verwendung dieses Bits wird im folgenden Abschnitt "Hinweise" näher erläutert. |
1 | MotionForward Wird für die entsprechende macroblock_motion_forward Variable in MPEG-2 verwendet. Die Verwendung dieses Bits wird im folgenden Abschnitt "Hinweise" näher erläutert. |
0 | IntraMacroblock Gibt an, dass der Makroblock als intra codiert ist und keine Bewegungsvektoren für den aktuellen Makroblock verwendet werden. Entspricht macroblock_intrain MPEG-2. Die Verwendung dieses Bits wird im folgenden Abschnitt "Hinweise" näher erläutert. |
dwMB_SNL
Gibt die Anzahl der übersprungenen Makroblocks an, die nach dem aktuellen Makroblock generiert werden sollen, und gibt die Position der Restdifferenzdaten für die Blöcke des aktuellen Makroblocks an. Dieser Member enthält zwei Variablen: MBskipsFollowing in den wichtigsten 8 Bits und MBdataLocation in den am wenigsten signifikanten 24 Bits. MBskipsFollowing gibt die Anzahl der übersprungenen Makroblocks an, die nach dem aktuellen Makroblock generiert werden sollen. MBdataLocation ist ein Index in den Restdifferenzblockdatenpuffer. Dieser Index gibt die Position der Restdifferenzdaten für die Blöcke des aktuellen Makroblocks an, ausgedrückt als Vielfaches von 32 Bits.
wPatternCode
Gibt an , ob Restdifferenzdaten für jeden Block im aktuellen Makroblock gesendet werden.
Bit (11-i) von wPatternCode (wobei Bit null die am wenigsten signifikanten Bits ist) gibt an, ob Restdifferenzdaten für Block i gesendet werden, wobei i der Index des Blocks innerhalb des Makroblocks ist, wie in MPEG-2 Abbildungen 6-10, 6-11 und 6-12 angegeben (Rasterscanreihenfolge für Y, gefolgt von 4:2:0-Blöcken von Cb in raster-scan-Reihenfolge, gefolgt von 4:2:0-Blöcken von Cr, gefolgt von 4:2:2-Blöcken von Cb, gefolgt von 4:2:2-Blöcken von Cr, gefolgt von 4:4:4-Blöcken von Cb, gefolgt von 4:4:4-Blöcken von Cr). Die Daten für die codierten Blöcke (die Blöcke mit Bit (11-i) gleich 1) befinden sich im Restcodierungspuffer in derselben Indizierungsreihenfolge (mit i erhöhend). Bei 4:2:0 MPEG-2-Daten entspricht der Wert von wPatternCode dem Verschieben des decodierten Werts des CBP (codierten Blockmusters) nach links um sechs Bitpositionen (die unteren Bitpositionen, die für die Chroma-Formate 4:2:2 und 4:4:4 verwendet werden).
Wenn das bConfigSpatialResidInterleaved-Element von DXVA_ConfigPictureDecode 1 ist, werden hostbasierte Restunterschiede in einer chroma-verschachtelten Form gesendet, die der des verwendeten YUV-Pixelformats entspricht. In diesem Fall wird jedes Cb- und das räumlich entsprechende Cr-Blöckepaar als einzelne Restdifferenzstruktureinheit behandelt. Dies ändert den Wert oder die Bedeutung von wPatternCode nicht, impliziert aber, dass beide Member jedes Paars von Cb- und Cr-Datenblöcken gesendet werden, wenn einer dieser Datenblöcke das entsprechende Bit in wPatternCode festgelegt hat. Wenn das Bit in wPatternCode für einen bestimmten Datenblock 0 (null) ist, müssen die entsprechenden Datenwerte der Restdifferenz als 0 gesendet werden, wenn diese Kopplung das Senden eines Restdifferenzdatenblocks für einen Block mit einem wPatternCode-Bit gleich 0 erfordert.
wPC_Overflow
Gibt an, welche Blöcke des Makroblocks Überlauf-Restdifferenzdaten verwenden.
Bei Verwendung der hostbasierten Restdifferenzdecodierung mit dem bPicOverflowBlocks-Member von DXVA_PictureParameters gleich 1 und IntraMacroblock gleich 0 (die 8-8-Überlaufmethode) enthält wPC_Overflow den Mustercode der Überlaufblöcke. (Der Mustercode wird auf die gleiche Weise wie für wPatternCode angegeben.) Die Daten für die codierten Überlaufblöcke (Blöcke mit Bit (11-i) gleich 1) befinden sich im Restcodierungspuffer in derselben Indizierungsreihenfolge (erhöhend i).
dwReservedBits2
Reservierte Bits, die zum Verpacken und Ausrichten verwendet werden. Muss Null sein.
MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off]
Ein Array, das den Wert der Bewegungsvektoren für den Makroblock enthält, wird jeder Bewegungsvektor durch eine DXVA_MVvalue-Struktur dargestellt.
Hinweise
Jeder von MBskipsFollowing angegebene übersprungene Makroblock muss mathematisch äquivalent zum Erhöhen des Werts von wMBaddress und anschließender Wiederholung desselben Makroblock-Steuerelementbefehls generiert werden.
Der Inhalt eines Makroblock-Steuerelementbefehls mit einem Wert ungleich Null für MBskipsFollowing entspricht (mit Ausnahme des Werts von MBskipsFollowing) dem Inhalt des ersten der Reihe übersprungener Makroblocks. Wenn MBskipsFollowing also nicht null ist, müssen die folgenden Strukturmember und Variablen gleich 0 sein: Motion4MV, IntraMacroblock, wPatternCodeund wPC_Overflow. Jeder nachfolgende übersprungene Makroblock wird dann auf die gleiche Weise wie der erste generiert, mit Ausnahme der Inkrementierung des Werts von wMBaddress.
MBdataLocation muss für den ersten Makroblock im Befehlspuffer der Makroblocksteuerung null sein. Für Makroblocks, die nicht der erste Makroblock im Befehlspuffer der Makroblocksteuerung sind, kann MBdataLocation einen beliebigen Wert enthalten, wenn wPatternCode null ist. Wenn wPatternCode null ist, werden Decoder empfohlen, aber nicht erforderlich, um diesen Wert entweder auf 0 oder auf den gleichen Wert wie im nächsten Makroblock-Steuerungsbefehl festzulegen.
Weitere Informationen dazu, wie übersprungene Makroblocks generiert werden, finden Sie unter Generieren übersprungener Makroblocks.
Gültige Kombinationen von IntraMacroblock, MotionForward, MotionBackward, MotionType, MvertFieldSel und MVector werden in den Tabellen in First Part of Macroblock Control Command Structure angezeigt.
Anforderungen
Anforderung | Wert |
---|---|
Header | dxva.h (dxva.h einschließen) |