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

相关推荐
Tel199253080047 小时前
高速相机触发脉冲计数器信号采集模块 4倍频 5Mhz 的高速脉冲进行计数
数码相机·物联网·3dsmax·工业自动化·仪器仪表·工控设备
qq_5260991311 小时前
稳定耐用工业图像采集卡 | 宽温工作环境,适配恶劣工业场景
数码相机
思维新观察12 小时前
理光 GR IV HDF 版发布:用喷墨技术重构光影质感
数码相机
春日见17 小时前
如何跑通,吃透一个开源项目?
linux·运维·开发语言·数码相机·matlab
博图光电1 天前
当常规视觉 “束手无策”,BTIR 短波红外相机开启 “穿透式” 成像革命
数码相机
Tel199253080042 天前
CCD相机同步外触发拍照抓拍识别高速脉冲计数器信号采集模块
单片机·数码相机·物联网·自动化·工业自动化·仪器仪表
TTGGGFF2 天前
具身智能:零基础入门睿尔曼机械臂(六)——手眼标定代码库详解,从原理到实践
数码相机·机械臂·具身智能
SPFFC189380330532 天前
抗干扰磁环排线 | Magnetic Ring Flat Cable - 高磁导率EMI抑制解决方案
服务器·数码相机·车载系统·机器人·音频·智能音箱·智能电视
carver w2 天前
轮询和回调 --SDK
数码相机
字节数据平台2 天前
6000字技术向拆解 “大晓机器人”携手火山引擎多模态数据湖探索视频处理新路径
人工智能·数码相机