Android:如何检查设备是否实现了 Camera2 api 功能?
Android: How can I check if a device has Camera2 api features implemented or not?
嗯,我如何检查 android 设备是否实现了 Camera2 api 功能? camera2 api 中有许多新功能,例如手动控制。那么我如何知道是否以编程方式实现了哪些 Camera2 api 功能?
实际上,检查 API 版本 21+ 就可以了。 camera2 API,包括 CameraManager
是系统的一部分,不依赖于现有的硬件。所以你总是可以向 CameraManager
询问 CameraDevice
的列表,然后你可以单独查询。
但是,我认为您的实际意思是 "how can I tell if I can set photographic parameters manually using the camera2 API?", 取决于您拥有的设备。这取决于您需要什么控制,但是您可以通过获取 REQUEST_AVAILABLE_CAPABILITIES
metadata field 来收集您需要的信息。提示:寻找 MANUAL_SENSOR
.
确实,camera2 api 只支持 API 级别 21。但是仅此检查是不够的。有 API 级别 21 的设备,但仅部分支持相机 2。要检查这一点,您应该检查 CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL 的值。它可以是 FULL、LEGACY 或 LIMITED。
详情请点击此处:https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html
获取方法如下:
CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
for (String cameraId : manager.getCameraIdList()) {
CameraCharacteristics characteristics
= manager.getCameraCharacteristics(cameraId);
Log.d("Img", "INFO_SUPPORTED_HARDWARE_LEVEL " + characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL));
}
安装应用:手动相机兼容性。它检查手动对焦、WB、ISO、快门速度和 RAW 支持。全部通过 camera2 HAL 驱动程序曝光。我已经在 AT&T 商店安装了上面的程序,以便在购买前检查手机。了解您是否购买昨天型号的好方法。
https://play.google.com/store/apps/details?id=pl.vipek.camera2_compatibility_test&hl=en
如果有人需要如何确定设备中哪个摄像头支持 Camera2 API 的完整代码段(至少是有限的支持):
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public boolean allowCamera2Support(int cameraId) {
CameraManager manager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);
try {
String cameraIdS = manager.getCameraIdList()[cameraId];
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraIdS);
int support = characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
if( support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY )
Log.d(TAG, "Camera " + cameraId + " has LEGACY Camera2 support");
else if( support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED )
Log.d(TAG, "Camera " + cameraId + " has LIMITED Camera2 support");
else if( support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_FULL )
Log.d(TAG, "Camera " + cameraId + " has FULL Camera2 support");
else
Log.d(TAG, "Camera " + cameraId + " has unknown Camera2 support?!");
return support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED || support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_FULL;
}
catch (CameraAccessException e) {
e.printStackTrace();
}
return false;
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void checkCamera2Support() {
if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ) {
int numberOfCameras = 0;
CameraManager manager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);
try {
numberOfCameras = manager.getCameraIdList().length;
} catch (CameraAccessException e) {
e.printStackTrace();
} catch(AssertionError e) {
e.printStackTrace();
}
if( numberOfCameras == 0 ) {
Log.d(TAG, "0 cameras");
}else {
for (int i = 0; i < numberOfCameras; i++) {
if (!allowCamera2Support(i)) {
Log.d(TAG, "camera " + i + " doesn't have limited or full support for Camera2 API");
}else{
// here you can get ids of cameras that have limited or full support for Camera2 API
}
}
}
}
}
另一个项目我也需要这个,所以我编写了一个小应用程序来探测所有 camera2 功能并显示哪些功能在 phone 上可用:https://play.google.com/store/apps/details?id=de.weis.camera2probe
您可以在应用程序内通过电子邮件发送此报告。我在这里列出我收到的所有报告:https://github.com/TobiasWeis/android-camera2probe/wiki
(app的代码也在那里,以防有人需要集成到自己的项目中)
安装应用 A Better Camera。您将能够检查它是完整的、遗留的、有限的还是 mot 支持者。
这就是我如何找到 Samsung galaxy Tab 3 SMT820 iscamera2 api full.
相机 API2
相机 API2 框架向应用公开 lower-level 相机控制,包括高效的 zero-copy burst/streaming 流程和 per-frame 曝光、增益、白平衡增益控制,颜色转换、去噪、锐化等。有关详细信息,请观看 Google I/O 视频概述。
Android 5.0 及更高版本包括 Camera API2;但是,设备 运行 Android 5.0 及更高版本可能不支持所有 Camera API2 功能。应用程序可以通过 Camera API2 接口查询的 android.info.supportedHardwareLevel 属性 报告以下支持级别之一:
LEGACY: These devices expose capabilities to apps through the Camera API2 interfaces that are approximately the same capabilities as those exposed to apps through the Camera API1 interfaces. The legacy frameworks code conceptually translates Camera API2 calls into Camera API1 calls; legacy devices do not support Camera API2 features such as per-frame controls.
LIMITED: These devices support some Camera API2 capabilities (but not all) and must use Camera HAL 3.2 or later.
FULL: These devices support all of major capabilities of Camera API2 and must use Camera HAL 3.2 or later and Android 5.0 or later.
LEVEL_3: These devices support YUV reprocessing and RAW image capture, along with additional output stream configurations.
EXTERNAL: These devices are similar to LIMITED devices with some exceptions; for example, some sensor or lens information may not be reported or have less stable frame rates. This level is used for external cameras such as USB webcams.
这篇What is Camera2 API? Check if your Smartphone supports it或许可以帮助您找到答案!
嗯,我如何检查 android 设备是否实现了 Camera2 api 功能? camera2 api 中有许多新功能,例如手动控制。那么我如何知道是否以编程方式实现了哪些 Camera2 api 功能?
实际上,检查 API 版本 21+ 就可以了。 camera2 API,包括 CameraManager
是系统的一部分,不依赖于现有的硬件。所以你总是可以向 CameraManager
询问 CameraDevice
的列表,然后你可以单独查询。
但是,我认为您的实际意思是 "how can I tell if I can set photographic parameters manually using the camera2 API?", 取决于您拥有的设备。这取决于您需要什么控制,但是您可以通过获取 REQUEST_AVAILABLE_CAPABILITIES
metadata field 来收集您需要的信息。提示:寻找 MANUAL_SENSOR
.
确实,camera2 api 只支持 API 级别 21。但是仅此检查是不够的。有 API 级别 21 的设备,但仅部分支持相机 2。要检查这一点,您应该检查 CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL 的值。它可以是 FULL、LEGACY 或 LIMITED。 详情请点击此处:https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html
获取方法如下:
CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
for (String cameraId : manager.getCameraIdList()) {
CameraCharacteristics characteristics
= manager.getCameraCharacteristics(cameraId);
Log.d("Img", "INFO_SUPPORTED_HARDWARE_LEVEL " + characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL));
}
安装应用:手动相机兼容性。它检查手动对焦、WB、ISO、快门速度和 RAW 支持。全部通过 camera2 HAL 驱动程序曝光。我已经在 AT&T 商店安装了上面的程序,以便在购买前检查手机。了解您是否购买昨天型号的好方法。
https://play.google.com/store/apps/details?id=pl.vipek.camera2_compatibility_test&hl=en
如果有人需要如何确定设备中哪个摄像头支持 Camera2 API 的完整代码段(至少是有限的支持):
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public boolean allowCamera2Support(int cameraId) {
CameraManager manager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);
try {
String cameraIdS = manager.getCameraIdList()[cameraId];
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraIdS);
int support = characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
if( support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY )
Log.d(TAG, "Camera " + cameraId + " has LEGACY Camera2 support");
else if( support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED )
Log.d(TAG, "Camera " + cameraId + " has LIMITED Camera2 support");
else if( support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_FULL )
Log.d(TAG, "Camera " + cameraId + " has FULL Camera2 support");
else
Log.d(TAG, "Camera " + cameraId + " has unknown Camera2 support?!");
return support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED || support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_FULL;
}
catch (CameraAccessException e) {
e.printStackTrace();
}
return false;
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void checkCamera2Support() {
if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ) {
int numberOfCameras = 0;
CameraManager manager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);
try {
numberOfCameras = manager.getCameraIdList().length;
} catch (CameraAccessException e) {
e.printStackTrace();
} catch(AssertionError e) {
e.printStackTrace();
}
if( numberOfCameras == 0 ) {
Log.d(TAG, "0 cameras");
}else {
for (int i = 0; i < numberOfCameras; i++) {
if (!allowCamera2Support(i)) {
Log.d(TAG, "camera " + i + " doesn't have limited or full support for Camera2 API");
}else{
// here you can get ids of cameras that have limited or full support for Camera2 API
}
}
}
}
}
另一个项目我也需要这个,所以我编写了一个小应用程序来探测所有 camera2 功能并显示哪些功能在 phone 上可用:https://play.google.com/store/apps/details?id=de.weis.camera2probe
您可以在应用程序内通过电子邮件发送此报告。我在这里列出我收到的所有报告:https://github.com/TobiasWeis/android-camera2probe/wiki (app的代码也在那里,以防有人需要集成到自己的项目中)
安装应用 A Better Camera。您将能够检查它是完整的、遗留的、有限的还是 mot 支持者。 这就是我如何找到 Samsung galaxy Tab 3 SMT820 iscamera2 api full.
相机 API2
相机 API2 框架向应用公开 lower-level 相机控制,包括高效的 zero-copy burst/streaming 流程和 per-frame 曝光、增益、白平衡增益控制,颜色转换、去噪、锐化等。有关详细信息,请观看 Google I/O 视频概述。
Android 5.0 及更高版本包括 Camera API2;但是,设备 运行 Android 5.0 及更高版本可能不支持所有 Camera API2 功能。应用程序可以通过 Camera API2 接口查询的 android.info.supportedHardwareLevel 属性 报告以下支持级别之一:
LEGACY: These devices expose capabilities to apps through the Camera API2 interfaces that are approximately the same capabilities as those exposed to apps through the Camera API1 interfaces. The legacy frameworks code conceptually translates Camera API2 calls into Camera API1 calls; legacy devices do not support Camera API2 features such as per-frame controls.
LIMITED: These devices support some Camera API2 capabilities (but not all) and must use Camera HAL 3.2 or later.
FULL: These devices support all of major capabilities of Camera API2 and must use Camera HAL 3.2 or later and Android 5.0 or later.
LEVEL_3: These devices support YUV reprocessing and RAW image capture, along with additional output stream configurations.
EXTERNAL: These devices are similar to LIMITED devices with some exceptions; for example, some sensor or lens information may not be reported or have less stable frame rates. This level is used for external cameras such as USB webcams.
这篇What is Camera2 API? Check if your Smartphone supports it或许可以帮助您找到答案!