- Camera Provider
-
createlCameraProvider_V2_4
生成CameraProvider对象
-
setCallback
清除之前存在的callback、设置新的callback
-
initialize
设置setupVendorTags 检查生成CameraProvider对象传入mManager是否合理
-
onCameraDeviceStatusChange、onTouchModesStatusChange
给FWK通知camera、闪光灯的状态
-
mapToHidlCameraStatus
设置camera状态
-
getCameraIdList
从CmaeraDeviceManager获取deviceList,然后同步到FWK
-
isSetTorchModeSupported
从CameraDeviceManager构造函数的成员变量mIsSetTorchModeSupported
- CameraDevice3
-
initilaize
设置静态信息、session初始化
-
getResourceCost
将安全的Logical device是添加到物理devices的conflictiongList
-
getCameraCharacteristics
从mMetadataProvider中获取静态特性
-
setTorchMode
从mDeviceManager设置闪光灯
-
open
没做任何事
- Camera Device3 Session
-
open
判断open函数入参sp<ICameraDeviceCallback>&callback,==NULL,直接break startOpenDevice 失败后调用updatePowerOnDone上电函数,结束open onOpenLocked 判断sp<ICameraDeviceCallback>&callback,==NULL,mAppStreamManager destory 和置为NULL create AppStreamManager create PipelineModelManager updatePowerOnDone上电 finishOpenDevice 下接CmaeraDeviceManagerBase.cpp
-
ConfigStreams
onCofigureStreamsLocked 判断waitUntilOpenDoneLocked,==false,return fail 去使能Request、flushAndWait 开始配流pAppStreamManager=getSafeAppStreamManager,pAppStreamManager->beginConfigureStreams pipeline配置pPipelineModel = getSafePipelineModel,pPipelineModel ->configure 使能Request hidl_cb同步camera状态到fwk
-
processCaptureRequest
-
onProcessCaptureRequest
pPipelineModel = getSafePipelineModel、pAppStreamManager = getSafeAppStreamManager 加请求锁--request被禁止(submitting requesta during flushing),pAppStreamManager->removeBUfferCahce 加请求锁--提交request请求pAppStreamManager->submitRequest。这个调用会很好事 ,所以应该在锁内调用 请求锁失败,不耽误业务。pPipelineModel->submitRequest hidl_cb同步camera状态到fwk
-
getCaptureRequestMetadataQueue
pAppStreamManager = getSafeAppStreamManager、_hidl_cb同步camera状态到fwk
-
getCaptureResultMetadataQueue
pAppStreamManager =- getSafeAppStreamManager、_hidl_cb同步camera状态到fwk
-
onFrameUpdate
AppStreamManager = getSafeAppStreamManager、AppStreamManager ->updateResult
-
flush
加操作锁,onFlushLocked,去使能Request、flushAndWait、使能Request
-
close
onCloseLocked pDeviceManager->startCloseDevice pDeviceManager->finishCloseDevice
- Camera Device Manager
-
initialize
用dlopen、dlsym函数加载lib库,用于生成devices 开始枚举camera device 下接 CameraDeviceManagerImpl.cpp中的onEnumerateDevicesLocked
-
getDeviceNameList
上接CameraProviderImpl.cpp-->getCameraList,传入rDeviceNames引用 从虚拟设备中读出snesor,添加到向量rDeviceNames中,返回上层
-
setTorchMode
getVirtualDeviceLocked,从虚拟设备map中获取虚拟设备的pVirtualDevice指针 isTorchModeControllableLocked,判断指定设备是否可以Torch onEnableTorchLocked,设置指定设备为Torch模式 addTorchModeStatusChangeLocked,指定设备为Torch模式成功的更新到虚拟设备map flushTorchModeStatusChangeCallback,刷新本地闪光灯状态,并通知给上层回调
-
startOpenDeivce
validateOpenLocked,做一些size大小和权限的判断 attachOpenDeviceLocked,从虚拟设备中获取opendevice的ID、Name、添加到open deivce map 在open camera 之前会关闭闪光灯,准备兼容双闪,在这块有关闭多个闪光灯的操作
-
finishOpenDevice
getVirtualDeviceLocked,从中获取device和info,fail结束finishOpenDevice mActiveOperation.validate,检查传入deviceName,及是否OPEN操作。fail结束finishOpenDevice 如果函数如参数cancel=ture,上电和detachOpenDeviceLocked恢复状态 mActiveOperationCommandList.clear(),恢复open之前的状态 flushTorchModeStatusChangeCallback,刷新闪光灯状态
-
startCloseDevice
getVirtualDeviceLocked,获取虚拟设备,fail结束startCloseDevice
-
finishCloseDevice
getVirtualDeviceLocked,获取虚拟设备,fail结束finishCloseDevice mActiveOperation.validata,检查传入deviceName,及是否Close操作,fail结束finishCloseDevice detachOpenDeviceLocked,分离已经打开虚拟设备 当所有camera close ,解锁闪光灯 mActiveOperationCommandList.clear()恢复open之前的状态 flushTorchModeStatusChangeCallback,刷新闪光灯状态
- AppStreamMgr
-
initialize
创建四个对象CallbackHandler、BatchHandler、FrameHandler、ResultHandler、其中第一、四创建对象失败要起线程
-
destroy
清理掉未处理的request 清理init创建四个对象
-
configureStreams
设置流的操作模式 清除旧的BatchStreamId & 删除未使用的配置流
-
submitRequests
request.size > 1 走批处理registreBatch request.size = 1 走帧处理registreFrame
-
updateResult
logical meta、physical meta 填充 pHandler -> enqueResult(params)
-
flushRequest
设置cbParcel,其中包含 shutter、timestampShutter、requestNo、vaild 用cbParcel清空inputBuffer、outputBuffer cbList中清除cbParcel,并在mBatchHandler中更新cbList
-
abortRequest
在所有已注册的图像缓冲区上标记错误 结束user的输入输出设置buffer
同级目录下BatchHandler、CallbackHandler、FrameHandler、RequestHandler