和你一起终身学习,这里是程序员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 3169 I CamCalCamCal: ver0723 CID Matched! DevID=1, DataVer=2
03-14 22:07:13.827600 1127 3169 I CamCalCamCal: ver0723 LayoutType= 0x1
03-14 22:07:13.827612 1127 3169 I CamCalCamCal: ver0723 result= 0x0
03-14 22:07:13.827623 1127 3169 I CamCalCamCal: ver0723 result = 0, LayoutType = 1
03-14 22:07:13.827635 1127 3169 I CamCalCamCal: ver0723 lsc table_size 1868
03-14 22:07:13.827647 1127 3169 I CamCalCamCal: ver0723 u4Offset=53 u4Length=1868
03-14 22:07:13.827660 1127 3169 D CamCalHelper: CamCalHelper Read data from memory[0]
03-14 22:07:13.827673 1127 3169 I CamCalCamCal: ver0723 ====================== SingleLsc Data==================
03-14 22:07:13.827851 1127 3169 I CamCalCamCal: ver0723 ======================SNInfo==================
//13.3A Hal、ISP Hal、 Sensor power on流程结束,开始向上callback 通知poweron 流程结束
03-14 22:07:13.847626 1127 3171 D MtkCam/HalSensor: [powerOn] - <HalDeviceAdapter:0> ret:1, meSensorDev = 0x1
03-14 22:07:13.874610 1127 3169 D MtkCam/Utils: {CamProfile}[HalDeviceAdapter:0::powerOn] 3A Hal -: (0-th) ===> [start-->now: 271 ms]
03-14 22:07:13.875060 1127 3169 D MtkCam/Utils: {CamProfile}[HalDeviceAdapter:0::powerOn] ISP Hal -: (1-th) ===> [start-->now: 272 ms] [last-->now: 0 ms]
03-14 22:07:13.875081 1127 3169 D MtkCam/Utils: {CamProfile}[HalDeviceAdapter:0::powerOn] Sensor powerOn -: (2-th) ===> [start-->now: 272 ms] [last-->now: 0 ms]
03-14 22:07:13.875123 1127 3169 D MtkCam/HwInfoHelper: [get4CellSensorPattern] SensorStaticInfo 4CellSensor_Pattern(type:6) (pattern:Packed)
03-14 22:07:13.875143 1127 3169 I mtkcam-DeviceAdapter: 0[HalDeviceAdapter::powerOn] 3A notifyPowerOn //3a 上电成功
03-14 22:07:13.875182 1127 3169 D Hal3Av3 : [notifyPwrOn]+
03-14 22:07:13.875294 1127 3169 D Hal3Av3 : [notifyPwrOn]-
03-14 22:07:13.875312 1127 3169 D MtkCam/Utils: {CamProfile}[HalDeviceAdapter:0::powerOn] 3A notifyPowerOn -: (3-th) ===> [start-->now: 272 ms] [last-->now: 0 ms]
03-14 22:07:13.875326 1127 3169 I mtkcam-DeviceAdapter: 0[HalDeviceAdapter::powerOn] powerOn - // poweron 流程结束
//14.预览场景需要走的Feature feature combination: MTK_CAMERA_SCENARIO_STREAMING_NORMAL
03-14 22:07:13.881067 2897 3180 I CamAp_PhotoDevice2Controller: [canOpenCamera] new id: 0 current camera :0 isSameCamera = true current state : CAMERA_OPENED isStateReady = false can open : false
03-14 22:07:13.907321 1127 1127 D mtkcam-FeatureSettingPolicy: [extractStreamConfiguration_Default] .AppConfiguration(#sessionParams=7,operation=0) .AppImageStreamInfo(videoConsumer=0) .3DNR(force=1,ap=0,dual=0,stereo=0) .EIS(ap=0,adv=0,adv_support=1,EM=0,multiZoom:0); proprietaryClient:1, AF:1, AIShutter:0
03-14 22:07:13.907427 1127 1127 D mtkcam-customer_scenario_mgr: [customer_get_streaming_scenario] scenarioHint(isDualCam:0(0x0), streamingScenarioIndex:-1), isVideo(0)
03-14 22:07:13.907445 1127 1127 I mtkcam-customer_scenario_mgr: [customer_get_streaming_scenario] no dedicated scenario, normal scenario
03-14 22:07:13.907458 1127 1127 I mtkcam-customer_scenario_mgr: [customer_get_streaming_scenario] scenario:51
03-14 22:07:13.907503 1127 1127 D mtkcam-customer_scenario_mgr: [customer_get_features_table_by_scenario] scenario:51, table size:1
03-14 22:07:13.907541 1127 1127 I mtkcam-customer_scenario_mgr: [customer_get_features_table_by_scenario] find features for scenario(51 : MTK_CAMERA_SCENARIO_STREAMING_NORMAL) in logical map
03-14 22:07:13.907582 1127 1127 I mtkcam-customer_scenario_mgr: [customer_get_streaming_config] streaming scenario config, fixMarginList(0), qCount(0)
03-14 22:07:13.907601 1127 1127 I mtkcam-FeatureSettingPolicy: [updateStreamConfiguration]
scenario(MTK_CAMERA_SCENARIO_STREAMING_NORMAL)
for (openId:0, scenario:51, config: #fixedMargin=0, #queue=0 ) support feature:NO_FEATURE_NORMAL(0),
feature combination:MTK_FEATURE_COMBINATION_VIDEO_NORMAL(0x400c00181020)
03-14 22:07:13.908919 1127 1127 D mtkcam-FeatureSettingPolicy: [evaluateStreamConfiguration] 4-cell sensor: sensor[0] get CropMode sucess: (0)
03-14 22:07:13.908983 1127 1127 D mtkcam-FeatureSettingPolicy: [evaluateStreamConfiguration] out->StreamingParams:{
.additionalHalP1OutputBufferNum={ .imgo=0 .rrzo=2 .lcso=2 .rsso=0 .scaledYuv=0 }
.supportedScenarioFeatures=0x400c00181020 // MTK_FEATURE_COMBINATION_VIDEO_NORMAL(0x400c00181020)
.disableInitRequest=0 .bForceIMGOPool=0 .RRZ=1.000000 .LMV=1 .RSS=(0/0) .PQ=1 .CZ=1 .DRE=0 .HFG=0 .DSDN=1 .EIS=0 .3DNR=67 .FSC=0x0(maxMargin=0) .HDR10=(0/0) .EISInfo(mode=0,factor=100,videoConfig=0,tsq=0,extra=0,preview=0) .batch[0](0) .p1Config[0](hdrhal=0x0,hdrsensor=0x0,aeTarget=0,expNum=0,fusNum=0) }
//15.解析配流size ,parseStreamSize_4Cell select size 尺寸,选择sensormode
03-14 22:07:13.909196 1127 1127 I mtkcam-SensorSettingPolicy4cell: [operator()] default preview mode(0): width(2048), height(1536), fps(30)
03-14 22:07:13.909213 1127 1127 I mtkcam-SensorSettingPolicy4cell: [parseStreamSize_4Cell] checkStreamSize(vAppImage_Jpeg)
03-14 22:07:13.909244 1127 1127 I mtkcam-SensorSettingPolicy4cell: [parseStreamSize_4Cell] StreamId(0x1) image width 4080, height 2296
03-14 22:07:13.909258 1127 1127 I mtkcam-SensorSettingPolicy4cell: [parseStreamSize_4Cell] StreamId(0x2) image width 160, height 96
03-14 22:07:13.909270 1127 1127 I mtkcam-SensorSettingPolicy4cell: [parseStreamSize_4Cell] StreamId(0x2) set 4:3 sensor mode
03-14 22:07:13.909284 1127 1127 I mtkcam-SensorSettingPolicy4cell: [parseSensorMode_4Cell] find match sensor mode 0
03-14 22:07:13.909304 1127 1127 I mtkcam-SensorSettingPolicy4cell: select size(4096x3072)@30 sensorMode:1 hdrSensorMode:0 hdrHalMode:0 HfpsMode:0
//16.决策 P1 IMGO && RRZO 配置影响功耗
03-14 22:07:13.911623 1127 1127 I mtkcam-P1HwSettingPolicy: { .imgoAlloc={ format:0x2201 4096x3072 }
.imgoDefaultRequest={ format:0x2201 4096x3072 } //影响拍照size
.imgoSeamlessRequest={ format:0 0x0 }
.rrzoDefaultRequest={ format:0x2205 1280x960 } //影响预览size
.rssoSize=288x512 .pixelMode=1 .usingCamSV=0 }
//17.决策预览size ,FD size,sensor 出图size
03-14 22:07:13.912259 1127 1127 D mtkcam-ConfigStreamInfoPolicy: [evaluatePreviewSize] evaluate preview size : 1280x720
03-14 22:07:13.912271 1127 1127 D mtkcam-ConfigStreamInfoPolicy: [evaluatePreviewSize] FD buffer size : 640x360
03-14 22:07:13.913707 1127 1127 D MtkCam/HwInfoHelper: [getSensorOutputSize] w1 x h1 = 4096 x 3072
//18.开始配流
03-14 22:07:13.915145 1127 1127 I MtkCam/ppl_context: [PipelineContext] <4Cell/0> (0xb400007c7ac97120)
03-14 22:07:13.915184 1127 1127 D MtkCam/ppl_context: [beginConfigure] +
03-14 22:07:13.915239 1127 1127 D MtkCam/ppl_context: [beginConfigure] -
//19.开始build P1 stream流信息
03-14 22:07:13.915254 1127 1127 D mtkcam-PipelineContextBuilder: [configContextLocked_Streams] +
03-14 22:07:13.915281 1127 1127 D mtkcam-PipelineContextBuilder: [configContextLocked_Streams] Jpeg Rotation enable: 1 support packed jpeg: 0
03-14 22:07:13.915324 1127 1127 D mtkcam-PipelineContextBuilder: [configContextLocked_Streams] id : 0
03-14 22:07:13.915343 1127 1127 D mtkcam-PipelineContextBuilder: [configContextLocked_Streams] Build P1 stream
03-14 22:07:13.915359 1127 1127 D mtkcam-PipelineContextBuilder: [configContextLocked_Streams] New: p1 full raw(0xb400007deac478f0); resized raw(0xb400007deac48df0), bIsZslEnabled(1)
03-14 22:07:13.915551 1127 1127 D MtkCam/IonHeap: [IonHeap::doAllocDma] allocate success...fd:35 640x360-YUY2-Hal:Image
03-14 22:07:13.915941 1127 1127 D mtkcam-fbm_pool: [allocateBuffers] [Hal:Image:FD] max(5) min(1) mIonDevice(0xb400007d4ac45958)
03-14 22:07:13.916212 1127 1127 D mtkcam-fbm_pool: [allocateBuffers] [Hal:Image:P1:Fullraw_main1] max(9) min(0) mIonDevice(0xb400007d4ac45f78)
03-14 22:07:13.916355 1127 1127 D mtkcam-fbm_pool: [allocateBuffers] [Hal:Image:P1:Resizeraw_main1] max(11) min(0) mIonDevice(0xb400007d4ac45db8)
03-14 22:07:13.916714 1127 3193 D MtkCam/IonHeap: [IonHeap::doAllocDma] allocate success...fd:36 640x360-YUY2-Hal:Image
03-14 22:07:13.916830 1127 3193 D MtkCam/IonHeap: [IonHeap::doAllocDma] allocate success...fd:37 640x360-YUY2-Hal:Image
03-14 22:07:13.916930 1127 3193 D MtkCam/IonHeap: [IonHeap::doAllocDma] allocate success...fd:43 640x360-YUY2-Hal:Image
03-14 22:07:13.917077 1127 3195 D MtkCam/IonHeap: [IonHeap::doAllocDma] allocate success...fd:44 1280x960-FG_BYR10-Hal:Image
03-14 22:07:13.917425 1127 3195 D Drv/IMem: [getBufPA_imgbuf] memID(44),PA(0xfb000000),username(1280x960-FG_BYR10-Hal:Image)
03-14 22:07:13.917728 1127 3193 D MtkCam/IonHeap: [IonHeap::doAllocDma] allocate success...fd:45 640x360-YUY2-Hal:Image
03-14 22:07:13.917789 1127 3193 D mtkcam-fbm_pool: [operator()] updateBufferCount: [Hal:Image:FD] done (5)
03-14 22:07:13.918875 1127 1127 D MtkCam/HwInfoHelper: [alignPass1HwLimitation] rrzo size 4096x3072, stride 5120
//20.pipeline context dump 预览流、拍照流、流经的node
03-14 22:07:13.924301 1127 1127 I MtkCam/ppl_context: [dump] <4Cell/0> //后主摄 4cell sensor
03-14 22:07:13.924341 1127 1127 I MtkCam/ppl_context: [dump]
.root={ 0x1 }, // 预览流、拍照流、流经的node
.edges={(0x1 -> 0x15)(0x1 -> 0x14)(0x15 -> 0x16)(0x14 -> 0x16)(0x15 -> 0x23)(0x14 -> 0x23)}
--->FDNode 0x16
/
-->P2StreamNode 0x15--
/ \
/ ---> JpegNode 0x23
P1Node 0x1s->
\ --->FDNode 0x16
\ /
-->P2CaptureNode 0x14--
\
---> JpegNode 0x23
03-14 22:07:13.924414 1127 1127 I MtkCam/ppl_context: [dump] <nodeId=0x1 (P1Node) NO-INIT>
03-14 22:07:13.924438 1127 1127 I MtkCam/ppl_context: [dump] In: .AppImage={ } .HalImage={ } .AppMeta={ 0x80000000 } .HalMeta={ 0x100000018 }
03-14 22:07:13.924468 1127 1127 I MtkCam/ppl_context: [dump] Out: .AppImage={ } .HalImage={ 0x100000001 0x100000003 0x100000004 } .AppMeta={ 0x100000024 } .HalMeta={ 0x10000001b }
03-14 22:07:13.924493 1127 1127 I MtkCam/ppl_context: [dump] <nodeId=0x14 (P2CaptureNode) NO-INIT>
03-14 22:07:13.924521 1127 1127 I MtkCam/ppl_context: [dump] In: .AppImage={ } .HalImage={ 0x100000001 0x100000003 0x100000004 } .AppMeta={ 0x80000000 0x100000024 } .HalMeta={ 0x10000001b }
03-14 22:07:13.924542 1127 1127 I MtkCam/ppl_context: [dump] Out: .AppImage={ 0 0x2 } .HalImage={ 0x100000010 0x100000011 } .AppMeta={ 0x100000028 } .HalMeta={ 0x10000001f }
03-14 22:07:13.924558 1127 1127 I MtkCam/ppl_context: [dump] <nodeId=0x15 (P2StreamNode) NO-INIT>
03-14 22:07:13.924583 1127 1127 I MtkCam/ppl_context: [dump] In: .AppImage={ } .HalImage={ 0x100000001 0x100000003 0x100000004 } .AppMeta={ 0x80000000 0x100000024 } .HalMeta={ 0x10000001b }
03-14 22:07:13.924605 1127 1127 I MtkCam/ppl_context: [dump] Out: .AppImage={ 0 0x2 } .HalImage={ 0x100000010 0x100000011 0x100000013 } .AppMeta={ 0x100000027 } .HalMeta={ 0x10000001e }
03-14 22:07:13.924620 1127 1127 I MtkCam/ppl_context: [dump] <nodeId=0x16 (FDNode) NO-INIT>
03-14 22:07:13.924638 1127 1127 I MtkCam/ppl_context: [dump] In: .AppImage={ } .HalImage={ 0x100000013 } .AppMeta={ 0x80000000 } .HalMeta={ 0x10000001e }
03-14 22:07:13.924655 1127 1127 I MtkCam/ppl_context: [dump] Out: .AppImage={ } .HalImage={ } .AppMeta={ 0x100000029 } .HalMeta={ }
03-14 22:07:13.924672 1127 1127 I MtkCam/ppl_context: [dump] <nodeId=0x23 (JpegNode) NO-INIT>
03-14 22:07:13.924693 1127 1127 I MtkCam/ppl_context: [dump] In: .AppImage={ } .HalImage={ 0x100000010 0x100000011 } .AppMeta={ 0x80000000 } .HalMeta={ 0x10000001e 0x10000001f }
03-14 22:07:13.924710 1127 1127 I MtkCam/ppl_context: [dump] Out: .AppImage={ 0x1 } .HalImage={ } .AppMeta={ 0x10000002a } .HalMeta={ }
03-14 22:07:13.924723 1127 1127 I MtkCam/ppl_context: [dump] <image streams>
03-14 22:07:13.924841 1127 1127 I MtkCam/ppl_context: [dump] [IMAGE-APP-PROVIDER]0 1280x720 OUT ImgFormat:0x11(NV21) BufPlanes(strides/sizeInBytes):[ 1280/921600 1280/493440 ] startOffset:0 bufStep:0 t:0/r:0 maxBuffers:12 d/s:0x00000000(UNKNOWN) s0:d0:App:YCrCb_420_SP:0|HW_TEXTURE AllocImgFormat:0x11(NV21) AllocBufPlanes(strides/sizeInBytes):[ 1280/921600 1280/493440 ] Real:0x11(YCrCb_420_SP) Request:0x22(IMPLEMENTATION_DEFINED) Override:0x11(YCrCb_420_SP) Hal-Client-usage:0x100(0|HW_TEXTURE) Hal-usage:0x20033(0|SW_READ_OFTEN|SW_WRITE_OFTEN|HW_CAMERA_WRITE) HalStream::(consumer/producer)Usage:0/0x20033 0xb400007c8ac50690 phy:-1
03-14 22:07:13.924922 1127 1127 I MtkCam/ppl_context: [dump] [IMAGE-APP-PROVIDER]0x1 4080x2296 OUT ImgFormat:0x2300(JPEG) BufPlanes(strides/sizeInBytes):[ 14461181/14461184 ] startOffset:0 bufStep:0 t:0/r:0 maxBuffers:11 d/s:0x08c20000(V0_JFIF|STANDARD_BT601_625|TRANSFER_SMPTE_170M|RANGE_FULL) s1:d0:App:BLOB:0|SW_READ_OFTEN AllocImgFormat:0x21(BLOB) AllocBufPlanes(strides/sizeInBytes):[ 14461181/14461184 ] Real:0x21(BLOB) Request:0x21(BLOB) Override:0x21(BLOB) Hal-Client-usage:0x3(0|SW_READ_OFTEN) Hal-usage:0x20033(0|SW_READ_OFTEN|SW_WRITE_OFTEN|HW_CAMERA_WRITE) HalStream::(consumer/producer)Usage:0/0x20033 0xb400007c8ac50310 phy:-1
03-14 22:07:13.925005 1127 1127 I MtkCam/ppl_context: [dump] [IMAGE-APP-PROVIDER]0x2 160x96 OUT ImgFormat:0x11(NV21) BufPlanes(strides/sizeInBytes):[ 192/18432 192/9504 ] startOffset:0 bufStep:0 t:0/r:0 maxBuffers:12 d/s:0x08c20000(V0_JFIF|STANDARD_BT601_625|TRANSFER_SMPTE_170M|RANGE_FULL) s2:d0:App:YCrCb_420_SP:0|SW_READ_OFTEN AllocImgFormat:0x11(NV21) AllocBufPlanes(strides/sizeInBytes):[ 192/18432 192/9504 ] Real:0x11(YCrCb_420_SP) Request:0x23(YCbCr_420_888) Override:0x23(YCbCr_420_888) Hal-Client-usage:0x3(0|SW_READ_OFTEN) Hal-usage:0x20033(0|SW_READ_OFTEN|SW_WRITE_OFTEN|HW_CAMERA_WRITE) HalStream::(consumer/producer)Usage:0/0x20033 0xb400007c8ac535d0 phy:-1
03-14 22:07:13.925067 1127 1127 I MtkCam/ppl_context: [dump] [IMAGE-HAL-POOL ]0x100000001 4096x3072 ImgFormat:0x2201(BAYER10) BufPlanes(strides/sizeInBytes):[ 5120/15728640 ] startOffset:0 bufStep:0 t:0 maxBufNum:9 minInitBufNum:0 Hal:Image:P1:Fullraw_main1 AllocImgFormat:0x21(BLOB) AllocBufPlanes(strides/sizeInBytes):[ 15728640/15728640 ] Private{exist?0 id:0}
03-14 22:07:13.925120 1127 1127 I MtkCam/ppl_context: [dump] [IMAGE-HAL-POOL ]0x100000003 1280x960 ImgFormat:0x2205(FG_BAYER10) BufPlanes(strides/sizeInBytes):[ 2400/2304000 ] startOffset:0 bufStep:0 t:0 maxBufNum:11 minInitBufNum:0 Hal:Image:P1:Resizeraw_main1 AllocImgFormat:0x2205(FG_BAYER10) AllocBufPlanes(strides/sizeInBytes):[ 2400/2304000 ] Private{exist?0 id:0}
03-14 22:07:13.925182 1127 1127 I MtkCam/ppl_context: [dump] [IMAGE-HAL-POOL ]0x100000004 294912x1 ImgFormat:0x21(BLOB) BufPlanes(strides/sizeInBytes):[ 294912/294912 ] startOffset:0 bufStep:0 t:0 maxBufNum:12 minInitBufNum:1 Hal:Image:STT_main1 AllocImgFormat:0x21(BLOB) AllocBufPlanes(strides/sizeInBytes):[ 294912/294912 ] Private{exist?1 id:2}
03-14 22:07:13.925246 1127 1127 I MtkCam/ppl_context: [dump] [IMAGE-HAL-RUNTIME ]0x100000010 4080x2296 ImgFormat:0x11(NV21) BufPlanes(strides/sizeInBytes):[ 4080/9400320 4080/4700160 ] startOffset:0 bufStep:0 t:0 maxBufNum:11 minInitBufNum:0 Hal:Image:JpegYuv AllocImgFormat:0x11(NV21) AllocBufPlanes(strides/sizeInBytes):[ 4080/9400320 4080/4700160 ] Private{exist?0 id:0}
03-14 22:07:13.925301 1127 1127 I MtkCam/ppl_context: [dump] [IMAGE-HAL-RUNTIME ]0x100000011 -1x-1 ImgFormat:0x14(YUY2) BufPlanes(strides/sizeInBytes):[ 0/0 ] startOffset:0 bufStep:0 t:0 maxBufNum:11 minInitBufNum:0 Hal:Image:ThumbnailYuv AllocImgFormat:0x14(YUY2) AllocBufPlanes(strides/sizeInBytes):[ 0/0 ] Private{exist?0 id:0}
03-14 22:07:13.925354 1127 1127 I MtkCam/ppl_context: [dump] [IMAGE-HAL-POOL ]0x100000013 640x360 ImgFormat:0x14(YUY2) BufPlanes(strides/sizeInBytes):[ 1280/460800 ] startOffset:0 bufStep:0 t:0 maxBufNum:5 minInitBufNum:1 Hal:Image:FD AllocImgFormat:0x14(YUY2) AllocBufPlanes(strides/sizeInBytes):[ 1280/460800 ] Private{exist?0 id:0}
03-14 22:07:13.925370 1127 1127 I MtkCam/ppl_context: [dump] <meta streams>
03-14 22:07:13.925396 1127 1127 I MtkCam/ppl_context: [dump] [META -APP-USER ]0x80000000 maxBuffers:0 minInitBufNum:0 Meta:App:Control phy:0
03-14 22:07:13.925416 1127 1127 I MtkCam/ppl_context: [dump] [META -HAL-USER ]0x100000018 maxBuffers:10 minInitBufNum:1 Hal:Meta:Control_main1 phy:-1
... ...
03-14 22:07:13.925589 1127 1127 I MtkCam/ppl_context: [dump] <image buffer pool>
//21. AppStreamMgr 配3路流 预览: 1280x720 ;拍照:4080x2296 ; 缩略图:160x96
03-14 22:07:13.929036 1127 1127 D mtkcam-AppStreamMgr: [AppMgr-configureStreams] 0 1280x720 OUT ImgFormat:0x11(NV21) BufPlanes(strides/sizeInBytes):[ 1280/921600 1280/493440 ] startOffset:0 bufStep:0 t:0/r:0 maxBuffers:12 d/s:0x00000000(UNKNOWN) s0:d0:App:YCrCb_420_SP:0|HW_TEXTURE AllocImgFormat:0x11(NV21) AllocBufPlanes(strides/sizeInBytes):[ 1280/921600 1280/493440 ] Real:0x11(YCrCb_420_SP) Request:0x22(IMPLEMENTATION_DEFINED) Override:0x11(YCrCb_420_SP) Hal-Client-usage:0x100(0|HW_TEXTURE) Hal-usage:0x20033(0|SW_READ_OFTEN|SW_WRITE_OFTEN|HW_CAMERA_WRITE) HalStream::(consumer/producer)Usage:0/0x20033 0xb400007c8ac50690 phy:-1
03-14 22:07:13.929091 1127 1127 D mtkcam-AppStreamMgr: [AppMgr-configureStreams] 0x1 4080x2296 OUT ImgFormat:0x2300(JPEG) BufPlanes(strides/sizeInBytes):[ 14461181/14461184 ] startOffset:0 bufStep:0 t:0/r:0 maxBuffers:11 d/s:0x08c20000(V0_JFIF|STANDARD_BT601_625|TRANSFER_SMPTE_170M|RANGE_FULL) s1:d0:App:BLOB:0|SW_READ_OFTEN AllocImgFormat:0x21(BLOB) AllocBufPlanes(strides/sizeInBytes):[ 14461181/14461184 ] Real:0x21(BLOB) Request:0x21(BLOB) Override:0x21(BLOB) Hal-Client-usage:0x3(0|SW_READ_OFTEN) Hal-usage:0x20033(0|SW_READ_OFTEN|SW_WRITE_OFTEN|HW_CAMERA_WRITE) HalStream::(consumer/producer)Usage:0/0x20033 0xb400007c8ac50310 phy:-1
03-14 22:07:13.929148 1127 1127 D mtkcam-AppStreamMgr: [AppMgr-configureStreams] 0x2 160x96 OUT ImgFormat:0x11(NV21) BufPlanes(strides/sizeInBytes):[ 192/18432 192/9504 ] startOffset:0 bufStep:0 t:0/r:0 maxBuffers:12 d/s:0x08c20000(V0_JFIF|STANDARD_BT601_625|TRANSFER_SMPTE_170M|RANGE_FULL) s2:d0:App:YCrCb_420_SP:0|SW_READ_OFTEN AllocImgFormat:0x11(NV21) AllocBufPlanes(strides/sizeInBytes):[ 192/18432 192/9504 ] Real:0x11(YCrCb_420_SP) Request:0x23(YCbCr_420_888) Override:0x23(YCbCr_420_888) Hal-Client-usage:0x3(0|SW_READ_OFTEN) Hal-usage:0x20033(0|SW_READ_OFTEN|SW_WRITE_OFTEN|HW_CAMERA_WRITE) HalStream::(consumer/producer)Usage:0/0x20033 0xb400007c8ac535d0 phy:-1
03-14 22:07:13.929375 1127 1127 I mtkcam_hal_aidl_device: [0-aidl-session::configureStreams] HalStream{id: 0, overrideFormat: YCRCB_420_SP, producerUsage: 131123, consumerUsage: CPU_READ_NEVER, maxBuffers: 12, overrideDataSpace: JFIF, physicalCameraId: -1, supportOffline: false, enableHalBufferManager: false}
03-14 22:07:13.929396 1127 1127 I mtkcam_hal_aidl_device: [0-aidl-session::configureStreams] HalStream{id: 1, overrideFormat: BLOB, producerUsage: 131123, consumerUsage: CPU_READ_NEVER, maxBuffers: 11, overrideDataSpace: JFIF, physicalCameraId: -1, supportOffline: false, enableHalBufferManager: false}
03-14 22:07:13.929413 1127 1127 I mtkcam_hal_aidl_device: [0-aidl-session::configureStreams] HalStream{id: 2, overrideFormat: YCBCR_420_888, producerUsage: 131123, consumerUsage: CPU_READ_NEVER, maxBuffers: 12, overrideDataSpace: JFIF, physicalCameraId: -1, supportOffline: false, enableHalBufferManager: false}
//22. Camera app 创建会话结束 配流结束
//03-14 22:07:13.767801 2897 3163 I CamAp_API2-Handler-0: [createCaptureSession]+, pending time = 0ms.
03-14 22:07:13.948694 2897 3163 I CamAp_API2-Handler-0: [createCaptureSession]-, executing time = 181ms.
03-14 22:07:13.948976 2897 3164 I CamAp_API2-Handler-0: [onConfigured], session = android.hardware.camera2.impl.CameraCaptureSessionImpl@9221bde
03-14 22:07:13.949524 2897 3180 I CamAp_PhotoDevice2Controller: [onConfigured],session = com.mediatek.camera.common.device.v2.Camera2CaptureSessionProxy@3b7b1bf, mNeedFinalizeOutput:false
//23. OTP 数据获取
03-14 22:07:14.055323 1127 3200 D awb_mgr : [getEEPROMData()][1]
03-14 22:07:14.055383 1127 3200 D CamCalHelper: CamCalHelper Get cal data.
03-14 22:07:14.055404 1127 3200 I CamCalCamCal: ver0723 pCamCalData->deviceID=1
03-14 22:07:14.055420 1127 3200 I CamCalCamCal: ver0723 g_lastSensorID=5026 pCamCalData->sensorID=5026
03-14 22:07:14.055435 1127 3200 I CamCalCamCal: ver0723 s_preloadSizeLimitDefaultValue = 0x1500,change value to 0x214d
03-14 22:07:14.055449 1127 3200 I CamCalCamCal: ver0723 result = 0, LayoutType = 1
03-14 22:07:14.055464 1127 3200 I CamCalCamCal: ver0723 DoCamCal2AGain : enter..BlockSize=23 SensorID=5026
03-14 22:07:14.055481 1127 3200 D CamCalHelper: CamCalHelper Read data from memory[0]
03-14 22:07:14.055498 1127 3200 I CamCalCamCal: ver0723 DoCamCal2AGain : ======================AF CAM_CAL==================
03-14 22:07:14.055513 1127 3200 I CamCalCamCal: ver0723 DoCamCal2AGain : [AFInf] = 441
03-14 22:07:14.055527 1127 3200 I CamCalCamCal: ver0723 DoCamCal2AGain : [AFMacro] = 739
03-14 22:07:14.055542 1127 3200 I CamCalCamCal: ver0723 DoCamCal2AGain : ======================AF CAM_CAL==================
03-14 22:07:14.055624 1127 3200 I CamCalCamCal: ver0723 DoCamCal2AGain : ======================AWB CAM_CAL==================
03-14 22:07:14.068210 1127 3241 I CamCalCamCal: ver0723 ======================PDAF Data==================
//24. 配流结束,Camera APP 用于在CameraCaptureSession中设置预览请求,以实现连续的相机预览或视频录制等功能
03-14 22:07:14.080826 2897 3163 I CamAp_API2-Handler-0: [setRepeatingRequest]+, pending time = 1ms
03-14 22:07:14.086297 2897 3163 I CamAp_API2-Handler-0: [setRepeatingRequest]-, executing time = 5ms.
//25. Camera HAL 开始准备第一帧预览请求 [submitRequest] <4Cell/0> requestNo:0
03-14 22:07:14.111577 1127 1127 D mtkcam-dev3-utils: [0-AppRequestUtil::createOneRequest] requestNumber[0]:StreamBuffer:0xb400007d4ac4a2c0 streamId:0 bufferId:1 buffer:0xb400007d1ac3a590 status:OK acquireFenceOp.hdl:0x0 releaseFenceOp.hdl:0x0 acquireFenceOp.fd:-1 releaseFenceOp.fd:-1 appBufferHandleHolder:0xb400007ddac86e68 freeByOthers:0 /
03-14 22:07:14.111722 1127 1127 I mtkcam-AppStreamMgr: [earlyCallbackMeta] early callback metadata, requestNo: 0
03-14 22:07:14.111853 1127 1127 I mtkcam-PipelineModelSession:
[submitRequest] <4Cell/0> requestNo:0 { //submit第一帧预览请求
repeating:0
control.aeTargetFpsRange:5,30 //预览帧率配置
control.captureIntent:1 // captureIntent 1: 预览; 2: 拍照 ;3: 录像; 4:录像抓拍 5:ZSL
control.enableZsl:0 // 是否开启ZSL
control.processRawEn:0 control.mode:1 control.sceneMode:0 control.videoStabilizationMode:0 edge.mode:1 }
03-14 22:07:14.111928 1127 1127 I mtkcam-FeatureSettingPolicy: [collectDefaultSensorInfo] keep the first request config as default config
03-14 22:07:14.112664 1127 1127 I mtkcam-InitFrameHandler: [enqueue] RequestNo:0 FrameNo:0
// 26. Camera FWK 第一帧请求ok
03-14 22:07:14.113523 1127 1127 D mtkcam-dev3: [0-session::processCaptureRequest] -> 1st request - OK
// 27. Camera HAL 出图并callback result 到上层 Frame timer: 预览出图 frame end updateResult callback 预览帧到上层
03-14 22:07:14.115334 1127 3168 D mtkcam-AppStreamMgr: [0-FrameHandler::updateResult] requestNo 0, real time:1, last partial:0
03-14 22:07:14.250714 1127 3231 D MtkCam/StreamingPipe/Timer: [print]Frame timer [# 1/ 0][t 19][io 0][tof 0/ 0][d 0/ 0][mss 0/ 0/ 0/ 0][a 18/ 4/ 13][tun 0/ 0][msf 0/ 0][vnr 0/ 0/ 0][am 0][b 0/ 0][tpi( 0/ 0)/( 0/ 0)/( 0/ 0)][vmdp_A 0/ 0 vmdp_B 0/ 0][h 7/ 0/ 0][e 0][r 0/ 0][w_A 0/ 0/ 0/ 0 w_B 0/ 0/ 0/ 0][x 0][disp 0/ 0][async 0/ 0][p2sm 0/ 0/ 0][fps0.00/0.00/ 5/ 30]
03-14 22:07:14.282892 1127 3223 D mtkcam-pipeline: [onLastStrongRef] [ requestNo:0 frameNo:0 ] frame end
03-14 22:07:14.283846 1127 3168 D mtkcam-AppStreamMgr: [0-FrameHandler::updateResult] requestNo 0, real time:0, last partial:1
二、MTK Camera Trace 启动流程拆解
1.MTK Camera app 启动阶段拆解表格
启动阶段 | 模块 | trace 关键字 |
---|---|---|
S0 | 系统 | deliverInputEvent(AppLaunch_dispatchPtr:Up桌面相机图标点击事件处理 ) ⇒ activityStart或Camera APP 进程创建 |
S1 | Camera APP | activityStart或Camera APP 进程创建 ⇒ connectDevice |
S2 | Camera HAL | connectDevice |
S3 | Camera APP | connectDevice end ⇒ CameraHal::configureStreams start |
S4 | Camera HAL | CameraHal::configureStreams |
S5 | Camera APP | CameraHal::configureStreams end ⇒ setRepeatingRequest start |
S6 | Camera HAL | setRepeatingRequest start ⇒ first full buffer |
S7 | Camera APP、SF | first full buffer ⇒ 第一帧显示(onPreviewOk) |
2 MTK Camera 预览流程trace 拆解
2.1 S0:AppLaunch_dispatchPtr:Up /deliverInputEvent (桌面相机图标点击事件处理) --> APP 进程创建

点击事件 Trace TAG:
AppLaunch_dispatchPtr:Up
deliverInputEvent
2.2 S1: activityStart或Camera APP 进程创建 ⇒ connectDevice
从Touch UP 到 ActivityStart 阶段,系统创建App进程耗时:

Camera APP 进程创建trace TAGPostFork
ZygoteInit
ActivityThreadMain
bindApplication
activityStart
Activity.onCreate
activityResume
- 1.PostFork 耗时需要排查 Zygote.java 代码
Zygote.java frameworks\base\core\java\com\android\internal\os
-
- ZygoteInit 耗时需要排查ZygoteInit.java 代码
ZygoteInit.java frameworks\base\core\java\com\android\internal\os
- 3.ActivityThreadMain耗时需要排查ActivityThread.java代码
ActivityThread.java frameworks\base\core\java\android\app
-
- bindApplication 耗时需要排查ActivityThread.java代码,同上
-
- 从 ActivityStart 到 App 层 OpenCamera 耗时
Camera App 开始执行 MainActivity 一系列 onCreate,onStart,onResume,openCamera等操作

5.1. activityStart 耗时需要排查 LaunchActivityItem.java 代码LaunchActivityItem.java frameworks\base\core\java\android\app\servertransaction
5.2. ResumeActivityItem耗时需要排查 ResumeActivityItem.java 代码ResumeActivityItem.java frameworks\base\core\java\android\app\servertransaction
5.3. Choreographer#doFrame 耗时需要排查 Choreographer.java 代码Choreographer.java frameworks\base\core\java\android\view
- 6.Framework层 cameraserver 开始响应App getCameraCharacteristics 、connectDevice 等操作。

open camera 前的Trace TAG
getCameraCharacteristics
connectDevice
2.3 S2: connectDevice

连接Camera 期间的Trace TAG:
AIDL::cpp::ICameraService::connectDevice::cppServer
connectDevice
CameraHal::openSession
mtkcam-devicemgr:finishOpenDevice
2.4 S3: connectDevice end ⇒ CameraHal::configureStreams start
Camera app 下发opensession后,底层开始对sensor 进行poweron上电处理
2.4.1 power on 上电 trace

power on 上电 trace TAG:powerOnSensor0
LogicalDev powerOn
init(3A)
AE init
AF init
FLASH init
TUNING init
2.4.2 power on 上电 log
行 7595: 03-14 22:07:13.602602 1127 3169 I mtkcam-DeviceAdapter: 0[HalDeviceAdapter::powerOn] powerOn +
行 7605: 03-14 22:07:13.603073 1127 3171 D mtkcam-DeviceAdapter: [initSensor] powerOnSensor0
行 7638: 03-14 22:07:13.605041 1127 3171 D MtkCam/HalSensor: [powerOn] sensorIdx : 0
行 8302: 03-14 22:07:13.827410 1127 3169 D lsc_nvram: [importEEPromData] Sensor(1) power on done, count(20), (m_eSensorDev & u4PowerOn)(0)
行 8478: 03-14 22:07:13.847626 1127 3171 D MtkCam/HalSensor: [powerOn] - <HalDeviceAdapter:0> ret:1, meSensorDev = 0x1
行 8667: 03-14 22:07:13.874610 1127 3169 D MtkCam/Utils: {CamProfile}[HalDeviceAdapter:0::powerOn] 3A Hal -: (0-th) ===> [start-->now: 271 ms]
行 8677: 03-14 22:07:13.875060 1127 3169 D MtkCam/Utils: {CamProfile}[HalDeviceAdapter:0::powerOn] ISP Hal -: (1-th) ===> [start-->now: 272 ms] [last-->now: 0 ms]
行 8678: 03-14 22:07:13.875081 1127 3169 D MtkCam/Utils: {CamProfile}[HalDeviceAdapter:0::powerOn] Sensor powerOn -: (2-th) ===> [start-->now: 272 ms] [last-->now: 0 ms]
行 8680: 03-14 22:07:13.875143 1127 3169 I mtkcam-DeviceAdapter: 0[HalDeviceAdapter::powerOn] 3A notifyPowerOn
行 8688: 03-14 22:07:13.875312 1127 3169 D MtkCam/Utils: {CamProfile}[HalDeviceAdapter:0::powerOn] 3A notifyPowerOn -: (3-th) ===> [start-->now: 272 ms] [last-->now: 0 ms]
行 8689: 03-14 22:07:13.875326 1127 3169 I mtkcam-DeviceAdapter: 0[HalDeviceAdapter::powerOn] powerOn -
2.4.3 Camera app opencamera 以及getCameraCharacteristics
Camera app photoDevice.openCamera 获取getCameraCharacteristics

Trace TAG:photoDevice.openCamera
openCamera.createSettingsByStage1
2.4.4 Camera APP 开始配流(预览,拍照、缩略图)Trace

Trace TAG:
AIDL::cpp::ICameraDeviceUser::beginConfigure::cppServer
createStream
endConfigure
configureStreams
2.4.5 Camera APP 开始配流(预览,拍照、缩略图)Log
行 8196: 03-14 22:07:13.761319 2897 3180 I CamAp_PhotoDevice2Controller: [configureSession] +, isFromOpen :true
行 8199: 03-14 22:07:13.763024 2897 3163 I CamAp_API2-Handler-0: [createCaptureRequest]+, pending time = 0ms.
行 8207: 03-14 22:07:13.764230 2897 3163 I CamAp_API2-Handler-0: [createCaptureRequest]-, executing time = 1ms.
行 8212: 03-14 22:07:13.767801 2897 3163 I CamAp_API2-Handler-0: [createCaptureSession]+, pending time = 0ms.
行 8213: 03-14 22:07:13.768280 2897 3163 I CamAp_API2-Handler-0: [createCaptureSession] with mOutputConfigs
行 8230: 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}
行 8232: 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}
行 8233: 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}
行 8237: 03-14 22:07:13.782502 1127 1127 D mtkcam-dev3: [0-session::configureStreams] camera default configureStreams setConfigTimeCPUCtrl
行 8247: 03-14 22:07:13.783354 1127 1127 D mtkcam-dev3: [0-session::tryRunCommandLocked] Run command onConfigureStreamsLocked +
行 8248: 03-14 22:07:13.783383 1127 1127 D mtkcam-dev3: [0-session::onConfigureStreamsLocked] +
行 8249: 03-14 22:07:13.783409 1127 1127 D mtkcam-dev3: [0-session::onConfigureStreamsLocked] Enter CPU full run mode, timeout: 1000 ms
行 9197: 03-14 22:07:13.915184 1127 1127 D MtkCam/ppl_context: [beginConfigure] +
行 9201: 03-14 22:07:13.915239 1127 1127 D MtkCam/ppl_context: [beginConfigure] -
行 9389: 03-14 22:07:13.928783 1127 1127 D mtkcam-dev3: [0-session::onConfigureStreamsLocked] halMaxBufferSize=12 HalStream.maxBuffers=12
行 9390: 03-14 22:07:13.928800 1127 1127 D mtkcam-dev3: [0-session::onConfigureStreamsLocked] halMaxBufferSize=11 HalStream.maxBuffers=11
行 9391: 03-14 22:07:13.928817 1127 1127 D mtkcam-dev3: [0-session::onConfigureStreamsLocked] halMaxBufferSize=12 HalStream.maxBuffers=12
行 9392: 03-14 22:07:13.928836 1127 1127 D mtkcam-dev3: [0-session::onConfigureStreamsLocked] [setConfigMap] mImageConfigMap.size()=3, mMetaConfigMap.size()=1
行 9401: 03-14 22:07:13.929036 1127 1127 D mtkcam-AppStreamMgr: [AppMgr-configureStreams] 0 1280x720 OUT ImgFormat:0x11(NV21) BufPlanes(strides/sizeInBytes):[ 1280/921600 1280/493440 ] startOffset:0 bufStep:0 t:0/r:0 maxBuffers:12 d/s:0x00000000(UNKNOWN) s0:d0:App:YCrCb_420_SP:0|HW_TEXTURE AllocImgFormat:0x11(NV21) AllocBufPlanes(strides/sizeInBytes):[ 1280/921600 1280/493440 ] Real:0x11(YCrCb_420_SP) Request:0x22(IMPLEMENTATION_DEFINED) Override:0x11(YCrCb_420_SP) Hal-Client-usage:0x100(0|HW_TEXTURE) Hal-usage:0x20033(0|SW_READ_OFTEN|SW_WRITE_OFTEN|HW_CAMERA_WRITE) HalStream::(consumer/producer)Usage:0/0x20033 0xb400007c8ac50690 phy:-1
行 9403: 03-14 22:07:13.929091 1127 1127 D mtkcam-AppStreamMgr: [AppMgr-configureStreams] 0x1 4080x2296 OUT ImgFormat:0x2300(JPEG) BufPlanes(strides/sizeInBytes):[ 14461181/14461184 ] startOffset:0 bufStep:0 t:0/r:0 maxBuffers:11 d/s:0x08c20000(V0_JFIF|STANDARD_BT601_625|TRANSFER_SMPTE_170M|RANGE_FULL) s1:d0:App:BLOB:0|SW_READ_OFTEN AllocImgFormat:0x21(BLOB) AllocBufPlanes(strides/sizeInBytes):[ 14461181/14461184 ] Real:0x21(BLOB) Request:0x21(BLOB) Override:0x21(BLOB) Hal-Client-usage:0x3(0|SW_READ_OFTEN) Hal-usage:0x20033(0|SW_READ_OFTEN|SW_WRITE_OFTEN|HW_CAMERA_WRITE) HalStream::(consumer/producer)Usage:0/0x20033 0xb400007c8ac50310 phy:-1
行 9404: 03-14 22:07:13.929148 1127 1127 D mtkcam-AppStreamMgr: [AppMgr-configureStreams] 0x2 160x96 OUT ImgFormat:0x11(NV21) BufPlanes(strides/sizeInBytes):[ 192/18432 192/9504 ] startOffset:0 bufStep:0 t:0/r:0 maxBuffers:12 d/s:0x08c20000(V0_JFIF|STANDARD_BT601_625|TRANSFER_SMPTE_170M|RANGE_FULL) s2:d0:App:YCrCb_420_SP:0|SW_READ_OFTEN AllocImgFormat:0x11(NV21) AllocBufPlanes(strides/sizeInBytes):[ 192/18432 192/9504 ] Real:0x11(YCrCb_420_SP) Request:0x23(YCbCr_420_888) Override:0x23(YCbCr_420_888) Hal-Client-usage:0x3(0|SW_READ_OFTEN) Hal-usage:0x20033(0|SW_READ_OFTEN|SW_WRITE_OFTEN|HW_CAMERA_WRITE) HalStream::(consumer/producer)Usage:0/0x20033 0xb400007c8ac535d0 phy:-1
行 9409: 03-14 22:07:13.929243 1127 1127 D mtkcam-dev3: [0-session::onConfigureStreamsLocked] -
行 9413: 03-14 22:07:13.929306 1127 1127 I mtkcam-dev3: [0-session::tryRunCommandLocked] Run command onConfigureStreamsLocked -
行 9414: 03-14 22:07:13.929375 1127 1127 I mtkcam_hal_aidl_device: [0-aidl-session::configureStreams] HalStream{id: 0, overrideFormat: YCRCB_420_SP, producerUsage: 131123, consumerUsage: CPU_READ_NEVER, maxBuffers: 12, overrideDataSpace: JFIF, physicalCameraId: -1, supportOffline: false, enableHalBufferManager: false}
行 9415: 03-14 22:07:13.929396 1127 1127 I mtkcam_hal_aidl_device: [0-aidl-session::configureStreams] HalStream{id: 1, overrideFormat: BLOB, producerUsage: 131123, consumerUsage: CPU_READ_NEVER, maxBuffers: 11, overrideDataSpace: JFIF, physicalCameraId: -1, supportOffline: false, enableHalBufferManager: false}
行 9416: 03-14 22:07:13.929413 1127 1127 I mtkcam_hal_aidl_device: [0-aidl-session::configureStreams] HalStream{id: 2, overrideFormat: YCBCR_420_888, producerUsage: 131123, consumerUsage: CPU_READ_NEVER, maxBuffers: 12, overrideDataSpace: JFIF, physicalCameraId: -1, supportOffline: false, enableHalBufferManager: false}
行 9586: 03-14 22:07:13.948694 2897 3163 I CamAp_API2-Handler-0: [createCaptureSession]-, executing time = 181ms.
行 9587: 03-14 22:07:13.948976 2897 3164 I CamAp_API2-Handler-0: [onConfigured], session = android.hardware.camera2.impl.CameraCaptureSessionImpl@9221bde
行 9591: 03-14 22:07:13.949524 2897 3180 I CamAp_PhotoDevice2Controller: [onConfigured],session = com.mediatek.camera.common.device.v2.Camera2CaptureSessionProxy@3b7b1bf, mNeedFinalizeOutput:false
2.5 S4: CameraHal::configureStreams

