初学Linux,在网上找了些V4L2资料,说到:
“一共有三种视频采集方式:使用read、write方式;内存映射方式和用户指针模式。read、write方式,在用户空间和内核空间不断拷贝数据,占用了大量用户内存空间,效率不高。
内存映射方式:把设备里的内存映射到应用程序中的内存控件,直接处理设备内存,这是一种有效的方式。上面的mmap函数就是使用这种方式。用户指针模式:内存片段由应用程序自己分配。这点需要在v4l2_requestbuffers里将memory字段设置成V4L2_MEMORY_USERPTR。”
通常应该是使用第二种也就是内存映射方式
我想问下大家:
1.内存映射方式最后得到的是参数buffers[numBufs].start和buffers[numBufs].length,然后使用的时候用fwrite将这段内存中的数据写入LCD文件进行显示,或者将LCD文件也映射到内存,使用memcpy,还有其他方式吗?这两种方式哪个效率更高?这里使用的fwrite和三种采集方式中的read、write方式如何比较?
2.可否将LCD映射进内存的时候,映射到buffers[numBufs].start,也就是LCD和V4L2映射同一段内存,这样V4L2的数据直接连通到LCD,LCD的刷新不需要我们自己调用函数来完成。Linux允许这样做吗?
[ 此帖被xforce在2010-10-28 13:11重新编辑 ]