【Camera基础(二)】摄像头驱动原理和开发&&V4L2子系统驱动架构

简介: 【Camera基础(二)】摄像头驱动原理和开发&&V4L2子系统驱动架构

一、导入

二、摄像头数据输出格式

1、USB、VS、MIPI摄像头架构

  • MIPI接口摄像头支持的分辨率、帧率更高,功率低。
  • MIPI比USB成本更低,USB摄像头昂贵。
  • USB摄像头开发工作量少,一般都是免驱的。

2、RAW RGB DATA

RAW RGB是sensor的bayer阵列获取的数据(每种传感器获得对应的颜色亮度),摄像头sensor经过光电转换后输出的数据就是RAW data(RAW RGB)。在Sensor中,每一个感光点只能感光RGB其中的一种颜色。所以,通常所说的30万像素或130万像素等,指的是有30万或130万个感光点,每一个感光点只能感光一种颜色。

RGB:传统的红绿蓝格式。比如RGB565,其16bit数据格式为5bitR+6bitG+5BitB,G多一位,原因是人眼对绿色比较敏感。

3、RAW RGB与RGB的区别

  • RAW RGB每个像素只有一种颜色(R、G、B中的一种)
  • RGB每个像素都有三种颜色,每一个值在0-255之间。
  • 由sensor输出的数据RAW DATA(RAW RGB),经过ISP的彩色插值转换就变成了RGB。

4、YUV

Y表示亮度分量(Luma):如果只显示Y的话,图像看起来会是一张黑白照。

U(Cb)表示色度分量:是照片蓝色部分去掉亮度(Y)。

V(Cr)表示色度分量:是照片红色部分去掉亮度(Y)。

①YUV的优点:

与RGB相比,他的优点在于占用更少的空间

②YUV的采样格式

主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0

图像质量:YUV4:4:4>YUV4:2:2>YUV4:2:0

YUV4:4:4采样,每一个Y对应一组UV分量。意思是4个像素里面的数据有4个Y,4个U,4个V。

YUV4:2:2采样,每一个Y对应一组UV分量。意思是4个像素里面的数据有4个Y,2个U,2个V。

YUV4:2:0采样,每一个Y对应一组UV分量。意思是4个像素里面的数据有4个Y,1个U,1个V。

③YUV的存储格式

YUV的存储格式分为打包格式(packet formats)和平面格式(planar formats)。


  • 对于planar的YUV格式,先连续存储所有像素点的Y,随后存储U、V。存储类型表示为采样方式后缀加P,如YUV422P、YUV420P。
  • 对于packet的YUV格式,每个像素点的Y,U,V是连续交替存储的。存储类型表示为采样方式后缀加SP,如YUV422SP、YUV420SP。


一帧YUV420图像中,u和v分量占用的空间大小分别是原来像素数的1/4,占用的总大小就是widthheigth(3/2)

一帧YUV422图像中,u和v分量占用的空间大小分别是原来像素数的一半,占用的总大小就是widthheigth2

5、MJPEG/H264编码格式

有些摄像头sensor支持输出MJPEG/H264编码格式的,是因为其内置了DSP处理器,将YUV数据编码后输出MJPEG/H264码流。

问题:什么情况下需要用到编码?有什么作用?

  • 互联网传输,减少带宽。
  • 视频编码兼容,统一视频编码标准。


三、视频编码原理

1、视频编码的发展历程

2、视频编码原理

I帧:关键帧,采用帧内压缩技术。

P帧:向前参考帧,在压缩时,只参考前面处理过的帧,采用帧间压缩技术。

B帧:双向参考帧,在压缩时,它既参考前面的帧,又参考它后面的帧,采用帧间压缩技术。

除了I/P/B帧外,还有图像序列GOP。

GOP:两个I帧之间是一个图像序列,在一个图像序列中只有一个帧。在码率不变的前提下,GOP值越大,P、B帧的数量会越多,平均每个I、P、B帧所占用的字节数就越多,也就更容易获取较好的图像质量。如图:


四、V4L2子系统驱动架构

V4L2:是linux内核中关于视频设备的内核驱动框架,为上层访问底层的视频设备提供了统一的接口。

V4L2驱动核心:主要是构建一个内核中标准视频设备驱动的框架,为视频操作提供统一的接口函数。

平台V4L2设备驱动:在V4L2框架下,根据平台自身的特性实现与平台相关的V4L2驱动部分,包括注册video_device和v4l2_dev

具体的sensor驱动:主要上电、提供工作时钟、视频图像裁剪、流IO开启等,实现各种设备控制方法供上层调用并注册v4l2_subdev。

UVC:是一种usb视频设备驱动。用来支持usb视频设备,凡是usb接口的摄像头都能够支持。

V4L2的核心源码位于drivers/media/v4l2-core,根据功能可以划分为四类:

  • 字符设备模块:由v4l2-dev.c实现,主要作用申请字符主设备号、注册class和提供video device注册、注销等相关函数。
  • v4l2基础框架L:由v4l2-device.c、v3l2-subdev.c、v3l2-fh.c、v4l2-ctrls.c等文件构建v4l2基础框架。
  • videobuf管理:由videobuf2-core.c、videobuf2-dma-contig.c、videobuf2-dma-sg.c、videobuf2-memops.c、videobuf2-vmalloc.c、v3l2-mem2mem.c等文件实现,完成videobuffer的分配、管理和注销。
  • loctl框架:由v4l2-ioctl.c文件实现,构建v4l2 ioctl的框架。

