我正在为Windows Mobile平台编写一个Camera驱动程序驱动程序。
我的应用程序出现问题,正确显示预览但速度非常低(可能是1或2帧/秒)。
经过调查,我可以看到来自传感器的帧可以正常(每45ms),但是当存储该帧的HW事件时,没有可用的缓冲区,然后帧被丢弃。
在我们的例子中,缓冲区由应用程序通过IOCTL_CS_BUFFERS / CS_ENQUEUE API提供。问题是缓冲区的速率非常低,这就是预览工作不正常的原因。
问题在于我无法调查为什么这个API以此速率给出,因为从Directshow固件调用了PIN_IOControl。
我之前描述的问题涉及测试应用程序。
现在,如果我使用Windows Mobile Camera应用程序,则在图片模式下预览是可以的(大约15帧/秒)。但是当视频模式打开时,预览仅显示2帧(如我们正在使用的测试应用程序中)。
我可以在这两种模式之间看到的唯一区别是视频模式预览使用QCIF格式,而捕获模式(图片)预览使用QVGA格式。
感谢您的帮助。
和Fabrice。
答案 0 :(得分:1)
下游过滤器完成后,Directshow会将缓冲区返回池中。你被任何使用缓冲区下游的东西所阻碍,而不是被directshow本身所阻碍。
听起来好像你有一个下游的编码器只能管理2fps,所以这是捕获缓冲区释放到池的速率。如果您可以控制驱动程序中的输出缓冲区参数,则可以增加池的大小,但这暂时无效。您还可以研究备用过滤器图形,例如直接写入磁盘。