KS-Datenformate und -datenbereiche
KS-Pins geben Datenformate und -bereiche mithilfe der KSDATAFORMAT- und KSDATARANGE-Strukturen an. Ein Datenformat gibt ein einzelnes Attribut eines Datenstroms an, z. B. eine Audiosamplinggröße von 16 Bit. Ein Datenbereich gibt mehrere Formate an, z. B. einen Audiosamplingbereich von 16 bis 24 Bit.
Ein Minidriver enthält ein Array von KSDATARANGE-Strukturen in jeder KSPIN_DESCRIPTOR Struktur, die er bereitstellt. Von Microsoft bereitgestellte Formate werden in ksmedia.h aufgelistet.
Eine KSDATARANGE-Struktur verfügt über dieselben Member wie eine KSDATAFORMAT-Struktur. der Minidriver kann jedoch Für die Hauptformat-, Unterformat- und Spezifizierermember von KSDATARANGE Jedoch Kann der Minidriver Wildcardwerte angeben.
Minidriver verwenden erweiterte Versionen dieser Strukturen, um medienspezifische Werte zu definieren. Informationen dazu, wie dies bei der Audio- und Videoaufnahme funktioniert, finden Sie unter Audiodatenformate und Datenbereiche und Auswählen eines Streamformats.
Clients verwenden die folgenden Eigenschaften, um die Unterstützung des Datenformats von Pins abzufragen, die von einer bestimmten Pinfactory für den Filter instanziiert werden:
KSPROPERTY_PIN_DATARANGES. Der KS-Filter meldet alle Datenbereiche, die von von der Pinfactory instanziierten Pins unterstützt werden. Dies schließt jedes Datenformat ein, das die Pin jemals unterstützen kann.
KSPROPERTY_PIN_CONSTRAINEDDATARANGES. Der KS-Filter meldet alle Datenbereiche, die von von der Pinfactory instanziierten Pins unterstützt werden, unter Berücksichtigung des aktuellen internen Treiberstatus.
KSPROPERTY_PIN_PROPOSEDATAFORMAT. Clients können diese Eigenschaft verwenden, um abzufragen, ob von der Pinfactory instanziierte Pins ein bestimmtes Datenformat unterstützen.
KSPROPERTY_PIN_DATAINTERSECTION. Clients können diese Eigenschaft verwenden, um eine Reihe von Datenformaten anzubieten.
Nachdem eine Pin instanziiert wurde, kann ein Client im Benutzermodus das aktuelle Datenformat bestimmen oder eine Änderung des Datenformats über KSPROPSETID_Connection Eigenschaftenanforderungen anfordernen. Der Client verwendet beispielsweise KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT , um zu bestimmen, ob eine Pin ein bestimmtes Datenformat unterstützt. Der Client verwendet KSPROPERTY_CONNECTION_DATAFORMAT , um das Datenformat zu ändern.
KS-Minidriver und -Clients können Datenformate dynamisch aushandeln. Wenn sich das Datenformat eines Datenstroms ändert, gibt der Minitreiber das flag KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY im OptionsFlags-Element eines KSSTREAM_HEADER an. Der Minidriver übergibt das neue Datenformat selbst, das in einer KSDATAFORMAT-Struktur beschrieben wird, im entsprechenden Datenpuffer.