DXVA_SliceInfo Struktur (dxva.h)
Die DXVA_SliceInfo Struktur wird vom Hostdecoder an die Zugriffstaste gesendet, um die Parameter auf Segmentebene eines Datenschnitts mit Bitstreamdaten für die komprimierte Bilddecodierung von Offhost-Bitstreams 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;
Angehörige
wHorizontalPosition
Gibt die horizontale Position des ersten Makroblocks des Segments an, das in Einheiten von Makroblocks ausgedrückt wird, wobei Null die linksste oder oberste Makroblock des Bilds angibt.
wVerticalPosition
Gibt die vertikale Position des ersten Makroblocks des Datenschnitts an, der in Einheiten von Makroblocks ausgedrückt wird, wobei Null die linksste oder oberste Makroblock des Bilds angibt.
dwSliceBitsInBuffer
Gibt die Gesamtanzahl der Bits im entsprechenden Bitstreamdatenpuffer an, die Daten für das aktuelle Segment enthalten. Dies muss ein Vielfaches von acht für MPEG-1, MPEG-2, MPEG-4 sein. Sie muss sich auch im segmentstrukturierten Modus von H.263 befinden, da Segmentanfangscodes in diesen Fällen byte ausgerichtet sind.
dwSliceDataLocation
Gibt den Speicherort des ersten Byte an, der Daten für das Segment enthält (z. B. die Position eines Datenschnittanfangscode) im Bitstream-Datenpuffer. Muss null sein, wenn sich der Anfang des Datensegments nicht innerhalb des entsprechenden Bitstreamdatenpuffers befindet.
bStartCodeBitOffset
Gibt die Anzahl der wichtigsten Bits des Bytes bei dwSliceDataLocation- an, die keine Daten für das Segment enthalten. bStartCodeBitOffset-muss null für MPEG-1, MPEG-2 und MPEG-4 sein, da Segmentstartcodes in diesen Spezifikationen byte ausgerichtet sind. bStartCodeBitOffset-könnte möglicherweise kein Nullwert für H.261 und H.263 sein, da diese Standards keine Byteausrichtung von GOB-Startcodes (Gruppe von Blöcken) erzwingen. Dieses Element muss sich im Bereich von Null bis 7 befinden und muss null sein, wenn sich der Anfang des Datensegments nicht im entsprechenden Bitstreamdatenpuffer befindet. Die wichtigsten Bits, die für das aktuelle Segment durch bStartCodeBitOffset- als irrelevant gekennzeichnet sind, können Daten für ein vorheriges Segment enthalten, wenn Startcodes nicht ausgerichtet sind (z. B. im H.263-Basisplanmodus).
bReservedBits
Reservierte Bits, die für Verpackung und Ausrichtung verwendet werden. Muss null sein.
wMBbitOffset
Gibt die Anzahl der Bits von Daten des Datenschnittheaders vor dem ersten Bit der Makroblock-Layerdaten im Bitstreampuffer an. Wenn z. B. wMBbitOffset 83 ist, beginnt die Makroblock-Layerdaten für das Segment nach 83 Bits von Datenschnittkopfdaten. Muss null sein, wenn sich der Anfang des Datensegments nicht innerhalb des entsprechenden Bitstreamdatenpuffers befindet.
wNumberMBsInSlice
Gibt die Anzahl der Makroblocks von Daten im Segment an, einschließlich übersprungener Makroblocks. Kann null sein, wenn diese Zahl nicht einfach aus der Kopfzeile des Bilds und den Kopfzeilen und den anfänglichen Makroblockdaten des aktuellen und nächsten Datenschnitts im Bitstream bestimmt werden kann, z. B. im rechteckigen Segment und in beliebigen Untermoden der Segmentierung des Datenschnittmodus von H.263. Darf für H.261, MPEG-1, MPEG-2, MPEG-4 oder nicht bei Verwendung des rechteckigen Slices oder beliebiger Segmentuntermoden des segmentstrukturierten Modus in H.263 nicht null sein.
wQuantizerScaleCode
Der Quantizerskalierungscode aus der Segmentebene des Bitstreams, wie in der speziellen Videocodierungsspezifikation angegeben (reichen von 1 bis 31 für H.261, H.262/MPEG-2, H.263, MPEG-1 und MPEG-4).
wBadSliceChopping
Gibt den Speicherort von Daten innerhalb eines Datensegments für einen entsprechenden Bitstreamdatenpuffer an. Wenn Null, gibt an, dass sich alle Bits für das Segment im Bitstream-Datenpuffer befinden. Gibt an, welcher Teil der Bits für das Segment im entsprechenden Bitstream-Datenpuffer wie folgt fehlt.
Wert | Beschreibung |
---|---|
1 | Die Bits für den Anfang des Datensegments befinden sich im entsprechenden Bitstream-Datenpuffer, und die Bits für das Ende des Datensegments sind nicht (da der Bitstreamdatenpuffer voll ist). |
2 | Die Bits für den Anfang des Datensegments befinden sich nicht im entsprechenden Bitstream-Datenpuffer (da der vorherige Bitstreamdatenpuffer voll war), aber die Bits für das Ende des Datensegments befinden sich im entsprechenden Bitstream-Datenpuffer. |
3 | Die Bits für den Anfang des Datensegments befinden sich nicht im entsprechenden Bitstream-Datenpuffer (da der vorherige Bitstreamdatenpuffer voll war), und die Bits für das Ende des Datensegments befinden sich auch nicht innerhalb des entsprechenden Bitstream-Datenpuffers (da der entsprechende Bitstreamdatenpuffer ebenfalls voll ist). |
[! HINWEIS] Nichtzerowerte von wBadSliceChopping sollten im Allgemeinen vom Hostsoftwaredecoder vermieden werden.
Bemerkungen
Datenschnittsteuerungspuffer werden bereitgestellt, um den Vorgang der VLD-Bitstreamverarbeitung vom Host zu leiten. Datenschnittsteuerungspuffer werden nur gesendet, wenn der bConfigBitstreamRaw Mitglied von DXVA_ConfigPictureDecode 1 ist. Der Hostsoftwaredecoder muss die Position der Datenschnittebenen-Neusynchronisierungspunkte im Bitstream bestimmen. Ein Segment ist als Multimakroblockebene definiert, die einen Resynchronisierungspunkt in den Bitstreamdaten enthält.
In H.261-Bitstreams wird ein GOB als Segment betrachtet. In H.263-Bitstreams gilt eine Abfolge von einer oder mehreren GOBs, die mit einem GOB-Startcode beginnen und keine zusätzlichen GOB-Startcodes enthalten, als Segment betrachtet. Ein Datenschnittsteuerelementpuffer muss eine oder mehrere DXVA_SliceInfo Strukturen enthalten, entsprechend dem Inhalt eines entsprechenden Bitstreamdatenpuffers.
Anforderungen
Anforderung | Wert |
---|---|
Header- | dxva.h (include Dxva.h) |