MTK平台闪光灯相关信息

(1)概念

  • MTK打闪一般分为预闪、主闪两个阶段。相应的执行一次拍照会有预闪、主闪两次开灯。预闪可以用来防红眼(red-eye reduction)。闪光时使环境发生变化,会按新的光线条件(有闪光时)重新测光,来实现更精确;
  • 预闪是开灯让AE/AF收敛,其持续的时间取决于AF/AF收敛的速度,Flash本身没有控制预闪时间长短的能力。理论上环境亮度越暗,对应的Sensor Framerate越低,AE/AF收敛的时间就越长(AE收敛完之后,才会做AF收敛)。预闪阶段会提前计算主闪时会使用的参数(AE/AWB/AF/Duty)。
  • 主闪是在Capture阶段去开灯,一般flow至少会亮三张Frame,在第三帧P1 Done关灯。主闪Duty, doCap要使用的AE参数、AWB权重、AF lock focus都是在预闪阶段就决定了。所以主闪的持续时间相对比预闪的会短一些,电流强度也会稍微高一点。

这里我们以普通的mt6761为例,可以查看部分代码的设置。

(2)闪光灯Hal逻辑代码

//vendor/mediatek/proprietary/hardware/mtkcam/aaa/source/common/flash_mgr/flash_hal.cppint FlashHal::getTorchStatus()
{logI("getTorchStatus(): torch status(%d).", mTorchStatus);return mTorchStatus;
}int FlashHal::setTorchOnOff(MBOOL enable)
{logI("[CAT][flash] setTorchOnOff(): type:%d enable:%d", mStrobeTypeId, enable);if (mStrobeTypeId == STROBE_TYPE_FRONT && !cust_isSubFlashSupport())return 1;if (enable == 1) {init();setInCharge(1);setOnOff(enable, FLASH_HAL_SCENARIO_TORCH);mTorchStatus = 1;} else {setOnOff(enable, FLASH_HAL_SCENARIO_TORCH);setInCharge(0);uninit();mTorchStatus = 0;}return 0;
}int FlashHal::setVideoTorchOnOff(int enable)
{logI("setVideoTorchOnOff(): enable(%d).", enable);setOnOff(enable, FLASH_HAL_SCENARIO_VIDEO_TORCH);return 0;
}int FlashHal::setAfLampOnOff(int enable)
{logI("setAfLampOnOff(): enable(%d).", enable);setOnOff(enable, FLASH_HAL_SCENARIO_AF_LAMP);return 0;
}int FlashHal::setPfOnOff(int enable)
{logI("setPfOnOff(): enable(%d).", enable);setOnOff(enable, FLASH_HAL_SCENARIO_PRE_FLASH);return 0;
}int FlashHal::setCaptureFlashOnOff(int enable)
{logI("setCaptureFlashOnOff(): enable(%d).", enable);setOnOff(enable, FLASH_HAL_SCENARIO_MAIN_FLASH);return 0;
}int FlashHal::setTorchDuty(int level)
{int duty = 0, dutyLt = 0;logI("setTorchLevel(): level(%d).", level);mTorchLevel = level;FlashCustomAdapter::getInstance(mSensorDev)->getTorchDuty(level, &duty, &dutyLt);mpStrobe->setDuty(duty);if (mStrobeCtNum > 1) {mpStrobe2->setDuty(dutyLt);}return 0;
}//setOnOff
int FlashHal::setOnOff(int enable, FLASH_HAL_SCENARIO_ENUM scenario)
{logI("[CAT][flash] setOnOff(): type:%d enable:%d scenario:%d", mStrobeTypeId, enable, scenario);/* verify arguments */if (verifyScenario(scenario)) {logE("setOnOff(): invalid arguments.");return -1;}if (!isAvailable()) {logI("setOnOff(): sensorDev(%d) not available.", mSensorDev);return -1;}if (scenario == FLASH_HAL_SCENARIO_MAIN_FLASH) {//...} else if (scenario == FLASH_HAL_SCENARIO_VIDEO_TORCH) {//...}if (enable)return setFlashOn(mFlashHalInfo[scenario]);elsereturn setFlashOff();
}

(3)关闭真闪配置

//vendor/mediatek/proprietary/custom/mt6761/hal/camera_3a/flashawb_tuning_custom.cppMBOOL
isFlashAWBv2Enabled(MINT32 i4SensorDev)
{switch (i4SensorDev){case NSIspTuning::ESensorDev_Main: //  Main Sensorreturn  MTRUE;//MFALSEcase NSIspTuning::ESensorDev_MainSecond: //  Main Second Sensorreturn  MTRUE;case NSIspTuning::ESensorDev_Sub: //  Sub Sensorreturn  MTRUE;case NSIspTuning::ESensorDev_SubSecond: //  Sub Second Sensorreturn  MTRUE;default:return MTRUE;}
}

(4)默认关闭双闪通道,并进行闪光灯校准

//kernel-4.19/arch/arm64/boot/dts/mediatek/mt6761.dtsflashlight_core: flashlight_core {compatible = "mediatek,flashlight_core";};flashlights_mt6370: flashlights_mt6370 {compatible = "mediatek,flashlights_mt6370";decouple = <1>;//默认为0,需要配置为1channel@1 {type = <0>;ct = <0>;part = <0>;};};flashlights_aw3644: flashlights_aw3644 {compatible = "mediatek,flashlights_aw3644";};
//vendor/mediatek/proprietary/custom/mt6761/hal/flashlight/flash_custom.cppint cust_isDualFlashSupport(int sensorDev)
{if(sensorDev == DUAL_CAMERA_MAIN_SENSOR || sensorDev == DUAL_CAMERA_MAIN_2_SENSOR)return 0;elsereturn 0;return 0;
}

如下修改为闪光灯校准:vendor/mediatek/proprietary/custom/mt6761/hal/flashlight/flash_tuning_custom_cct.cpp

在这里插入图片描述

(5)闪光灯亮度相关参数

//vendor/mediatek/proprietary/custom/mt6761/hal/flashlight//flash_tuning_custom_cct.cpp
//--------------------//eng level//index mode//torchp->engLevel.torchDuty = 6;//手电筒亮度//afp->engLevel.afDuty = 6;//对焦闪光灯亮度//pf, mf, normalp->engLevel.pfDuty = 6;//预闪亮度p->engLevel.mfDutyMax = 27;//主闪亮度范围值p->engLevel.mfDutyMin = 0;//...

(6)闪光灯打闪Log分析

(A)main Log查看(3次打闪)

打闪几次可通过如下Log判断。

W TaskMgr : [sendEvent] TaskEvent:TouchAEStart, fgLampflashCond(1)/bCustEnableFlash(1)/bStrobeBVTrigger(1)
W TaskMgr : [sendEvent] TaskEvent:TouchAEStart, fgLampflashCond(1)/bCustEnableFlash(1)/bStrobeBVTrigger(1)
W TaskMgr : [sendEvent] TaskEvent:TouchAEStart, fgLampflashCond(1)/bCustEnableFlash(1)/bStrobeBVTrigger(1)

另可通过如下源码查看调用过程。

//vendor/mediatek/proprietary/hardware/mtkcam/aaa/source/isp_30/ae_mgr/ae_mgr.cppMBOOL AeMgr::IsStrobeBVTrigger()
{MBOOL bStrobeBVTrigger;MINT32 i4Bv = 0;if (m_rAEInitInput.rAEPARAM.strAEParasetting.bEV0TriggerStrobe == MTRUE){// The strobe trigger by the EV 0 indexi4Bv = m_BVvalueWOStrobe;}else{if (m_rAEInitInput.rAEPARAM.pEVValueArray[m_eAEEVcomp]){if (m_pIAeAlgo != NULL){i4Bv = m_BVvalueWOStrobe + m_pIAeAlgo->getSenstivityDeltaIndex(1024 * 1024 / m_rAEInitInput.rAEPARAM.pEVValueArray[m_eAEEVcomp]);}else{i4Bv = m_BVvalueWOStrobe;AE_LOG("[%s()] The AE algo class is NULL, i4SensorDev:%d line:%d\n", __FUNCTION__, m_eSensorDev, __LINE__);}}}bStrobeBVTrigger = (i4Bv < m_CurrentCaptureTable.i4StrobeTrigerBV)?MTRUE:MFALSE;AE_LOG_IF(m_3ALogEnable, "[%s()] i4SensorDev:%d bStrobeBVTrigger:%d BV:%d %d\n", __FUNCTION__, m_eSensorDev, bStrobeBVTrigger, i4Bv, m_CurrentCaptureTable.i4StrobeTrigerBV);return bStrobeBVTrigger;
}

可通过如上Code中的bStrobeBVTrigger字段来查看当前环境值和打闪阈值。

D ae_mgr  : [IsStrobeBVTrigger()] i4SensorDev:1 bStrobeBVTrigger:0 BV:11 -28
D ae_mgr  : [IsStrobeBVTrigger()] i4SensorDev:1 bStrobeBVTrigger:0 BV:10 -28
D ae_mgr  : [IsStrobeBVTrigger()] i4SensorDev:1 bStrobeBVTrigger:1 BV:-36 -28
D ae_mgr  : [IsStrobeBVTrigger()] i4SensorDev:1 bStrobeBVTrigger:0 BV:-2 -28

备注:具体打闪阈值通过效果文件来控制。

//camera_AE_PLineTable_xxxxraw.hstatic constexpr strAETable g_AE_PreviewAutoTable =
{AETABLE_RPEVIEW_AUTO, //eAETableID147, //u4TotalIndex-28, //i4StrobeTrigerBV    //为当前配置的打闪阈值102, //i4MaxBV-44, //i4MinBV, Original:-4590, //i4EffectiveMaxBV-30, //i4EffectiveMinBVLIB3A_AE_ISO_SPEED_AUTO, //ISOsPreviewPLineTable_60Hz,sPreviewPLineTable_50Hz,NULL,
};

(B)kernel Log查看(3次打闪)

//预闪
kernel_log_6__2023_0613_212218:10220: <7>[ 2188.129555]  (0)[7550:3AEventThd]flashlight: _flashlight_ioctl: FLASH_IOC_SET_ONOFF(0,0,0): 1
kernel_log_6__2023_0613_212218:11035: <7>[ 2189.912077]  (2)[7550:3AEventThd]flashlight: _flashlight_ioctl: FLASH_IOC_SET_ONOFF(0,0,0): 0
//主闪
kernel_log_6__2023_0613_212218:11260: <7>[ 2190.348990]  (0)[7467:3ATHREAD]flashlight: _flashlight_ioctl: FLASH_IOC_SET_ONOFF(0,0,0): 1
kernel_log_6__2023_0613_212218:11305: <7>[ 2190.453573]  (3)[7512:CAM_P1]flashlight: _flashlight_ioctl: FLASH_IOC_SET_ONOFF(0,0,0): 0
kernel_log_6__2023_0613_212218:11463: <7>[ 2190.665271]  (1)[7467:3ATHREAD]flashlight: _flashlight_ioctl: FLASH_IOC_SET_ONOFF(0,0,0): 0kernel_log_6__2023_0613_212218:12779: <7>[ 2193.272978]  (1)[7639:3AEventThd]flashlight: _flashlight_ioctl: FLASH_IOC_SET_ONOFF(0,0,0): 1
kernel_log_6__2023_0613_212218:13307: <7>[ 2194.481592]  (3)[7639:3AEventThd]flashlight: _flashlight_ioctl: FLASH_IOC_SET_ONOFF(0,0,0): 0
kernel_log_6__2023_0613_212218:13497: <7>[ 2194.918873]  (0)[7467:3ATHREAD]flashlight: _flashlight_ioctl: FLASH_IOC_SET_ONOFF(0,0,0): 1
kernel_log_6__2023_0613_212218:13542: <7>[ 2195.016548]  (1)[7512:CAM_P1]flashlight: _flashlight_ioctl: FLASH_IOC_SET_ONOFF(0,0,0): 0
kernel_log_6__2023_0613_212218:13705: <7>[ 2195.222145]  (2)[7467:3ATHREAD]flashlight: _flashlight_ioctl: FLASH_IOC_SET_ONOFF(0,0,0): 0kernel_log_6__2023_0613_212218:15349: <7>[ 2198.889098]  (2)[7653:3AEventThd]flashlight: _flashlight_ioctl: FLASH_IOC_SET_ONOFF(0,0,0): 1
kernel_log_6__2023_0613_212218:15942: <7>[ 2200.201315]  (3)[7653:3AEventThd]flashlight: _flashlight_ioctl: FLASH_IOC_SET_ONOFF(0,0,0): 0
kernel_log_6__2023_0613_212218:16129: <7>[ 2200.869104]  (3)[7467:3ATHREAD]flashlight: _flashlight_ioctl: FLASH_IOC_SET_ONOFF(0,0,0): 1
kernel_log_6__2023_0613_212218:16174: <7>[ 2200.967390]  (0)[7512:CAM_P1]flashlight: _flashlight_ioctl: FLASH_IOC_SET_ONOFF(0,0,0): 0
kernel_log_6__2023_0613_212218:16347: <7>[ 2201.322911]  (1)[7467:3ATHREAD]flashlight: _flashlight_ioctl: FLASH_IOC_SET_ONOFF(0,0,0): 0

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

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

相关文章

python- excel 创建/写入/删sheet+花式遍历

文章目录 前言python- excel 创建/写入/删sheet花式遍历1. excel 创建2. 写入excel3. 创建写入excel demo实战4. 删除sheet5. excel 花式遍历 demo实战5.1. 获取 A1的值5.2. 获取指定列的切片数据&#xff0c;获取 B1到B5的值5.3. 循环整个excel的这个sheet5.4. 遍历指定行&…

从零开始学习:如何使用Selenium和Python进行自动化测试?

安装selenium 打开命令控制符输入&#xff1a;pip install -U selenium 火狐浏览器安装firebug&#xff1a;www.firebug.com&#xff0c;调试所有网站语言&#xff0c;调试功能 Selenium IDE 是嵌入到Firefox 浏览器中的一个插件&#xff0c;实现简单的浏览器操 作的录制与回…

【C++ techniques】Reference counting(引用计数)

Reference counting的两个技术动机&#xff1a; 为了简化heap objects周边的簿记工作&#xff0c;当对象运用了引用计数技术&#xff0c;一旦不再有任何人使用它&#xff0c;它便自动销毁自己&#xff0c;也因此&#xff0c;reference counting建构出垃圾回收机制的一个简单形…

Unity2017适配安卓12

测试版本为Unity2017.4.25f1 1.在自定义AndroidManifest.xml&#xff08;位于Assets\Plugins\Android\&#xff09;中添加android:exported"true" <?xml version"1.0" encoding"utf-8"?> <manifestxmlns:android"http://schema…

LuatOS-SOC接口文档(air780E)-- http - http 客户端

示例 -- 使用http库,需要引入sysplus库, 且需要在task内使用 require "sys" require "sysplus"sys.taskInit(function()sys.wait(1000)local code,headers,body http.request("GET", "http://www.example.com/abc").wait()log.info(…

探索 Redis 与 MySQL 的双写问题

在日常的应用开发中&#xff0c;我们经常会遇到需要使用多种不同类型的数据库管理系统来满足各种业务需求。其中最典型的就是Redis和MySQL的组合使用。 这两者拥有各自的优点&#xff0c;例如Redis为高性能的内存数据库提供了极快的读写速度&#xff0c;而MySQL则是非常强大的…

归一化与标准化的区别

文章目录 一、公式二、代码三、区别四、结论 一、公式 归一化 X ′ x − m i n m a x − m i n X { x-min \above{1pt} max-min} X′max−minx−min​ X ′ ′ X ′ ∗ ( m a − m i ) m i X X * (ma-mi) mi X′′X′∗(ma−mi)mi 标准化 X ′ x − m e a n s t d X…

常见的C/C++开源数值计算库

1. Eigen Eigen 是一个线性算术的 C 模板库&#xff0c;包括&#xff1a;vectors, matrices, 以及相关算法。功能强大、快速、优雅以及支持多平台。 2. Blaze Blaze 是一个开源、高性能 C 数学库&#xff0c;用于密集和稀疏算术。凭借其最先进的 智能表达式模板 实现&#x…

选择智慧公厕解决方案,开创智慧城市公共厕所新时代

在城市建设和发展中&#xff0c;公厕作为一个不可或缺的城市基础设施&#xff0c;直接关系到城市形象的提升和居民生活品质的改善。然而&#xff0c;传统的公厕存在着管理不便、卫生状况差、设施陈旧等问题。为了解决这些困扰着城市发展的难题&#xff0c;智慧公厕源头厂家广州…

mysql 信号量(Semaphores)信息

以下是show ENGINE innodb status内容中信号量&#xff08;Semaphores&#xff09;的信息 ---------- SEMAPHORES ---------- OS WAIT ARRAY INFO: reservation count 103550558 OS WAIT ARRAY INFO: signal count 1874952750 RW-shared spins 0, rounds 581651603, OS waits …

视频监控系统/视频汇聚平台EasyCVR如何反向代理进行后端保活?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

【问题总结】级数的括号可以拆吗?

问题 今天在做题的时候发现&#xff0c;括号这个问题时常出现。Σun&#xff0c;Σvn&#xff0c;和Σ&#xff08;unvn&#xff09;&#xff0c;两个级数涉及到了括号增删&#xff0c;Σ(un-1un)&#xff0c;级数钟的前后项的合并也涉及到了括号增删。 总结 添括号定理&…

利用异常实现短期hook

场景1 调用目标call 需要跳过某些判断或者函数 场景2 目标call 只需要部分指令执行 大概实现技术 设置线程上下文设置drX寄存器 实现硬件执行断点 主动调用目标call 通过硬件断点获取寄存器或修改eip 以上实现不改变crc且不通过驱动实现。只对当前执行线程有效&#xff…

Android Termux安装MySQL,并使用cpolar实现公网安全远程连接[内网穿透]

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备&#xff0c;尽管最初并非设计为服务器&#xff0c;但是随着技术的进步我们可以将Android配置为生产力工具&#xff0c;变成一个随身…

2023-10-11 LeetCode每日一题()

2023-10-11每日一题 一、题目编号 2512. 奖励最顶尖的 K 名学生二、题目链接 点击跳转到题目位置 三、题目描述 给你两个字符串数组 positive_feedback 和 negative_feedback &#xff0c;分别包含表示正面的和负面的词汇。不会 有单词同时是正面的和负面的。 一开始&…

docker概念

docker 容器&#xff1a;就是提供在多台主机上运行的应用程序相同的运行环境。 docker的概念 是开源的容器&#xff0c;是由Go语言开发的&#xff0c;是容器里面运用的工具&#xff0c;他是一个轻量级的虚拟机&#xff0c;可以利用docker在多台主机上创建与运行容器。 docke…

全国工商注册数据库的作用

随着经济的发展和市场竞争的加剧&#xff0c;越来越多的人开始关注公司的工商信息。这些信息不仅可以帮助人们了解公司的基本情况&#xff0c;还可以为投资者、合作伙伴、员工等提供决策依据。 工商数据库提供了全国范围内企业的基本信息。这些信息包括企业的名称、统一社会信用…

2018架构真题案例(四十九)

某文件采用多级索引结构&#xff0c;磁盘大小4K字节&#xff0c;每个块号4字节&#xff0c;那么二级索引结果时&#xff0c;文件最大。 A、1024 B、1024*1024 C、2048*2048 D、4096*4096 答案&#xff1a;B 霍尔三维结构以时间堆、&#xff08;&#xff09;堆、知识堆组成…

聊聊Android签名检测7种核心检测方案详解

聊聊Android签名检测总结与反思 背景&#xff1a; 这篇文章只讲Android端签名检测&#xff0c;安卓发展到现在&#xff0c;因为国内环境没有谷歌市场&#xff0c;所以很多官方推荐的Api没法使用 &#xff0c;所以国内的签名检测方式也是“千奇百怪” 。发展至今每种方法都有一…

【ARM Coresight 系列文章 9 -- ETM 介绍 1】

文章目录 ARM Coresight ETM 介绍1.1.1 ARM Coresight ETM 版本介绍1.1.2 ARM Coresight 常见术语1.2 ARM Coresight ETM 常用寄存器介绍1.2.1 TRCVIIECTLR(ViewInst Include-Exclude Control Register)1.2.2 TRCVISSCTLR(ViewInst Start/Stop Processing Element Comparator C…