MTK MFNR 学习笔记

87c3ba6af6c92261695545977f56a2d0.gif

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

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

一、MFNR 简介
二、MFNR 开关与决策
三、MFNR 相关的adb 命令
四、MFNR log 分析
五 参考文献

一、MFNR 简介

MFNR : Multiple Frame Noise Reduction
MFLL : Multiple Frame Low Light
BSS : Best Select Shot

MFNR 跟 MFLL 是两个功能一致,名称不同的简称,是MTK 推出的YUV domain 多帧降噪的算法。

MFNR 是在 P2_CaputureNode 中 CaptureFeaturePipe 的路径,多帧的raw 首先在 rootnode 中做 bss,同时会做 recorder 动作,然后依次进入到 P2ANode 做 raw2yuv ,产生的yuv等image,送到 MultiFrameNode(挂载 MFNR 算法)中进行多帧降噪处理,产生一张降噪后的YUV;如果还挂在其他的单帧YUV算法,则送YUVNode 处理,最终送到MDPNode 做crop ,resize处理;
大致流程如下:
Raws--> RootNode(BSS)-->Raws-->P2A(Raw2Yuv)-->YUVs-->MultiFrameNode(MFNR)-->YUV-->YUVNode-->YUV-->MDPNode-->Yuv

二、MFNR 开关与决策

2.1 MFNR 开关设置

