使用 C# 和 C DLL 进行回调,无法获得比 16FPS 更好的帧捕获率,为什么?
我有一个 C# 应用程序,用于连接 USB 摄像头。它运行得很好,只是我无法达到每秒 16 帧左右的速度。我正在使用 VFW 和每个 WM_CAP_GRAB_FRAME_NOSTOP
消息的“C”回调(回调是 DLL 的一部分),并且我发现即使我在回调中基本上什么也不做,我无法获得像样的帧速率(16FPS 大约是最大值)。
我认为使用这个接口会给我带来比其他替代方案(例如 DirectShow)更好的性能,仅仅是因为它的简单性和与驱动程序的低级连接;但现在我开始怀疑这是否属实。
有人对此有任何见解吗?
I have an application in C# that interfaces to a USB camera. It's been working just fine except for the fact that I have not been able to achieve better than about 16 frames-per-second. I'm using VFW, and a 'C' callback (the callback is part of a DLL) per WM_CAP_GRAB_FRAME_NOSTOP
message, and I've found that even if I do essentially NOTHING in the callback, I am unable to get a decent frame rate (16FPS is about the max).
I thought that using this interface would give me better performance than other alternatives (DirectShow for example) simply because of its simplicity and low-level connection to the driver; but now I'm beginning to wonder if that's true.
Anyone have any insight on this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
让我大胆猜测一下...
您是否使用了 System.Timers.Timer?或者,程序的C部分是否使用Windows Timer?如果这样做,则其有限的分辨率可能是问题的原因。
Let me hazard a guess...
Are you using
System.Timers.Timer
by any chance? Or, is the C portion of the program using Windows Timer? If you do, its limited resolution might be the cause of the problem.我从来没有弄清楚为什么 VFW 似乎限制了我的帧速率;但是,我发现了 C# 的 VideoInput ,我现在使用它。让我能够更好地控制相机并获得更高的帧速率。
I never did find out why VFW appears to limit my frame rate; however, I found VideoInput for C# and I now use that instead. Gives me much more control over the camera and much higher framerates.