Qtopia中的Camera的设计
Qtopia中,自带了一个个application名字叫做camera,它使用了video for linux标准,支持v4l1和v4l2两个不同的标准版本。下面是video4linux的连接:
在我们的项目中,使用了v4l2。
其基本构造是这样的:
application启动后,调用videodevicefactory来产生一个videodevice,这样使用这可以通过对videodevice来操作。而videodevicefactory其实就是打开了/dev/video0文件并初始化了一个videodevice实例,他可以根据需求创建不同的videodevice实例。
在videodevice里面,将设备文件/dev/video0以mmap的方式将其device memory映射到了application memory space,然后,分配了一个fram结构,让这个frame结构里包含一个指针,就指向了这个被map得到的地址。
当要照相时,就ioctl对fd发送命令,在发送完命令后,执行一个poll操作,他等待fd上POLLIN事件的发生,即fd上有数据可以读了,然后poll就会返回。此时,camera照的结果应该就放在了被映射的那段内存里,而我们的frame结构里的指针应该就已经指向该段内存了。所以,如果要操作的话,就可以直接对其操作就可以了。
我们的相机得到的据说是yuv420结构的图形数据,所谓yuv420是指其图形数据中每个点都对应一个Y数据,即亮度数据,每4个点对应一个U数据,每四个点对应1个V数据,此外该文件中,先将所有的Y数据都安排完后,才会安排uv数据,而且具体的安排也会有很多方法,具体参考:
阅读(1127) | 评论(0) | 转发(0) |