CBaseReferenceClock 类
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
类 CBaseReferenceClock
实现引用时钟。
受保护的成员变量 | 说明 |
---|---|
m_pSchedule | CAMSchedule 对象,用于处理时钟的计划任务。 |
受保护的方法 | 说明 |
~CBaseReferenceClock | 析构函数方法。 |
公共方法 | 说明 |
CBaseReferenceClock | 构造函数方法。 |
GetPrivateTime | 从时钟中检索实时。 |
SetTimeDelta | 调整内部时钟时间。 |
GetSchedule | 检索指向时钟计划对象的指针。 |
TriggerThread | 唤醒处理计划的工作线程。 |
IReferenceClock 方法 | 说明 |
GetTime | 检索当前引用时间。 |
AdviseTime | 创建一次性建议请求。 |
AdvisePeriodic | 创建定期建议请求。 |
取消添加 | 删除挂起的建议请求。 |
IReferenceClockTimerControl 方法 | 说明 |
GetDefaultTimerResolution | 返回参考时钟计时器的当前分辨率。 |
SetDefaultTimerResolution | 设置参考时钟计时器的分辨率。 |
Helper 函数 | 说明 |
ConvertToMilliseconds | 将引用时间转换为毫秒。 |
此类实现支持 IReferenceClock 和 IReferenceClockTimerControl 接口 的 引用时钟。 例如,如果筛选器可以为筛选器图提供参考时钟,则通过访问硬件设备,它可以使用此类来实现时钟。
对象 CBaseReferenceClock
维护两个不同的时间值:
- 在内部, CBaseReferenceClock::GetPrivateTime 方法返回时钟保留的实际时间。
- 在外部, CBaseReferenceClock::GetTime 方法返回筛选器图的引用时间。
内部时钟在短时间内向后运行是有效的。 例如,如果时钟向前偏移,筛选器可以向后调整。 (请参阅 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 类的文档。
要求 | 值 |
---|---|
标头 |
|
库 |
|