directshow源过滤器SetTime

时间:2013-02-27 06:51:51

标签: directshow

我正在编写一个directshow源过滤器来读取特定的原始文件,原始文件包含每个帧中的时间戳(utc time)

我的过滤器是从Microsoft SDK的“推送源过滤器示例”修改的,因此最重要的是覆盖GetMediaType(),DecideBufferSize()和FillBuffer()。

我的问题出在FillBuffer(IMediaSample * pSample)中。我不知道如何在此函数中正确调用pSample-> SetTime(),因为时间戳从一个大数字开始,帧将一直等到StreamTime到达时间戳。

可以通过在每个帧上减去偏移量来解决问题,但我需要下游过滤器中的原始时间戳(SampleGrabber)

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

媒体样本上没有绝对时间戳。您需要从流中的片段中的所有样本中减去前导媒体采样时间,以便第一个媒体样本为零,并且正确设置以下内容。

如果您可以为样本抓取器回调设置基本时间戳(您正在减去),那么您可以将其添加回来并恢复正确的绝对时间。

MSDN:Time Stamps in DirectShow