当前位置:网站首页>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。
闪光灯减少红眼现象
一般情况下,不需要设置这个,大多数手机不支持。
边栏推荐
- Chapter 5 C programming expert thinking 5.4 alert Interpositioning of links
- 入坑软件测试的经验与建议
- DP4398:国产兼容替代CS4398立体声24位/192kHz音频解码芯片
- C专家编程 第4章 令人震惊的事实:数组和指针并不相同 4.1 数组并非指针
- C Expert Programming Chapter 4 The Shocking Fact: Arrays and pointers are not the same 4.2 Why does my code not work
- Programming hodgepodge (4)
- (Kettle) pdi-ce-8.2 连接MySQL8.x数据库时驱动问题之终极探讨及解决方法分析
- 处理List<Map<String, String>>类型
- 力扣:63. 不同路径 II
- 字节最爱问的智力题,你会几道?
猜你喜欢
编程大杂烩(四)
8. Custom mapping resultMap
代码重构:面向单元测试
The idea setting recognizes the .sql file type and other file types
npm报错Beginning October 4, 2021, all connections to the npm registry - including for package installa
(Kettle) pdi-ce-8.2 连接MySQL8.x数据库时驱动问题之终极探讨及解决方法分析
7.18 Day23 - the markup language
TSF微服务治理实战系列(一)——治理蓝图
解决错误:npm WARN config global `--global`, `--local` are deprecated
7.13 Day20----MYSQL
随机推荐
Resolved error: npm WARN config global `--global`, `--local` are deprecated
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
嵌入式系统驱动初级【4】——字符设备驱动基础下_并发控制
OpenCV获取和设置图像的平均亮度
Sublime Text 3 2021.8.3 个人配置
《看见新力量》第四期免费下载!走进十五位科技创业者的精彩故事
Grain Mall - Basics (Project Introduction & Project Construction)
少年成就黑客,需要这些技能
如何将 DevSecOps 引入企业?
OpenRefine开源数据清洗软件的GREL语言
Dynamic programming of the division of numbers
sql server如何得到本条记录与上一条记录的差异,即变动值
4.1 JdbcTemplate for declarative transactions
The idea setting recognizes the .sql file type and other file types
编程大杂烩(三)
4.3 Annotation-based declarative transactions and XML-based declarative transactions
8款最佳实践,保护你的 IaC 安全!
OpenRefine中的正则表达式
字节最爱问的智力题,你会几道?
SLSA 框架与软件供应链安全防护