和你一起终身学习,这里是程序员Android
经典好文推荐,通过阅读本文,您将收获以下知识点:
一、Flash 基础知识
二、MTK 闪光灯拍照log分析
一、Flash 基础知识
1.1 Flash HAL 场景枚举值
![c8436c856f2628d6927925ef48adbf63.jpeg](https://i-blog.csdnimg.cn/img_convert/c8436c856f2628d6927925ef48adbf63.jpeg)
1.2 AE AF mode State 枚举值
![a287909d03c026d96243dba68d13a349.jpeg](https://i-blog.csdnimg.cn/img_convert/a287909d03c026d96243dba68d13a349.jpeg)
1.3 AWB mode State 枚举值
![acc20a88ca7fbf57b1e0f73ccf821a3d.jpeg](https://i-blog.csdnimg.cn/img_convert/acc20a88ca7fbf57b1e0f73ccf821a3d.jpeg)
二、MTK 闪光灯拍照log分析
2.1 log关键字
connect call|AppMgr-configureStreams|AppMgr-ResCbHelper::performCallback\] requestNo:0|Frame timer \[# 1/|convertCallbackParcelToHidl\] requestNo:0|evaluateCaptureSetting|capture req#|setduty|setonoff|setFlashO|takePicture|onShutterButtonClick|submitRequest.*control.captureIntent:2|submitRequest.*requestNo:0|MTK_CONTROL_AF_TRIGGER|MTK_CONTROL_AE_PRECAPTURE_TRIGGER|Backup|Precapture Trigger|AEPrecaptureStart|endPrecapture|doCapAE|CaptureNode.*queue|CaptureProcessor.*onEnque|CaptureProcessor.*onContinue|CaptureProcessor.*notifyRelease|Open with FUSE
2.2 MTK Camera log 分析
2.2.1 闪光灯第一次打闪:预闪
![852a67b590772576d861f9aa7baed189.jpeg](https://i-blog.csdnimg.cn/img_convert/852a67b590772576d861f9aa7baed189.jpeg)
2.2.2 闪光灯第二次打闪:主闪
![ab1991c20560e3c36680245960a561e5.jpeg](https://i-blog.csdnimg.cn/img_convert/ab1991c20560e3c36680245960a561e5.jpeg)
2.2.3 MTK camera 闪光灯拍照 log
MTK 相机on 状态下,闪光灯拍照走预闪,主闪流程。
// 相机调用
02-10 11:20:30.671910 1001 26533 I CameraService: CameraService::connect call (PID 26709 "com.mediatek.camera", camera ID 0) and Camera API version 2
//预览、拍照、缩略图尺寸
02-10 11:20:30.852660 4720 5025 D mtkcam-AppStreamMgr: [AppMgr-configureStreams] 0 1920x1080 OUT ImgFormat:0x11(NV21) BufPlanes(strides/sizeInBytes):[ 1920/2073600 1920/1062720 ] 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):[ 1920/2073600 1920/1062720 ] 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 0xb400007a43dcde50 phy:-1
02-10 11:20:30.852684 4720 5025 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 0xb400007a43dce8d0 phy:-1
02-10 11:20:30.852710 4720 5025 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 0xb400007a43d9f310 phy:-1
//第一帧请求 requestNo:0 第一帧 control.captureIntent:1 行为为预览
02-10 11:20:31.076045 4720 5025 I mtkcam-PipelineModelSession: [submitRequest] <4Cell/0> requestNo:0 { repeating:0 control.aeTargetFpsRange:10,30 control.captureIntent:1 control.enableZsl:0 control.processRawEn:0 control.mode:1 control.sceneMode:0 control.videoStabilizationMode:0 edge.mode:1 }
//第一帧出图
02-10 11:20:31.232717 4720 26780 D MtkCam/StreamingPipe/Timer: [print]Frame timer [# 1/ 0][t 47][io 0][tof 0/ 0][d 0/ 0][mss 0/ 0/ 0/ 0][a 47/ 24/ 22][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 3/ 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/ 10/ 30]
//第一帧callback image && meta
02-10 11:20:31.234330 4720 26736 D mtkcam-AppStreamMgr: [0-CallbackHandler::convertCallbackParcelToHidl] requestNo:0 o:image#:1
02-10 11:20:31.234601 4720 26735 D mtkcam-AppStreamMgr: [0:AppMgr-ResCbHelper::performCallback] requestNo:0 o:image#:1
02-10 11:20:31.234619 4720 26735 D mtkcam-AppStreamMgr: [0:AppMgr-ResCbHelper::performCallback] requestNo:0
02-10 11:20:31.320917 4720 26736 D mtkcam-AppStreamMgr: [0-CallbackHandler::convertCallbackParcelToHidl] requestNo:0 o:meta#:4
02-10 11:20:31.321192 4720 26735 D mtkcam-AppStreamMgr: [0:AppMgr-ResCbHelper::performCallback] requestNo:0 o:meta#:1
02-10 11:20:31.321293 4720 26735 D mtkcam-AppStreamMgr: [0:AppMgr-ResCbHelper::performCallback] requestNo:0
//预闪 AE AF tag MTK_CONTROL_AE_PRECAPTURE_TRIGGER
02-10 11:20:33.500835 4720 5014 D Hal3Av3 : [parseMeta] MTK_CONTROL_AE_PRECAPTURE_TRIGGER(0 -> 1)
02-10 11:20:33.500874 4720 5014 D Hal3Av3 : [parseMeta] MTK_CONTROL_AF_TRIGGER(0 -> 1)
02-10 11:20:33.500897 4720 5014 D Hal3Av3 : [parseMeta] MTK_CONTROL_AF_TRIGGER_ID(1)
02-10 11:20:33.540439 4720 26740 D Hal3Av3 : [setNormal] Precapture Trigger @ i4MagicNum(62)
02-10 11:20:33.540502 4720 26740 W TaskMgr : [sendEvent] AEPrecaptureStart, fgLampflashCond(1)
02-10 11:20:33.541150 4720 25786 D Hal3Av3 : [parseMeta] MTK_CONTROL_AE_PRECAPTURE_TRIGGER(1 -> 0)
02-10 11:20:33.541199 4720 25786 D Hal3Av3 : [parseMeta] MTK_CONTROL_AF_TRIGGER(1 -> 0)
// 2A backup doBackupAE AWB
02-10 11:20:33.546911 4720 26740 D ae_mgr : [doBackupAE()+] i4SensorDev:1
02-10 11:20:33.546930 4720 26740 D ae_mgr : [doBackupAE()-] i4SensorDev:1 m_rAESettingBackup.EvSetting:39998/5904/4100 (ISO:144) m_rAESettingBackup.u4Index/F:111/335 (IndexBase:3)Pre-flash:0
02-10 11:20:33.565240 4720 26740 D awb_mgr : [backup] AWB(908,512,765)
02-10 11:20:33.581089 4720 26740 D ae_mgr : [doBackupAE()+] i4SensorDev:1
02-10 11:20:33.581107 4720 26740 D ae_mgr : [doBackupAE()-] i4SensorDev:1 m_rAESettingBackup.EvSetting:39998/5904/4100 (ISO:144) m_rAESettingBackup.u4Index/F:111/335 (IndexBase:3)Pre-flash:0
02-10 11:20:33.602423 4720 26740 D awb_mgr : [backup] AWB(908,512,765)
02-10 11:20:33.605946 4720 26740 D Hal3ARaw: [doBackup2A]
02-10 11:20:33.605960 4720 26740 D ae_mgr : [doBackupAE()+] i4SensorDev:1
02-10 11:20:33.605974 4720 26740 D ae_mgr : [doBackupAE()-] i4SensorDev:1 m_rAESettingBackup.EvSetting:39998/5904/4100 (ISO:144) m_rAESettingBackup.u4Index/F:111/335 (IndexBase:3)Pre-flash:1
//预闪 flash on type:1:后摄 enable:1 开启闪光灯 scenario:3:预闪 duty(0).
02-10 11:20:33.606962 4720 26847 I FlashHal: [CAT][flash] setOnOff(): type:1 enable:1 scenario:3
02-10 11:20:33.606982 4720 26847 I FlashHal: setFlashOn(): duty(0), timeout(0), lt duty(0), lt timeout(0).
02-10 11:20:33.607010 4720 26847 I StrobeDrvFlashlight: setDuty(): duty(0).
02-10 11:20:33.607125 4720 26847 I StrobeDrvFlashlight: setOnOff(): enable(1).
02-10 11:20:33.613575 4720 26847 I StrobeDrvFlashlight: setOnOff(): on time(148789707).
02-10 11:20:33.632018 4720 26740 D awb_mgr : [backup] AWB(908,512,765)
02-10 11:20:33.651878 26709 26746 I CamAp_FocusCaptureRequestConfigure: [onCaptureStarted] ae precapture triggered
02-10 11:20:34.264236 4720 26740 D ae_mgr : [doRestoreAE()] i4SensorDev:1 m_rAESettingBackup.EvSetting:39998/6016/4100 (ISO:147) m_rAESettingBackup.u4Index/F:111/335 (IndexBase: 3) bIsRestorePreflash:1
02-10 11:20:34.265317 4720 26740 D ae_mgr : [doRestoreAE] backup FD information at AFAE state (for main flash)
//预闪 flash off
02-10 11:20:34.288120 4720 26847 I FlashHal: [CAT][flash] setOnOff(): type:1 enable:0 scenario:3
02-10 11:20:34.288137 4720 26847 I FlashHal: setFlashOff().
02-10 11:20:34.288156 4720 26847 I StrobeDrvFlashlight: setOnOff(): enable(0).
02-10 11:20:34.289802 4720 26847 I StrobeDrvFlashlight: setOnOff(): off time(148790388).
02-10 11:20:34.386669 4720 26740 I FlashMgrM: endPrecapture().
02-10 11:20:34.386770 4720 26740 I FlashMgrM: endPrecapture().
//开始拍照
02-10 11:20:34.538837 26709 26746 I CamAp_PhotoMode: onShutterButtonClick, is storage ready : true,isDeviceReady = true
02-10 11:20:34.540462 26709 26746 I CamAp_PhotoDevice2Controller: [takePicture] mSession= com.mediatek.camera.common.device.v2.Camera2CaptureSessionProxy@8fee002
//拍照请求帧 control.captureIntent:2
02-10 11:20:34.589042 4720 25786 I mtkcam-PipelineModelSession: [submitRequest] <4Cell/0> requestNo:88 { repeating:0 control.aeTargetFpsRange:10,30 control.captureIntent:2 control.enableZsl:1 control.processRawEn:0 control.mode:1 control.sceneMode:0 control.videoStabilizationMode:0 edge.mode:2 }
02-10 11:20:34.589203 4720 25786 I mtkcam-FeatureSettingPolicy: [evaluateCaptureSetting] (0xb4000079e3e13630) capture req#:88
02-10 11:20:34.589717 4720 25786 D mtkcam-FeatureSettingPolicy: [evaluateCaptureSetting] openId(0), sensorId(0), subsensorId(-1), sub sensor nums 0
//拍照决策 MTK_CAMERA_SCENARIO_CAPTURE_NORMAL MTK_FEATURE_COMBINATION_SINGLE frames count
02-10 11:20:34.589850 4720 25786 D mtkcam-FeatureSettingPolicy: [evaluateCaptureSetting] find scenario:MTK_CAMERA_SCENARIO_CAPTURE_NORMAL for (openId:0, scenario:1)
02-10 11:20:34.605578 4720 25786 I mtkcam-FeatureSettingPolicy: [evaluateCaptureSetting] trigger feature:NO_FEATURE_NORMAL(0), feature combination:MTK_FEATURE_COMBINATION_SINGLE(0x20000000300f0) for req#88
02-10 11:20:34.605586 4720 25786 D mtkcam-FeatureSettingPolicy: [evaluateCaptureSetting] capture request frames count(mainFrame:1, subFrames:0, preDummyFrames:2, postDummyFrames:3)
//主闪开启 scenario:4 主闪 duty(1).
02-10 11:20:34.738555 4720 26740 I FlashHal: [CAT][flash] setOnOff(): type:1 enable:1 scenario:4
02-10 11:20:34.738580 4720 26740 E FlashHal: FLASH_HAL_SCENARIO_MAIN_FLASH dutyLt=-1,duty=1 (setOnOff){#610:vendor/mediatek/proprietary/hardware/mtkcam/aaa/source/isp_6s/../common/flash_mgr/flash_hal.cpp}
02-10 11:20:34.738602 4720 26740 I FlashHal: setFlashOn(): duty(1), timeout(0), lt duty(-1), lt timeout(0).
02-10 11:20:34.738627 4720 26740 I StrobeDrvFlashlight: setDuty(): duty(1).
02-10 11:20:34.738738 4720 26740 I StrobeDrvFlashlight: setOnOff(): enable(1).
02-10 11:20:34.743919 4720 26740 I StrobeDrvFlashlight: setOnOff(): on time(148790839).
02-10 11:20:34.744568 4720 26740 D ae_mgr : [doBackupAE()+] i4SensorDev:1
02-10 11:20:34.744582 4720 26740 D ae_mgr : [doBackupAE()-] i4SensorDev:1 m_rAESettingBackup.EvSetting:39998/5904/4100 (ISO:144) m_rAESettingBackup.u4Index/F:111/335 (IndexBase:3)Pre-flash:0
02-10 11:20:34.763537 4720 26740 D ae_mgr : [doCapAE()] i4SensorDev:1 CamMode:5 TargetMode:0 minISO:25 bIsSyncAE:0
02-10 11:20:34.763652 4720 26740 D ae_mgr : [prepareAlgoFrameInfo] send backup FD information to algo at POSTCAP state (during main flash)
02-10 11:20:34.764276 4720 26740 D ae_mgr : [doCapAE():monitor] SensorDev:1 Mag:88 CWVY:450 AEStable:1 AlgoAPAELock/AlgoAFAELock:0/0 Index/F:111/335 Algo:39998/5904/4100(144) Real:20004/1632/4156(40) EV/BV/BVWOStrobe:68/18/18 SkipCount:0 hdr LE(39998/3643/4112/89) ME(39998/3643/4112/89) SE(39998/3643/4112/89) VSE(39998/3643/4112/89) R(100)
02-10 11:20:34.836886 4720 26740 D ae_mgr : [doRestoreAE()] i4SensorDev:1 m_rAESettingBackup.EvSetting:39998/6016/4100 (ISO:147) m_rAESettingBackup.u4Index/F:111/335 (IndexBase: 3) bIsRestorePreflash:0
// 主闪关闭 enable:0 setFlashOff
02-10 11:20:34.863356 4720 26763 I FlashHal: [CAT][flash] setOnOff(): type:1 enable:0 scenario:4
02-10 11:20:34.863367 4720 26763 E FlashHal: FLASH_HAL_SCENARIO_MAIN_FLASH dutyLt=-1,duty=1 (setOnOff){#610:vendor/mediatek/proprietary/hardware/mtkcam/aaa/source/isp_6s/../common/flash_mgr/flash_hal.cpp}
02-10 11:20:34.863374 4720 26763 I FlashHal: setFlashOff().
02-10 11:20:34.863382 4720 26763 I StrobeDrvFlashlight: setOnOff(): enable(0).
02-10 11:20:34.863939 4720 26763 I StrobeDrvFlashlight: setOnOff(): off time(148790964).
// P2 capture 处理
02-10 11:20:34.883859 4720 26765 I MtkCam/P2/CaptureNode: [queue] P2C cam 0: (0xb400007883da59b0) R/F Num: 88/90
02-10 11:20:34.884348 4720 26792 D MtkCam/P2/CaptureProcessor: [onEnque] P2C cam 0: isZoom 0, isVsdof 0, isMultiCam 0, isHidlIsp 0
02-10 11:20:34.885773 4720 26792 D MtkCam/P2/CaptureProcessor: [onEnque]P2 frame number(90) main sensorId(0) sub sensor(-1) isPhyStream(0) isPhyControl(0)
02-10 11:20:34.885797 4720 26792 I MtkCam/P2/CaptureProcessor: [onEnque] P2C cam 0 MWFrame:#90 MWReq:#88, frame 90 : Index/Count:-1/0 Feature:0x20000000300f0
02-10 11:20:34.885813 4720 26792 I MtkCam/P2/CaptureProcessor: [onEnque] P2C cam 0 MWFrame:#90 MWReq:#88, frame 90 : Index/Count:-1/0 isEarlyNotificationTrigger:1, isCshot:0, SS_CapHint:0
02-10 11:20:34.885845 4720 26792 D MtkCam/P2/CaptureProcessor: [onEnque] P2C cam 0 MWFrame:#90 MWReq:#88, frame 90 : [SS] iShootingMode (0)
02-10 11:20:34.885893 4720 26792 D MtkCam/P2/CaptureProcessor: [onEnque] P2C cam 0 MWFrame:#90 MWReq:#88, frame 90 : [SS] use out_jpeg size as validSize(2296,4080)
02-10 11:20:34.885906 4720 26792 D MtkCam/P2/CaptureProcessor: [onEnque] P2C cam 0 MWFrame:#90 MWReq:#88, frame 90 : [SS] Update SEC_ANDROID_SCALER_VALID_IMAGE_REGION (0,0)(2296x4080)
02-10 11:20:34.885917 4720 26792 I MtkCam/P2/CaptureProcessor: [onEnque] P2C cam 0 MWFrame:#90 MWReq:#88, frame 90 : enqued request to captureFeaturePipe, R/F Num:88/90
02-10 11:20:34.895019 4720 26791 I MtkCam/P2/CaptureProcessor: [onContinue] P2C cam 0 MWFrame:#90 MWReq:#88, frame 90-0 : (0xb400007993dd3470) notify next capture, request count:1, R/F Num:88/90
02-10 11:20:34.926198 4720 26896 I MtkCam/P2/CaptureProcessor: [notifyRelease] P2C cam 0: notify release, R/F Num:88/90
02-10 11:20:34.926335 4720 26896 I MtkCam/P2/CaptureProcessor: [notifyRelease] P2C cam 0: notify release, R/F Num:88/90
//保存图片
02-10 11:20:35.025687 2150 2164 D MediaProvider: Open with FUSE. FilePath: /storage/emulated/0/DCIM/Camera/IMG_20250210_112034_998.jpg. Uid: 10100. Media Capabilities Uid: 0. ShouldRedact: false. ShouldTranscode: false
2.3 腾讯水印相机闪光灯拍照
腾讯水印相机 拍照流程几乎跟MTK camera 流程一致,走预闪,主闪流程。
scenario:3 预闪
scenario:4 主闪
2.3.1 水印相机下发预闪Tag,进行预闪,主闪
![bd17afb0acc3176a6a56e38bf3db378c.jpeg](https://i-blog.csdnimg.cn/img_convert/bd17afb0acc3176a6a56e38bf3db378c.jpeg)
2.3.2 主闪存图处理
![908277d0e7cc4a190c757c410e18f5b8.jpeg](https://i-blog.csdnimg.cn/img_convert/908277d0e7cc4a190c757c410e18f5b8.jpeg)
2.4 美图秀秀,美颜相机、B612 闪光灯拍照
美图秀秀、美颜相机、B612等相机 拍照与视频录制统一一个button(点击拍照,长按录制视频),app 下发的flash on 场景为scenario:1 视频手电筒 scenario;
![8182413c957e030884e498b0265c5e2c.jpeg](https://i-blog.csdnimg.cn/img_convert/8182413c957e030884e498b0265c5e2c.jpeg)
![410dca5bb0054370ec756918fcb4760d.jpeg](https://i-blog.csdnimg.cn/img_convert/410dca5bb0054370ec756918fcb4760d.jpeg)
![bf6088a09189afce9197d96688f802e5.jpeg](https://i-blog.csdnimg.cn/img_convert/bf6088a09189afce9197d96688f802e5.jpeg)
参考文献:
【腾讯文档】Android Framework 知识库
https://docs.qq.com/doc/DSXBmSG9VbEROUXF5
至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!
点个在看,为大佬点赞!