Trace TAG:AIDL::cpp::ICameraDeviceUser::endConfigure::cppServer
endConfigure
configureStreams
CameraHal::configureStreams
2.6 S5:CameraHal::configureStreams 结束 -->submitRequestList
2.6.1 CameraHal::configureStreams 结束 -->submitRequestList 下发预览请求 trace TAG

2.6.2 submitRequestList 下发预览请求 trace TAG

Trace TAG:
AIDL::cpp::ICameraDeviceUser::submitRequestList::cppServer
submitRequestList
setStreamingRequestList
submitRequestsHelper
setRepeatingRequests
2.7 S6:submitRequestList --> first full buffer
2.7.1 第一帧预览请求
第一帧预览请求 Trace

Camera FWK trace TAG:
sendRequestsBatch
CameraHal::processBatchCaptureRequests
frame capture
Camera HAL trace TAG:processCaptureRequest
第一帧预览请求 Log
//25. Camera HAL 开始准备第一帧预览请求 [submitRequest] <4Cell/0> requestNo:0
03-14 22:07:14.111577 1127 1127 D mtkcam-dev3-utils: [0-AppRequestUtil::createOneRequest] requestNumber[0]:StreamBuffer:0xb400007d4ac4a2c0 streamId:0 bufferId:1 buffer:0xb400007d1ac3a590 status:OK acquireFenceOp.hdl:0x0 releaseFenceOp.hdl:0x0 acquireFenceOp.fd:-1 releaseFenceOp.fd:-1 appBufferHandleHolder:0xb400007ddac86e68 freeByOthers:0 /
03-14 22:07:14.111722 1127 1127 I mtkcam-AppStreamMgr: [earlyCallbackMeta] early callback metadata, requestNo: 0
03-14 22:07:14.111853 1127 1127 I mtkcam-PipelineModelSession:
[submitRequest] <4Cell/0> requestNo:0 { //submit第一帧预览请求
repeating:0
control.aeTargetFpsRange:5,30 //预览帧率配置
control.captureIntent:1 // captureIntent 1: 预览; 2: 拍照 ;3: 录像; 4:录像抓拍 5:ZSL
control.enableZsl:0 // 是否开启ZSL
control.processRawEn:0 control.mode:1 control.sceneMode:0 control.videoStabilizationMode:0 edge.mode:1 }
03-14 22:07:14.111928 1127 1127 I mtkcam-FeatureSettingPolicy: [collectDefaultSensorInfo] keep the first request config as default config
03-14 22:07:14.112664 1127 1127 I mtkcam-InitFrameHandler: [enqueue] RequestNo:0 FrameNo:0
// 26. Camera FWK 第一帧请求ok
03-14 22:07:14.113523 1127 1127 D mtkcam-dev3: [0-session::processCaptureRequest] -> 1st request - OK
2.7.2 第一帧出图callback 请求
第一帧出图定位: callback Camera FWK 关键trace TAG

