0

我正在为 Windows Mobile 平台编写相机驱动程序。

我有一个应用程序可以正确显示预览但速度非常低(可能是 1 或 2 帧/秒)的问题。

经过调查,我可以看到来自传感器的帧正常(每 45 毫秒),但是当发生硬件事件以存储该帧时,没有可用的缓冲区,然后帧被丢弃。

在我们的例子中,缓冲区由应用程序通过 IOCTL_CS_BUFFERS/CS_ENQUEUE API 提供。问题是缓冲区以非常低的速率提供,这就是预览无法正常工作的原因。

问题是我无法调查为什么这个 API 以这个速率给出,因为 PIN_IOControl 是从 Directshow 固件调用的。

我之前描述的问题涉及测试应用程序。

现在,如果我使用的是 Windows Mobile Camera 应用程序,则在图片模式下可以预览(大约 15 帧/秒)。但是当视频模式打开时,预览仅显示每秒大约 2 帧(就像在我们使用的测试应用程序中一样)。

我可以看到这两种模式之间的唯一区别是视频模式预览使用 QCIF 格式,而捕获模式(图片)预览使用 QVGA 格式。

感谢您的帮助。

法布里斯。

4

1 回答 1

1

Directshow 将在下游过滤器完成后将缓冲区返回到池中。您被下游使用缓冲区的任何东西所阻碍,而不是被 directshow 本身所阻碍。

听起来好像您在下游有一个只能管理 2fps 的编码器,这就是捕获缓冲区释放到池中的速率。如果您可以控制驱动程序中的输出缓冲区参数,则可以创建池的大小,但这无济于事,除非是暂时的。您还可以研究备用过滤器图,例如直接写入磁盘。

G

于 2009-12-10T12:13:35.207 回答