我有一个复杂的问题,我已经工作了好几个星期。我的程序是一个教育软件,它使用网络摄像头分析物理实验(例如振荡运动)。我经历过以下几个方面:
我的主要目标是减少不准确性,我试图通过限制FPS(导致繁忙的处理器)来实现。
答案 0 :(得分:1)
来自Time and Clocks in DirectShow上的MSDN文章:
任何支持IReferenceClock接口的对象都可以作为参考时钟。可以访问硬件计时器的过滤器可以提供时钟(例如音频渲染器),或者过滤器图形管理器可以创建使用系统时间的过滤器。
我从未尝试过使用过滤器中的IReferenceClock,但我怀疑它可能无法提供您需要的高分辨率时钟。
此SO post on high resolution timers可能就是您所需要的。
IAMStreamConfig.AvgTimePerFrame用于提供信息,尝试调整它不会产生任何影响。它只是一个值,您可以从中计算视频流的平均帧速率。
e.g。
VIDEOINFOHEADER* pVih = (VIDEOINFOHEADER*)m_MediaTypes.VideoType.pbFormat;
if( pVih )
int nFrameRate = (int)( (double) (10000000.0f / pVih->AvgTimePerFrame) );