UVC摄像头

news2024/9/25 19:20:44

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.coloradmin.cn/o/899770.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第一节 Dubbo框架的介绍

1. 什么是Dubbo ? 官⽹地址: http://dubbo.apache.org/zh/ ⽬前,官⽹上是这么介绍的:Apache Dubbo 是⼀款⾼性能、轻量级的开源 Java 服务 框架 在⼏个⽉前,官⽹的介绍是:Apache Dubbo 是⼀款⾼性能、轻…

mysql的两张表left join 进行关联后,索引进行优化案例

一 mysql的案例 1.1 不加索引情况 1.表1没加索引 2.表2没加索引 3.查看索引 1.2 添加索引 1.表1添加索引 2.表2添加索引 3.查看

python使用dir()函数获取对象中可用的属性和方法(看不到python源码又想知道怎么调用,DLL调用分析,SDK二次开发技巧)

有时候调用一些SDK,但是人家又是封装成dll文件形式调用的,这时没法看源码,也不想看其对应的开发文档(尤其有些开发文档写得还很难懂,或者你从某个开源社区拿过来,就根本没找到开发文档)&#xf…

回归预测 | MATLAB实现IPSO-SVM改进粒子群优化算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现IPSO-SVM改进粒子群优化算法优化支持向量机多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现IPSO-SVM改进粒子群优化算法优化支持向量机多输入单输出回归预测(多指标,多图&#xf…

回归预测 | MATLAB实现WOA-BP鲸鱼优化算法优化BP神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现WOA-BP鲸鱼优化算法优化BP神经网络多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现WOA-BP鲸鱼优化算法优化BP神经网络多输入单输出回归预测(多指标,多图)效果一览基本…

运动恢复结构(SfM)_OpenMVG_代码的核心逻辑

参考: 深蓝学院,基于图像的三维重建 课程 1. 输入输出 数据集 fountain,选⾃Lund University开源的三维重建数据集 (http://www.maths.lth.se/matematiklth/personal/calle/dataset/dataset.html ) 2. 特征提取与特征匹配

优于立方复杂度的 Rust 中矩阵乘法

优于立方复杂度的 Rust 中矩阵乘法 迈克克维特 跟随 发表于 更好的编程 6 分钟阅读 7月 <> 143 中途&#xff1a;三次矩阵乘法 一、说明 几年前&#xff0c;我在 C 年编写了 Strassen 矩阵乘法算法的实现&#xff0c;最近在 Rust 中重新实现了它&#xff0c;因为我继续…

TCP报文段的首部格式

TCP传送的数据单元称为报文段&#xff0c;既可以用来运载数据&#xff0c;又可以用来建立连接、释放连接和应答 一个TCP报文段可以分为首部和数据部分&#xff0c;整个TCP报文段作为IP数据报的数据部分封装在IP数据报中。首部的固定长度为20B&#xff0c;因此最短为20B&#xf…

17-工程化开发 脚手架 Vue CLI

开发Vue的两种方式: 1.核心包传统开发模式: 基于 html/css /js 文件&#xff0c;直接引入核心包&#xff0c;开发 Vue。 2.工程化开发模式: 基于构建工具 (例如: webpack)的环境中开发 Vue。 问题: 1. webpack 配置不简单 2. 雷同的基础配置 3. 缺乏统…

2023.8 - java - 对象和类

public class Dog {String breed;int size;String colour;int age;void eat() {}void run() {}void sleep(){}void name(){} } 一个类可以包含以下类型变量&#xff1a; 局部变量&#xff1a;在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方…

01-关于new Object()的问题

美团面试题关于Object o = new Object()的几个问题。 1、对象在内存中的存储布局? 实例化一个对象,在堆区开辟一段空间。 堆区由markword、类型指针(class point)、实例数据、对齐组成。 markword:由8个字节组成。 类型指针(class point):就是指向某class文件的指针,…

外网连接局域网的几种方式?快解析内网穿透安全便利吗?

外网连接局域网是一项网络连接中的关键技术&#xff0c;它能够让远程用户通过互联网访问内部局域网中的资源和服务。外网连接局域网为企业提供了更大的灵活性和便捷性&#xff0c;但也需要严格的安全措施来防止未经授权的访问。 外网连接局域网的几种方式 在将外网连接到局域…

数组详解

1. 一维数组的创建和初始化 1.1 数组的创建 数组是一组相同类型元素的集合。 数组的创建方式&#xff1a; type_t arr_name [const_n]; //type_t 是指数组的元素类型 //const_n 是一个常量表达式&#xff0c;用来指定数组的大小 数组创建的实例&#xff1a; //代码1 int a…

SpringMVC之入门搭建框架

文章目录 前言一、SpringMVC简介1.什么是MVC2.什么是SpringMVC3.SpringMVC的特点 二、搭建框架——HelloWorld1.创建maven工程&#xff08;web项目&#xff09;2.配置web.xml3.配置springMVC.xml4.创建请求控制器 总结 前言 基础小白第一次走进SpringMVC&#xff1a;了解什么是…

@mouseover不起作用,并没有触发

我的错误代码如下&#xff1a; <el-rowv-for"version in item.version_list":key"version.id":class"{ blue-background: versionItem.id version.id }"mouseover.native"version.isHovered true"mouseleave.native"version…

C++11并发与多线程笔记(11) std::atomic续谈、std::async深入谈

C11并发与多线程笔记&#xff08;11&#xff09; std::atomic续谈、std::async深入谈 1、std::atomic续谈2、std::async深入理解2.1 std::async参数详述2.2 std::async和std::thread()区别&#xff1a;2.3 async不确定性问题的解决 1、std::atomic续谈 #include <iostream&…

核能的发展与应用

目录 1.核能的概念 2.核能的实现原理 3.核能的利与弊 4.核能未来的发展趋势 1.核能的概念 核能是指利用核反应过程中释放出的能量来产生电力或其他形式能量的能源形式。核能主要通过核裂变和核聚变两种方式产生。 1. 核裂变&#xff1a;核裂变是指重核&#xff08;通常是铀、…

智能电视与win10电脑后续无法实现DLNA屏幕共享

问题背景&#xff1a; 我用的是TCL电视&#xff0c;但是并不是最新&#xff0c;打开的方式是U盘->电脑&#xff0c;各位看自己情况&#xff0c;很多问题都大概率是智能电视问题。 情景假设&#xff1a; 假设你已经完成原先智能电视该有的步骤&#xff0c;通过DLNA&#xf…

什么是springMVC 视图和视图解析器

&#x1f600;前言 本篇讲解了什么是springMVC 视图和视图解析器 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x1f609;&#x1f60…

【C# 基础精讲】LINQ to XML查询

LINQ to XML 是 C# 中用于查询和操作 XML 数据的强大工具。它允许您使用 LINQ 查询语法对 XML 文档进行查询、过滤、投影等操作&#xff0c;从而更加方便地处理 XML 数据。本文将详细介绍 LINQ to XML 的基本概念、常见操作以及示例&#xff0c;帮助您了解如何在 C# 中使用 LIN…