MTK camera --MiddleWare层

  1. 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
    
  1. CameraDevice3
  • initilaize

     设置静态信息、session初始化
    
  • getResourceCost

     将安全的Logical device是添加到物理devices的conflictiongList
    
  • getCameraCharacteristics

     从mMetadataProvider中获取静态特性
    
  • setTorchMode

     从mDeviceManager设置闪光灯
    
  • open

     没做任何事
    
  1. 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
    
  1. 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,刷新闪光灯状态
    
  1. 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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值