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 Makroblock-Steuerelementbefehle für die meisten Nichtintra-Bilder mithilfe von Offhost-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;
Angehörige
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 wichtigste Bit) bis MvertFieldSel_0 (Bit 12) Gibt die vertikale Feldauswahl für entsprechende Bewegungsvektoren an, die später im Makroblock-Steuerelementbefehl gesendet werden. Bei framebasierten Bewegungen mit einer Rahmenbildstruktur (z. B. für H.261 und H.263) müssen diese Bits alle null sein. Die Verwendung dieser Bits entspricht dem für die entsprechenden Bits in Abschnitt 6.3.17.2 von MPEG-2 angegebenen Bits. |
11 |
Reservierte Bit- Muss null sein. |
10 |
HostResidDiff- Gibt an, ob decodierte Blöcke für räumliche Domänen gesendet werden oder ob Transformationskoeffizienten für off-host IDCT für den aktuellen Makroblock gesendet werden. Dieses Flag muss null sein, wenn bConfigResidDiffHost null ist. Dieses Flag muss 1 sein, wenn bConfigResidDiffAccelerator null ist. Dieses Kennzeichen ist in DXVA_MBctrl_P_OffHostIDCT_1 immer gleich Null. |
9 und 8 |
MotionType- Gibt den Animationstyp im Bild an. Bei framebasierten Bewegungen mit einer Framebildstruktur (wie in H.261) muss Bit 9 beispielsweise 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" weiter erläutert. |
7 und 6 |
MBscanMethod- Gibt die zu verwendende Scanmethode an. Dies muss bPicScanMethod entsprechen, wenn bPicScanFixed 1 ist. Wenn bConfigHostInverseScan null ist, muss MBscanMethod einen der folgenden Werte aufweisen:
|
5 |
FieldResidual- Gibt an, ob die Restdifferenzblöcke eine Feld-IDCT-Struktur verwenden, wie in MPEG-2 angegeben. Dieses Kennzeichen 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 gleich dem dct_type Element der MPEG-2-Syntax sein muss, 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 von Blockkanten, bei denen ein Tipper außerhalb des Blocks liegt. In solchen Fällen wird der Filter geändert, um Koeffizienten 0, 1, 0 zu haben. Die vollständige arithmetische Genauigkeit wird mit Rundung auf 8-Bit-Ganzzahlen bei der Ausgabe des 2D-Filterprozesses beibehalten (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 den Anhängen H.263 F und J.Motion4MV verwendet wird, muss null sein, wenn MotionForward null ist oder wenn das bPic4MVallowed-Element von DXVA_PictureParameters null ist. |
2 |
MotionBackward- Wird wie für die entsprechende macroblock_motion_backwardparameter in MPEG-2 verwendet. Wenn das bPicBackwardPrediction-Mitglied von DXVA_PictureParameters null ist, muss MotionBackward null sein. Die Verwendung dieses Bits wird weiter im folgenden Abschnitt "Hinweise" erläutert. |
1 |
MotionForward- Wird wie für die entsprechende macroblock_motion_forward in MPEG-2 verwendet. Die Verwendung dieses Bits wird weiter im folgenden Abschnitt "Hinweise" erläutert. |
0 |
IntraMacroblock- Gibt an, dass der Makroblock als intracodiert ist und keine Bewegungsvektoren für den aktuellen Makroblock verwendet werden. Entspricht macroblock_intrain MPEG-2. Die Verwendung dieses Bits wird weiter im folgenden Abschnitt "Hinweise" 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 am wenigsten signifikanten 24 Bit. MBskipsFollowing gibt die Anzahl der übersprungenen Makroblocks an, die nach dem aktuellen Makroblock generiert werden sollen. MBdataLocation- ist ein Index im 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 (Siehe Macroblock-Oriented 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 Rasterscanreihenfolge, 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:4 Blocks 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 (erhöhung i). 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 niedrigeren Bitpositionen werden für 4:2:2 und 4:4:4 Chroma-Formate verwendet).
Wenn das bConfigSpatialResidInterleaved Member von DXVA_ConfigPictureDecode 1 ist, werden hostbasierte Restunterschiede in einer chroma-interleavierten Form gesendet, die dem verwendeten YUV-Pixelformat entspricht. In diesem Fall wird jedes Cb- und raumbezogene Cr-Blöckepaar als einzelne Restdifferenz-Datenstruktureinheit behandelt. Dadurch wird der Wert oder die Bedeutung von wPatternCode-nicht geändert, aber es impliziert, dass beide Elemente der einzelnen Cb- und Cr-Datenblöcke gesendet werden, wenn eine dieser Datenblöcke den entsprechenden Bitsatz in wPatternCodehat. Wenn das Bit in wPatternCode für einen bestimmten Datenblock null ist, müssen die entsprechenden Restdifferenzdatenwerte als Null gesendet werden, wenn für diese Kopplung ein Restunterschiedsdatenblock für einen Block mit einem wPatternCode Bit gleich Null gesendet werden muss.
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).
Dieses Element wird nur verwendet, wenn das HostResidDiff Flag (Bit 10 in wMBtype) null ist und bChromaFormat- 1 (4:2:0) ist. Wenn sie in 4:2:2- oder 4:4:4-Formaten verwendet wird, würde sie die Größe typischer Makroblock-Steuerelementbefehle über eine kritische Speicherausrichtungsgrenze hinaus erhöhen. 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 bNumCoef ist die Angabe der Datenmenge, die für jeden Block im Restdifferenzdatenpuffer vorhanden ist, ausgedrückt als Die Anzahl der vorhandenen Koeffizienten. Wenn die bConfig4GroupedCoefs Element der DXVA_ConfigPictureDecode Struktur 1 ist, kann bNumCoef entweder die tatsächliche Anzahl der für den Block gesendeten Koeffizienten enthalten oder dieser Wert auf ein Vielfaches von vier aufgerundet ist. Die Daten für diese Koeffizienten werden im Restdifferenzpuffer in derselben Reihenfolge gefunden.
MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off]
Ein Array, das den Wert der Bewegungsvektoren für den Makroblock enthält, die jeweils mit einer DXVA_MVvalue Struktur dargestellt werden.
Bemerkungen
Jeder von MBskipsFollowing angegebene übersprungene Makroblock muss auf eine Weise generiert werden, die mathematisch dem Erhöhen des Werts von wMBaddress entspricht und dann denselben Makroblock-Steuerelementbefehl wiederholt. Jeder Makroblock-Steuerelementbefehl mit einem Wert ungleich null für MBskipsFollowing gibt an, wie die bewegungskompensierte Vorhersage ausgeführt werden soll, damit jeder Makroblock übersprungen werden soll, und entspricht (mit Ausnahme des Werts von MBskipsFollowing) einer expliziten Nonskip-Spezifikation der Generierung der ersten Reihe von übersprungenen Makroblocks. Wenn MBskipsFollowing nicht null ist, müssen die folgenden Werte alle gleich Null sein: Motion4MV, IntraMacroblockund bNumCoef.
MBdataLocation ist ein Index im IDCT-Restdifferenz-Blockdatenpuffer, der die Position der Restdifferenzdaten für die Blöcke des aktuellen Makroblocks angibt, ausgedrückt als ein Vielfaches von 32 Bit. Muss für den ersten Makroblock im Befehlspuffer des Makroblock-Steuerelements 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 Null oder auf denselben Wert wie im nächsten Makroblock-Steuerelementbefehl festzulegen.
Weitere Informationen dazu, wie übersprungene Makroblocks generiert werden, finden Sie unter Generieren von übersprungenen Makroblocks.
Gültige Kombinationen aus IntraMacroblock, MotionForward, MotionBackward, MotionType, MvertFieldSelund MVector werden in den Tabellen in Ersten Teil der Makroblock-Befehlsstrukturangezeigt.
Anforderungen
Anforderung | Wert |
---|---|
Header- | dxva.h (include Dxva.h) |