一直在搞camera,对v4l2也比较熟悉了,今天写文章说点自己的看法
对于v4l2,对多流的支持是比较弱的,只是一个流。但现在的camera 硬件,能支持多个流同事工作,所以又必要对v4l2的api进行扩展,加入多流的支持。
v4l2的团队们考虑了一种做法,可参考linuxtv的网页。
这里谈一下我自己的考虑。
1 先来考虑一个camera设备的构成
1 一个camera 用一个v4l2 设备来代表,然后导出一个vidoe节点来访问这个设备。
2 一个camera 有很多相关的模块组成,把这些模块组织成subdev,并导出video节点访问这些subdev
3 一个camera 应有若干流供用户空间访问,于是抽象出流,然后导出video 节点访问流,这些流是动态创建的,节点也是动态生成的
扩展几个v4l2 api, V4L2_CREAT_STREAM, V4L2_DESTRY_STREAM.
于是用户可以如下访问一个camera设备。
1 open camera v4L2 设备,得到fd。
2 用这个fd, 调用V4L2_CREAT_STREAM,得到stream 的设备节点,这时我们可以传递一个流的描述符来创建流,比如流的类型,预览,video snapshot等
3 打开这个节点 得到stream fd
4 配置这个fd,以使用这个stream。
5 用完后关闭fd
6 然后销毁流
这样的做法有连个好处,
1 保留了原来的操作方式,向下兼容
2 添加了多流操作,而且流的操作就是以前的操作方式。
原文:http://www.cnblogs.com/soc-linux-driver/p/3733796.html