Introduction to the Filter Base Classes

[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 article describes the Microsoft DirectShow base class library. This library is intended for filter developers, but application writers might find some of the helper classes and debugging utilities useful. The base class library is not required for DirectShow programming, however.

The following sections summarize the most important base classes in the library.

COM Object Classes

The following classes support the creation of COM objects:

Class Description
CBaseObject Base object class.
CUnknown Implements the IUnknown interface.

 

Most of the DirectShow classes derive from CBaseObject. This class provides debugging assistance by keeping a count of all the active objects in the DLL at run time. In debug builds, the DLL asserts if it is unloaded while the object count is greater than zero. This makes it easier to track down leaks caused by reference-counting problems.

All of the base classes that support COM interfaces derive from CUnknown, which inherits CBaseObject. The CUnknown class supports reference counting, QueryInterface, and aggregration. For more information, see How to Implement IUnknown.

Filter and Pin Classes

The following classes support the creation of DirectShow filter and pin objects:

Class Description
CBaseFilter Base class for filters. Implements the IBaseFilter interface.
CBasePin Base class for pins. Implements the IPin and IQualityControl interfaces.
CBaseInputPin Base class for input pins that use local memory transport. Implements the IMemInputPin interface. This class derives from CBasePin.
CBaseOutputPin Base class for output pins that use IMemInputPin connections. This class derives from CBasePin.

 

The following classes are useful for creating more specialized types of filters:

Class Description
CSource Base class for source filters. This class is designed for creating push sources. It is not suitable for pull sources, such as file readers. To create output pins for this class, use the CSourceStream class.
CTransformFilter Base class for transform filters. This class performs a copy on the data. The pins for this class are CTransformInputPin and CTransformOutputPin.
CTransInPlaceFilter Base class for transform filters that do not copy data. This class performs the data processing directly on the input data before passing it downstream. The pins for this class are CTransInPlaceInputPin and CTransInPlaceOutputPin.
CVideoTransformFilter Base class for video transform filters. This class derives from CTransformFilter and adds support for quality control.
CBaseRenderer Base class for renderer filters. The input pin for this class is CRendererInputPin.
CBaseVideoRenderer Base class for video renderers. This class derives from CBaseRenderer.

 

To use these classes, you must derive your own class and write code to support the functionality that is specific to your filter. The more specialized the base class, the less code you will need to write in your derived class.

Helper Objects

The following classes implement helper objects that are used by filters and pins. Most of these classes can be used without deriving new classes from them:

Class Description
CPullPin Helper object for input pins on parser filters. Supports IAsyncReader connections with pull sources.
COutputQueue Helper object for output pins that queue samples for delivery on a worker thread.
CSourceSeeking Help object for implementing seeking on a source filter with exactly one output pin. (This class is not designed for filters with multiple pins, such as parsers.)
CEnumPins Enumerator object for enumerating pins on a filter. Implements the IEnumPins interface.
CEnumMediaTypes Enumerator object for enumerating preferred media types on a pin. Implements the IEnumMediaTypes interface.
CMemAllocator Memory allocator object. Implements the IMemAllocator interface.
CMediaSample Media sample object. Implements the IMediaSample2 interface.
CBaseReferenceClock Base class for reference clocks. Implements the IReferenceClock interface.
CMediaType Helper object for manipulating AM_MEDIA_TYPE structures.