CPosPassThru 类
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
类CPosPassThru
通过将转换筛选器上游传递给下一个筛选器来处理查找命令。
当应用程序查找筛选器图时,筛选器关系图管理器会将 seek 命令提供给呈现器筛选器。 命令通过每个筛选器的输出引脚上游传递,直到它到达可以执行命令的筛选器 ((如果有任何) )。 有关详细信息,请参阅 查找。 类CPosPassThru
将所有查找命令传递到上游筛选器上的输出引脚,如下图所示。
尽管此类是在基类库中提供的,但 DirectShow 还在 Quartz.dll 中提供相同的类。 使用 Quartz.dll 版本可以在一定程度上减小筛选器中的代码大小,因为 类是在运行时从 DLL 加载的。 若要使用该版本,请调用 CreatePosPassThru 函数。
在输出引脚的 NonDelegatingQueryInterface 方法中,每当请求的接口为 IMediaSeeking 或 IMediaPosition 时,委托给 CPosPassThru 对象,如以下代码所示:
// 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();
}
除非另有说明,否则此类中的所有 IMediaPosition 和 IMediaSeeking 方法都会调用连接的引脚上的相应方法并返回结果。
公共方法 | 说明 |
---|---|
CPosPassThru | 构造函数方法。 |
ForceRefresh | 已过时。 |
GetMediaTime | 检索当前示例上的时间戳。 虚拟。 |
IMediaPosition 方法 | 说明 |
get_Duration | 检索流的持续时间。 |
put_CurrentPosition | 设置相对于流总持续时间的当前位置。 |
get_StopTime | 检索相对于流持续时间停止播放的时间。 |
put_StopTime | 设置播放停止的时间,相对于流的持续时间。 |
get_PrerollTime | 检索将在开始位置之前排队的数据量。 |
put_PrerollTime | 设置将在开始位置之前排队的数据量。 |
get_Rate | 检索播放速率。 |
put_Rate | 设置播放速率。 |
get_CurrentPosition | 检索相对于流总持续时间的当前位置。 |
CanSeekForward | 确定是否可以向后查找流。 |
CanSeekBackward | 确定是否可以向前查找流。 |
IMediaSeeking 方法 | 说明 |
CheckCapabilities | 查询流是否具有指定的查找功能。 |
ConvertTimeFormat | 将时间格式从一种时间格式转换为另一种时间格式。 |
GetAvailable | 检索查找效率的时间范围。 |
GetCapabilities | 检索流的所有查找功能。 |
GetCurrentPosition | 检索相对于流总持续时间的当前位置。 |
GetDuration | 检索流的持续时间。 |
GetPositions | 检索相对于流总持续时间的当前位置和停止位置。 |
GetPreroll | 检索将在开始位置之前排队的数据量。 |
GetRate | 检索播放速率。 |
GetStopPosition | 检索相对于流持续时间停止播放的时间。 |
GetTimeFormat | 检索当前时间格式。 |
IsFormatSupported | 确定是否支持指定的时间格式。 |
IsUsingTimeFormat | 确定指定的时间格式是否为当前使用的格式。 |
QueryPreferredFormat | 检索流的首选时间格式。 |
SetPositions | 设置当前位置和停止位置。 |
SetRate | 设置播放速率。 |
SetTimeFormat | 设置时间格式。 |
Helper 函数 | 说明 |
CreatePosPassThru |
CPosPassThru 创建 或 CRendererPosPassThru 对象。 |
要求
要求 | 值 |
---|---|
标头 |
|
库 |
|