我在 CX3 的框架下降方面需要一些帮助。 我有几台 200 万像素(准确地说是 1600x1301)的摄像机,以 20fps 的速度串流,每台摄像机都有一个 cx3 做 MIPI-USB 桥接。 我遇到的问题是,由于缺乏缓冲内存(主机速度不够快,因为它必须同时处理多个 CX3 数据流),CX3 有时会丢弃一些帧。
这是我目前使用的内存映射(我优化了一些数据区域,并使用 2 级引导加载器区域进行缓冲)。
定制
描述符区域 基数:0x40000000 大小:12 KB
代码区基数:0x40003000 大小: 134 KB
数据区基:0x40024800 大小: 32 KB
驱动程序堆基:0x4002C800 大小:32 KB
缓冲区基数:0x40034800 大小:302 KB -> 0x40080000 结束
这是 DMA 相关的定义。 我有 9 个(18 个,因为它们总是双倍的)16000 字节的缓冲区,因此
#define cx3_uvc_data_buf_size_ov(0x3E80)//(0x3E80)
#else
#definecx3_uvc_data_buf_size (0x8000)
#endif
#define cx3_uvc_prod_header(12)/* UVC DMA 缓冲区头大小 */
#define cx3_uvc_prod_footer(4)/* UVC DMA 缓冲区页脚大小 */
/* UVC 缓冲区大小 - 将映射到批量事务大小 */
#define cx3_uvc_stream_buf_size_ov(cx3_uvc_data_buf_size_ov + cx3_uvc_prod_header + cx3_uvc_prod_footer)
/* UVC 缓冲区计数 */
#define cx3_uvc_stream_buf_count_ov(9)
每次 CX3 运行缓冲内存时,当 CyU3PDmaMultiChannelCommitBuffer 失败时,就会发生 CX3_DMA_RESET_EVENT,然后我就会重置数据流:
CyCx3_ImageSensor_Stop_Stream();
如果(glIsApplnActive) {
uvc_app_stop();
}
uvc_app_start();
CyCx3_ImageSensor_Start_Stream();
我需要的是 CX3 更快地重置丢失的图像,或者我需要缓冲区内存。
我的问题是
1) CyU3PDmaMultiChannelCommitBuffer 失败后,如何使重置速度更快?
2) 如何将微控制器其他部分的内存用于帧缓冲? |