Important:
This is retired content. This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This content may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist.
A version of this page is also available for
4/8/2010

An enumeratoris an interface that provides methods for traversing a list of elements. Enumerators are used in COM programming, and the DirectShow model follows the COM model in enumerating objects. The following enumerator classes are provided in the class library:

The DirectShow enumerator interface IEnumFilters Interfaceand IEnumRegFilters Interface are not represented by base classes because they are implemented only by the filter graph manager.

The following illustration shows the interfaces for the enumerators.

The CEnumPinsclass creates an enumerator when the IBaseFilter::EnumPinsmethod is called. The enumerator returned by this method is a pointer to the IEnumPinsinterface, which is implemented by the CEnumPinsclass.

The CEnumPinsmember functions can then be called to retrieve pointers to each of the pins on the filter. This enumerator accomplishes this by calling the CBaseFilter::GetPinmember function on the filter.

The filter must override the base class CBaseFilter::GetPinmember function to supply the enumerator with the next pin in the list each time it is called.

The CEnumMediaTypesclass creates an enumerator when the IPin::EnumMediaTypesmethod is called. Pins store a list of the media types that they support. During negotiation of the media type, one pin typically calls the EnumMediaTypesmethod on its connected pin, retrieves the enumerator, and uses it to select a media type.

Both of these enumerator classes support the Next, Skip, Reset, and Clonemethods familiar to COM programmers.

The media type enumerators call the CBasePin::GetMediaTypemember function, which must be overridden by the derived pin class, to return the next media type in a list of media types accepted by the pin.

Enumerators operate as threads, and must have synchronized access to the pin media type list. For this reason, the classes that implement enumerators inherit, through multiple inheritance, from the CCritSecclass, which provides critical section management.

For more information about the CCritSecclass, see Win32 Classes.