图像分割或切割成小部分且帧率降低。

上次修订日期:2014 年 6 月 11 日

本文将说明为什么在一个配置了 FirePRO 驱动程序的总线上操控摄像头的 CURRENT_FRAME_RATE 寄存器时,图像流可能会被分割成两部分,帧率减半。       

下图所示的这个问题需要用到 FlyCap 演示程序,并在非常特殊的环境下进行:

    1. 摄像头连接到使用 FirePRO 驱动程序driver (pgr1394.sys) 的 IEEE-1394b,并且
    2. 摄像头正在向主机系统流传输等时数据;并且
    3. CURRENT_FRAME_RATE 寄存器 0x600 通过“单个 1394 总线上可以使用的 IEEE-1394 摄像头最大数量”中“尽可能提高帧率的问题”部分所述的方法进行操控。

FirePRO 驱动程序运行于“每个缓冲区一个包”模式下时,可能会出现此问题。 这种模式下,每个传入的等时数据包都放入自己那个恰好是一个数据包大小的内存中进行 DMA 化。 如果数据包更大,超出的将被丢弃。 这种模式不同于标准 PGRCAM 摄像头驱动程序所使用的“缓冲区填充”机制。 使用缓冲区填充模式时,不会出现这个问题。 Microsoft 低阶 1394 驱动程序同时支持每个缓冲区一个包和缓冲区填充模式。 FirePRO 驱动程序的更高版本默认运行于缓冲区填充模式。

在上文图像所示的情况中,所使用的帧率会产生等于一行图像大小的包。 造成图像看上去好像受到了垂直挤压。

什么时候使用每个缓冲区一个包模式

每个缓冲区一个包模式的主要优势是让您可以在流传输视频时查看出现在 IEEE-1394b 卡上的错误。

模式间切换

FlyCapture SDK 1.6rc15 及更高版本使用一种允许客户在每个缓冲区一个包和缓冲区填充模式间切换的 Windows 注册表项。该注册表键是:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{361A40FB-DC46-4ED9- BFF4-068E83D5C8AF}\XXXX\Parameters\BufferFill

每个 ...\XXXX\... 值代表一个单独 FireWire 总线的项。

该注册表值设置为‘1’ 时,PGRPRO 驱动程序会在缓冲区填充模式下运行;如果设置为‘0’,会在每个缓冲区一个包的模式下运行。

新设置生效需要重启系统。