Dshow时间戳

Directshow中的时钟(Time and Clocks in Dshow)
1、参考时钟:
任何一个引出IReferenceClock 接口的对象都可以作为参考时钟。参考时钟可以是Filter提供,例如声卡就可以提供一个硬件的时钟。当然,可靠的时钟就是采用系统的时间。
调用IReferenceClock::GetTime可以获取时钟的当前时间。
尽管时钟的精确性还有所变动,但是GetTime方法返回的保证时间是增加的。也就是说,时钟不会倒退回去,比如,对硬件时钟进行了调整,GetTime方法就返回上次的时间。
缺省的参考时钟
当Graph运行的时候,Filter图表管理器会自动选择一个参考时钟的,选择时钟的法则如下
(1)如果应用程序选择了时钟,就采用应用程序选择的时钟
(2)如果Graph包含一个活动的源Filter,这个filter有IReferenceClock接口,那么就用这个时钟。
(3)如果Graph中不含有任何活动的源Filter,就选用graph中任何暴露IReferenceClock接口的Filter,选择的方法是从Renderers逆流向上,连接的filter优先,没有连接的filter次之。
(4)如果没有任何filter符合条件,就采用系统参考时钟System Reference Clock
设置参考时钟
如果你想为graph设置新的时钟,应用程序可以调用图表管理器的接口IMediaFilter::SetSyncSource方法来选择一个参考时钟。

2、Clock Times
Directshow定义了两个相关的时间,参考时钟和 数据流时间
参考时间是参考时钟的绝对时间
数据流时间和graph开始的时间有关。
当graph正在运行,流时间就等于从开始时间计数的时间,当graph暂停,流时间就等于它暂停开始的时间,当graph停止时,流时间不确定。
当一个sample具有时间戳t,就意味着这个sample应该在流时间t播放因此,流时间也叫播放时间。
当应用程序通过IMediaControl::Run来运行graph时,在graph内部也调用了IMediaFilter::Run
3、时间戳
时间戳采用的是流时间,它在sample标上开始和结束时间。时间戳也叫播放时间,通过后面的知识你会了解到,并不是所有格式的数据流都采用同一种样式的时间戳。
当renderer Filter接收到sample,它会根据sample的时间戳进行排序,等到该sample的播放时间到了,就开始播放该sample,从到达到开始播放的时间,可以通过IReferenceClock::AdviseTime获得。如果sample来晚了,或者sample没有时间戳,filter就立即播放sample。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值