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; 第一种&#…

Java SpringBoot Vue ERP系统

系统介绍 该ERP系统基于SpringBoot框架和SaaS模式&#xff0c;支持多租户&#xff0c;专注进销存财务生产功能。主要模块有零售管理、采购管理、销售管理、仓库管理、财务管理、报表查询、系统管理等。支持预付款、收入支出、仓库调拨、组装拆卸、订单等特色功能。拥有商品库存…

【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡)

微服务技术一 技术栈图一、注册中心Eureka概念&#xff1a;搭建EurekaServer服务注册服务发现&#xff08;消费者对提供者的远程调用&#xff09; 二、Ribbon负载均衡负载均衡的原理&#xff1a;LoadBalanced负载均衡的策略&#xff1a;IRule懒加载 三、Nacos注册中心Nacos的安…

【数据结构OJ题】有效的括号

原题链接&#xff1a;https://leetcode.cn/problems/valid-parentheses/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 这道题目主要考查了栈的特性&#xff1a; 题目的意思主要是要做到3点匹配&#xff1a;类型、顺序、数量。 题目给的例子是比较…

Floyd(多源汇最短路)

Floyd求最短路 给定一个 n 个点 m 条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c;边权可能为负数。 再给定 k 个询问&#xff0c;每个询问包含两个整数 x 和 y&#xff0c;表示查询从点 x 到点 y 的最短距离&#xff0c;如果路径不存在&#xff0c;则输出 impo…

Elasticsearch:如何在 Ubuntu 上安装多个节点的 Elasticsearch 集群 - 8.x

Elasticsearch 是一个强大且可扩展的搜索和分析引擎&#xff0c;可用于索引和搜索大量数据。 Elasticsearch 通常用于集群环境中&#xff0c;以提高性能、提供高可用性并实现数据冗余。 在本文中&#xff0c;我们将讨论如何在 Ubuntu 20.04 上安装和配置具有多节点集群的 Elast…

(二)结构型模式:4、组合模式(Composite Pattern)(C++实例)

目录 1、组合模式&#xff08;Composite Pattern&#xff09;含义 2、组合模式应用场景 3、组合模式的优缺点 4、组合模式的UML图学习 5、C实现组合模式的简单示例&#xff08;公司的OA系统&#xff09; 1、组合模式&#xff08;Composite Pattern&#xff09;含义 组合模…

207. 课程表

思路 首先要完全理解题意&#xff0c;这道题的[a,b]并不是b满足了a就可以真正的学习a这门课了&#xff0c;因为a还有可能需要其他选修课的条件。类似下图。   这题的思路在于使用合适的数据结构来存储&#xff0c;这里用hash表来存储如果1这门课可以修了之后&#xff0c;可以…

ElasticSearch 数据聚合、自动补全(自定义分词器)、数据同步

文章目录 数据聚合一、聚合的种类二、DSL实现聚合1、Bucket&#xff08;桶&#xff09;聚合2、Metrics&#xff08;度量&#xff09;聚合 三、RestAPI实现聚合 自动补全一、拼音分词器二、自定义分词器三、自动补全查询四、实现搜索款自动补全&#xff08;例酒店信息&#xff0…