Summary of Filter Threading
[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.]
The following methods are called on the streaming thread:
- IMemInputPin::Receive
- IMemInputPin::ReceiveMultiple
- IPin::EndOfStream
- IPin::NewSegment
- IMemAllocator::GetBuffer
The following methods are called on the application thread:
- State changes: IBaseFilter::JoinFilterGraph, IMediaFilter::Pause, IMediaFilter::Run, IMediaFilter::Stop, IQualityControl::SetSink.
- Reference clock: IMediaFilter::GetSyncSource, IMediaFilter::SetSyncSource.
- Pin operations: IBaseFilter::FindPin, IPin::Connect, IPin::ConnectedTo, IPin::ConnectionMediaType, IPin::Disconnect, IPin::ReceiveConnection.
- Allocator functions: IMemInputPin::GetAllocator, IMemInputPin::NotifyAllocator.
- Flushing: IPin::BeginFlush, IPin::EndFlush.
This list is not exhaustive. When you implement a filter, you must consider which methods change the filter state, and which methods perform streaming operations.