MTK MFNR

一、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

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

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

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

相关文章

执行npm命令一直出现sill idealTree buildDeps怎么办?

一、问题 今天在运行npm时候一直出项sill idealTree buildDeps问题 二、 解决 1、先删除用户界面下的npmrc文件(注意一定是用户C:\Users\{账户}\下的.npmrc文件下不是nodejs里面),进入到对应目录下,Mac启动显示隐藏文件操作&…

生产服务器变卡怎么排查

服务器变卡怎么排查,可以从以下四个方面去考虑 生产服务器变卡怎么排查 1、网络2、cpu的利用率3、io效率4、内存瓶颈 1、网络 可以使用netstat、iftop等工具查看网络流量和网络连接情况,检查是否网络堵塞、丢包等问题 2、cpu的利用率 1、用top命令定…

驱动执行篇之电机编码器:编码器基础与双编码器方案

目录 |1.编码器概述 |2.编码器分类 |2.1.增量式编码器和绝对值编码器 |2.2.光电编码器 |3.双编码器方案 |3.1几种扭矩感知方案 |3.3双编码器安装方式 |1.编码器概述 编码器 编码器,是将信号(如比特流)或数据进行编制、转换为可用以通讯…

ECA-Net:深度卷积神经网络中的高效通道注意力机制【原理讲解及代码!!!】

ECA-Net:深度卷积神经网络中的高效通道注意力机制 在深度学习领域,特别是在深度卷积神经网络(DCNN)中,注意力机制已经成为提升模型性能的关键技术之一。其中,ECA模块(Efficient Channel Attent…

前端项目的导入和启动

安装依赖 前端安装依赖只需要在控制台执行“npm i”即可。Tips:当我们执行的时候,有时候会很慢。可以考虑使用yarn或者pnpm。然而使用yarn或者pnpm有时候有一些莫名其妙的问题。所以还是得使用npm, 这个时候可以通过更换镜像源为淘宝镜像源。…

flex上下固定中间占固定高度(中间左右菜单)且内容自动滚动

效果图 布局&#xff1a; <view class"pop_tSet"><view class"pop_Con"><view class"box_bb"><view class"bb_title">{{titleObj[popType]}}</view></view><view class"box_bb_bot"…

The Sandbox 推出全新后室模板!

我们非常高兴地向你介绍游戏制作器的另一个新成员&#xff1a; 后室模板&#xff01; 步入神秘而不自然的空旷空间&#xff0c;感觉有些......不对劲。准备好探索、创造和拥抱引人入胜的后室世界吧。 什么是后室&#xff08;Backroom&#xff09;游戏&#xff1f; 早在 2019 年…

获取公募基金持仓【数据分析系列博文】

摘要 从指定网址获取公募基金持仓数据&#xff0c;快速解析并存储数据。 &#xff08;该博文针对自由学习者获取数据&#xff1b;而在投顾、基金、证券等公司&#xff0c;通常有Wind、聚源、通联等厂商采购的数据&#xff09; 1. 导入必要的库&#xff1a; pandas 用于数据处理…

Java中类装载的执行过程

类装载的执行过程 类从加载到虚拟机中开始&#xff0c;直到卸载为止&#xff0c;它的整个生命周期包括了&#xff1a;加载、验证、准备、解析、初始化、使用和卸载这7个阶段。其中&#xff0c;验证、准备和解析这三个部分统称为连接&#xff08;linking&#xff09;。 1.加载 …

第一天学C++(C++入门)

一、HelloWorld &#xff08;第一个C入门程序&#xff09; 1.1代码 #include<iostream> using namespace std; // 1.单行注释// 2. 多行注释 /* main 是一个程序的入口 每个程序都必须有这么一个函数 有且仅有一个 */ int main() {// 第九行代码的含义就是在屏幕中输出…

果园系统养殖游戏喂养偷菜种植浇水养成小程序

装扮 通过购买装扮场景切换不同的农场风格 土地升级 通过特定的材料对土地和房屋进行升级 日志 记录道具的使用数量及金币农作物的收入情况 幸运转盘 可用金币进行抽奖 宝箱开启 获得宝箱后可以通过金币开启 每日签到 每日签到获得奖励 系统公告 可以第一时间知道游戏的更新和…

【安全】查杀linux挖矿病毒 kswapd0

中毒现象 高cpu占用&#xff0c;使用top命令查看cpu使用率长时间50%以上&#xff0c;cpu占用异常的进程八成就是挖矿病毒进程 此病毒隐藏了自己&#xff0c;top命令无法查看到挖矿病毒进程&#xff0c;可通过sysdig命令找到隐藏进程 安装sysdig curl -s https://s3.amazonaw…

2024年软件开发行业的薪资水平在下滑的原因?

下降的原因主要包括&#xff1a; 科技行业竞争加剧&#xff1a;随着科技行业竞争的加剧&#xff0c;企业为了压缩成本&#xff0c;开始降低程序员的薪资水平。 人才供应过剩&#xff1a;在计算机成为热门学科的同时&#xff0c;社会上出现了对IT业泡沫和虚假繁荣的质疑。大量…

vue-textarea光标位置插入指定元素

vue-textarea光标位置插入指定元素 需求 点击插入关键字的时候把内容插入到光标所在的位置 效果图 实现 html <div class"temlate-container"><div class"template-content"><el-inputref"modelContent"v-model"mould.m…

嵌入式学习56-ARM5(linux驱动启动程序)

知识零碎&#xff1a; bootm&#xff1a; 启动内核同时给内核传参 …

怎么给一个字典进行按值或key来排序?

字典是具有指定数字或键的特定数据集或组。在 Python 以外的编程语言中&#xff0c;它们也被称为哈希映射或关联数组。 一般来说&#xff0c;它是键值对的形式&#xff0c;就像现实世界的字典一样。 要创建字典&#xff0c;请从左括号开始&#xff0c;添加键并键入一个冒号。…

Leetcode86_分隔链表

1.leetcode原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2.题目描述 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的…

回文链表leecode

回文链表 偶数情况奇数情况 回文链表leecode 偶数情况 public boolean isPalindrome(ListNode head) {if (head null) {return true;}ListNode fast head;ListNode slow head;while (fast ! null && fast.next ! null) {fast fast.next.next;slow slow.next;}//反…

【spring】@Resource注解学习

Resource介绍 在Spring框架中&#xff0c;Resource 注解是一个JSR-250标准注解&#xff0c;用于自动装配&#xff08;autowiring&#xff09;Spring容器中的bean。Resource 注解可以用于字段、方法和方法参数上&#xff0c;以声明依赖注入。 Resource源码 Target({TYPE, FIE…

Python相关性分析

分析连续变量之间线性相关程度的强弱&#xff0c;并用适当的统计指标表示出来的过程称为相关分析。 可以直接绘制散点图&#xff0c;或者绘制散点图矩阵&#xff0c;或者计算相关系数来进行相关分析。 相关系数的计算如下所示&#xff1a; 示例数据&#xff1a; 计算百合酱蒸…