CBaseReferenceClock 类

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

cbasereferenceclock 类层次结构

CBaseReferenceClock 实现引用时钟。

受保护的成员变量 说明
m_pSchedule CAMSchedule 对象,用于处理时钟的计划任务。
受保护的方法 说明
~CBaseReferenceClock 析构函数方法。
公共方法 说明
CBaseReferenceClock 构造函数方法。
GetPrivateTime 从时钟中检索实时。
SetTimeDelta 调整内部时钟时间。
GetSchedule 检索指向时钟计划对象的指针。
TriggerThread 唤醒处理计划的工作线程。
IReferenceClock 方法 说明
GetTime 检索当前引用时间。
AdviseTime 创建一次性建议请求。
AdvisePeriodic 创建定期建议请求。
取消添加 删除挂起的建议请求。
IReferenceClockTimerControl 方法 说明
GetDefaultTimerResolution 返回参考时钟计时器的当前分辨率。
SetDefaultTimerResolution 设置参考时钟计时器的分辨率。
Helper 函数 说明
ConvertToMilliseconds 将引用时间转换为毫秒。

备注

此类实现支持 IReferenceClock 和 IReferenceClockTimerControl 接口 引用时钟。 例如,如果筛选器可以为筛选器图提供参考时钟,则通过访问硬件设备,它可以使用此类来实现时钟。

对象 CBaseReferenceClock 维护两个不同的时间值:

内部时钟在短时间内向后运行是有效的。 例如,如果时钟向前偏移,筛选器可以向后调整。 (请参阅 CBaseReferenceClock::SetTimeDelta.) GetTime 方法使用 GetPrivateTime 报告的时间值。 但是,参考时间单调增加:换句话说,它永远不会向后运行。 因此,如果内部时钟向后运行, GetTime 将继续报告旧时间,直到内部时钟赶上。

例如,这两种方法可能会返回以下序列:

GetPrivateTime: 105, 106, 103, 104, 105, 106, 107, 108
GetTime:        105, 106, 106, 106, 106, 106, 107, 108

在第三个时钟刻度时,内部时钟向后跳至 103。 GetTime 方法继续报告 106,直到内部时钟赶上。

默认情况下, GetPrivateTime 通过调用 timeGetTime 函数返回系统时间。 从外部设备提供参考时钟的筛选器可以执行以下操作之一:

  • 重写 GetPrivateTime 以从设备返回时间。
  • 监视设备时间与系统时间之间的差异,并调用 SetTimeDelta 进行更正。

此类使用 CAMSchedule 对象来处理建议请求的计划。 有关详细信息,请参阅 CAMSchedule 类的文档。

要求

要求
标头
Refclock.h (包括 Streams.h)

Strmbase.lib (零售版本) ;
Strmbasd.lib (调试生成)