V4L2注册流程:

videobuf管理:

V4L2 ioctl框架

用户空间对V4L2设备的操作基本都是ioctl来实现的,V4L2设备都有大量可操作的功能(配置寄存器),所以V4L2的ioctl也是十分庞大的。

V4L2驱动主要使用的ioctl命令值如下:


五、摄像头视频采集流程

摄像头数据流:


六、常见典型问题

1、摄像头画面卡顿

  • 帧率不足
  • usb带宽不足
  • 视频采集格式设置出错:YUV、MJPEG或H264格式
  • 编解码问题
  • CPU占用高


2、摄像头画面旋转90度或180度问题

3、摄像头画面打不开问题

相关文章
|
5月前
|
人工智能 运维 安全
配置驱动的动态 Agent 架构网络:实现高效编排、动态更新与智能治理
本文所阐述的配置驱动智能 Agent 架构,其核心价值在于为 Agent 开发领域提供了一套通用的、可落地的标准化范式。
1368 77
|
5月前
|
SQL 前端开发 关系型数据库
如何开发一套研发项目管理系统?(附架构图+流程图+代码参考)
研发项目管理系统助力企业实现需求、缺陷与变更的全流程管理,支持看板可视化、数据化决策与成本优化。系统以MVP模式快速上线,核心功能包括需求看板、缺陷闭环、自动日报及关键指标分析,助力中小企业提升交付效率与协作质量。
|
4月前
|
前端开发 JavaScript BI
如何开发车辆管理系统中的车务管理板块(附架构图+流程图+代码参考)
本文介绍了中小企业如何通过车务管理模块提升车辆管理效率。许多企业在管理车辆时仍依赖人工流程,导致违章处理延误、年检过期、维修费用虚高等问题频发。将这些流程数字化,可显著降低合规风险、提升维修追溯性、优化调度与资产利用率。文章详细介绍了车务管理模块的功能清单、数据模型、系统架构、API与前端设计、开发技巧与落地建议,以及实现效果与验收标准。同时提供了数据库建表SQL、后端Node.js/TypeScript代码示例与前端React表单设计参考,帮助企业快速搭建并上线系统,实现合规与成本控制的双重优化。
|
5月前
|
人工智能 安全 数据可视化
配置驱动的动态Agent架构网络:实现高效编排、动态更新与智能治理
本文系统性地提出并阐述了一种配置驱动的独立运行时Agent架构,旨在解决当前低代码/平台化Agent方案在企业级落地时面临困难,为Agent开发领域提供了一套通用的、可落地的标准化范式。
469 18
配置驱动的动态Agent架构网络:实现高效编排、动态更新与智能治理
|
4月前
|
运维 监控 安全
公链开发中的高可用架构设计要点
本指南提供公链高可用架构的可复用流程与模板,涵盖目标拆解、先决条件、分步执行、故障排查及验收标准,结合跨链DApp与量化机器人案例,提升落地效率与系统稳定性。
|
4月前
|
消息中间件 运维 监控
交易所开发核心架构拆解与流程图
本文系统解析交易所架构核心要素,从接入层到清算结算,结合系统流程图拆解各模块职责与协作机制。深入剖析撮合引擎、账本设计与风控逻辑,建立性能、可用性、安全性等多维评估标准,并提供可落地的流程图绘制、压测优化与进阶学习路径,助力构建高效、安全、可扩展的交易系统。(238字)
|
5月前
|
供应链 监控 JavaScript
如何开发ERP(离散制造-MTO)系统中的库存管理板块(附架构图+流程图+代码参考)
本文详解MTO模式下ERP库存管理的关键作用,涵盖核心模块、业务流程、开发技巧与代码示例,助力制造企业提升库存周转率、降低缺货风险,实现高效精准的库存管控。
|
5月前
|
前端开发 API 定位技术
如何开发车辆管理系统中的用车申请板块(附架构图+流程图+代码参考)
本文详细解析了如何将传统纸质车辆管理流程数字化,涵盖业务规则、审批流、调度决策及数据留痕等核心环节。内容包括用车申请模块的价值定位、系统架构设计、数据模型构建、前端表单实现及后端开发技巧,助力企业打造可落地、易扩展的车辆管理系统。
|
5月前
|
设计模式 人工智能 API
AI智能体开发实战:17种核心架构模式详解与Python代码实现
本文系统解析17种智能体架构设计模式,涵盖多智能体协作、思维树、反思优化与工具调用等核心范式,结合LangChain与LangGraph实现代码工作流,并通过真实案例验证效果,助力构建高效AI系统。
690 7
|
4月前
|
机器学习/深度学习 自然语言处理 监控
23_Transformer架构详解:从原理到PyTorch实现
Transformer架构自2017年Google发表的论文《Attention Is All You Need》中提出以来,彻底改变了深度学习特别是自然语言处理领域的格局。在短短几年内,Transformer已成为几乎所有现代大型语言模型(LLM)的基础架构,包括BERT、GPT系列、T5等革命性模型。与传统的RNN和LSTM相比,Transformer通过自注意力机制实现了并行化训练,极大提高了模型的训练效率和性能。