Freigeben über


KSSTREAM_HEADER Struktur (ks.h)

Die KSSTREAM_HEADER Struktur ist eine Struktur mit variabler Länge, die ein Datenpaket beschreibt, aus dem gelesen oder in einen Streamingtreiber-Pin geschrieben werden soll.

Syntax

typedef struct {
  ULONG    Size;
  ULONG    TypeSpecificFlags;
  KSTIME   PresentationTime;
  LONGLONG Duration;
  ULONG    FrameExtent;
  ULONG    DataUsed;
  PVOID    Data;
  ULONG    OptionsFlags;
  ULONG    Reserved;
} KSSTREAM_HEADER, *PKSSTREAM_HEADER;

Angehörige

Size

Gibt die Größe der Struktur in Bytes an. Dies sollte mindestens Größe(KSSTREAM_HEADER) sein.

TypeSpecificFlags

Gibt Flags an, die für ein Datenformat spezifisch sind. Das einzige flag, das derzeit für TypeSpecificFlags unterstützt wird, ist KS_AM_UseNewCSSKey. Dieses Flag gibt an, dass der Hardwaredecoder zum nächsten css-Entschlüsselungsschlüssel in der Warteschlange (Content Scramble System) wechseln soll, da das Datenbeispiel, das unmittelbar auf den Header folgt, das erste Datenbeispiel ist, für das ein neuer Titelschlüssel gilt.

PresentationTime

Eine KSTIME- Struktur, die die Präsentationszeit für den zugehörigen Datenstrompuffer in 100-Nanosekundeneinheiten angibt. Weitere Informationen finden Sie im Abschnitt Anmerkungen.

Duration

Gibt die Dauer dieses Datenstromsegments in den gleichen Einheiten wie die Präsentationszeit (100-Nanosekundeneinheiten) an. Wird auf Null festgelegt, wenn sie nicht verwendet wird.

FrameExtent

Gibt die Größe des gesamten Frames an. Der Bereich innerhalb des Frameumfangs ist für den Filter verfügbar, und die resultierende gültige Datengröße für den Datenstromvorgang wird im DataUsed Member wiedergegeben.

DataUsed

Bei einem Schreibvorgang gibt dieses Element die Anzahl der Bytes innerhalb des Frames an, die gültig sind, wenn ein Frame an einen Treiber auf niedrigerer Ebene übermittelt wird. Die Kopfzeilen werden für einen Schreibvorgang nicht geändert; Das Information Mitglied der IO_STATUS_BLOCK Struktur enthält jedoch die Gesamtanzahl der tatsächlich geschriebenen Bytes. Bei einem Lesevorgang wird dieses Element nicht verwendet, wenn ein Frame an einen Treiber auf niedrigerer Ebene übermittelt wird und auf Null festgelegt werden muss. Bei Rückgabe enthält dieses Element die Anzahl der Bytes, die tatsächlich in diesem Frame ausgefüllt wurden, und das Information Element der IO_STATUS_BLOCK-Struktur enthält die Größe der Liste der tatsächlich verwendeten Kopfzeilen. Beachten Sie, dass, wenn der Minidriver KSPIN_FLAG_GENERATE_MAPPINGS in KSPIN_DESCRIPTOR_EXangibt, wenn ein Datenstromzeiger über einen Frame erweitert wird, DataUsed- auf Count minus Remaining (Member von KSSTREAM_POINTER_OFFSET) festgelegt ist. Wenn der Treiber dieses Kennzeichen nicht angibt, ist der Minidriver für die Einstellung DataUsedverantwortlich.

Data

Gibt die virtuelle Adresse des Datenpuffers an.

OptionsFlags

Gibt eine Vielzahl von Attributen des Datenstroms an. Der OptionsFlags Member kann die Werte in der folgenden Tabelle enthalten.

