IAMTimelineObj::SetStartStop 方法

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

注意

[已弃用。 此 API 可能会从 Windows 的未来版本中删除。]

 

方法 SetStartStop 设置相对于对象的父对象的开始和停止时间。

语法

HRESULT SetStartStop(
   REFERENCE_TIME Start,
   REFERENCE_TIME Stop
);

参数

启动

新的开始时间(以 100 纳秒为单位)或 –1(保留现有开始时间)。

停止

新的停止时间(以 100 纳秒为单位)或 –1(保留现有停止时间)。

返回值

返回以下 HRESULT 值之一:

返回代码 说明
S_OK
成功。
E_INVALIDARG
无效的参数。
E_NOTIMPL
未实现。

 

备注

曲目、组合和组不实现此方法。 对于这些对象,开始时间始终为零,停止时间是它们包含的对象的最大停止时间。

不要在同一跟踪中的源对象上设置重叠时间。这样做可能会导致未定义的行为。

对于源对象,开始和停止时间与媒体开始和媒体停止时间无关。 更改一对值不会更改另一对值。 若要设置媒体开始和停止时间,请调用 IAMTimelineSrc::SetMediaTimes 方法。 有关详细信息,请参阅 DirectShow 编辑服务中的时间

若要获取帧准确的剪切和转换,请将 StartStop 参数设置为帧边界。 可以使用 IAMTimelineObj::FixTimes 方法将时间值转换为最近的帧边界,或者使用以下函数从帧编号转换为引用时间:

REFERENCE_TIME inline FrameNumToTime(LONGLONG frame, double fps)
{
    double dt = (frame * 10000000 / fps);
    if (frame >= 0) 
    {
        dt += 0.5;    }
    else
    {
        dt -= 0.5;
    }
    return (REFERENCE_TIME)dt;
}

注意

头文件 Qedit.h 与版本 7 之后的 Direct3D 标头不兼容。

 

注意

若要获取 Qedit.h,请下载适用于 Windows Vista 和 .NET Framework 3.0 的Microsoft Windows SDK更新。 Qedit.h 在 Windows 7 和 .NET Framework 3.5 Service Pack 1 的Microsoft Windows SDK中不可用。

 

要求

要求
标头
Qedit.h

Strmiids.lib

另请参阅

IAMTimelineObj 接口

错误和成功代码