State Transitions

To ensure orderly resource allocation, only a subset of the possible kernel streaming state transitions is allowed. The following table lists the allowed transitions along with tasks that a Stream class minidriver typically performs during such transitions.

Transition Description

Stop to pause

Allocate resources. The read SRBs are queued after the transition to KSSTATE_PAUSE has completed.

Pause to run

Begin streaming.

Run to pause

Stop streaming. The outstanding read SRBs remain in the queue maintained by the minidriver.

Pause to stop

Deallocate resources and complete all outstanding read SRBs. SRBs that have not been filled with an image are completed with zero length in the DataUsed member of the KSSTREAM_HEADER structure.

Note  : Transitions can cycle multiple times between the KSSTATE_PAUSE and KSSTATE_RUN states before returning to the KSSTATE_STOP state. Video capture minidrivers should expect transitions such as:

KSSTATE_STOP -> KSSTATE_ACQUIRE -> KSSTATE_PAUSE -> KSSTATE_RUN -> KSSTATE_PAUSE -> KSSTATE_RUN -> KSSTATE_PAUSE -> KSSTATE_STOP

When a stream is in a KSSTATE_STOP state, the minidriver must immediately complete all outstanding data-read SRBs.

Because a user-mode application can end unexpectedly while streaming, all Stream class minidrivers must accept and process an SRB_CLOSE_STREAM request from the Stream class interface at any time. Before the Stream class interface sends SRB_CLOSE_STREAM to a minidriver, it cancels all outstanding buffers through the minidriver's HwCancelPacket routine. Note that the stream state cannot be set to KSSTATE_STOP before the application terminates.

Do not update the PictureNumber or DropCount members of KS_FRAME_INFO, KS_VBI_FRAME_INFO, or KSPROPERTY_DROPPEDFRAMES_CURRENT_S on transition from KSSTATE_PAUSE to KSSTATE_RUN or KSSTATE_RUN to KSSTATE_PAUSE. For more information, see Capturing Video.