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) |