CBasePin Class
This is an abstract base class from which all pins are derived. CBasePin supports the IPin interface. You can derive from this if your pin does not supply or use the IMemInputPin interface; otherwise, derive from the CBaseInputPin class or the CBaseOutputPin class.
The connection process is crucial to the success of creating filter graphs. The filter graph finds two filters (and subsequently two pins) to connect. It calls the IPin::Connect method on the output pin (it can also call Connect on the input pin at the same time). The output pin then calls the virtual pin member function CBasePin::CheckConnect. Derived classes should override this member function to use QueryInterface to return any interfaces required. The base class implementation of CheckConnect queries the IMemInputPin interface to establish the default transport protocol.
After calling CheckConnect, the output pin calls CBasePin::AgreeMediaType; this is a worker member function not intended for overriding in derived classes. This gets the input pin's enumerator and calls CBasePin::TryMediaTypes with it. TryMediaTypes is another base pin worker member function that is not intended for derivation. It cycles through each media type provided by an enumerator to determine if a connection can be made with that type.
If that process fails, AgreeMediaType retrieves the output pin's media type enumerator and calls CBasePin::GetMediaType, which cycles through the media types to agree on a connection type. If there is agreement, a media type with the input and output pins becomes the type used in the connection.
If no media type can be agreed on, the connection between the pins cannot be made. The base pin calls CBasePin::SetMediaType to broadcast the format. The m_mt base pin variable is set during this process.
The IPin interface provides a method called QueryAccept. This method allows a connected filter to query whether the pin will accept a specified media type. The method is asynchronous so that a filter can call it at any time — even when another filter is calling it. For this reason, its implementation in any override of the base class should not lock the filter. The base class implementation of IPin::QueryAccept calls the overridden CBasePin::CheckMediaType member function on the derived pin class.
All member functions in this class that return HRESULT and accept a pointer as a parameter return E_POINTER when passed a null pointer.
Protected Data Members
Member | Description |
---|---|
m_bRunTimeError | Run-time error generated. |
m_Connected | Pin to which this pin is connected. |
m_dir | Direction of this pin. |
m_dRate | Rate from the CBasePin::NewSegment call. |
m_mt | Media type that this pin is using. This is established during the connection process. |
m_pFilter | Filter that created the pin. |
m_pLock | Object used for locking. |
m_pQSink | Target for quality messages. |
m_pName | Name of the pin. |
m_tStart | Start time from the CBasePin::NewSegment call. |
m_tStop | Stop time from the CBasePin::NewSegment call. |
m_TypeVersion | Current media type version (see CBasePin::GetMediaTypeVersion). |
Member Functions
Member function | Description |
---|---|
AttemptConnection | Attempts to make a connection to another pin using a specified media type. |
CBasePin | Constructs a CBasePin object. |
CurrentRate | Returns the segment rate set by the CBasePin::NewSegment member function. |
CurrentStartTime | Returns the segment start time set by the CBasePin::NewSegment member function. |
CurrentStopTime | Returns the segment stop time set by the CBasePin::NewSegment member function. |
DisplayPinInfo | Displays pin information on the debugging monitor. |
DisplayTypeInfo | Displays media type information on the debugging monitor. |
GetConnected | Returns the pin that is connected to this pin. |
IncrementTypeVersion | Adds 1 to the current media type version. |
IsConnected | Determines whether the pin is connected. |
IsStopped | Determines whether the filter owning this pin is in the State_Stopped state. |
Name | Returns the m_pName name of the pin. |
Overrideable Member Functions
Member function | Description |
---|---|
Active | Switches the pin to the active (running) mode. |
AgreeMediaType | Agrees on the media type to be used by the pin. |
BreakConnect | Adds custom code when the connection quits. This is also called when a stage in the connection process fails, so this member function should also clean up partial connection states. |
CheckConnect | Adds custom code when the connection is being made. This is called at the start of the connection process. |
CheckMediaType | Checks if the pin can support a specific media type. |
CompleteConnect | Completes the connection. |
GetMediaType | Returns the media type used by the pin. |
GetMediaTypeVersion | Returns the version of the pins that were created dynamically. |
Inactive | Switches the pin to the inactive (stopped) mode. |
SetMediaType | Sets the m_mt data member to the established media type. |
TryMediaTypes | Tries to find an acceptable media type for a connection from the list returned by a media type enumerator. |
Implemented IPin Methods
Method | Description |
---|---|
Connect | Initiates a connection to another pin. |
ConnectedTo | Returns a pointer to the connecting pin. |
ConnectionMediaType | Returns the media type of this pin's connection. |
Disconnect | Breaks a connection. |
EndOfStream | Informs the input pin that no additional data is expected until a new run command is issued. (returns S_FALSE by default). |
EnumMediaTypes | Returns an enumerator for this pin's preferred media types. |
NewSegment | Specifies that samples following this call are grouped as a segment with a given start time, stop time, and rate. |
QueryAccept | Determines whether this pin accepts the media type. |
QueryDirection | Retrieves the pin direction of the pin. |
QueryId | Retrieves an identifier for the pin. |
QueryInternalConnections | Returns an array of the pins to which this pin connects internally. |
QueryPinInfo | Retrieves information about the pin itself (the name, owning filter, or direction). |
ReceiveConnection | Called by a connecting pin to make a connection to this pin. Usually this does not need to be overridden, because the default implementation calls CBasePin::CheckConnect, CBasePin::CheckMediaType, and CBasePin::BreakConnect. |
Run | Notifies the pin that the filter has changed state from paused to running. |
Implemented IQualityControl Methods
Method | Description |
---|---|
Notify | Notifies the recipient that a quality change is requested. |
SetSink | Sets the IQualityControl object that will receive quality messages. |
Implemented INonDelegatingUnknown Methods
Method | Description |
---|---|
NonDelegatingAddRef | Increments the owning filter's reference count. |
NonDelegatingQueryInterface | Retrieves CBasePin interfaces. Override this member function to pass out pointers to any interfaces added by the derived pin class. |
NonDelegatingRelease | Decrements the owning filter's reference count. |
Requirements
DirectShow applications and DirectShow filters have different include file and link library requirements. See Setting Up the Build Environment for more information.
OS Versions: Windows CE 2.12 and later. Version 2.12 requires DXPAK 1.0 or later.
Header:
Last updated on Wednesday, April 13, 2005
© 2005 Microsoft Corporation. All rights reserved.