网络摄像头时间不准确,设置曝光时间

时间:2010-11-30 21:02:09

标签: c# multithreading graphics directx webcam

我有一个复杂的问题,我已经工作了好几个星期。我的程序是一个教育软件,它使用网络摄像头分析物理实验(例如振荡运动)。我经历过以下几个方面:

  • 如果处理器忙,那么时间 测量不准确 (ISampleGrabberCB.BufferCB(SampleTime))
  • 如果我不使用时间,请计算 样品:0,1,2 ......看起来 更好。我看的时候才察觉到这一点 在运动的曲线上。

我的主要目标是减少不准确性,我试图通过限制FPS(导致繁忙的处理器)来实现。

1 个答案:

答案 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) );