Data-Intersection Handlers

This section discusses data-intersection handlers in Microsoft Windows Driver Model (WDM) audio drivers. For a broader discussion of data-intersection handling for KS filters in general, see DataRange Intersections in AVStream.

In older versions of Windows such as Windows XP, the SysAudio system driver constructs a virtual audio device by connecting together pairs of audio-filter pins to form an audio filter graph. Before a source pin on one filter can be connected to a sink pin of another, SysAudio must negotiate a common format that the two pins can use to exchange data. The details of this negotiation are largely delegated to the data-intersection handlers that are implemented in the individual filters.

Similarly, in Windows Vista and later, the audio engine must negotiate a common stream format with the data-intersection handler in the wave filter that represents the audio rendering device.

An adapter driver creates a WaveRT filter for an audio device by binding one of its miniport drivers to the corresponding port driver from Portcls.sys. The port driver contains a default data-intersection handler, but the default handler always gives the miniport driver's proprietary data-intersection handler the first opportunity to determine a common format. If the proprietary handler declines this opportunity, however, the port driver's default handler determines the format.

The port driver's default data-intersection handler is designed to deal with the most common hardware features. For simple audio devices, the default handler provides a convenient alternative to implementing a proprietary handler in the adapter driver. However, adapters with more advanced features might need proprietary handlers in order to expose the full capabilities of the hardware.

The remainder of this section describes some of the limitations of the port driver's default data-intersection handler and presents the techniques that are needed to design a proprietary data-intersection handler for an adapter driver. The following topics are discussed:

Data Intersection

Default Data-Intersection Handlers

Proprietary Data-Intersection Handlers

Hardware Constraints on Sample Frequency

Output Buffer Size

Data Ranges with Discrete Values

Wild Cards

Data-Range Properties