【Camera基础(一)】Camera摄像头工作原理及整机架构

简介: 【Camera基础(一)】Camera摄像头工作原理及整机架构

一、摄像头的基本工作原理

如图所示,一个景象的反射光被镜头所捕捉(镜头的光圈可以调节进光量,马达用来调节对焦),最终将聚焦好的图像精准对焦到图片传感器上边(色彩滤波会产生三基色),光信号转化为数字信号,通过模数转换最终得到原始码流数据。

问题:那我们可以直接使用这个包含图像信息和颜色信息的原始码流数据吗?

答案:不能,要根据用户端请求的VC接口携带请求数据流的格式决定。

二、编码

摄像头软件层,一般会提供多种格式和分辨率的参数,供上层选择,常见的格式如:YUYV、MJPEG、H264、NV12等。其中:

  • YUYV:原始码流,每个像素点占2个字节。
  • MJPEG:可以将数据压缩7倍左右,可以是NV12也可以是YUYV
  • H264编码:主要看配置,其中I帧压缩7倍左右,P帧20倍左右,B帧50倍左右,理论上B帧越多,就可能支持的高分辨率高帧率的码流
  • NV12:原始码流,每个像素点1.5个字节。

三、编码的目的

如果没有编码,我们计算一下1s请求NV12 4K 30HZ的码流需要多大的带宽?
答案:(3840*2160*1.5*30)字节 = 373248000字节=356M

按照,我们整机常用的camera接口usb 2.0的理论带宽:480Mbps = 60M/s,

无法满足NV12原始码流4K 30HZ的预览要求的,编解码技术,可以有效的压缩数据的体积而不会或较少的影像画质。

四、传输

作为相机的数据传输协议,肯定是要统一的,广泛的,厂家和广大开发者支持的协议。其中USB协议肯定有一席之地。整机方案,基本采用的都是USB Camera方案。

UVC是USB Video Class的简写,也就是USB接口的视频设备。一个UVC设备,需包含1个VC Interface和1个或多个VS Interface

  • VC Interface进行配置参数的传递,如启动和关闭自动对焦,白平衡等。
  • VS Interface进行图片数据流的传输。

USB协议

UVC协议:

UVC模型:

UVC软件架构

小结:

在Linux系统中,应用层和USB相机通过UVC协议进行交互。系统为了兼容不同的交互协议。在kernel层抽象了V4L2驱动,方便上层进程和各个协议对接。

V4L2提供了一系列的命令,如图所示,上层进程通过ioctl和底层kernel交互。

如此,上层应用就能拿到相机设备给出的编码后的码流了。但是如果整机方案是Android系统,那和linux还是有着一定的不同的。Android系统可以向下,可以使V4l2通过ioctl和kernel交互。


五、Android系统的camera架构

Android APSP系统作为开源的系统,需要考虑很多因素,既要考虑下游硬件设备厂商,也要考虑应用开发者,还要考虑用户隐私安全。所以,Google对Android下的Camera的架构,分了3层设计。


  • CameraProvider hal层的进程,init rc启动时启动。
  • CameraServer Framework层进程,主要用于维护上层apk都可能访问Camera服务
  • Camera的Runtime层,为上层apk提供服务,并封装了一系列的api,方便广大开发者调用和快速开发。

Android camera架构图:


小结:

android系统通过分层设计,给到每个上层应用独立访问相机设备的能力,上层应用可以通过简单的api调用就可以实现相机的预览和拍照功能。

原始码流数据通过编码,把数据进行压缩通过USB送到kernel,kernel通过UVC协议Hal层进行交互,HAL层拿到数据后,CamerServer会通过hwbinder与Hal层进行交互,然后进行显示。


相关文章
|
4天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
18天前
|
人工智能 前端开发 编译器
【AI系统】LLVM 架构设计和原理
本文介绍了LLVM的诞生背景及其与GCC的区别,重点阐述了LLVM的架构特点,包括其组件独立性、中间表示(IR)的优势及整体架构。通过Clang+LLVM的实际编译案例,展示了从C代码到可执行文件的全过程,突显了LLVM在编译器领域的创新与优势。
39 3
|
21天前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
55 1
|
1月前
|
SQL Java 数据库连接
Mybatis架构原理和机制,图文详解版,超详细!
MyBatis 是 Java 生态中非常著名的一款 ORM 框架,在一线互联网大厂中应用广泛,Mybatis已经成为了一个必会框架。本文详细解析了MyBatis的架构原理与机制,帮助读者全面提升对MyBatis的理解和应用能力。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Mybatis架构原理和机制,图文详解版,超详细!
|
17天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
1月前
|
开发者 容器
Flutter&鸿蒙next 布局架构原理详解
本文详细介绍了 Flutter 中的主要布局方式,包括 Row、Column、Stack、Container、ListView 和 GridView 等布局组件的架构原理及使用场景。通过了解这些布局 Widget 的基本概念、关键属性和布局原理,开发者可以更高效地构建复杂的用户界面。此外,文章还提供了布局优化技巧,帮助提升应用性能。
103 4
|
21天前
|
监控 持续交付 API
深入理解云计算中的微服务架构:原理、优势与实践
深入理解云计算中的微服务架构:原理、优势与实践
36 0
|
1月前
|
存储 Dart 前端开发
flutter鸿蒙版本mvvm架构思想原理
在Flutter中实现MVVM架构,旨在将UI与业务逻辑分离,提升代码可维护性和可读性。本文介绍了MVVM的整体架构,包括Model、View和ViewModel的职责,以及各文件的详细实现。通过`main.dart`、`CounterViewModel.dart`、`MyHomePage.dart`和`Model.dart`的具体代码,展示了如何使用Provider进行状态管理,实现数据绑定和响应式设计。MVVM架构的分离关注点、数据绑定和可维护性特点,使得开发更加高效和整洁。
163 3
|
1月前
|
API 持续交付 网络架构
深入解析微服务架构:原理、优势与实践
深入解析微服务架构:原理、优势与实践
25 0
|
2月前
|
容器
Flutter&鸿蒙next 布局架构原理详解
Flutter&鸿蒙next 布局架构原理详解