深入学习Linux摄像头(一)v4l2应用编程

深入学习Linux摄像头系列

深入学习Linux摄像头(一)v4l2应用编程

深入学习Linux摄像头(二)v4l2驱动框架

深入学习Linux摄像头(三)虚拟摄像头驱动分析

深入学习Linux摄像头(四)三星平台fimc驱动详解

深入学习Linux摄像头(一)v4l2应用编程

一、什么是v4l2

vl42是video for Linux 2的缩写,是一套Linux内核视频设备的驱动框架,该驱动框架为应用层提供一套统一的操作接口(一系列的ioctl)

V4L2在设计时,是要支持很多广泛的设备的,它们之中只有一部分在本质上是真正的视频设备,可以支持多种设备,它可以有以下几种接口

video capture interface:视频采集接口,这种接口应用于摄像头,v4l2在最初设计的时候就是应用于这种功能

video output interface:视频输出接口,将静止图像或图像序列编码为模拟视频信号,通过此接口,应用程序可以控制编码过程并将图像从用户空间移动到驱动程序

video overlay interface:视频直接传输接口,可以将采集到的视频数据直接传输到显示设备,不需要cpu参与,这种方式的显示图像的效率比其他方式高得多

其他接口这里就不介绍了,下面来看一下v4l2的API

二、v4l2 API介绍

对V4L2设备进行编程包括以下步骤

  • 打开设备
  • 更改设备属性,选择视频和音频输入,视频标准,图片亮度等
  • 设置数据格式
  • 设置输入/输出方法
  • 输入/输出缓存队列循环
  • 关闭设备

其中大多数操作都是通过应用层调用ioctl实现的,可以将这些ioctl分为下面几类

2.1 Querying Capabilities

查询设备的功能

由于V4L2涵盖了各种各样的设备,因此并非API的所有方面都适用于所有类型的设备,在使用v4l2设备时,必须调用此API,获得设备支持的功能(capture、output、overlay…)

ID 描述
VIDIOC_QUERYCAP 查询设备功能

:可以点击名称查看API讲解

2.2 Application Priority

应用优先级

当多个应用程序共享设备时,可能需要为它们分配不同的优先级。视频录制应用程序可以例如阻止其他应用程序改变视频控制或切换当前的电视频道。另一个目标是允许在后台工作的低优先级应用程序,这些应用程序可以被用户控制的应用程序抢占,并在以后自动重新获得对设备的控制

ID 描述
VIDIOC_G_PRIORITY 获取优先级
VIDIOC_S_PRIORITY 设置优先级

2.3 Device Inputs and Outputs

输入和输出设备

ID 描述
VIDIOC_ENUMINPUT 枚举视频输入设备
VIDIOC_G_INPUT 获取当前的视频输入设备
VIDIOC_S_INPUT 设置视频输入设备
VIDIOC_ENUMOUTPUT 枚举视频输出设备
VIDIOC_G_OUTPUT 获取当前视频输出设备
VIDIOC_S_OUTPUT 设置视频输出设备
VIDIOC_ENUMAUDIO 枚举音频输入设备
VIDIOC_G_AUDIO 获取当前音频输入设备
VIDIOC_S_AUDIO 设置音频输入设备
VIDIOC_ENUMAUDOUT 枚举音频输出设备
VIDIOC_G_OUTPUT 获取音频输出设备
VIDIOC_S_AUDOUT 设置音频输出设备

2.4 Video Standards

视频标准

ID 描述
VIDIOC_ENUMSTD 枚举设备支持的所有标准
VIDIOC_G_STD 获取当前正在使用的标准
VIDIOC_S_STD 设置视频标准
VIDIOC_QUERYSTD 有的设备支持自动侦测输入源的视频标准,此ioctl获取检测到的标准

2.5 Camera Control Reference

控制属性

ID 描述
VIDIOC_QUERYCTRL 查询指定的control详细信息
VIDIOC_QUERYMENU 查询menu
VIDIOC_G_CTRL 获取设备指定control的当前信息
VIDIOC_S_CTRL 设置设备指定的control

2.6 Image Format

图像格式

图像由多种格式YUV和RGB还有压缩格式等等,其中每种格式又分有多种格式,比如RGB:RGB565、RGB888…

所以在使用设备时,需要对格式进行设置

ID 描述
VIDIOC_ENUM_FMT 枚举设备支持的图像格式
VIDIOC_G_FMT 获取当前设备的图像格式
VIDIOC_S_FMT 设置图像格式
VIDIOC_TRY_FMT 测试设备是否支持此格式

2.7 Cropping, composing and scaling

图像裁剪、插入与缩放

ID 描述
VIDIOC_CROPCAP 获取图像裁剪缩放能力
VIDIOC_G_CROP 获取当前的裁剪矩阵
VIDIOC_S_CROP 设置裁剪矩阵

2.8 Input/Output

数据的输入和输出

内核中使用缓存队列对图像数据进行管理,用户空间获取图像数据有两种方式,一种是通过read、write方式读取内核空间的缓存,一种是将内核空间的缓存映射到用户空间。在操作v4l2设备时,通过VIDIOC_QUERYCAP获取设备支持哪种方式

ID 描述
VIDIOC_REQBUFS 申请缓存
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值