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

相关推荐
学地理的小胖砸5 小时前
【高分系列卫星简介——高分一号(GF-1)】
开发语言·数码相机·算法·遥感·地理信息
zh路西法8 小时前
上手一个RGBD深度相机:从原理到实践--ROS noetic+Astra S(中):RGB相机的标定和使用
数码相机
起个网名真难~10 小时前
线阵相机的参数选型计算
数码相机
学地理的小胖砸10 小时前
【高分系列卫星简介】
开发语言·数码相机·算法·遥感·地理信息
LabVIEW开发12 小时前
LabVIEW机械手视觉引导系统
数码相机·labview
simple_whu13 小时前
相机畸变系数$b_1,b_2$与畸变系数aspect ratio和skew的互转
数码相机·计算机视觉·摄影测量
妄想出头的工业炼药师1 天前
相机雷达标定
数码相机
高效办公能手2 天前
图片翻译器,分享四款直接翻译图片的软件!
数码相机
shuxianshrng3 天前
鹰眼降尘系统怎么样
大数据·服务器·人工智能·数码相机·物联网
鬼臾区3 天前
展锐平台手机camera 软硬件架构
数码相机·智能手机·硬件架构