Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
KS pins specify data formats and ranges using the KSDATAFORMAT and KSDATARANGE structures. A data format specifies a single attribute of a data stream, for example an audio sampling size of 16 bits. A data range specifies multiple formats, for example an audio sampling range of 16-24 bits.
A minidriver includes an array of KSDATARANGE structures in each KSPIN_DESCRIPTOR structure that it provides. Microsoft-provided formats are enumerated in ksmedia.h.
A KSDATARANGE structure has the same members as a KSDATAFORMAT structure; however, the minidriver can specify wildcard values for the major format, subformat, and specifier members of KSDATARANGE.
Minidrivers use extended versions of these structures to define media-specific values. To read about how this works in audio and video capture, see: Audio Data Formats and Data Ranges and Selecting a Stream Format.
Clients use the following properties to query data format support of pins instantiated by a given pin factory on the filter:
KSPROPERTY_PIN_DATARANGES. The KS filter reports all data ranges supported by pins instantiated by the pin factory. This includes every data format the pin can ever support.
KSPROPERTY_PIN_CONSTRAINEDDATARANGES. The KS filter reports all data ranges supported by pins instantiated by the pin factory, given the current internal driver state.
KSPROPERTY_PIN_PROPOSEDATAFORMAT. Clients can use this property to query if pins instantiated by the pin factory support a specific data format.
KSPROPERTY_PIN_DATAINTERSECTION. Clients can use this property to offer a range of data formats.
Once a pin is instantiated, a user-mode client can determine the current data format or requests a change of data format through KSPROPSETID_Connection property requests. For example, the client uses KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT to determine if a pin supports a given data format. The client uses KSPROPERTY_CONNECTION_DATAFORMAT to change the data format.
KS minidrivers and clients can dynamically negotiate data formats. When the data format of a stream changes, the minidriver specifies the KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY flag in the OptionsFlags member of a KSSTREAM_HEADER. The minidriver passes the new data format itself, described in a KSDATAFORMAT structure, in the corresponding data buffer.