DirectShow Filter to Stream Class Minidriver Communication

User-mode DirectShow filters interact with video capture minidrivers using Win32 API DeviceIoControl function calls. These calls are translated by the Stream class interface into stream request blocks (SRBs) and are then sent to video capture minidrivers for processing. There are two categories of SRBs: SRBs that are used for general device-level control, and SRBs that affect an individual stream. The major SRBs for each category are shown in the following table.

Function Device Stream

Property

Write

SRB_SET_DEVICE_PROPERTY

SRB_SET_STREAM_PROPERTY

Property

Read

SRB_GET_DEVICE_PROPERTY

SRB_GET_STREAM_PROPERTY

Stream

Write

None

SRB_WRITE_DATA

Stream

Read

None

SRB_READ_DATA

Open

Stream

SRB_OPEN_STREAM

None

Close

Stream

SRB_CLOSE_STREAM

None

Create

Format

SRB_GET_DATA_INTERSECTION

None

Change

Stream
State

None

SRB_SET_STREAM_STATE

Of the filters that constitute the "front end" of a video capture filter graph, such as the video capture filter, TV/radio tuner filter, TV audio filter, and crossbar filter, only the video capture filter truly participates in kernel streaming. The other filters are used to control device-level property sets in the video capture minidriver itself. Thus, minidrivers that support TV/radio tuning, TV audio, and crossbars do not expose kernel pins for each of their streams. These streams exist only as user-mode constructs to create the graph topology.