MTK MFNR 學(xué)習(xí)筆記
共 8219字,需瀏覽 17分鐘
·
2024-04-17 08:02
和你一起終身學(xué)習(xí),這里是程序員Android
經(jīng)典好文推薦,通過(guò)閱讀本文,您將收獲以下知識(shí)點(diǎn):
一、MFNR 簡(jiǎn)介
二、MFNR 開(kāi)關(guān)與決策
三、MFNR 相關(guān)的adb 命令
四、MFNR log 分析
五 參考文獻(xiàn)
一、MFNR 簡(jiǎn)介
MFNR : Multiple Frame Noise Reduction
MFLL : Multiple Frame Low Light
BSS : Best Select Shot
MFNR 跟 MFLL 是兩個(gè)功能一致,名稱(chēng)不同的簡(jiǎn)稱(chēng),是MTK 推出的YUV domain 多幀降噪的算法。
MFNR 是在 P2_CaputureNode 中 CaptureFeaturePipe 的路徑,多幀的raw 首先在 rootnode 中做 bss,同時(shí)會(huì)做 recorder 動(dòng)作,然后依次進(jìn)入到 P2ANode 做 raw2yuv ,產(chǎn)生的yuv等image,送到 MultiFrameNode(掛載 MFNR 算法)中進(jìn)行多幀降噪處理,產(chǎn)生一張降噪后的YUV;如果還掛在其他的單幀YUV算法,則送YUVNode 處理,最終送到MDPNode 做crop ,resize處理;
大致流程如下:
Raws--> RootNode(BSS)-->Raws-->P2A(Raw2Yuv)-->YUVs-->MultiFrameNode(MFNR)-->YUV-->YUVNode-->YUV-->MDPNode-->Yuv
二、MFNR 開(kāi)關(guān)與決策
2.1 MFNR 開(kāi)關(guān)設(shè)置
開(kāi)關(guān)控制在:MTK_CAM_MFB_SUPPORT
代碼路徑:/device/*/ProjectConfig.mk
如果支持,默認(rèn)建議設(shè)置為 3
MTK_CAM_MFB_SUPPORT =3
0: 關(guān) MFLL
1:開(kāi) MFLL
2:開(kāi) AIS
3:開(kāi) MFLL 和AIS
1.不支持MFNR時(shí),請(qǐng)?jiān)?app 中設(shè)置
MTK_MFNR_FEATURE_MFB_MODE 為 MTK_MFNR_FEATURE_MFB_OFF
2.支持MFNR 時(shí),請(qǐng)?jiān)?app 中設(shè)置
MTK_MFNR_FEATURE_MFB_MODE 為 MTK_MFNR_FEATURE_MFB_AUTO,由 CUST_MFLL_AUTO_MODE 決策走哪個(gè)模式
3.當(dāng)支持AIS時(shí),可以使用下面二者任一種
1.MTK_MFNR_FEATURE_AIS_MODE = MTK_MFNR_FEATURE_AIS_ON
2.MTK_MFNR_FEATURE_MFB_MODE = MTK_MFNR_FEATURE_MFB_AIS
4.當(dāng)前面的meta確認(rèn)為非 OFF 狀態(tài),則去判斷tuning設(shè)置的threshold 是否滿(mǎn)足,(mfll_iso_th 決策是否走M(jìn)FNR)。
三、MFNR 相關(guān)的adb 命令
1.強(qiáng)制開(kāi)、關(guān) MFNR
adb shell setprop vendor.mfll.force 1 // 開(kāi) :1 、 關(guān):0
2. dump MFNR 各階段的圖片
adb shell setprop vendor.mfll.dump.all 1
路徑:/data/vendor/camera_dump
3.開(kāi)MFNR 的log
adb shell setprop vendor.mfll.log_level 3
4.dump MFNR 需要的RaW 跟YUV 圖
adb shell setprop vendor.debug.camera.p2.dump 1
5.dump bss 之前的RAW和RRZO
adb shell setprop vendor.debug.camera.bss.dump 1
四、MFNR log 分析
Log 關(guān)鍵字
log關(guān)鍵字:MFNRPlugin|capture req|capture intent: 2|connect call|MfllCore
connect call|capture req|capture intent: 2|mfll_iso_th.*enablemfb|Mfll apply.*frames|Collected Selection|capture request frames count|BSS output|skip frame count|allocate memory|times to blend|funcprocessMemc|process.*collected request|doMsBlending|process.*callback request
| 關(guān)鍵字 | 解釋 |
|---|---|
| connect call | 調(diào)用cameraservice的app 以及使用的api |
| capture req capture intent: 2 | 拍照請(qǐng)求幀以及intent |
| MFNRPlugin | MFNR |
| origin_iso | 838 當(dāng)前預(yù)覽iso |
| mfll_iso_th:100 | 多幀 iso 決策 , |
| enableMfb:1 | 開(kāi)啟 mfll |
| frameCapture:4 | 多幀拍照張數(shù)4張 |
| evaluateCaptureSetting | 拍照決策 mainFrame:1 subFrames:3 |
| BSS output | BSS 選幀 |
| BSS: skip frame | 過(guò)BSS 算法 skip的張數(shù) |
| allocate memory | 分配內(nèi)存 |
| collected request(0/4) | MFNR 收到幀的張數(shù) |
| doMsBlending | 多幀融合 |
| callback request | 依次 callback 每一幀 |
// 水印相機(jī)
04-10 16:41:04.080150 1422 8639 I CameraService: CameraService::connect call (PID 8414 "com.tencent.zebra", camera ID 0) and Camera API version 1
// capture req#:92 capture intent: 2 第 92 幀 請(qǐng)求拍照
04-10 16:41:09.544396 1478 9201 D mtkcam_hal_android.device: [capture intent: 2] + ULog#158932
04-10 16:41:09.544453 1478 9201 D mtkcam_hal_android.device: [ASettingRuleHelper::updateLogicalSetting] capture intent: 2
04-10 16:41:09.544487 1478 9201 D mtkcam_hal_android.device: [capture intent: 2] - ULog#158933
04-10 16:41:09.545722 1478 9201 I mtkcam-FeatureSettingPolicy: [collectCaptureInfo] (0xb400007a86f4af30) capture req#:92
04-10 16:41:09.548862 1478 9201 D MFNRPlugin: (9201)[negotiate] Collected Selection:(0/0), ISP mode: 0, sensorId:0, Req(92)
// origin_iso:838 但前預(yù)覽iso
// mfll_iso_th:100 多幀 iso 決策 ,
// enableMfb:1 開(kāi)啟 mfll
// frameCapture:4 多幀拍照張數(shù)4張
04-10 16:41:09.549907 1478 9201 I MfllCore/Strategy: {Mfll}[queryStrategy] iso:838, origin_iso:838, mfll_iso_th:100, downscale(enabled:0, ratio:0, 16/16), finalCfg(enableMfb:1, frameCapture:4), postrefine(nr:1, mfb:1), aevc(ae:0, lcso:0)
04-10 16:41:09.550055 1478 9201 D MFNRCapability_Basic: (9201)[updateSelection] Mfll apply = 1, frames = 4
04-10 16:41:09.550410 1478 9201 D MFNRPlugin: (9201)[negotiate] Collected Selection:(1/0), ISP mode: 0, sensorId:0, Req(92)
04-10 16:41:09.550512 1478 9201 D MFNRCapability_Basic: (9201)[updateSelection] Mfll apply = 1, frames = 4
04-10 16:41:09.550784 1478 9201 D MFNRPlugin: (9201)[negotiate] Collected Selection:(2/0), ISP mode: 0, sensorId:0, Req(92)
04-10 16:41:09.550857 1478 9201 D MFNRCapability_Basic: (9201)[updateSelection] Mfll apply = 1, frames = 4
04-10 16:41:09.551145 1478 9201 D MFNRPlugin: (9201)[negotiate] Collected Selection:(3/0), ISP mode: 0, sensorId:0, Req(92)
04-10 16:41:09.551218 1478 9201 D MFNRCapability_Basic: (9201)[updateSelection] Mfll apply = 1, frames = 4
// evaluateCaptureSetting 拍照決策 mainFrame:1 subFrames:3
//BSS output BSS 選幀
04-10 16:41:09.552314 1478 9201 D mtkcam-FeatureSettingPolicy: [evaluateCaptureSetting] capture request frames count(mainFrame:1, preCollectFrames:0, subFrames:3)
04-10 16:41:09.555439 1478 9201 D mtkcam-CaptureInFlightRequest: [insertRequest] insert capture RequestNo 92, size #:1
04-10 16:41:09.777355 1478 9373 D BssCore : (9373)[postPrepareRequests] MTK_FEATURE_BSS_PROCESS = 0, BSS output(enable bss:1) - order(0)
04-10 16:41:09.777365 1478 9373 D BssCore : (9373)[postPrepareRequests] MTK_FEATURE_BSS_PROCESS = 0, BSS output(enable bss:1) - order(3)
04-10 16:41:09.777373 1478 9373 D BssCore : (9373)[postPrepareRequests] MTK_FEATURE_BSS_PROCESS = 0, BSS output(enable bss:1) - order(1)
04-10 16:41:09.777379 1478 9373 D BssCore : (9373)[postPrepareRequests] MTK_FEATURE_BSS_PROCESS = 0, BSS output(enable bss:1) - order(2)
// BSS: skip frame 過(guò)BSS 算法 skip的張數(shù)
04-10 16:41:09.778173 1478 9373 I MtkCam/CapturePipe/RootNode: [reorder]BSS: skip frame count: 0, golden:0
// allocate memory 分配內(nèi)存
04-10 16:41:09.820663 1478 9505 D MfllCore: {Mfll}[operator()] future allocate memory +
// collected request(0/4) MFNR 收到幀的張數(shù)
04-10 16:41:09.821332 1478 9379 D MFNRPlugin: (9379)[process] collected request(0/4)
04-10 16:41:09.821347 1478 9508 D MfllCore: {Mfll}[operator()] times to blend(3), MEMC instanceNum(1), threadsNum(1)
04-10 16:41:09.821375 1478 9508 D MfllCore: {Mfll}[operator()] funcProcessMemc(0) +
04-10 16:41:09.841445 1478 9379 D MFNRPlugin: (9379)[process] collected request(1/4)
04-10 16:41:09.847348 1478 9505 D MfllCore: {Mfll}[operator()] future allocate memory -
04-10 16:41:09.863183 1478 9379 D MFNRPlugin: (9379)[process] collected request(2/4)
04-10 16:41:09.886023 1478 9379 D MFNRPlugin: (9379)[process] collected request(3/4)
// memc 過(guò)完
04-10 16:41:09.913152 1478 9508 D MfllCore: {Mfll}[operator()] funcProcessMemc(0) -
04-10 16:41:09.913241 1478 9508 D MfllCore: {Mfll}[operator()] funcProcessMemc(1) +
04-10 16:41:09.920605 1478 9508 D MfllCore: {Mfll}[operator()] funcProcessMemc(1) -
04-10 16:41:09.920615 1478 9508 D MfllCore: {Mfll}[operator()] funcProcessMemc(2) +
04-10 16:41:09.927396 1478 9508 D MfllCore: {Mfll}[operator()] funcProcessMemc(2) -
//doMsBlending 多幀融合
04-10 16:41:09.950564 1478 9510 D MfllCore: {Mfll}[doMsBlending] blending (0) ok
04-10 16:41:09.950575 1478 9510 D MfllCore: {Mfll}[doMsBlending] re-use input base buffer for 2nd blend
04-10 16:41:09.975629 1478 9510 D MfllCore: {Mfll}[doMsBlending] blending (1) ok
04-10 16:41:10.008877 1478 9510 D MfllCore: {Mfll}[doMsBlending] use working buffer as output
04-10 16:41:10.053627 1478 9510 D MfllCore: {Mfll}[doMsBlending] blending (2) ok
04-10 17:19:21.915968 13594 15334 D MfllCore: {Mfll}[doMsBlending] blending (4) ok
// callback request 依次 callback 每一幀
04-10 16:41:10.053840 1478 9379 D MFNRPlugin: (9379)[process] callback request(0/4) 0xb4000079471651a8
04-10 16:41:10.054679 1478 9379 D MFNRPlugin: (9379)[process] callback request(1/4) 0xb4000079471651a8
04-10 16:41:10.055064 1478 9379 D MFNRPlugin: (9379)[process] callback request(2/4) 0xb4000079471651a8
04-10 16:41:10.055407 1478 9379 D MFNRPlugin: (9379)[process] callback request(3/4) 0xb4000079471651a8
五 參考文獻(xiàn)
MTK文檔
參考文獻(xiàn):
【騰訊文檔】Camera學(xué)習(xí)知識(shí)庫(kù)
https://docs.qq.com/doc/DSWZ6dUlNemtUWndv
至此,本篇已結(jié)束。轉(zhuǎn)載網(wǎng)絡(luò)的文章,小編覺(jué)得很優(yōu)秀,歡迎點(diǎn)擊閱讀原文,支持原創(chuàng)作者,如有侵權(quán),懇請(qǐng)聯(lián)系小編刪除,歡迎您的建議與指正。同時(shí)期待您的關(guān)注,感謝您的閱讀,謝謝!
點(diǎn)擊閱讀原文,為大佬點(diǎn)贊!
