1. V4L2(Video for Linux 2)
这个框架是Linux内核中关于视频设备驱动的框架,对上向应用层提供统一的接口,对下支持各类复杂硬件的灵活扩展;现在的摄像头都适配这个主流框架。这个v4l2适配了多种接口的摄像头。只需要学习一个简单的V4L2编程就可以通用所有摄像头了。V4L2框架,主要包括v4l2-core、meida framework、videobuf2等模块。
V4L2支持三种方式来采集图像:内存映射方式(mmap)、直接读取方式(read)和用户指针。内存映射的方式采集速度较快,一般用于连续视频数据的采集,实际工作中的应用概率更高;直接读取的方式相对速度慢一些,所以常用于静态图片数据的采集;用户指针使用较少。
1.1 buffer的管理
使用摄像头时,核心是"获得数据"。即如何得到buffer。
摄像头采集数据时,是一帧又一帧地连续采集。所以需要申请若干个buffer,驱动程序把数据放入buffer,APP从buffer得到数据。这些buffer可以使用链表来管理。
驱动程序周而复始地做如下事情:
- 从硬件采集到数据
- 把数据存入空闲链表中的buffer
- 把含有数据的buffer放入完成链表
APP也会周而复始地做如下事情:
- 监测"完成链表",等待它含有buffer
- 从完成链表中取出buffer
- 处理数据
- 把buffer放入空闲链表
应用程序想要支持多个摄像头,就要处理不同的buffer,需要遵守一套标准的流程。
标签:01,先导,buffer,数据,链表,采集,V4L2,摄像头 From: https://www.cnblogs.com/yyyylllll/p/18432289