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
gugelfrei
Chien-Yu Chen 7 years ago
parent 82d6adc7a0
commit fa52c0fd3c

@ -72,6 +72,20 @@ status_t Camera2Client::initialize(sp<CameraProviderManager> manager) {
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 @@ status_t Camera2Client::initializeImpl(TProviderPtr providerPtr)
__FUNCTION__, mCameraId, strerror(-res), res);
return NO_INIT;
}
l.mParameters.isDeviceZslSupported = isZslEnabledInStillTemplate();
}
String8 threadName;

@ -224,6 +224,8 @@ private:
template<typename TProviderPtr>
status_t initializeImpl(TProviderPtr providerPtr);
bool isZslEnabledInStillTemplate();
};
}; // namespace android

@ -954,7 +954,8 @@ status_t Parameters::initialize(const CameraMetadata *info, int deviceVersion) {
}
}
if (slowJpegMode || property_get_bool("camera.disable_zsl_mode", false)) {
if (isDeviceZslSupported || slowJpegMode ||
property_get_bool("camera.disable_zsl_mode", false)) {
ALOGI("Camera %d: Disabling ZSL mode", cameraId);
allowZslMode = false;
} else {
@ -1997,7 +1998,8 @@ status_t Parameters::set(const String8& paramString) {
if (previewFpsRange[1] > 1e9/minFrameDurationNs + FPS_MARGIN) {
slowJpegMode = true;
}
if (slowJpegMode || property_get_bool("camera.disable_zsl_mode", false)) {
if (isDeviceZslSupported || slowJpegMode ||
property_get_bool("camera.disable_zsl_mode", false)) {
allowZslMode = false;
} else {
allowZslMode = isZslReprocessPresent;

@ -175,6 +175,8 @@ struct Parameters {
bool slowJpegMode;
// Whether ZSL reprocess is supported by the device.
bool isZslReprocessPresent;
// Whether the device supports enableZsl.
bool isDeviceZslSupported;
// Overall camera state
enum State {

Loading…
Cancel
Save