Transports

[The feature associated with this page, DirectShow, is a legacy feature. It has been superseded by MediaPlayer, IMFMediaEngine, and Audio/Video Capture in Media Foundation. Those features have been optimized for Windows 10 and Windows 11. Microsoft strongly recommends that new code use MediaPlayer, IMFMediaEngine and Audio/Video Capture in Media Foundation instead of DirectShow, when possible. Microsoft suggests that existing code that uses the legacy APIs be rewritten to use the new APIs if possible.]

In order to move media data through the filter graph, a DirectShow filter must support one of several possible protocols. These protocols are called transports. When two filters connect, they must support the same transport; otherwise they cannot exchange media data. Typically, a transport requires that one of the pins support a particular interface. When the filters connect, one pin queries the other for the interface.

Most DirectShow filters hold media data in main memory, and deliver it to other filters across pin connections. This type of transport is called local memory transport. Although local memory transport is the most common transport in DirectShow, not all filters use it. For example, some filters send media data along a hardware path, and use pins only to deliver control information. For example, see the IOverlay interface.

DirectShow defines two mechanisms for local memory transport, the push model and the pull model. In the push model, a source filter generates data and delivers it to the next filter downstream. That filter passively receives the data, processes it, and sends it further downstream. In the pull model, the source filter is connected to a parser filter. The parser filter requests data from the source filter. The source filter responds to the requests by delivering data. The push model uses the IMemInputPin interface, and the pull model uses the IAsyncReader interface.

The push model is more common than the pull model. Therefore, the articles that follow assume a push model. The last article in this section, Pull Model, describes how the IAsyncReader interface differs from IMemInputPin.

Data Flow in the Filter Graph