V4L2(Video for Linux Two)是Linux内核中的视频设备驱动框架,为视频类设备(如摄像头)提供统一接口规范。V4L2注册的设备在系统的/dev/目录下生成设备节点文件,通常命名为videoX。应用程序通过对这些设备节点进行I/O操作来配置和使用设备。
摄像头应用编程的步骤包括:
打开设备:使用open函数打开摄像头设备文件。
查询设备属性:使用ioctl()函数查询设备功能,确保其支持视频采集功能。
设置设备参数:枚举摄像头支持的像素格式、分辨率和帧率,并使用ioctl()设置视频采集格式和帧率。
初始化帧缓冲:申请帧缓冲区,建立内存映射,并将帧缓冲放入队列中。
开启视频采集:使用ioctl()开启视频采集。
读取和处理数据:在一个无限循环中,从摄像头读取视频数据并显示到LCD屏幕上。
对于不支持RGB565格式的摄像头,如一些UVC USB摄像头,需要将采集到的YUYV格式数据转换为RGB565格式才能显示。代码中添加了yuyv_to_rgb565函数用于实现像素格式转换。