Freigeben über


KSSTREAM_HEADER-Struktur (ks.h)

Die KSSTREAM_HEADER-Struktur ist eine Struktur mit variabler Länge, die ein Datenpaket beschreibt, das aus einem Streamingtreiber-Pin gelesen oder in diese 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;

Member

Size

Gibt die Größe (in Bytes) der Struktur an. Dies sollte mindestens sizeof(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 (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 Streampuffer in 100 Nanosekundeneinheiten angibt. Weitere Informationen finden Sie im Abschnitt Hinweise.

Duration

Gibt die Dauer dieses Datenstromsegments in denselben Einheiten wie die Präsentationszeit (100 Nanosekundeneinheiten) an. Legen Sie bei nicht verwendeter Verwendung auf Null fest.

FrameExtent

Gibt die Größe des gesamten Frames an. Die Region innerhalb der Frameausdehnung ist für den Filter verfügbar, und die resultierende gültige Datengröße für den Streamvorgang wird im DataUsed-Element widergespiegelt .

DataUsed

Für einen Schreibvorgang gibt dieses Member die Anzahl der Bytes innerhalb des Frames an, die beim Übermitteln eines Frames an einen Treiber auf niedrigerer Ebene gültig sind. Die Header werden bei einem Schreibvorgang nicht geändert. das Element Information der IO_STATUS_BLOCK-Struktur enthält jedoch die Gesamtzahl der tatsächlich geschriebenen Bytes. Für einen Lesevorgang wird dieser Member nicht verwendet, wenn ein Frame an einen Treiber auf niedrigerer Ebene übermittelt wird, und muss auf 0 festgelegt werden. Bei der Rückgabe enthält dieses Element die Anzahl der Bytes, die tatsächlich in diesem Frame ausgefüllt wurden, und das Element Information der IO_STATUS_BLOCK-Struktur enthält die Größe der Liste der tatsächlich verwendeten Header. Beachten Sie, dass, wenn der Minitreiber KSPIN_FLAG_GENERATE_MAPPINGS in KSPIN_DESCRIPTOR_EX angibt, wenn ein Streamzeiger über einen Frame hinaus fortgeschritten ist, DataUsed auf Count minus Remaining (Member von KSSTREAM_POINTER_OFFSET) festgelegt ist. Wenn der Treiber dieses Flag nicht angibt, ist der Minidriver für das Festlegen von DataUsed verantwortlich.

Data

Gibt die virtuelle Adresse des Datenpuffers an.

OptionsFlags

Gibt eine Vielzahl von Attributen des Datenstroms an. Für das OptionsFlags-Element können die Werte in der folgenden Tabelle aufgeführt sein.

Wert BESCHREIBUNG
KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY Gibt an, dass der Datenstrom vor den Daten, die in diesem Paket enthalten sind, eine Diskontinuität aufgetreten ist. Dies bedeutet, dass der Filter möglicherweise seinen 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-Element 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 Stream angehalten wird, sollte dieser Puffer geleert werden. Dieses Flag wird beispielsweise 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 Datenschleifen. Der Treiber sollte eine Schleife für diese Daten ausführen, bis er explizit beendet wurde.
KSSTREAM_HEADER_OPTIONSF_METADATA Gibt an, dass nach dem KSSTREAM_HEADER ein KSSTREAM_METADATA_INFO 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 primen. 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 die Interframekomprimierung verwenden, z. B. MPEG-Video, um anzugeben, dass an diesem Punkt das Spleißen sicher ist.
KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY Nach diesem Paket tritt eine Diskontinuität im Datenstrom auf. Dieses Flag kann für positionsorientierte Schnittstellen verwendet werden, um ein Ende der Datenstromdaten anzugeben. Es muss kein tatsächlicher Datenpuffer angefügt werden.
KSSTREAM_HEADER_OPTIONSF_TIMEVALID Gibt an, dass das PresentationTime-Element dieser Struktur gültig ist. Gibt an, dass diesem Puffer ein gültiger Zeitstempel zugeordnet ist.
KSSTREAM_HEADER_OPTIONSF_TYPECHANGED Bedeutet, dass sich das Datenformat für diesen Stream geändert hat. Wenn dieses Flag festgelegt ist, enthält das Datenelement eine KSDATAFORMAT-Struktur , die das neue Format enthält. Dieses Flag ist nur für Datenströme gültig, die zuvor den dynamischen Typwechsel 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 Streamanforderung sein. Während einer Leseanforderung bleiben alle weiteren E/A-Vorgänge ausstehend, bis das neue Format über KSPROPERTY_CONNECTION_DATAFORMAT abgerufen wird. Bei einem Schreibvorgang darf der Header nicht erweitert werden und muss der einzige Header im Schreibvorgang sein.
KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER Gibt an, dass das Datenmember des Streamheaders auf eine Struktur vom Typ VRAM_SURFACE_INFO zeigt. Das vom System bereitgestellte KS-Proxymodul legt dieses Flag fest, um anzugeben, dass es direkt in VRAM erfasst wird.
KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER Gibt an, dass das Datenmember von KSSTREAM_HEADER eine Kernelmoduskopie des ursprünglichen Puffers enthält. Ksproxy legt dieses Flag für kleine Datenübertragungen während der WVDDM-Erfassung (Windows Vista Display Driver Model) fest. Wenn dieses Flag nicht festgelegt ist, verwendet KS direkte E/A in den Datenpuffer .

Reserved

Für die interne Verwendung reserviert.

Hinweise

Dieser Struktur können im Arbeitsspeicher zusätzliche Informationen folgen, die für den Typ der Daten im Datenpaket spezifisch sind.

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 als Skalierungsbruch die KSSTREAM_HEADER verwenden. PresentationTime.Numerator dividiert durch den KSSTREAM_HEADER. PresentationTime.Denominator .

Eine Konvertierung sollte zuerst den Zähler und dann den Nenner verwenden, um Rundungsfehler zu reduzieren. Beispielsweise kann ein Audiostream die aktuelle Zeit als Byteoffset 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 einer IOCTL_KS_READ_STREAM werden Teile des Streamheaders durch den Aufruf ausgefüllt. Jede KSSTREAM_HEADER. Das DataUsed-Element enthält die tatsächliche Anzahl gelesener 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 sizeof(KSSTREAM_HEADER) ist.

Auf einem IOCTL_KS_WRITE_STREAM müssen die Memberelemente initialisiert werden, und jedes KSSTREAM_HEADER. Das 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-Member von KSSTREAM_HEADER platziert werden sollen, finden Sie weitere Informationen unter AVStream Clocks .

Anforderungen

Anforderung Wert
Header ks.h (einschließlich Ks.h)

Weitere Informationen

KSDATAFORMAT