MTK Camera 预览流程梳理systrace +Log篇

MTK Camera预览流程与Trace启动拆解

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、MTK Camera 预览流程
二、MTK Camera Trace 启动流程拆解

一、MTK Camera 预览流程

1.1 MTK camera app 预览大致流程

  1. Camera app 开始准备Open Camera call到Camera Service的 connect call 开始链接底层
  2. Camera FWK 响应 camera app 下发的open 动作
  3. Camera HAL 开始响应 下发的 open session
  4. open阶段为了启动速度,开始CPU提频进入perf模式
  5. Camera hal 层开始响应startOpenDevice attachOpenDeviceLocked
  6. Camera HAL 初始化 pipline 一些静态信息,调用Sensor HalDeviceAdapter 开始power on createInstance --> initSensor -->setSensorMclk 上电流程
  7. Camera HAL 初始化闪光灯
  8. Camera APP 检查open state 状态 CAMERA_OPENING,并匹配最合适的预览size,拍照size、缩略图size
  9. Camera app 创建会话请求后开始配流请求,
  10. Camera app 创建会话 开启配流
  11. 配置并申请 buffer
  12. OTP lsc校准数据获取
  13. 3A Hal、ISP Hal、 Sensor power on流程结束,开始向上callback 通知poweron 流程结束
  14. 预览场景需要走的Feature feature combination: MTK_CAMERA_SCENARIO_STREAMING_NORMAL
  15. 解析配流size ,parseStreamSize_4Cell select size 尺寸,选择sensormode
  16. 决策 P1 IMGO && RRZO 配置影响功耗
  17. 决策预览size ,FD size,sensor 出图size
  18. 开始配流
  19. 开始build P1 stream流信息
  20. pipeline context dump 预览流、拍照流、流经的node
  21. AppStreamMgr 配3路流 预览: 1280x720 ;拍照:4080x2296 ; 缩略图:160x96
  22. Camera app 创建会话结束 配流结束
  23. OTP 数据获取
  24. 配流结束,Camera APP 用于在CameraCaptureSession中设置预览请求,以实现连续的相机预览或视频录制等功能
  25. Camera HAL 开始准备第一帧预览请求 [submitRequest] <4Cell/0> requestNo:0
  26. Camera FWK 第一帧请求ok
  27. Camera HAL 出图并callback result 到上层 Frame timer: 预览出图 frame end updateResult callback 预览帧到上层

1.2 MTK camera app 预览 流程 log如下:

