当前位置:网站首页>Camera2 闪光灯梳理
Camera2 闪光灯梳理
2022-08-04 05:25:00 【vivianluomin】
Camera2 闪光灯
在Android Camrea2中与Flash有关的只有两个字段:
- CaptureRequest.FLAH_MODE
- CaptureRequest.CONTROL_AE_MODE
所有在使用闪光灯时,必须先保证CaptureRequest.CONTROL_MODE为ATUO,而且必须保证CameraCharacteristics.FLASH_INFO_AVAILABLE == true
首先先说说CaptureRequest.FLAH_MODE,这个字段是可以由用户控制的,要使用它的话,还要保证CaptureRequest.CONTROL_AE_MODE的值为ON或者OFF,它有三个值:
- OFF:this catpure 闪光灯关闭
- SINFGLE:this capture 闪光灯打开
- TORCH:闪光灯持续打开
然后再看看CaptureRequest.CONTROL_AE_MODE,用于选择当前自动曝光模式的控件:
通过CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES进行查询支持的模式。
- OFF:自动曝光停用,用户控制曝光,增益,帧时长和闪光。
- ON:标准自动曝光,闪光灯控件停用,用户可以将闪光灯设置为触发或者手电筒模式。
- ON_AUTO_FLASH:标准自动曝光,闪光灯听从HAL指令开启,以进行预拍摄和静像拍摄.不允许用户控制闪光灯的功能。在预拍摄期间可能打开闪光灯,和 如果CaptureRequest.CONTROL_CAPTURE_INTENT被设置为STILL_CAPTURE,闪光灯将一直打开。
- ON_ALWALYS_FLASH:标准自动曝光,闪光灯始终触发以进行拍摄,并听从HAL指令进行预拍摄。不允许用户控制闪光灯的功能。它类似于ON模式,在预拍摄期间可能打开闪光灯,如果CaptureRequest.CONTROL_CAPTURE_INTENT被设置为STILL_CAPTURE,闪光灯将一直打开。
- ON_AUTO_FLASH_REDEYE:标准自动曝光,闪光灯听从HAL指令开启,以进行预拍摄和静像拍摄。在预拍摄序列结束时使用闪光灯连拍,以减轻最终照片中的红眼现象。不允许用户控制闪光灯的功能。如果被相机认为有必要的话,在预拍摄期间,为减少红眼现象的闪光灯会打开。
在AE的状态中,有两个与闪光灯有关的状态:
9. AE_STAET_FLASH_REQUIRED:HAL已聚焦曝光,但认为需要启动闪光灯才能保证亮度充足。用于确定是否可使用零快门延迟帧。
10. AE_STATE_PRECATURE:HAL正在处理预拍序列。根据AE模式,该模式可能包括触发闪光灯以进行测光或发出闪光脉冲以减轻红眼现象
系统摄像机的闪光灯模式
录像
录像情况下,闪光灯的模式很简单,就两个:
- 闪光灯关闭
- 闪光灯打开
拍照:
相对于录像,拍照模式下,闪光灯的设置就多了很多
前置摄像头
- 闪光灯关闭
- 闪光灯自动:
- 亮光条件下:闪光灯不开启。
- 暗光条件下:预览和拍照时闪光灯一直打开
- 闪光灯开启
后置摄像头
- 闪光灯关闭
- 闪光灯自动
- 亮光条件下:闪光灯不开启
- 暗光条件下:预览时闪光灯不打开,对焦时闪光灯打开,拍照时,闪光灯先打开,在闪光拍照。
- 闪光灯在拍照时才打开:在拍照时,闪光灯打开一次
- 闪光灯打开
Camera2 中对闪光灯的设置
对比于系统摄像机的闪光灯模式,在我们自己的APP中的设置:
录像
闪光灯关闭:
对焦正常,前后摄像头切换正常
mCaptureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
mCaptureRequestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF);
闪光灯打开:
对焦正常,前后摄像头切换正常
mCaptureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
mCaptureRequestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_TORCH);
闪光灯自动:
- 前置摄像头:
- 亮光条件下:闪光灯不打开,对焦正常
- 暗光条件下:闪光灯打开,对焦正常
- 后置摄像头:
亮光条件下:闪光灯不打开,对焦正常
暗光条件下:闪光灯不打开,对焦正常,在对焦时,闪光灯打开
mCaptureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
mCaptureRequestBuilder.set(CaptureRequest.FLASH_MODE,CaptureRequest.FLASH_MODE_OFF);
不要忘记设置FLASH_MODE为OFF,否则会影响闪光灯的开启。
拍照
闪光灯关闭
在预览时设置:
mCaptureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
mCaptureRequestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF);
拍照时设置:也可以不用再设置
builder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
builder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
闪光灯打开
预览时设置:
mCaptureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
mCaptureRequestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_TORCH);
拍照时设置:
builder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
builder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_TORCH);
若拍摄时,不设置,会造成拍照时闪光灯关闭。
若拍照时设置为
builder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
会是在拍照时闪光灯关闭。
闪光灯自动
- 前置摄像头:
亮光条件下:
预览时闪光灯不会打开,拍照时闪光灯不打开暗光条件下:
预览和拍照时闪光灯打开。(没有实现出来)
预览时设置:mCaptureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
mCaptureRequestBuilder.set(CaptureRequest.FLASH_MODE,CaptureRequest.FLASH_MODE_OFF);
拍照时设置:
mCaptureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
若拍照时设置 AE_MODE_ON_AUTO_FLASH ,则拍照时闪光灯会关闭。在系统摄像头的表现上应该是闪光灯一直开启。
- 后置摄像头:
亮光条件下: 预览时闪光灯不会打开,拍照时闪光灯不打开
暗光条件下:预览时闪光灯不打开,对焦时闪光灯打开,拍照时闪光灯打开
预览时设置:mCaptureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
mCaptureRequestBuilder.set(CaptureRequest.FLASH_MODE,CaptureRequest.FLASH_MODE_OFF);
拍照时设置:
builder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
闪光灯在拍照时打开
前置摄像头:
预览时闪光灯不打开,拍照时闪光灯打开
预览时设置:mCaptureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
mCaptureRequestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF);
拍照时设置:
builder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
builder.set(CaptureRequest.FLASH_MODE,CaptureRequest.FLASH_MODE_SINGLE);
后置摄像头:
预览时设置:mCaptureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
mCaptureRequestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF);
拍照时设置:
builder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
builder.set(CaptureRequest.FLASH_MODE,CaptureRequest.FLASH_MODE_TORCH);
若拍照时设置为 FLASH_MODE_SINGLE ,在后置摄像头上,第一次拍照亮,后续拍照时闪光灯不亮。
解决方案时:
用后置摄像头拍照时,设置为torch,或者统一设置为torch。
闪光灯减少红眼现象
一般情况下,不需要设置这个,大多数手机不支持。
边栏推荐
- Uni-app 小程序 App 的广告变现之路:全屏视频广告
- MySQL日期函数
- 4.3 Annotation-based declarative transactions and XML-based declarative transactions
- Get the selected content of the radio box
- 注意!软件供应链安全挑战持续升级
- OpenRefine中的正则表达式
- 入坑软件测试的经验与建议
- Interesting Kotlin 0x0E: DeepRecursiveFunction
- CentOS7 —— yum安装mysql
- Write golang simple C2 remote control based on gRPC
猜你喜欢

