gpt4 book ai didi

delphi - 如何在 DirectShow 样本采集器的 "double"时间戳和 FillBuffer REFERENCE_TIME 之间进行转换?

转载 作者:行者123 更新时间:2023-12-02 13:48:33 25 4
gpt4 key购买 nike

IMediaSample SetTime() 函数需要两个 REFERENCE_TIME 参数。 REFERENCE_TIME 在 Delphi 6 中定义为“LongLong”类型,Delphi 6 是我用于 DirectShow 应用程序的编程语言。但是,DirectShow 样本采集过滤器用来传递新媒体样本的样本时间的 Callback 方法的第一个参数被强制转换为 double。如何在这两个值之间进行转换,以便可以比较从样本采集过滤器收到的媒体样本与我在推送源过滤器的 FillBuffer() 方法中生成的 REFERENCE_TIME 值之间的采样时间?

此外,回调方法中样本抓取器过滤器提供的采样时间是否会被视为媒体样本的开始时间或结束时间?

最佳答案

简单部分: double 以秒为单位,REFERENCE_TIME 以 100 ns 为单位。因此转换很简单:乘以或除以 1E+7

不是那么简单:您在一个过滤器图表中捕获抓取器中的一些时间,并在另一个图表中的过滤器中为数据添加时间戳。两个图都有时间戳来指示 streaming/presentation time ,它与图“运行时间”相关。也就是说,当媒体样本在图之间传递时,还可能涉及时间戳偏移。

对于结束时间,对于视频媒体样本,样本停止时间可以省略或设置为等于开始时间;音频停止时间通常可以通过将开始时间添加到缓冲区保存的有效负载数据的时间来计算。

MSDN 上的额外阅读:Time and Clocks in DirectShow

关于delphi - 如何在 DirectShow 样本采集器的 "double"时间戳和 FillBuffer REFERENCE_TIME 之间进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8335920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com