//1. Camera  app 开始准备Open Camera call到Camera Service的 connect call 开始链接底层
    03-14 22:07:13.569627  2897  2897 I CamAp_DeviceMgr2: [openCamera] cameraId = 0
    03-14 22:07:13.578430  1046  2371 I CameraService: CameraService::connect call (PID 2897 "com.mediatek.camera", camera ID 0) and Camera API version 2
    
    //2.camera FWK 响应 camera app  下发的open 动作
    03-14 22:07:13.584792  1046  2371 I Camera2ClientBase: Camera 0: Opened. Client: com.mediatek.camera (PID 2897, UID 10092)
    03-14 22:07:13.584858  1046  2371 I CameraDeviceClient: CameraDeviceClient 0: Opened
    
    //3. Camera  HAL 开始响应 下发的 open session 
    03-14 22:07:13.589530  1127  1127 I mtkcam-dev3: 0[CameraDevice3Impl::open] open camera3 device (device@1.1/internal/0) systraceLevel(1) instanceId(0) vid(0)
    03-14 22:07:13.590813  1127  1127 D mtkcam_hal_aidl_device: [0-aidl-session::open] +, callback=0xb400007c9aca8dc0  // 通过0-aidl-session::open 下发opensession 
    03-14 22:07:13.591310  1127  1127 I mtkcam-dev3: [0-session::open] +
    
    //4. open阶段为了启动速度,开始CPU提频进入perf模式
    03-14 22:07:13.591339  1127  1127 D mtkcam-dev3: [0-session::open] Enter camera perf mode
    03-14 22:07:13.591367  1127  1127 D Cam3CPUCtrl: [enterCameraPerf] enable PERF_RES_DRAM_CM_MGR_CAM_ENABLE
    03-14 22:07:13.591384  1127  1127 D Cam3CPUCtrl: [enterCameraPerf] enable PERF_RES_SCHED_PREFER_IDLE_TA
    03-14 22:07:13.591396  1127  1127 D Cam3CPUCtrl: [enterCameraPerf] enable PERF_RES_SCHED_PREFER_IDLE_FG
    03-14 22:07:13.591411  1127  1127 D Cam3CPUCtrl: [enterCameraPerf] enable PERF_RES_FPS_FPSGO_CONTROL
    03-14 22:07:13.591423  1127  1127 D Cam3CPUCtrl: [enterCameraPerf] enable PERF_RES_FPS_FBT_CEILING_ENABLE
    03-14 22:07:13.591434  1127  1127 D Cam3CPUCtrl: [enterCameraPerf] enable PERF_RES_FPS_FPSGO_CONTROL_HWUI
    03-14 22:07:13.591453  1127  1127 I mtkpower_client: perf_lock_acq, hdl:0, dur:0, num:12, pid:1127, tid:1127
    03-14 22:07:13.595494  1127  1127 D Cam3CPUCtrl: [enterCameraPerf] enterCameraPerf done
    
    // 5.Camera hal 层开始响应startOpenDevice attachOpenDeviceLocked
    03-14 22:07:13.598245  1127  1127 D mtkcam-devicemgr: [startOpenDevice] + device@1.1/internal/0 mActiveOperationCommandList.size:0 mOpenDeviceMap.size:0 mPhysEnumDeviceMap.size:3 mVirtEnumDeviceMap.size:5
    03-14 22:07:13.598763  1127  1127 I mtkcam-devicemgr: [attachOpenDeviceLocked] device: device@1.1/internal/0 openTimestamp:03-14 22:07:13.598
    03-14 22:07:13.599583  1127  1127 D mtkcam-dev3: [0-session::tryRunCommandLocked] Run command onOpenLocked +
    03-14 22:07:13.599616  1127  1127 D mtkcam-dev3: [0-session::onOpenLocked] +
    03-14 22:07:13.599646  1127  1127 D mtkcam-dev3: [0-session::onOpenLocked] Disable HalBufHandler
    
    // 6. Camera HAL 初始化 pipline 一些静态信息,调用Sensor HalDeviceAdapter 开始power on createInstance --> initSensor -->setSensorMclk 上电流程
    03-14 22:07:13.601516  1127  1127 I mtkcam-pipelinemodel: [initPipelineStaticInfo] idx[0]: sensorId[0]: fcellSensorPattern(2)
    03-14 22:07:13.602602  1127  3169 I mtkcam-DeviceAdapter: 0[HalDeviceAdapter::powerOn] powerOn +  // HalDeviceAdapter 开始poweron
    03-14 22:07:13.603036  1127  3169 D Hal3Av3 : [createInstance] sensorIdx(0) HalDeviceAdapter:0
    03-14 22:07:13.603073  1127  3171 D mtkcam-DeviceAdapter: [initSensor] powerOnSensor0      //初始化 powerOnSensor0
    03-14 22:07:13.603127  1127  3171 D MtkCam/HalSensorList: [querySecureState] Secure State is 0
    03-14 22:07:13.603161  1127  3171 D SeninfDrvImp: [init][init]: Entry count 0 
    03-14 22:07:13.605041  1127  3171 D MtkCam/HalSensor: [powerOn] sensorIdx : 0
    03-14 22:07:13.605756  1127  3171 D MtkCam/HalSensor: [setSensorMclk] sensorIdx 0, mclk_src 1, SensorMCLKPLL 1000 // SensorMCLKPLL
    
    // 7.Camera HAL 初始化闪光灯
    03-14 22:07:13.617934  1127  3169 I FlashHal: init().
    03-14 22:07:13.618039  1127  3169 I StrobeDrvFlashlightFops: openkd(): mUsers(1).
    03-14 22:07:13.618107  1127  3169 I StrobeDrvFlashlightFops: ioctl failed: type/ct (1,1) Inappropriate ioctl for device
    03-14 22:07:13.618134  1127  3169 E StrobeDrvFlashlight: getMaxDuty(): failed. (getMaxDuty){#266:vendor/mediatek/proprietary/hardware/mtkcam/aaa/source/isp_40/../common/strobe/strobe_drv_flashlight.cpp}
    03-14 22:07:13.618148  1127  3169 I StrobeDrvFlashlight: maxDuty:0
    03-14 22:07:13.629444  1127  3177 D MtkCam/SensorProviderService: (3177)[doEnableSensor] SensorManager createEventQueue successfully
    
    // 8. Camera APP 检查open state 状态  CAMERA_OPENING,并匹配最合适的预览size,拍照size、缩略图size
    03-14 22:07:13.674999  2897  3180 I CamAp_PhotoDevice2Controller: [openCamera] cameraId : 0,sync = false
    03-14 22:07:13.675183  2897  3180 I CamAp_PhotoDevice2Controller: [canOpenCamera] new id: 0 current camera :null isSameCamera = false current state : CAMERA_UNKNOWN isStateReady = true can open : true
    03-14 22:07:13.675373  2897  3180 I CamAp_DeviceMgr2: [openCamera] cameraId = 0
    03-14 22:07:13.725902  2897  3180 I CamAp_PhotoDevice2Controller: [onOpened]  camera2proxy = com.mediatek.camera.common.device.v2.Camera2Proxy@8ef6f46 preview surface = null  mCameraState = CAMERA_OPENINGcamera2Proxy id = 0 mCameraId = 0
    03-14 22:07:13.751381  2897  3180 I CamAp_CameraUtil: findBestMatchPanelSize size: 1280 X 720    // 匹配最合适的预览size
    03-14 22:07:13.751473  2897  3180 I CamAp_PhotoDevice2Controller: [updatePictureSize] :4080x2296 //拍照size、
    03-14 22:07:13.757624  2897  3180 I CamAp_CaptureSurface: [updatePictureInfo] width = 160,height = 96,format = 35,maxImage = 5, hasImageReader = false mCaptureType = thumbnail  //缩略图size
    
    //9.app 创建会话请求后开始配流请求, 
    03-14 22:07:13.761319  2897  3180 I CamAp_PhotoDevice2Controller: [configureSession] +, isFromOpen :true // app 创建会话 
    03-14 22:07:13.763024  2897  3163 I CamAp_API2-Handler-0: [createCaptureRequest]+, pending time = 0ms.   // app 创建预览请求
    03-14 22:07:13.763504  1127  1532 D mtkcam-dev3: [0-session::constructDefaultRequestSettings] -> constructDefaultRequestSettings (type:0x1)
    03-14 22:07:13.764230  2897  3163 I CamAp_API2-Handler-0: [createCaptureRequest]-, executing time = 1ms.
    
    //10. Camera app 创建会话  开启配流
    03-14 22:07:13.767801  2897  3163 I CamAp_API2-Handler-0: [createCaptureSession]+, pending time = 0ms.
    03-14 22:07:13.768280  2897  3163 I CamAp_API2-Handler-0: [createCaptureSession] with mOutputConfigs
    03-14 22:07:13.782269  1127  1127 I mtkcam_hal_aidl_device: [0-aidl-session::configureStreams] Stream{id: 0, streamType: OUTPUT, width: 1280, height: 720, format: IMPLEMENTATION_DEFINED, usage: GPU_TEXTURE, dataSpace: UNKNOWN, rotation: ROTATION_0, physicalCameraId: , bufferSize: 0, groupId: -1, sensorPixelModesUsed: [ANDROID_SENSOR_PIXEL_MODE_DEFAULT], dynamicRangeProfile: ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD, useCase: ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT, colorSpace: -1}
    03-14 22:07:13.782320  1127  1127 I mtkcam_hal_aidl_device: [0-aidl-session::configureStreams] Stream{id: 1, streamType: OUTPUT, width: 4080, height: 2296, format: BLOB, usage: CPU_READ_OFTEN, dataSpace: JFIF, rotation: ROTATION_0, physicalCameraId: , bufferSize: 14461181, groupId: -1, sensorPixelModesUsed: [ANDROID_SENSOR_PIXEL_MODE_DEFAULT], dynamicRangeProfile: ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD, useCase: ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT, colorSpace: -1}
    03-14 22:07:13.782403  1127  1127 I mtkcam_hal_aidl_device: [0-aidl-session::configureStreams] Stream{id: 2, streamType: OUTPUT, width: 160, height: 96, format: YCBCR_420_888, usage: CPU_READ_OFTEN, dataSpace: JFIF, rotation: ROTATION_0, physicalCameraId: , bufferSize: 0, groupId: -1, sensorPixelModesUsed: [ANDROID_SENSOR_PIXEL_MODE_DEFAULT], dynamicRangeProfile: ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD, useCase: ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT, colorSpace: -1}
    03-14 22:07:13.816786  2897  2897 I CamAp_QuickActivity: onStart()
    03-14 22:07:13.820492  2897  2897 I CamAp_QuickActivity: onResume()
    
    //11.配置并申请 buffer
    03-14 22:07:13.782439  1127  1127 D mtkcam_hal_aidl_utils: [configBufferCacheMap] streamId:0x0, add to mBufferHandleCacheMap 
    03-14 22:07:13.782457  1127  1127 D mtkcam_hal_aidl_utils: [configBufferCacheMap] streamId:0x1, add to mBufferHandleCacheMap 
    03-14 22:07:13.782474  1127  1127 D mtkcam_hal_aidl_utils: [configBufferCacheMap] streamId:0x2, add to mBufferHandleCacheMap 
    03-14 22:07:13.831120  1127  3169 I DMABUFHEAPS: Using DMA-BUF heap named: mtk_mm
    03-14 22:07:13.831250  1127  3169 D MtkCam/IonHeap: [IonHeap::doAllocDma] allocate success...fd:18 1536x16-STA_BYTE-CT_0
    
    //12.OTP 校准数据获取
    03-14 22:07:13.827473  1127  3169 D CamCalHelper: CamCalHelper Get cal data.
    03-14 22:07:13.827494  1127  3169 I CamCalCamCal: ver0723 pCamCalData->deviceID=1
    03-14 22:07:13.827509  1127  3169 I CamCalCamCal: ver0723 g_lastSensorID=2376  pCamCalData->sensorID=5026
    03-14 22:07:13.827521  1127  3169 I CamCalCamCal: ver0723 s_preloadSizeLimitDefaultValue = 0x1500,change value to 0x214d
    03-14 22:07:13.827533  1127  3169 I CamCalCamCal: ver0723 u4Offset=0 u4Length=4 sensorID=5026
    03-14 22:07:13.827547  1127  3169 D CamCalHelper: CamCalHelper Read data from memory[0]
    03-14 22:07:13.827561  1127  3169 I CamCalCamCal: ver0723 Table[0] ID= 0x6000101, CID = 0x13000000
    03-14 22:07:13.827573  1127  3169 I CamCalCamCal: ver0723 Table[1] ID= 0x13000000, CID = 0x13000000
    03-14 22:07:13.827588  1127
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Android

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值