当前位置: 首页 > news >正文

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 H264 - 180P or 360P
UVC头只有两个有效位置标记,帧起始(FID)和帧结束(EOF),主机能得到的位置信息只有,只是新一帧的开始(FID翻转)和帧到此结束(EOF = 1)。也就是说,同一帧内所有USB包的FID是同样的值,要么是1要么是0,同一帧内除了最后一个USB包的EOF是1,其它USB包的EOF都是0。

检测到EOF为1时,表示一个NALU或者分段结束,忽略头部4字节0x00000001,然后检查这一帧是不是SPS帧,如果是,就解析出width和height。

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.cnnetsun.cn/news/3739418.html

相关文章:

  • 大模型时代的数据库范式转移:从SQL到自然语言交互的技术演进
  • Mybatis-Plus15: 悲观锁 乐观锁
  • 异构系统对接的虚拟层架构:本体语义如何架在现有系统之上
  • 5大智能模块:重新定义你的《明日方舟》游戏体验
  • 如何在Mac上实现Windows风格的高效窗口切换:alt-tab-macos触控板手势完全指南
  • AI骨骼绑定技术突破:UniRig如何将3D角色动画效率提升10倍
  • 5分钟高效配置:VisualCppRedist AIO运行库一键部署终极方案
  • 如何彻底解决Windows多显示器DPI缩放不一致问题:SetDPI终极指南
  • 小白程序员必看:收藏!如何避免被AI大模型供应商“套牢”?
  • 字段定义冲突,异构系统对接最隐蔽的坑
  • Python爬虫环境配不对?数据再多也是白搭
  • 【AI服装更换技术实战指南】:2024年最精准、最低成本的5步换装工作流(附开源模型对比数据)
  • 面试官:说说你做的 Paimon 流批一体项目,有哪些亮点?
  • 免费降AI率工具红黑榜:2026年实测20款,虚假宣传曝光
  • XState状态机终极指南:如何用可视化思维构建可靠应用
  • Yuzu模拟器终极优化指南:三步解决卡顿闪退问题
  • 【独家首发】AI季节变换提示词工程白皮书:217组经实测验证的季节-天气-时段组合词库(限前500名领取)
  • 【单片机课设毕设项目】基于 STM32 的多传感器数据处理与智能预警系统设计 基于 STM32 的室内空气安全监测与通风装置开发(010801)
  • 【单片机课设毕设项目】基于 51 单片机的 LCD 显示智能窗帘环境监测系统设计 基于单片机舵机驱动的智能窗帘与风扇联动控制设计(011501)
  • 优惠券省钱 app 和返利 app 是同一类产品吗?模式对比
  • AiPrice和AliPrice是什么关系:是否属于阿里巴巴集团?
  • 5分钟掌握Apache APISIX Dashboard:可视化API网关管理终极指南 [特殊字符]
  • Siglec: 糖蛋白受体家族的免疫调节作用
  • BetterNCM安装器:网易云音乐插件一键自动化部署方案
  • 如何免费畅玩Switch游戏:yuzu模拟器完整使用指南
  • 为什么同样写“赛博朋克东京”,别人出图惊艳而你一片模糊?顶级提示工程师的6步逆向拆解法,含实时调试checklist
  • B-08. Hopper TMA:从单线程 Bulk Copy 到吞吐墙
  • Windows系统Mesa3D图形驱动终极指南:免费开源OpenGL/Vulkan加速解决方案
  • 用adsb_deku打造个人航空监控系统:硬件选型与软件配置全攻略
  • 第15课:字符串的特征检查和大小写转换