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

相关推荐
youngong12 小时前
强迫症之用相机快门数批量重命名文件
数码相机·文件管理
weixin_466485114 天前
halcon标定助手的使用
数码相机
诸葛务农5 天前
ToF(飞行时间)相机在人形机器人非接触式传感领域内的应用
数码相机·机器人
塞北山巅6 天前
相机自动曝光(AE)核心算法——从参数调节到亮度标定
数码相机·算法
美摄科技6 天前
相机sdk是什么意思?
数码相机
phyit6 天前
全景相机领域,影石何以杀出重围?
数码相机
鄃鳕7 天前
装饰器【Python】
开发语言·python·数码相机
聪明不喝牛奶7 天前
【已解决】海康威视相机如何升级固件
数码相机
PAQQ7 天前
1站--视觉搬运工业机器人工作站 -- 相机部分
数码相机·机器人
诸葛务农7 天前
人形机器人基于视觉的非接触式触觉传感技术
数码相机·机器人