我有一个基于ARM的设备,运行linux,连接到摄像头,我正在尝试将捕获的帧有效地存储到HD。
我相信我有两种选择:
找到我文件系统的最佳配置,打开文件并写入文件。我现在正在使用ext4和标准的fopen()fwrite()函数。我知道我也可以使用mmap,或者在调用open()时添加O_DIRECT标志,但还没有尝试过。
找到一种传递缓冲区物理地址的方法(我可以得到它 从我的Video4Linux驱动程序)直接到文件系统/硬盘驱动器, 所以数据将直接从那里传输。
我发现方法1很慢,将内存事务作为我的瓶颈,因为fwrite涉及将数据从用户空间复制到内核空间,然后再次进入某种缓存,然后再转到DMA。简单商店的内存事务太多......
关于方法2 - 我不知道这是否可能,但如果我是从头开始设计这个系统的人,那就是我要做的。
有什么想法吗?
答案 0 :(得分:0)
在UNIX上通过mmap写入文件的唯一问题是,要么在磁盘空间不足的情况下处理信号 或者你确定文件不稀疏 因此已经分配了所有需要的磁盘空间。 我认为最新的G ++提供了一种将信号转换为C ++异常处理的方法, 但我不确定这对其他系统的支持程度如何,而不是mac-os。