Android相机-架构2

应用:

大概流程:open,创建session,发送request,得到captureresult

CameraManager,获取系统服务CameraService,打开相机:

1)openCamera:打开相机

获取相机信息:ICameraService.getCameraInfo

实例化一个CameraDeviceImpl

通过ICameraService的connectDevice方法,参数包括CameraDevice.StateCallback,传入CameraService

获取ICameraDeviceUser的代理

应用通过回调将CameraDeviceImpl返回给App使用,应用端的打开相机流程就完成了。

2)createCaptureSession:创建Session

通过configureStreamsChecked方法来配置数据流

实例化一个CameraCaptureImpl对象

3)createCaptureRequest:创建request

通过ICameraDeviceUser的CreateDefaultRequest()方法创建一个默认的CameraMetadataNative

实例化一个CaptureRequest.Builder对象

将cameraMetaDataNative传入其中

完成默认请求的创建

4)setRepeatingCapture:设置为Repeating

CameraDeviceImpI对象会包含CameraCaptureSession.CaptureCallback对象

5)capture:下发request

ICameraDeviceUser的submitcaptureRequest

6)onCaptureProcessed:将结果回传进行解析及后续处理

ICameraDeviceCallback的onResultReceived方法将PartialMetaData的数据回传回来

CameraCaptureSession.CaptureCallback的onCaputreProgressed方法回传给app

7)onCaptureCompleted:将结果回传进行解析及后续处理

ICameraDeviceCallback的onResultReceived方法将MetaData的数据回传回来

CameraCaptureSession.CaptureCallback的onCaputreProgressed方法回传给app

8)onImageAvailable:此时就可以读出图像数据进行处理

图像数据通过BufferQueue的缓存方式,通过queueBuffer方法入队图像缓存,并通知消费中去消费。

APP端可以使用ImageReader的onImageAvailable的方法通知ImageReader读取并进行处理

CameraService

AIDL:

ICameraService:主要是通过CameraService实现,打开Camera设备,获取系统支持的相机个数,添加闪光灯的监听等

ICameraServiceListener:由CameraManagerGlobal类实现,可以搞只当前Camera设备的状态变更等

ICameraDeviceUser:由CameraDeviceClient实现,主要是对相机设备的操作,开关设备,发送请求,配流等等

ICameraDeviceCallback:由CameraDeviceCallback实现,主要是提供Metadata和imagedata的回调,以及错误通知等等

CameraService:

mCameraProviderManager《-ProviderInfo《-DeviceInfo3

CameraDeviceClient:

mDevice<-Camera3Device<-RequestThread

mFrameProcessor<-frameProcessorBase

CameraService的启动:

main_cameraserver开始:instantiate方法进行实例化,

枚举ProviderManger

new对象和初始化

初始化包括:getService获取ICameraProvider代理;实例化ProviderInfo对象并对其初始化,加入容器进行管理

ProviderInfo的初始化:保存ICameraProvider变量,实现ICameraProviderCallback接口等等,主要是通过ICameraProvider

来获取ICameraDevice,然后实例化CameraInfo3对象

这样CameraService就可以管理所有的CameraProvider和CameraDevice了

CameraService是在系统启动启动的系统服务,启动后就会等待处理APP的相关请求,处理流程就是如应用的使用流程进行交互。

包括:获取相机属性,打开相机,配置数据流,处理图像请求,接收图像结果

Camera HAL:

HIDL:主要是提供CameraService使用的一些接口,由Camerahal框架负责实现这些接口。

ICameraProvider及相关的Callback

ICameraDevice及相关的Callback

ICameraDeviceSession

HAL的实现:

Qcom和Rockchip的实现

ComX-CHI的框架

主要的目录结构:

CamX:

core:核心实现模块内部包含hal目录,实现hal3接口,以及chi负责与CHI交互

csl:负责CamX与driver通讯模块

hwl:由独立运算能力的node,受csl管理

swl:需要依靠cpu才能实现的node

CHI-cdk:

chioveride:CHI的实现。负责与CamX交互并实现CHI的总体框架与业务逻辑

bin:平台相关的配置

actuator:对焦模块

ois

flash:

eeprom:外部存储

fd

topology:usecase

node:用户定义功能的node

module:不同sensor的配置文件

tunnig:

sensor:sensor的私有信息以及寄存器配置

实现用户场景需求。

usecase-》feature -》session -》pipeline -》Node(port,link,sink)

feature包括:HDR,CFA,JPEG,ASD,ZSL,MFNR,SuperNight,MultiFrame,MFSR等等

Camx-Chi的启动流程:

HwEnvironment

CSLModeManager

SettingsManager

通过dlopen打开com.qti.chi.override.so

dlsym或者chi_hal_override_entry,进入入口。

相关推荐
余弦的倒数21 小时前
海康立体相机3DMVS软件使用不同工作模式介绍
数码相机·3d
周胡杰1 天前
组件导航 (Navigation)+flutter项目搭建-混合开发+分栏
数码相机·flutter·华为·电脑·harmonyos·鸿蒙
90后小陈老师2 天前
WebXR教学 07 项目5 贪吃蛇小游戏
前端·数码相机
无情的8863 天前
常见相机焦段的分类及其应用
数码相机
中达瑞和-高光谱·多光谱3 天前
高光谱相机:基于高光谱成像技术的烟叶杂质剔除方案
数码相机
_Jyuan_3 天前
尼康VR镜头防抖模式NORMAL和ACTIVE的区别(私人笔记)
经验分享·笔记·数码相机·相机
吃个糖糖5 天前
MFC 调用海康相机进行软触发
c++·数码相机·mfc
szxinmai主板定制专家5 天前
RK3588 串行解串板,支持8路GMSL相机
数码相机
半熟芝士味5 天前
自动泊车技术—相机模型
数码相机
云钥科技6 天前
多目应用:三目相机在汽车智能驾驶领域的应用与技术创新
数码相机·汽车