iMediaSeeking::SetPositions 方法 (strmif.h)
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
方法 SetPositions
设置当前位置和停止位置。
语法
HRESULT SetPositions(
[in, out] LONGLONG *pCurrent,
[in] DWORD dwCurrentFlags,
[in, out] LONGLONG *pStop,
[in] DWORD dwStopFlags
);
参数
[in, out] pCurrent
[in,out]指向一个变量的指针,该变量指定当前位置(以当前时间格式的单位为单位)。
[in] dwCurrentFlags
标志的按位组合。 请参阅“备注”。
[in, out] pStop
[in,out]指向指定停止时间的变量的指针,以当前时间格式的单位为单位。
[in] dwStopFlags
标志的按位组合。 请参阅“备注”。
返回值
返回 HRESULT 值。 可能的值包括以下值。
返回代码 | 说明 |
---|---|
|
无位置更改。 (这两个标志都指定 no seeking.) |
|
成功。 |
|
无效的参数。 |
|
不支持方法。 |
|
NULL 指针参数。 |
注解
dwCurrentFlags 和 dwStopFlags 参数定义搜寻的类型。 定义了以下标志。
定位标志 | 说明 |
---|---|
AM_SEEKING_NoPositioning | 位置没有变化。 (time 参数可以为 NULL.) |
AM_SEEKING_AbsolutePositioning | 指定位置为绝对位置。 |
AM_SEEKING_RelativePositioning | 指定位置相对于上一个值。 |
AM_SEEKING_IncrementalPositioning | pStop) (停止位置相对于当前位置 (pCurrent) 。 |
修饰符标志 | 说明 |
---|---|
AM_SEEKING_SeekToKeyFrame | 查找到最近的关键帧。 这可能更快,但不太准确。 DirectShow 附带的筛选器均不支持此标志。 解码器是最有可能支持它的筛选器类型。 |
AM_SEEKING_ReturnTime | 返回等效的引用时间。 |
AM_SEEKING_Segment | 使用段查找。 |
AM_SEEKING_NoFlush | 不要刷新。 |
对于每个参数,请使用一个定位标志。 (可选)包括一个或多个修饰符标志。
如果指定了 AM_SEEKING_ReturnTime 标志,该方法会将位置值转换为引用时间,并在 pCurrent 或 pStop 变量中返回它。 如果使用其他时间格式(例如帧),此标志非常有用。
AM_SEEKING_Segment和AM_SEEKING_NoFlush标志支持无缝循环:
- 如果存在AM_SEEKING_Segment标志,则源筛选器在到达停止位置时发送 EC_END_OF_SEGMENT 事件,而不是调用 IPin::EndOfStream。 应用程序可以等待此事件,然后发出另一个 seek 命令。
- 如果存在AM_SEEKING_NoFlush标志,则图形不会在查找期间刷新数据。 将此标志用于AM_SEEKING_Segment。
pCurrent 和 pStop 的传入值以当前时间格式表示。 默认时间格式为 REFERENCE_TIME 单位 (100 纳秒) 。 若要更改时间格式,请使用 IMediaSeeking::SetTimeFormat 方法。 如果存在AM_SEEKING_ReturnTime标志,该方法会将传出值转换为 REFERENCE_TIME 个单位。
筛选器开发人员
如果实现此方法,可以使用值AM_SEEKING_PositioningBitsMask屏蔽修饰符标志,检查调用方是请求更改当前位置还是停止位置。 例如:
DWORD dwCurrentPos = dwCurrentFlags & AM_SEEKING_PositioningBitsMask if (dwCurrentPos == AM_SEEKING_AbsolutePositioning) { // Set new position to pCurrent. m_rtStart = *pCurrent; } else if (dwCurrentPos == AM_SEEKING_RelativePositioning) { // Increment current position by pCurrent. m_rtStart += *pCurrent; } |
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | strmif.h (包括 Dshow.h) |
Library | Strmiids.lib |