
和你一起终身学习,这里是程序员Android
经典好文推荐,通过阅读本文,您将收获以下知识点:
一、MTK Camera 预览流程
二、MTK Camera Trace 启动流程拆解
一、MTK Camera 预览流程
1.1 MTK camera app 预览大致流程
- Camera app 开始准备Open Camera call到Camera Service的 connect call 开始链接底层
- Camera FWK 响应 camera app 下发的open 动作
- Camera HAL 开始响应 下发的 open session
- open阶段为了启动速度,开始CPU提频进入perf模式
- Camera hal 层开始响应startOpenDevice attachOpenDeviceLocked
- Camera HAL 初始化 pipline 一些静态信息,调用Sensor HalDeviceAdapter 开始power on createInstance --> initSensor -->setSensorMclk 上电流程
- Camera HAL 初始化闪光灯
- Camera APP 检查open state 状态 CAMERA_OPENING,并匹配最合适的预览size,拍照size、缩略图size
- Camera app 创建会话请求后开始配流请求,
- Camera app 创建会话 开启配流
- 配置并申请 buffer
- OTP lsc校准数据获取
- 3A Hal、ISP Hal、 Sensor power on流程结束,开始向上callback 通知poweron 流程结束
- 预览场景需要走的Feature feature combination: MTK_CAMERA_SCENARIO_STREAMING_NORMAL
- 解析配流size ,parseStreamSize_4Cell select size 尺寸,选择sensormode
- 决策 P1 IMGO && RRZO 配置影响功耗
- 决策预览size ,FD size,sensor 出图size
- 开始配流
- 开始build P1 stream流信息
- pipeline context dump 预览流、拍照流、流经的node
- AppStreamMgr 配3路流 预览: 1280x720 ;拍照:4080x2296 ; 缩略图:160x96
- Camera app 创建会话结束 配流结束
- OTP 数据获取
- 配流结束,Camera APP 用于在CameraCaptureSession中设置预览请求,以实现连续的相机预览或视频录制等功能
- Camera HAL 开始准备第一帧预览请求 [submitRequest] <4Cell/0> requestNo:0
- Camera FWK 第一帧请求ok
- 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
MTK Camera预览流程与Trace启动拆解

最低0.47元/天 解锁文章
545

被折叠的 条评论
为什么被折叠?



