camera: Use device level ZSL if supported
If enableZsl is enabled in still capture template, disable ZSL in
the framework and use device level ZSL instead.
Test: CTS
Bug: 64117056
Change-Id: Ia7f7e3b0212419a12bc1ccb3f708f527b8a0b12c
diff --git a/services/camera/libcameraservice/api1/Camera2Client.cpp b/services/camera/libcameraservice/api1/Camera2Client.cpp
index a28518e..2cf648f 100644
--- a/services/camera/libcameraservice/api1/Camera2Client.cpp
+++ b/services/camera/libcameraservice/api1/Camera2Client.cpp
@@ -72,6 +72,20 @@
return initializeImpl(manager);
}
+bool Camera2Client::isZslEnabledInStillTemplate() {
+ bool zslEnabled = false;
+ CameraMetadata stillTemplate;
+ status_t res = mDevice->createDefaultRequest(CAMERA2_TEMPLATE_STILL_CAPTURE, &stillTemplate);
+ if (res == OK) {
+ camera_metadata_entry_t enableZsl = stillTemplate.find(ANDROID_CONTROL_ENABLE_ZSL);
+ if (enableZsl.count == 1) {
+ zslEnabled = (enableZsl.data.u8[0] == ANDROID_CONTROL_ENABLE_ZSL_TRUE);
+ }
+ }
+
+ return zslEnabled;
+}
+
template<typename TProviderPtr>
status_t Camera2Client::initializeImpl(TProviderPtr providerPtr)
{
@@ -93,6 +107,8 @@
__FUNCTION__, mCameraId, strerror(-res), res);
return NO_INIT;
}
+
+ l.mParameters.isDeviceZslSupported = isZslEnabledInStillTemplate();
}
String8 threadName;