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,进入入口。

相关推荐
格林威13 小时前
工业检测机器视觉为啥非用工业相机?普通相机差在哪?
人工智能·数码相机·yolo·计算机视觉·视觉检测·相机
格林威21 小时前
机器视觉检测的光源基础知识及光源选型
人工智能·深度学习·数码相机·yolo·计算机视觉·视觉检测
Hi202402171 天前
使用 Apollo TransformWrapper 生成相机到各坐标系的变换矩阵
数码相机·线性代数·矩阵·自动驾驶·apollo
nenchoumi31191 天前
全网首发!Realsense 全新 D555 相机开箱记录与 D435i、L515、D456 横向测评!
数码相机·计算机视觉·机器人·ros·realsense
简单说鸭2 天前
ScanNet: Richly-annotated 3D Reconstructions of Indoor Scenes 数据集构建
数码相机
文弱_书生2 天前
关于对鱼眼相机图片进行畸变校正的两种思路
数码相机·鱼眼畸变校正·传统几何方法·深度学习方法
疾风铸境2 天前
qt+halcon开发相机拍照软件步骤
数码相机·qt·halcon·拍照
北岛三生3 天前
ISP(图像信号处理器)
图像处理·数码相机·测试工具·计算机视觉·测试用例·模块测试
兔子不吃草~3 天前
鱼眼相机模型
数码相机
北岛三生3 天前
Camera tuning flow相机调试流程
图像处理·数码相机·测试工具·模块测试