Wert Beschreibung
KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY Gibt an, dass vor den Daten, die in diesem Paket enthalten sind, eine Einstellung im Datenstrom aufgetreten ist. Dies bedeutet, dass der Filter möglicherweise den internen Zustand zurücksetzen muss, bevor die Daten verarbeitet werden. Es muss kein tatsächlicher Datenpuffer angefügt werden.
KSSTREAM_HEADER_OPTIONSF_DURATIONVALID Gibt an, dass das Duration Member dieser Struktur gültig ist.
KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE Gibt an, dass dieser Frame das Ende einer Fotosequenz darstellt.
KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM Gibt an, dass dieser Frame das Ende des Datenstroms darstellt.
KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE Wenn der Datenstrom angehalten wird, sollte dieser Puffer geleert werden. Dieses Kennzeichen wird z. B. von Livedatenquellen verwendet, bei denen eine Pause die aktuellen Daten veraltet rendert.
KSSTREAM_HEADER_OPTIONSF_FRAMEINFO Gibt an, dass nach KSSTREAM_HEADER eine KS_FRAME_INFO Struktur vorhanden ist.
KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA Dieser Datenpuffer ist der Anfang von Schleifendaten. Der Treiber sollte für diese Daten eine Schleife ausführen, bis er explizit beendet wurde.
KSSTREAM_HEADER_OPTIONSF_METADATA Gibt an, dass nach dem KSSTREAM_HEADER eine KSSTREAM_METADATA_INFO folgt, die KS_FRAME_INFO folgt. Dieses Flag ist nur vorhanden, wenn KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA unterstützt wird.
KSSTREAM_HEADER_OPTIONSF_PREROLL Die Daten in diesem Puffer werden verwendet, um den Gerätezustand zu primieren. Dies ist eine streamspezifische Option.
KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT Der Datenstrom befindet sich an einem natürlichen Punkt für das Splicing. Ein Client verwendet dies z. B. beim Senden von Daten, die interframekomprimiert werden, z. B. MPEG-Video, um anzugeben, dass es zu diesem Zeitpunkt sicher ist, zu komplizieren.
KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY Nach diesem Paket gibt es eine Einstellung im Datenstrom. Dieses Kennzeichen kann für positionsorientierte Schnittstellen verwendet werden, um ein Ende der Datenstromdaten anzuzeigen. Es muss kein tatsächlicher Datenpuffer angefügt werden.
KSSTREAM_HEADER_OPTIONSF_TIMEVALID Gibt an, dass das PresentationTime Mitglied dieser Struktur gültig ist. Gibt an, dass diesem Puffer ein gültiger Zeitstempel zugeordnet ist.
KSSTREAM_HEADER_OPTIONSF_TYPECHANGED Gibt an, dass sich das Datenformat für diesen Datenstrom geändert hat. Wenn dieses Flag festgelegt ist, enthält das Data-Element eine KSDATAFORMAT- Struktur, die das neue Format enthält. Dieses Kennzeichen ist nur für Datenströme gültig, die zuvor eine dynamische Typänderung ausgehandelt haben. Fügen Sie für einen Schreibvorgang das neue Datenformat anstelle eines Medienbeispiels ein. Wenn die medienspezifische Erweiterungsgröße geändert wird, muss dieser Header der letzte Header in einer Liste von Headern für die angegebene Datenstromanforderung sein. Während einer Leseanforderung bleibt jede weitere E/A ausstehend, bis das neue Format über KSPROPERTY_CONNECTION_DATAFORMAT abgerufen wird. Bei einem Schreibvorgang darf die Kopfzeile nicht erweitert werden und muss die einzige Kopfzeile im Schreibvorgang sein.
KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER Gibt an, dass die Data-Member des Datenheaders auf eine Struktur des Typs VRAM_SURFACE_INFOverweist. Das vom System bereitgestellte KS-Proxymodul legt dieses Flag fest, um anzugeben, dass es sich um -Erfassung direkt an VRAM-handelt.
KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER Gibt an, dass das Data Member von KSSTREAM_HEADER eine Kernelmoduskopie des ursprünglichen Puffers enthält. Ksproxy legt dieses Kennzeichen für kleine Datenübertragungen während der WVDDM-Aufnahme (Windows Vista Display Driver Model) fest. Wenn dieses Flag nicht festgelegt ist, verwendet KS direkte E/A in den Datenpuffer.

Reserved

Reserviert für die interne Verwendung.

Bemerkungen

Diese Struktur kann im Arbeitsspeicher durch zusätzliche Informationen, die für den Datentyp im Datenpaket spezifisch sind, gefolgt werden.

Die Präsentationszeit beträgt in der Regel 100-Nanosekundeneinheiten; Das Standardformat dieser Zeit basiert jedoch auf dem Datenformat. Sie können die Präsentationszeit normalisieren, indem Sie die KSSTREAM_HEADER als Skalierungsfraktion verwenden. PresentationTime.Numerator dividiert durch die KSSTREAM_HEADER. PresentationTime.Denominator .

Eine Konvertierung sollte zuerst den Zähler und dann den Nenner verwenden, um Rundungsfehler zu reduzieren. Ein Audiodatenstrom kann z. B. die aktuelle Uhrzeit als Byte-Offset im Datenstrom darstellen:

#define BITS_PER_BYTE8
#define NANOSECONDS10000000

StreamHdr->PresentationTime.Numerator = BITS_PER_BYTE * NANOSECONDS;
StreamHdr->PresentationTime.Denominator = BitsPerSample * Channels * Frequency;
StreamHdr->PresentationTime.Time = ByteOffset;
StreamHdr->Duration = ByteLength;

Auf einem IOCTL_KS_READ_STREAM werden Teile des Datenstromheaders vom Aufruf ausgefüllt. Jede KSSTREAM_HEADER. DataUsed-Element enthält die tatsächliche Anzahl der gelesenen Bytes, die kleiner oder gleich jeder KSSTREAM_HEADER ist. FrameExtent. Das pIrp->IoStatus.Information-Element enthält die Gesamtgröße der zurückzugebenden Headerdaten, die mindestens eine Größe von(KSSTREAM_HEADER).

In einem IOCTL_KS_WRITE_STREAM müssen die Memberelemente initialisiert werden, und jedes KSSTREAM_HEADER. DataUsed-Element enthält die Anzahl der zu schreibenden Bytes. Die tatsächliche Anzahl der geschriebenen Bytes wird in pIrp->IoStatus.Information zurückgegeben. Dies ist kleiner oder gleich der Summe aller KSSTREAM_HEADER. DataUsed-Elemente in den Headern.

Wenn Sie die IKsReferenceClock Schnittstelle verwenden, um Zeitstempel abzurufen, die im PresentationTime Mitglied von KSSTREAM_HEADER platziert werden sollen, finden Sie unter AVStream Clocks weitere Informationen.

Anforderungen

Anforderung Wert
Header- ks.h (enthalten Ks.h)

Siehe auch

KSDATAFORMAT-