DXVA_SliceInfo-Struktur (dxva.h)

Die DXVA_SliceInfo-Struktur wird vom Hostdecoder an den Accelerator gesendet, um die Parameter auf Sliceebene eines Slices von Bitstreamdaten für die Off-Host-Bitstream-komprimierte Bilddecodierung anzugeben.

Syntax

typedef struct _DXVA_SliceInfo {
  WORD  wHorizontalPosition;
  WORD  wVerticalPosition;
  DWORD dwSliceBitsInBuffer;
  DWORD dwSliceDataLocation;
  BYTE  bStartCodeBitOffset;
  BYTE  bReservedBits;
  WORD  wMBbitOffset;
  WORD  wNumberMBsInSlice;
  WORD  wQuantizerScaleCode;
  WORD  wBadSliceChopping;
} DXVA_SliceInfo, *LPDXVA_SliceInfo;

Member

wHorizontalPosition

Gibt die horizontale Position des ersten Makroblocks des Slices an, ausgedrückt in Makroblockeinheiten, wobei null den makroblock ganz links oder ganz oben im Bild angibt.

wVerticalPosition

Gibt die vertikale Position des ersten Makroblocks des Slices an, ausgedrückt in Einheiten von Makroblocks, wobei null den makroblock ganz links oder ganz oben im Bild angibt.

dwSliceBitsInBuffer

Gibt die Gesamtzahl der Bits im entsprechenden Bitstreamdatenpuffer an, die Daten für den aktuellen Slice enthalten. Dies muss ein Vielfaches von acht für MPEG-1, MPEG-2, MPEG-4 sein. Es muss sich auch im slicestrukturierten Modus von H.263 befinden, da Slicestartcodes in diesen Fällen byteausgeglichen sind.

dwSliceDataLocation

Gibt den Speicherort des ersten Bytes an, das Daten für den Slice (z. B. den Speicherort eines Slicestartcodes) im Bitstreamdatenpuffer enthält. Muss null sein, wenn sich der Anfang des Slices nicht innerhalb des entsprechenden Bitstreamdatenpuffers befindet.

bStartCodeBitOffset

Gibt die Anzahl der wichtigsten Bits des Byte bei dwSliceDataLocation an, die keine Daten für den Slice enthalten. bStartCodeBitOffset muss für MPEG-1, MPEG-2 und MPEG-4 null sein, da Slicestartcodes in diesen Spezifikationen byte ausgerichtet sind. bStartCodeBitOffset kann für H.261 und H.263 möglicherweise ungleich null sein, da diese Standards keine Byteausrichtung von GOB-Startcodes (Gruppe von Blöcken) erzwingen. Dieser Member muss sich im Bereich von 0 bis 7 befinden und null sein, wenn sich der Anfang des Slices nicht innerhalb des entsprechenden Bitstreamdatenpuffers befindet. Die wichtigsten Bits, die für den aktuellen Slice von bStartCodeBitOffset irrelevant sind, können Daten für einen vorherigen Slice enthalten, wenn Startcodes nicht bytebündig sind (z. B. im H.263-Baselinemodus).

bReservedBits

Reservierte Bits, die zum Verpacken und Ausrichten verwendet werden. Muss Null sein.

wMBbitOffset

Gibt die Anzahl der Bits von Sliceheaderdaten vor dem ersten Bit der Makroblockebenendaten im Bitstreampuffer an. Wenn wMBbitOffset beispielsweise 83 ist, werden die Makroblockebenendaten für den Slice nach 83 Bits an Sliceheaderdaten gestartet. Muss null sein, wenn sich der Anfang des Slices nicht innerhalb des entsprechenden Bitstreamdatenpuffers befindet.

wNumberMBsInSlice

Gibt die Anzahl der Makroblocks von Daten im Slice an, einschließlich übersprungener Makroblocks. Kann null sein, wenn diese Zahl nicht ohne weiteres aus der Kopfzeile des Bilds und den Headern und den anfänglichen Makroblockdaten des aktuellen und nächsten Slices im Bitstream ermittelt werden kann, z. B. im rechteckigen Slice und in beliebigen Untermodi der Slicereihenfolge des Slicemodus von H.263. Darf für H.261, MPEG-1, MPEG-2, MPEG-4 nicht null sein, oder wenn der rechteckige Slice oder beliebige Sliceuntermoden des segmentstrukturierten Modus in H.263 nicht verwendet werden.

wQuantizerScaleCode

Der Quantizerskalierungscode aus der Sliceebene des Bitstreams, wie in der jeweiligen Videocodierungsspezifikation angegeben (reicht von 1 bis 31 für H.261, H.262/MPEG-2, H.263, MPEG-1 und MPEG-4).

wBadSliceChopping

Gibt den Speicherort der Daten in einem Slice für einen entsprechenden Bitstreamdatenpuffer an. Wenn null, gibt an, dass sich alle Bits für den Slice im Bitstreamdatenpuffer befinden. Wenn ungleich null, gibt wie folgt an, welcher Teil der Bits für den Slice im entsprechenden Bitstreamdatenpuffer fehlt.

Wert BESCHREIBUNG
1 Die Bits für den Anfang des Slices befinden sich innerhalb des entsprechenden Bitstreamdatenpuffers, und die Bits für das Ende des Slices sind nicht (da der Bitstreamdatenpuffer voll ist).
2 Die Bits für den Anfang des Slices befinden sich nicht innerhalb des entsprechenden Bitstreamdatenpuffers (da der vorherige Bitstreamdatenpuffer voll war), aber die Bits für das Ende des Slices befinden sich innerhalb des entsprechenden Bitstreamdatenpuffers.
3 Die Bits für den Anfang des Slices befinden sich nicht innerhalb des entsprechenden Bitstreamdatenpuffers (da der vorherige Bitstreamdatenpuffer voll war), und die Bits für das Ende des Slices befinden sich auch nicht innerhalb des entsprechenden Bitstreamdatenpuffers (da der entsprechende Bitstreamdatenpuffer ebenfalls voll ist).

[! HINWEISE] Werte ungleich null von wBadSliceChopping sollten im Allgemeinen vom Hostsoftwaredecoder vermieden werden.

Hinweise

Slice-Control-Puffer werden bereitgestellt, um den Betrieb der VLD-Bitstreamverarbeitung außerhalb des Hosts zu steuern. Slice-Control-Puffer werden nur gesendet, wenn das bConfigBitstreamRaw-Element von DXVA_ConfigPictureDecode 1 ist. Der Hostsoftwaredecoder muss den Speicherort der Neusynchronisierungspunkte auf Sliceebene im Bitstream bestimmen. Ein Slice ist als Multimakroblockebene definiert, die einen Neusynchronisierungspunkt in die Bitstreamdaten einschließt.

In H.261-Bitstreams wird ein GOB als Slice betrachtet. In H.263-Bitstreams gilt eine Sequenz von mindestens einem GOBs, die mit einem GOB-Startcode beginnen und keine zusätzlichen GOB-Startcodes enthalten, als Slice. Ein Slicesteuerungspuffer muss je nach Inhalt eines entsprechenden Bitstreamdatenpuffers eine oder mehrere DXVA_SliceInfo Strukturen enthalten.

Anforderungen

Anforderung Wert
Header dxva.h (dxva.h einschließen)

Weitere Informationen

DXVA_ConfigPictureDecode