开关控制在:MTK_CAM_MFB_SUPPORT
代码路径:
/device/*/ProjectConfig.mk
如果支持,默认建议设置为 3
MTK_CAM_MFB_SUPPORT =3

0: 关 MFLL 1:开 MFLL2:开 AIS 3:开 MFLL 和AIS
  • 1.不支持MFNR时,请在 app 中设置

MTK_MFNR_FEATURE_MFB_MODE 为 MTK_MFNR_FEATURE_MFB_OFF

  • 2.支持MFNR 时,请在 app 中设置

MTK_MFNR_FEATURE_MFB_MODE 为 MTK_MFNR_FEATURE_MFB_AUTO,由 CUST_MFLL_AUTO_MODE 决策走哪个模式

  • 3.当支持AIS时,可以使用下面二者任一种

1.MTK_MFNR_FEATURE_AIS_MODE = MTK_MFNR_FEATURE_AIS_ON
2.MTK_MFNR_FEATURE_MFB_MODE = MTK_MFNR_FEATURE_MFB_AIS

  • 4.当前面的meta确认为非 OFF 状态,则去判断tuning设置的threshold 是否满足,(mfll_iso_th 决策是否走MFNR)。

三、MFNR 相关的adb 命令

1.强制开、关 MFNR

adb shell setprop vendor.mfll.force 1 // 开 :1 、 关:0

2. dump MFNR 各阶段的图片

adb shell setprop vendor.mfll.dump.all 1
路径:/data/vendor/camera_dump

3.开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 关键字

log关键字:
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

关键字解释
connect call调用cameraservice的app 以及使用的api
capture req capture intent: 2拍照请求帧以及intent
MFNRPluginMFNR
origin_iso838 当前预览iso
mfll_iso_th:100多帧 iso 决策 ,
enableMfb:1开启 mfll
frameCapture:4多帧拍照张数4张
evaluateCaptureSetting拍照决策 mainFrame:1 subFrames:3
BSS outputBSS 选帧
BSS: skip frame过BSS 算法 skip的张数
allocate memory分配内存
collected request(0/4)MFNR 收到帧的张数
doMsBlending多帧融合
callback request依次 callback 每一帧
// 水印相机
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 帧 请求拍照
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 但前预览iso
//  mfll_iso_th:100 多帧 iso 决策 ,
//  enableMfb:1 开启 mfll 
//  frameCapture:4 多帧拍照张数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  过BSS 算法 skip的张数
04-10 16:41:09.778173  1478  9373 I MtkCam/CapturePipe/RootNode: [reorder]BSS: skip frame count: 0, golden:0// allocate memory 分配内存
04-10 16:41:09.820663  1478  9505 D MfllCore: {Mfll}[operator()] future allocate memory +// collected request(0/4) MFNR 收到帧的张数
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 过完
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

五 参考文献

MTK文档

参考文献:

【腾讯文档】Camera学习知识库
https://docs.qq.com/doc/DSWZ6dUlNemtUWndv

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

e8f47650ee8b983aebc901f1f3081251.jpeg

点击阅读原文,为大佬点赞!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/630516.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

决策树分类器(保姆级教学) 定义+特性+原理及公式+鸢尾花分类经典问题示例(完整Python代码带详细注释、保姆级分部代码解释及结果说明、决策树可视化及解释)

文章目录 引言定义特性基本原理和公式理解信息增益(ID3算法)熵的定义条件熵信息增益的计算 基尼不纯度(CART算法)基尼不纯度的定义基尼不纯度的计算例子 实现步骤解决鸢尾花分类问题(机器学习入门中的经典案例Python代…

电商平台业务及架构演变史

不少人认为电商系统很简单,因为现在做电商的太多了,看到的电商产品也多。看来看去产品都差不多,没什么特别。 其实中国电商发展已有20多年历史,电商以销售为核心连接着研、产、供、销、服整套的信息系统体系。其中的设计并没有那…

Yoshua Bengio独家专访:我不想把大模型未来押注在Scaling Law上,AGI路上要“注意安全”...

导读 漫长的30年间,数度从主流方向的超然出走,是Bengio的制胜秘诀。这种不盲从主流的风格体现在他研究生涯的方方面面。 90年代末期,神经网络被打入冷宫,Bengio的论文多次遭拒,连学生们也开始担心,和他一起…

transformer架构详细详解

一、transformer的贡献 transformer架构的贡献:该架构只使用自注意力机制,没有使用RNN或卷积网络。且可以实现并行计算,加快模型训练速度。 (将所有的循环层全部换成:multi-headed self-attention) 二、t…

linux启动minicom、u-boot的常用命令、网络命令tftp、nfs/根文件系统、u-boot的bootargs环境变量

linux启动minicom sudo minicom -con进入minicom界面: 打开单片机 在打开之后,我们通过 printenv查看环境配置 在修改配置之前,我们最好先将环境初始化一下,初始化代码为 nand erase.chipu-boot的常用命令 尽管u-boot是一个…

Hive进阶(1)----HDFS写入数据流程(赋图助君理解)

HDFS写入数据流程 1.理论流程描述 HDFS(Hadoop分布式文件系统)的数据写入流程是一个复杂但高效的过程,可以分为以下8个步骤: 1、client(客户端)发起文件上传请求; 2、通过发送RPC请求与NameNode建立通讯。NameNode…

【Python基础】Redis

文章目录 [toc]进入Redis交互模式Redis服务测试切换仓库字符串Key命令HashListSetZSet数据添加数据查询数据更新数据删除查询存在的所有key 个人主页:丷从心 系列专栏:Python基础 学习指南:Python学习指南 进入Redis交互模式 redis-cliRed…

uniapp中scroll-view初始化的时候 无法横向滚动到某个为止

项目需求 实现日历&#xff08;13天&#xff09;默认高亮第六天 并定位到第六 左边右边各六天&#xff08;可以滑动&#xff09; 直接上代码 <template><scroll-view class"scroll-X":show-scrollbar"true" :scroll-x"scrollable":…

Mac电脑版鼠标连点工具 RapidClick for Mac

RapidClick for Mac是一款方便实用的自动点击工具&#xff0c;可以帮助Mac用户在使用电脑时轻松、快速地进行鼠标操作。它可以模拟人类手指点击的动作&#xff0c;让您的鼠标点击变得更加快捷高效&#xff0c;大大提升了工作和游戏的效率。 RapidClick for Macv1.5.1激活版下载…

LangChain LangServe 学习笔记

LangChain LangServe 学习笔记 0. 引言1. LangServe 概述2. 特性3. 限制4. 安装5. 示例应用程序6. OpenAPI文档7. Python SDK 客户端8. Playground9. 聊天可运行页面 0. 引言 使用 LangServe 可以立即将您的LLM应用程序变成 API 服务器。 LangServe 使用 FastAPI 构建&#x…

微信小程序之点击事件

微信小程序中常用的点击事件主要是 tap&#xff0c;但除此之外还有其他的触摸类事件&#xff0c;用于不同的交互场景。以下是一些常见的点击和触摸相关的事件及其区别&#xff1a; 1、tap——最基本的点击事件&#xff0c;适用于一般的轻触交互&#xff0c;类似于 HTML 中的 c…

使用Python工具库SnowNLP对评论数据标注(二)

这一次用pandas处理csv文件 comments.csv import pandas as pd from snownlp import SnowNLPdf pd.read_csv("C:\\Users\\zhour\\Documents\\comments.csv")#{a: [1, 2, 3], b: [4, 5, 6], c: [7, 8, 9]}是个字典 emotions[] for txt in df[sentence]:s SnowNLP(…