UVC摄像头

1 版本历史
1.1 UVC uvc_version
UVC 1.0: Sep-4-2003
UVC 1.1: Jun-1-2005
UVC 1.5: August-9-2012, H.264 video codec. Linux 4.5 introduces UVC 1.5, but does not support H264.

1.2 V4L版本历史
Video4Linux取名的灵感来自1992 Video for Windows(V4W),但两者在技术上并没有任何关系。
Linux 2.5.46:2002年11月发布,natively支持V4L2
Linux 2.6.26:2008年发布,natively支持UVC;GSPCA使用的是V4L规范

2 UVC数据包格式
2.1 UVC帧格式
Figure 2-1 UVC Video Data Header Format

Figure 2-2 UVC帧格式

每16KB的一次Bulk burst中包含一个12字节的Video Header;并且每一次的Bulk burst对应一个URB。

2.2 主流UVC摄像头支持的格式
V4L2_PIX_FMT_MJPG
V4L2_PIX_FMT_YUYV
V4L2_PIX_FMT_H264
V4L2_PIX_FMT_JPEG

USB摄像头的成像效果一般不稳定,对着日光灯拍照,会有flicker现象。原因是日光灯照射时,光照比较充足,只需要很短的时间,譬如1/120秒或者1/100秒,sensor像素就可以获得足够的电流,然后sensor中的ADC就启动转换。

2.3 Linux数据包解码
1)ISO:一个URB对应一帧,等于number_of_packets * BPI(wBytesPerInterval),其中BPI = packet的大小 x burst的个数。只有高速和全速端点支持同步传输,高速同步端点的最大包长度为1024(400h),全速同步端点的最大包长度为1023(3FFh)。
2)Bulk:一个URB对应dwMaxPayloadTransferSize,dwMaxPayloadTransferSize = packet的大小 x burst的个数。
3)解码函数分别如下所示。
drivers/media/usb/uvc/uvc_video.c
uvc_video_decode_start()
uvc_video_decode_data()
uvc_video_decode_end()

2.4 UVC OV2640
UVC摄像头OV2640,计算需要多少个USB frame/uframe发送完一帧JPEG图像,可以用示波器测量摄像头模块的VSYNC信号来计算获得。一帧JPEG数据以FF D8字段开始,FF D9字段结束。

3 Still Image Capture
Figure 3-1 Still Image Capture

其中Method 1和Method 3属于ZSL。
方法一是从preview中截图。
方法三是专用的端点(类似于手机ISP专用的snapshot AXI port)拍照。
方法二是preview和拍照二选一,属于传统模式,拍照时停止预览,拍完时恢复预览。

4 协议
bInterfaceClass/bInterfaceSubClass/bInterfaceProtocol:0x0E/0x01/0x00和0x0E/0x02/0x00

5 libuvc
libuvc based on libusb
https://github.com/libuvc/libuvc
https://ken.tossell.net/libuvc/

6 主控芯片
6.1 EZ-USB CX3
1)4-lane CSI-2接口
2)芯片内部没有ISP和JPEG编码器,所以只支持V4L2_PIX_FMT_YUYV,可以在CIS和CX3之间外挂ISP解决Camera的效果处理问题
3)使用ThreadX

6.2 SanJet DVR

7 Tools
7.1 UVC播放器
AMCap: ActiveMovie Capture
VLC: [Tools][Preferences][All][Input / Codecs][Demuxers][H264]
gstreamer

7.2 Wireshark分析RTP中的H264码流
1)用Wireshark打开.pcap文件
2)右键点击H264的UDP包,选择“Decode as…”,选择 RTP,点击OK之后UDP就解析成RTP包了
3)查看RTP包的payload type,通常H264 SDP文件中指定了类型是96
4)WireShark工具栏中选择Edit – preferences – protocols – H264,把“H264 dynamic payload types”设成96,点击OK。以后payload就可以自动解析了

8 URLs
https://github.com/joeshang/joycar/blob/master/module/v4l2_camera/decoder_mjpeg.c

Linux UVC driver and tools
http://www.ideasonboard.org/uvc/

9 Abbreviations
ADAS:Advanced Driver Assistance System,先进驾驶辅助系统,Bosch提供整个方案模块
AFE:USB PHY Analog Front-end
ARC:Argonant RISC Core
AT91SAM9260:SAM means Smart ARM-based Microcontroller
ATMEL SAMBA:ATMEL Smart ARM-based Microcontroller Boot Assistant
BYOD:bring-your-own-device,CarPlay和Android Auto就属于BYOD
C2B:ADI Car Camera Bus
DMS:Driver Monitoring System,疲劳驾驶监控,使用GHS INTEGRITY RTOS系统,通过车载以太网通信(PHY工作在Master模式,连接时,会主动和Slave PHY进行链路训练),法国Valeo提供方案
DWC2:Design Ware Controller 2,Apple的嵌入式设备,包括iPad和iPhone都是使用的DWC2
EVS:Exterior View System,Android车载系统Camera架构HAL层(不同于手机Camera架构)
FourCC:Four-Character Codes
GSPCA:Generic Software Package for Camera Adapters,开始是为了支持Sunplus(凌阳单片机)camera模组spca50x(SunPlus CAmera),后来基于这个驱动进行扩展变成了通用的驱动gspca,所以缩写里面仍然包含了spca关键字,已经不再维护,现在使用uvc。
HSSQ:USB PHY High-speed Squelch
ISP1161:Philips' Integrated host Solution Pairs 1161,“Firms introduce USB host controllers”,https://www.eetimes.com/document.asp?doc_id=1290054
Leica:Leitz Camera
SL811HS:Cypress/ScanLogic 811 Host/Slave,性能上与ISP1161(Integrated host Solution Pairs 1161)相当
SPS:Sequence Parameter Set,序列参数集
suspendM:UTMI suspend Macrocell
TDI:TransDimension Inc.,该公司首先发明了将TT集成到EHCI RootHub中的方法,这样对于嵌入式系统来说,就省去了OHCI/UHCI的硬件,同时降低了成本,作为对该公司的纪念,Linux内核定义了宏ehci_is_TDI(ehci);产品UHC124表示USB Host Controller;收购了ARC USB技术;现已被chipidea收购,chipidea又被mips收购
TT:Transaction Translator(事务转换器,将USB2.0的包转换成USB1.1的包)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/73730.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s 自身原理之 Service

