Freigeben über


DXVA_MBctrl_P_OffHostIDCT_1-Struktur (dxva.h)

Die DXVA_MBctrl_P_OffHostIDCT_1-Struktur wird einmal pro Makroblock vom Hostdecoder an die Zugriffstaste gesendet, um Makroblocksteuerungsbefehle für die meisten Nicht-Intra-Bilder mithilfe von off-host IDCT anzugeben.

Syntax

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;

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 die Makroblockverarbeitung.

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.
Dieses Flag muss null sein, wenn bConfigResidDiffHost 0 ist. Dieses Flag muss 1 sein, wenn bConfigResidDiffAccelerator null ist. Dieses Flag ist in DXVA_MBctrl_P_OffHostIDCT_1 immer gleich Null.
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 MPEG-2, 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
Gibt die zu verwendende Scanmethode an.
Dies muss gleich bPicScanMethod sein, wenn bPicScanFixed den Wert 1 aufweist.
Wenn bConfigHostInverseScan null ist, muss MBscanMethod einer der folgenden Werte sein:
  • Bit 6 ist null und Bit 7 ist null für Zickzackscan (MPEG-2 Abbildung 7-2).
  • Bit 6 ist 1 und Bit 7 ist null für die alternative vertikale Überprüfung.
  • Bit 6 ist null und Bit 7 ist 1 für die alternative horizontale Überprüfung.
Wenn bConfigHostInverseScan den Wert 1 aufweist, muss MBscanMethod gleich dem folgenden Wert sein:
  • Bit 6 ist 1 und Bit 7 ist 1 für beliebige Überprüfungen mit absoluter Koeffizientenadresse.
Sowohl bPicScanMethod als auch bPicScanFixed sind Member von DXVA_PictureParameters . bConfigHostInverseScan ist ein Mitglied von DXVA_ConfigPictureDecode.
5 FieldResidual
Gibt an, ob die Restdifferenzblöcke eine IDCT-Feldstruktur verwenden, wie in MPEG-2 angegeben.
Dieses Flag 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 das frame_pred_frame_DCT-Flag in der MPEG-2-Syntax 1 ist, und muss gleich dem dct_type Element 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
Gibt an, dass Vorwärtsbewegung einen eindeutigen Bewegungsvektor für jeden der vier Leuchtdichteblöcke im Makroblock verwendet, wie in H.263 Annexes F und J.Motion4MV verwendet, wenn MotionForward null ist oder wenn der bPic4MVallowed-Member von DXVA_PictureParameters null ist.
2 MotionBackward
Wird wie für die entsprechende macroblock_motion_backwardparameter in MPEG-2 angegeben 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 wie für die entsprechende macroblock_motion_forward in MPEG-2 angegeben 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. Dieses Element enthält zwei Variablen: MBskipsFollowing in den wichtigsten 8 Bits und MBdataLocation in den weniger 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 IDCT-Restdifferenz-Blockdatenpuffer. 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 Makroblock gesendet werden.

Bit (11-i) von wPatternCode (wobei i der Index des Blocks innerhalb des Makroblocks und Bit 0 das am wenigsten signifikante Bit darstellt) gibt an, ob Restdifferenzdaten für Block i gesendet werden (weitere Informationen finden Sie unter Makroblockorientierte Bilddecodierung). Der Wert i ist der Index des Blocks innerhalb des Makroblocks, wie in MPEG-2 Abbildungen 6-10 angegeben, 6-11 und 6-12 (Rasterscanreihenfolge für Y, gefolgt von 4:2:0 Blöcken von Cb in Raster-Scanreihenfolge, gefolgt von 4:2:0 Blöcken 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 (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 von CBP um sechs Bitpositionen nach links (die unteren Bitpositionen, die für die Chroma-Formate 4:2:2 und 4:4:4 verwendet werden).

Wenn der bConfigSpatialResidInterleaved-Member 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 korrespondierende Cr-Blöckepaar als einzelne Restdifferenzdatenstruktureinheit 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 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.

bNumCoef[DXVA_NumBlocksPerMB_420]

Jeder Wert im bNumCoef-Array gibt die Anzahl der Koeffizienten im Restdifferenzdatenpuffer für jeden Block i des Makroblocks an.

Das Array subscript i ist der Index des Blocks innerhalb des Makroblocks, wie in MPEG-2-Video Abbildungen 6-10, 6-11 und 6-12 angegeben (Rasterscanreihenfolge für Y, gefolgt von Cb, gefolgt von Cr).

Dieser Member wird nur verwendet, wenn das HostResidDiff-Flag (Bit 10 in wMBtype) null und bChromaFormat den Wert 1 (4:2:0) aufweist. Bei Verwendung im Format 4:2:2 oder 4:4:4 würde die Größe typischer Makroblocksteuerungsbefehle über eine kritische Speicherausrichtungsgrenze hinaus vergrößert. Daher wird das TCoefEOB-Bit innerhalb der DXVA_TCoefSingle-Struktur verwendet, um die Anzahl der Koeffizienten in jedem Block in Nicht-4:2:0-Fällen zu bestimmen.

Der Zweck von bNumCoef besteht darin, die Menge der Daten anzugeben, die für jeden Block im Restdifferenzdatenpuffer vorhanden sind, ausgedrückt als anzahl der vorhandenen Koeffizienten. Wenn der bConfig4GroupedCoefs-Member der DXVA_ConfigPictureDecode-Struktur 1 ist, kann bNumCoef entweder die tatsächliche Anzahl von Koeffizienten enthalten, die für den Block gesendet werden, oder dieser Wert, der auf ein Vielfaches von vier aufgerundet wird. Die Daten für diese Koeffizienten befinden sich im Restdifferenzpuffer in derselben Reihenfolge.

MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off]

Ein Array mit dem Wert der Bewegungsvektoren für den Makroblock, der jeweils mithilfe einer DXVA_MVvalue-Struktur dargestellt wird.

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. Jeder Makroblock-Steuerelementbefehl mit einem Wert ungleich 0 (null) für MBskipsFollowing gibt an, wie bewegungskompensierte Vorhersage für jeden zu überspringenden Makroblock ausgeführt werden soll, und entspricht (mit Ausnahme des Werts von MBskipsFollowing) einer expliziten Nicht-Skip-Spezifikation der Generierung des ersten der Reihe übersprungener Makroblocks. Wenn MBskipsFollowing also nicht null ist, müssen die folgenden Werte gleich 0 sein: Motion4MV, IntraMacroblock und bNumCoef.

MBdataLocation ist ein Index in den IDCT-Restdifferenzblockdatenpuffer, der die Position der Restdifferenzdaten für die Blöcke des aktuellen Makroblocks angibt, ausgedrückt als Vielfaches von 32 Bits. Muss für den ersten Makroblock im Befehlspuffer der Makroblocksteuerung null sein. MBdataLocation kann 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)

Weitere Informationen

DXVA_ConfigPictureDecode

DXVA_MBctrl_P_HostResidDiff_1

DXVA_MVvalue

DXVA_PictureParameters

DXVA_TCoefSingle