Threads and Critical Sections
[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.]
This section describes threading in DirectShow filters, and the steps you should take to avoid crashes or deadlocks in a custom filter.
The examples in this section use pseudocode to illustrate the code you will need to write. They assume that a custom filter is using classes derived from the DirectShow base classes, as follows:
- CMyInputPin: Derived from CBaseInputPin.
- CMyOutputPin: Derived from CBaseOutputPin.
- CMyFilter: Derived from CBaseFilter.
- CMyInputAllocator: The input pin's allocator, derived from CMemAllocator. Not every filter needs a custom allocator. For many filters, the CMemAllocator class is sufficient.
This section contains the following topics.
- The Streaming and Application Threads
- Pausing
- Receiving and Delivering Samples
- Delivering the End of Stream
- Flushing Data
- Stopping
- Getting Buffers
- Streaming Threads and the Filter Graph Manager
- Summary of Filter Threading
Related topics