好不容易,终于来到 k8s 自身的原理之 关于 Service 的一部分了 前面我们用 2 个简图展示了 pod 之间和 pod 与 node 之间是如何通信息的,且通信的数据包是不会经过 NAT 网络地址转换的 那么 Service 又是如何实现呢? Service 我们知道是用…

linux——mysql的高可用MHA

目录 一、概述 一、概念 二、组成 三、特点 四、工作原理 二、案例 三、构建MHA 一、基础环境 二、ssh免密登录 三、主从复制 master slave1 四、MHA安装 一、环境 二、安装node 三、安装manager 一、概述 一、概念 MHA(MasterHigh Availability&a…

C++坦克大战源代码

源码: #include <iostream> #include <time.h> #include <windows.h>#define W 1 //上 #define S 2 //下 #define A 3 //左 #define D 4 //右 #define L 5 // 坦克有4条命void HideCursor() { //隐藏光标 …

visual studio 2017 运行的程序关闭后不能再运行?(visual studio建立项目之后退出,如何再次完整打开项目?)

在你储存项目的文件夹里面应该是这样的 里面.vcxproj后缀名的就是原来创建的项目&#xff0c;直接打开这个头文件源文件就会一起出来了&#xff01; 真的管用&#xff0c;亲测有效。

openGauss学习笔记-44 openGauss 高级数据管理-存储过程

文章目录 openGauss学习笔记-44 openGauss 高级数据管理-存储过程44.1 语法格式44.2 参数说明44.3 示例 openGauss学习笔记-44 openGauss 高级数据管理-存储过程 存储过程是能够完成特定功能的SQL语句集。用户可以进行反复调用&#xff0c;从而减少SQL语句的重复编写数量&…

目标检测(Object Detection)

文章目录 1. 目标检测1.1 目标检测简要概述及名词解释1.2 IOU1.3 TP TN FP FN1.4 precision&#xff08;精确度&#xff09;和recall&#xff08;召回率&#xff09; 2. 边框回归Bounding-Box regression3. Faster R-CNN3.1 Faster-RCNN&#xff1a;conv layer3.2 Faster-RCNN&…

Azure存储访问层

blob数据的热访问层&#xff0c;冷访问层和存档访问层 Azure Blob 存储是一种托管对象存储服务&#xff0c;可用于存储和访问大量非结构化数据&#xff0c;如文本和二进制数据。Azure Blob 存储提供了三个不同层级的访问方式&#xff0c;以适应不同数据的使用模式和成本效益需…

【福建事业单位-综合基础知识】03行政法

【福建事业单位-综合基础知识】03行政法 1.行政法概述&#xff08;原则重点&#xff09;行政主体范围 行政行为总结 二.行政处罚2.1行政处罚的种类总结 行政法框架 1.行政法概述&#xff08;原则重点&#xff09; 行政法的首要原则是合法&#xff1b;自由裁量——合理行政&…

《Go 语言第一课》课程学习笔记(八)

基本数据类型 Go 原生支持的数值类型有哪些&#xff1f; Go 语言的类型大体可分为基本数据类型、复合数据类型和接口类型这三种。 其中&#xff0c;我们日常 Go 编码中使用最多的就是基本数据类型&#xff0c;而基本数据类型中使用占比最大的又是数值类型。 整型 Go 语言的…

stack、queue 和 priority_queue 相关的练习

目录 一、stack 相关的练习 1.1 - 最小栈 1.2 - 栈的压入、弹出序列 1.3 - 逆波兰表达式求值 1.4 - 用栈实现队列 二、queue 相关的练习 2.1 - 二叉树的层序遍历 2.2 - 二叉树的层序遍历 II 2.3 - 用队列实现栈 三、priority_queue 相关的练习 3.1 - 数组中的第K个最…

8.14 ARM

1.练习一 .text 文本段 .global _start 声明一个_start函数入口 _start: _start标签&#xff0c;相当于C语言中函数mov r0,#0x2mov r1,#0x3cmp r0,r1beq stopsubhi r0,r0,r1subcc r1,r1,r0stop: stop标签&#xff0c;相当于C语言中函数b stop 跳转到stop标签下的第一条…

Oracle-如何判断字符串包含中文字符串(汉字),删除中文内容及保留中文内容

今天遇见一个问题需要将字段中包含中文字符串的筛选出来 --建表 CREATE TABLE HADOOP1.AAA ( ID VARCHAR2(255) ); --添加字段INSERT INTO HADOOP1.AAA(ID)VALUES(理解);....--查询表内容SELECT * FROM HADOOP1.AAA;在网上查找了一下有以下三种方式&#xff1a; 第一种&#…