当前位置:网站首页>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。
闪光灯减少红眼现象
一般情况下,不需要设置这个,大多数手机不支持。
边栏推荐
- C专家编程 第4章 令人震惊的事实:数组和指针并不相同 4.3 什么是声明,什么是定义
- EntityComponentSystemSamples学习笔记
- C Expert Programming Chapter 5 Thinking about Chaining 5.6 Take it easy --- see who's talking: take the Turning quiz
- day13--postman interface test
- MySQL数据库(基础)
- BFC、IFC、GFC、FFC概念理解、布局规则、形成方法、用处浅析
- FPGA学习笔记——知识点总结
- 入坑软件测试的经验与建议
- 腾讯136道高级岗面试题:多线程+算法+Redis+JVM
- OpenRefine开源数据清洗软件的GREL语言
猜你喜欢
随机推荐
在被面试官说了无数次后,终于潜下心来整理了一下JVM的类加载器
8.03 Day34---BaseMapper查询语句用法
Uni-app 小程序 App 的广告变现之路:全屏视频广告
7.18 Day23----标记语言
The difference between px, em, and rem
MySQL数据库面试题总结(2022最新版)
leetcode 12. Integer to Roman numeral
What are the functions of mall App development?
想好了吗?
Towards Real-Time Multi-Object Tracking (JDE)
部署LVS-DR群集【实验】
Shocked, 99.9% of the students didn't really understand the immutability of strings
力扣题解8/3
C Expert Programming Chapter 4 The Shocking Fact: Arrays and pointers are not the same 4.4 Matching declarations to definitions
7. Execution of special SQL
BFC、IFC、GFC、FFC概念理解、布局规则、形成方法、用处浅析
嵌入式系统驱动初级【4】——字符设备驱动基础下_并发控制
读者让我总结一波 redis 面试题,现在肝出来了
MySql data recovery method personal summary
Interesting Kotlin 0x0E: DeepRecursiveFunction