IEEE 1394 Streaming Filter Drivers

For the IEEE 1394 standard, nearly all devices that stream audio/video (A/V) use a predefined set of protocols, including IEC-61883, AV/C, and a device-type specific protocol known as an AV/C subunit. AV/C subunits are standardized command sets for different classes of device. For example, there is a command set for an AV/C subunit for tuning, one for VCRs, one for on-screen displays, and so on. Any physical device might export any number of AV/C subunits; for example, a camcorder usually exports both a camera subunit and a VCR subunit. These devices all stream A/V data.

To effectively support software, you need to provide a separate device driver for each subunit type that you intend to support. For example, you can provide a driver that is responsible for AV/C tuner subunits, one for AV/C VCR subunits, and so on. As all of the mentioned drivers need to support the ability to manage these A/V streams, Microsoft recommends that you standardize the interface so that the same commands used to initiate a stream on one device function equally well to initiate a stream on another device. If the commands are the same, it follows that the code should also be the same. To avoid replication of code, use the same module to manage this functionality over all of the subunit drivers. On Microsoft® Windows®–based desktop platforms, a DLL usually manages this functionality. In WDM, this functionality is managed using a filter driver.

A filter driver is a particular device driver that allows most commands to pass through, but filters out commands specific to its purpose and takes explicit action on those commands. In WDM, it explicitly filters out and completes high-level application programming interface (API) commands intended to carry out tasks such as starting a stream, sending a frame, and so on.

IEEE 1394 Streaming Filter Driver API Definition

The IEEE 1394 streaming filter driver API definition is low-level and intended primarily for a standardized streaming architecture, such as Microsoft® DirectShow®. The API can still be used directly by an application.

The API works by having high-level drivers merely pass requests that they cannot handle down to lower-level drivers. The highest-level driver in the stack is the subunit driver, which can manipulate a particular AV/C subunit. The next level down in the stack is the streaming filter driver, which can perform streaming actions. Below that stack are AV/C and 61883; these modules do not export I/O control codes (IOCTLs) to applications. All of the IOCTLs for the modules are of type IRP_MJ_INTERNAL_DEVICE_CONTROL. These IOCTLs are not something that an application can send, but are used by the subunit driver and the streaming driver to perform their tasks.

The following table shows the IOCTLs and their descriptions.

IOCTL Description
IOCTL_STREAM_GET_REMOTE_PLUG_HANDLE Permits the caller to obtain a reference to a serial bus plug on a remote node.
IOCTL_STREAM_LOCATE_REMOTE_PLUG Permits the caller to attempt to locate or cause the remote node to create a plug on a remote node that is capable of handling the type of media stream required by the application.
IOCTL_STREAM_DEREFERENCE_REMOTE_PLUG Permits the caller to dereference any remote plug previously located through IOCTL_STREAM_LOCATE_REMOTE_PLUG, if necessary.
IOCTL_STREAM_START_RECV_SESSION Permits the caller to initiate a receive session, that is, set up the connection and details to be able to receive DV, MPEG, audio, or other isochronous data from the device.
IOCTL_STREAM_START_XMIT_SESSION Permits the caller to initiate a transmit session, that is, set up the connection and details to be able to transmit DV, MPEG, audio, or other isochronous data to the device.
IOCTL_STREAM_STOP_SESSION Intended to stop either a receive or a transmit session created through IOCTL_STREAM_START_RECV_SESSION or IOCTL_STREAM_START_XMIT_SESSION. It will close the given connection, and make the provided session handle invalid.
IOCTL_STREAM_ATTACH_BUFFER Attaches one or more buffers to a particular session.
IOCTL_STREAM_DETACH_BUFFER Permits the caller to detach a buffer that was previously attached to an individual session.
IOCTL_STREAM_QUERY_BUFFER_STATE Permits the caller to query the state attached buffers and optionally wait for at least one to complete.
IOCTL_STREAM_GET_MEDIA_SIZE Retrieves the packet and frame sizes for a given media type.
IOCTL_STREAM_SET_MEDIA_SIZE Sets the packet and frame sizes for a given media type.
IOCTL_STREAM_CREATE_LOCAL_PLUG Permits the caller to create and export a local plug.
IOCTL_STREAM_DELETE_LOCAL_PLUG Permits the caller to delete a previously created local plug.

See Also

IEEE 1394 Drivers | IEEE 1394 Streaming Filter Driver Architecture | IEEE 1394 Streaming Filter Driver Registry Settings

 Last updated on Tuesday, May 18, 2004

© 1992-2003 Microsoft Corporation. All rights reserved.