CentOS7 —— yum安装mysql

MySQL database (basic)

Tactile intelligent sharing - SSD20X realizes upgrade display progress bar

npm报错Beginning October 4, 2021, all connections to the npm registry - including for package installa

MySQL数据库(基础)

字节最爱问的智力题,你会几道?

Shocked, 99.9% of the students didn't really understand the immutability of strings

MySQL log articles, binlog log of MySQL log, detailed explanation of binlog log

一个对象引用的思考

leetcode 12. Integer to Roman numeral
随机推荐
OpenRefine中的正则表达式
处理List<Map<String, String>>类型
解决安装nbextensions后使用Jupyter Notebook时出现template_paths相关错误的问题
[Cocos] cc.sys.browserType可能的属性
el-Select selector bottom fixed
TensorRT例程解读之语义分割demo
word 公式编辑器 键入技巧 | 写数学作业必备速查表
CentOS7 —— yum安装mysql
谷粒商城-基础篇(项目简介&项目搭建)
注意!软件供应链安全挑战持续升级
As soon as flink cdc is started, the CPU of the source Oracle server soars to more than 80%. What is the reason?
C Expert Programming Chapter 4 The Shocking Fact: Arrays and Pointers Are Not the Same 4.3 What is a Declaration and What is a Definition
What are the steps for how to develop a mall system APP?
文献管理工具 | Zotero
力扣:96.不同的二叉搜索树
Landing, the IFC, GFC, FFC concept, layout rules, forming method, use is analysed
如何将 DevSecOps 引入企业?
LCP 17. 速算机器人
Resolved error: npm WARN config global `--global`, `--local` are deprecated
BFC、IFC、GFC、FFC概念理解、布局规则、形成方法、用处浅析