博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zz嵌入式Linux下Camera编程--V4L2
阅读量:5046 次
发布时间:2019-06-12

本文共 2369 字,大约阅读时间需要 7 分钟。

 

作者:Sam (甄峰)  

 

最近有个需求,要在ARM Linux上实现USB Camera 拍照功能。

 

0. 背景知识:

首先要确认的是,Kernel是否支持USB Camera。因为Linux下,USB协议除了电气协议和标准,还有很多Class。 这些Class就是为了支持和定义某一类设备接口和交互数据格式。只要符合这类标准,则不同厂商的USB设备,不需要特定的driver就能在Linux下使用。

例如:USB Input class,则使所有输入设备都可以直接使用。还有类似Audio Class, Pring Class,Mass Storage Class, video class等。

 

其中Video Class 就是我们常说的UVC(USB Video Class). 只要USB Camera符合UVC标准。理论上在2.6 Kernel Linux 就可以正常使用。

网络上有人谈到怎样判断是否UVC Camera设备:
#lsusb
Bus 001 Device 010: ID 046d:0825 Logitech, Inc. 

#lsusb -d 046d:0825 -v | grep "14 Video" 

如果出现:

      bInterfaceClass        14 Video

      bInterfaceClass        14 Video

      bInterfaceClass        14 Video

      bInterfaceClass        14 Video

      bInterfaceClass        14 Video

      bInterfaceClass        14 Video

      bInterfaceClass        14 Video

      bInterfaceClass        14 Video

      bInterfaceClass        14 Video

      bInterfaceClass        14 Video

      bInterfaceClass        14 Video

      bInterfaceClass        14 Video

      bInterfaceClass        14 Video

则说明是支持UVC.

 

1. Kernel配置:

Device Drivers  --->  <*> Multimedia support  --->  <M>   Video For Linux  
Device Drivers  --->  <*> Multimedia support  ---> [*]   Video capture adapters  --->  [*]   V4L USB devices  --->    <M>   USB Video Class (UVC)
--- V4L USB devices  : 这里还有很多特定厂商的driver.可供选择。
分析:
 "USB Video Class (UVC)":对应的driver是:uvcvideo.ko
"Video For Linux": 对应driver是:videodev.ko
安装driver顺序如下:
insmod v4l1_compat.ko
insmod videodev.ko
insmod uvcvideo.ko
driver会创建一个或多个主设备号为81,次设备号:0-255的设备。
除了camera会创建为:/dev/videoX 之外,还有VBI设备-/dev/vbiX. Radio设备--/dev/radioX.
 
2. V4L2一些概念
2.1:Video Input and Output:
video input and output是指device物理连接。
只有video 和VBI capture拥有input.
Radio设备则没有video input 和output.
2.2: Video Standards:
Video Device支持一个或多个Video 标准。
3. 使用V4L2编程:
使用V4L2(Video for Linux 2) API的过程大致如下:

Opening the device

Changing device properties, selecting a video and audio input, video standard, picture brightness a. o.

Negotiating a data format

Negotiating an input/output method

The actual input/output loop

Closing the device

 
3.1:打开设备:
fd = open ("/dev/video0", O_RDWR, 0);
3.2: 查询设备能力:Querying Capabilities:
因为V4L2可以对多种设备编程,所以并不是所有API可以对所有设备编程,哪怕是同类型的设备,使用ioctl--VIDIOC_QUERYCAP去询问支持什么功能。

顺便看看USB TO Serail:
Device Drivers  --->[*] USB support  ---> <M>   USB Serial Converter support  --->   <M>   USB Prolific 2303 Single Port Serial Driver
USB Prolific 2303 Single Port Serial Driver是指出支持pl2303芯片的USB 2 serial.
pl2303.ko
USB Serial Converter support是基础driver. 对应usbserial.ko

转载于:https://www.cnblogs.com/Akagi201/archive/2012/05/18/2507855.html

你可能感兴趣的文章
转载:mysql数据库密码忘记找回方法
查看>>
scratch少儿编程第一季——06、人在江湖混,没有背景怎么行。
查看>>
面向对象1
查看>>
在ns2.35中添加myevalvid框架
查看>>
【贪心+DFS】D. Field expansion
查看>>
为什么要使用href=”javascript:void(0);”
查看>>
二进制文件的查看和编辑
查看>>
C# Async与Await的使用
查看>>
Mysql性能调优
查看>>
iOS基础-UIKit框架-多控制器管理-实例:qq界面框架
查看>>
javascript学习---BOM
查看>>
IOS-每个程序员的编程之路上都应该看这11本书
查看>>
自定义tabbar(纯代码)
查看>>
extjs fieldset 和 radio
查看>>
小程序底部导航栏
查看>>
Codeforces Gym101505G:Orchard Division(扫描线+线段树第k大)
查看>>
ibatis学习笔记
查看>>
18-ES6(1)
查看>>
poj1611 简单并查集
查看>>
tensorflow实现迁移学习
查看>>