CPosPassThru class
[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.]
The CPosPassThru
class handles seek commands for transform filters, by passing them upstream to the next filter.
When an application seeks the filter graph, the Filter Graph Manager gives the seek command to the renderer filters. The command is passed upstream, through each filter's output pin, until it reaches a filter that can execute the command (if any). For details, see Seeking. The CPosPassThru
class passes all seek commands to the output pin on the upstream filter, as shown in the following diagram.
Although this class is provided in the base class library, DirectShow also provides the same class in Quartz.dll. Using the Quartz.dll version can reduce the code size in your filter somewhat, because the class is loaded at run-time from the DLL. To use that version, call the CreatePosPassThru function.
In your output pin's NonDelegatingQueryInterface method, delegate to the CPosPassThru object whenever the requested interface is IMediaSeeking or IMediaPosition, as shown in the following code:
// The following member variables are assumed:
IPin *m_pInput; // Pointer to the input pin on your filter.
IUnknown *m_pPos; // Pointer to the CPosPassThru object.
STDMETHODIMP CMyPin::NonDelegatingQueryInterface(REFIID riid, void **ppv)
{
HRESULT hr
if (riid == IID_IMediaPosition || riid == IID_IMediaSeeking)
{
if (m_pPos == NULL)
{
// We have not created the CPosPassThru object yet. Do so now.
hr = CreatePosPassThru(GetOwner(), FALSE, m_pInput, &m_pPos);
if (FAILED(hr)) return hr;
}
return m_pPos->QueryInterface(riid, ppv);
}
else
{
// Other interfaces (not shown).
}
}
~CMyPin::CMyPin()
{
// Release the CPosPassThruObject.
if (m_pPos != NULL) m_pPos->Release();
}
Except where noted, all IMediaPosition and IMediaSeeking methods in this class call the corresponding method on the connected pin and return the result.
Public Methods | Description |
---|---|
CPosPassThru | Constructor method. |
ForceRefresh | Obsolete. |
GetMediaTime | Retrieves the time stamps on the current sample. Virtual. |
IMediaPosition Methods | Description |
get_Duration | Retrieves the duration of the stream. |
put_CurrentPosition | Sets the current position, relative to the total duration of the stream. |
get_StopTime | Retrieves the time at which the playback will stop, relative to the duration of the stream. |
put_StopTime | Sets the time at which the playback will stop, relative to the duration of the stream. |
get_PrerollTime | Retrieves the amount of data that will be queued before the start position. |
put_PrerollTime | Sets the amount of data that will be queued before the start position. |
get_Rate | Retrieves the playback rate. |
put_Rate | Sets the playback rate. |
get_CurrentPosition | Retrieves the current position, relative to the total duration of the stream. |
CanSeekForward | Determines whether the stream can be seeked backward. |
CanSeekBackward | Determines whether the stream can be seeked forward. |
IMediaSeeking Methods | Description |
CheckCapabilities | Queries whether a stream has specified seeking capabilities. |
ConvertTimeFormat | Converts from one time format to another. |
GetAvailable | Retrieves the range of times in which seeking is efficient. |
GetCapabilities | Retrieves all the seeking capabilities of the stream. |
GetCurrentPosition | Retrieves the current position, relative to the total duration of the stream. |
GetDuration | Retrieves the duration of the stream. |
GetPositions | Retrieves the current position and the stop position, relative to the total duration of the stream. |
GetPreroll | Retrieves the amount of data that will be queued before the start position. |
GetRate | Retrieves the playback rate. |
GetStopPosition | Retrieves the time at which the playback will stop, relative to the duration of the stream. |
GetTimeFormat | Retrieves the current time format. |
IsFormatSupported | Determines whether a specified time format is supported. |
IsUsingTimeFormat | Determines whether a specified time format is the format currently in use. |
QueryPreferredFormat | Retrieves the preferred time format for the stream. |
SetPositions | Sets the current position and the stop position. |
SetRate | Sets the playback rate. |
SetTimeFormat | Sets the time format. |
Helper Functions | Description |
CreatePosPassThru | Creates a CPosPassThru or CRendererPosPassThru object. |
Requirements
Requirement | Value |
---|---|
Header |
|
Library |
|