1.什么是camera2?
camera2是google在安卓5.0推出的新的相机API,在camera2 API之前,任何设备的摄像头功能都是非常有限的。相机应用程序可以用来预览、捕捉图像和拍摄视频。通过使用Camera2API,Google为相机开发人员提供了更多使用相机的选项。控制快门速度(ISO),对焦,原始捕捉等。这有助于第三方开发人员使用API提供的工具在应用程序中包含更多功能。
android.hardware.camera2包为连接到Android的各个相机设备提供接口。 它取代了已弃用的Camera类。该软件包将摄像机设备建模为管道,根据请求捕获单个图像帧,然后输出一个捕获结果元数据包,或者一组请求的输出图像缓冲区。 请求按顺序执行,在保证安卓设备完全帧率的前提下,可以多个请求一起执行。多个请求在该管道的不同阶段执行。
2.设备对camera2的支持
Google自己的设备Pixel&Nexus完全支持Camera2API,三星、联想、LG、One Plus都推出了完全支持的Camera2 API的型号。但一些制造商,即使是他们的旗舰设备,还没有一个完全支持的Camera2 API设备。
there are also a few major smartphone OEMs that yet have to offer full Camera2 support for their flagships, the most prominent black sheep being Huawei with its P & Mate series...
也有一些主要的智能手机设备制造商不为他们的旗舰提供完全的Camera 2支持,最突出的害群之马是华为的P&Mate系列...
谷歌将多种功能汇总到一个字段中,得到摄像机设备级别的一个高级描述字段。每一个级别都为前一个级别添加其他功能,其级别为 LEGACY < LIMITED < FULL < LEVEL_3
通过以下代码获取相机设备支持级别:
CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
for (String cameraId : manager.getCameraIdList()) {
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
int deviceLevel=characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
if (deviceLevel == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY) {
}else if...
}
- LEGACY:设备在较旧的Android设备上以向后兼容模式运行,并且功能非常有限。有限的设备代表基线功能集,也可能包含FULL子集的附加功能(可以理解为包含camera的功能)。
- FULL:设备还支持传感器,闪光灯,镜头和每帧手动控制,以及高速率的图像捕获。
- LEVEL_3:设备还支持YUV重新处理和RAW图像捕获,以及其他输出流配置。
- EXTERNAL:设备类似于有限设备,例如某些传感器或镜头信息未重新排列或帧稳定性较差。
官方说明 INFO_SUPPORTED_HARDWARE_LEVE
- 快速获得不同手机设备的支持情况
March Media Labs 提供了一款app Camera2 API Probe可以方便查看支持情况,非攀爬者也可以通过扫描以下二维码下载。
通过克隆谷歌googlesamples Camera2Raw 代码对比两个设备后置摄像头支持情况。
在MI 8se上运行成功,在oppo R11上崩溃。
4 . 写在后面
一些设备生产商在Rom中内置了Camera 2 API,但是禁用了。可以在Build.Prop中启用Camera 2 API。
persist.camera.HAL3.enabled=1
有一定的概率获得camera2的支持,如果你的设备支持为LEGACY,还是用camera进行开发吧(虽然有根横线不爽)。对于一般应用开发者(非rom厂或launcher厂)camera依然是你最好的选择。
当然也可以了解一下camera2包的使用:
android-Camera2Basic
android-Camera2Raw
Understanding Camera2 API from callbacks (Part 1)
Understanding Camera2 API from callbacks(Part 2)