The Connection Process: A Summary (Windows Embedded CE 6.0)
1/6/2010
When one filter's output pin is called by the filter graph manager to connect to an input pin of a second filter, the IPin::Connect method is called. This, in turn, calls CBaseOutputPin::CheckConnect to obtain interfaces from the connected pin and CBasePin::AgreeMediaType to find a common media type.
AgreeMediaType calls CBasePin::TryMediaTypes, which uses media type enumerators to query the pins for preferred media types.
IEnumMediaTypes is an interface on the connected input pin that TryMediaTypes uses first.
The base classes use IEnumMediaTypes to repeatedly call a CBasePin member function called GetMediaType for each media type in the list. You use this member function in your input and output pin classes to return the media types that your pin prefers.
TryMediaTypes calls the output pin's CheckMediaType member function with each input type returned. You must use CheckMediaType to verify whether this type is acceptable.
If no media types are found (for example GetMediaType might not even be used on the connected input pin, or might return an unacceptable media type), then AgreeMediaType obtains a media type enumerator for the output pin and tries each of these in turn.
Again, the GetMediaType member function of the derived output pin is called for each type. In this case, it can determine media types by inquiring about any existing connection established by the filter's input pin.