Trace TAG:
processCaptureResults
Stream 0: first full buffer
第一帧出图callback Camera HAL --> Camera FWK -->Camera APP

第一帧callback 流程(Camera HAL -->Camera FWK)

第一帧出图callback Camera HAL trace TAGprocessCaptureResult
第一帧出图callback Camera FWK 关键 trace TAG:first full buffer
Stream 0: first full buffer
frame capture
第一帧callback 流程(Camera FWK -->Camera APP)

Camera APP trace TAG:SurfaceTexture
第一帧callback 流程 Log
// 27. Camera HAL 出图并callback result 到上层 Frame timer: 预览出图 frame end updateResult callback 预览帧到上层
03-14 22:07:14.115334 1127 3168 D mtkcam-AppStreamMgr: [0-FrameHandler::updateResult] requestNo 0, real time:1, last partial:0
03-14 22:07:14.250714 1127 3231 D MtkCam/StreamingPipe/Timer: [print]Frame timer [# 1/ 0][t 19][io 0][tof 0/ 0][d 0/ 0][mss 0/ 0/ 0/ 0][a 18/ 4/ 13][tun 0/ 0][msf 0/ 0][vnr 0/ 0/ 0][am 0][b 0/ 0][tpi( 0/ 0)/( 0/ 0)/( 0/ 0)][vmdp_A 0/ 0 vmdp_B 0/ 0][h 7/ 0/ 0][e 0][r 0/ 0][w_A 0/ 0/ 0/ 0 w_B 0/ 0/ 0/ 0][x 0][disp 0/ 0][async 0/ 0][p2sm 0/ 0/ 0][fps0.00/0.00/ 5/ 30]
03-14 22:07:14.282618 1127 3223 I MtkCam/Utils: {CamProfile}[CameraDevice3SessionImpl::onFrameUpdated] updateResult: requestNo:0 userId:0x16 OAppMeta#(left:0 this:1): (1-th) ===> ( overtime > 1 ms) [start-->now: 5 ms] [last-->now: 5 ms]
03-14 22:07:14.282892 1127 3223 D mtkcam-pipeline: [onLastStrongRef] [ requestNo:0 frameNo:0 ] frame end
03-14 22:07:14.283846 1127 3168 D mtkcam-AppStreamMgr: [0-FrameHandler::updateResult] requestNo 0, real time:0, last partial:1
2.8 S7: first full buffer ⇒ 第一帧显示(onPreviewOk)
第一帧callback 流程(Camera APP -->SurfaceFliger 送显示)

SF 显示trace TAG:
surfaceflinger
vsync-sf
BufferTx
Fence
至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!
点个在看,为大佬点赞!