【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、摄像头画面打不开问题

相关文章
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
465 90
MySQL原理简介—2.InnoDB架构原理和执行流程
本文介绍了MySQL中更新语句的执行流程及其背后的机制,主要包括: 1. **更新语句的执行流程**:从SQL解析到执行器调用InnoDB存储引擎接口。 2. **Buffer Pool缓冲池**:缓存磁盘数据,减少磁盘I/O。 3. **Undo日志**:记录更新前的数据,支持事务回滚。 4. **Redo日志**:确保事务持久性,防止宕机导致的数据丢失。 5. **Binlog日志**:记录逻辑操作,用于数据恢复和主从复制。 6. **事务提交机制**:包括redo日志和binlog日志的刷盘策略,确保数据一致性。 7. **后台IO线程**:将内存中的脏数据异步刷入磁盘。
ClickHouse 架构原理及核心特性详解
ClickHouse 是由 Yandex 开发的开源列式数据库,专为 OLAP 场景设计,支持高效的大数据分析。其核心特性包括列式存储、字段压缩、丰富的数据类型、向量化执行和分布式查询。ClickHouse 通过多种表引擎(如 MergeTree、ReplacingMergeTree、SummingMergeTree)优化了数据写入和查询性能,适用于电商数据分析、日志分析等场景。然而,它在事务处理、单条数据更新删除及内存占用方面存在不足。
451 21
Java高级应用开发:基于AI的微服务架构优化与性能调优
在现代企业级应用开发中,微服务架构虽带来灵活性和可扩展性,但也增加了系统复杂性和性能瓶颈。本文探讨如何利用AI技术,特别是像DeepSeek这样的智能工具,优化Java微服务架构。AI通过智能分析系统运行数据,自动识别并解决性能瓶颈,优化服务拆分、通信方式及资源管理,实现高效性能调优,助力开发者设计更合理的微服务架构,迎接未来智能化开发的新时代。
Druid 架构原理及核心特性详解
Druid 是一个分布式、支持实时多维OLAP分析的列式存储数据处理系统,适用于高速实时数据读取和灵活的多维数据分析。它通过Segment、Datasource等元数据概念管理数据,并依赖Zookeeper、Hadoop和Kafka等组件实现高可用性和扩展性。Druid采用列式存储、并行计算和预计算等技术优化查询性能,支持离线和实时数据分析。尽管其存储成本较高且查询语言功能有限,但在大数据实时分析领域表现出色。
166 19
|
2月前
|
Doris 架构原理及核心特性详解
Doris 是百度内部孵化的OLAP项目,现已开源并广泛应用。它采用MPP架构、向量化执行引擎和列存储技术,提供高性能、易用性和实时数据处理能力。系统由FE(管理节点)和BE(计算与存储节点)组成,支持水平扩展和高可用性。Doris 适用于海量数据分析,尤其在电商、游戏等行业表现出色,但资源消耗较大,复杂查询优化有局限性,生态集成度有待提高。
166 15
Git进阶笔记系列(01)Git核心架构原理 | 常用命令实战集合
通过本文,读者可以深入了解Git的核心概念和实际操作技巧,提升版本管理能力。
一文彻底讲透GPT架构及推理原理
本篇是作者从开发人员的视角,围绕着大模型正向推理过程,对大模型的原理的系统性总结,希望对初学者有所帮助。
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
105 7
AArch64架构调用链性能数据采集原理
本次分享的主题是AArch64架构调用链性能数据采集原理,由阿里云苏轩楠分享。主要分为五个部分: 1. 术语解释 2. Frame Pointer RegisterStack Unwind 3. Dwarf-based Stack Unwind 4. /BRBE/CSRE Stack Unwind 5. Kernel-space Stack Unwind&eBPF Unwinders

热门文章

最新文章