summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/hardware/camera2/CameraManager.java3
-rw-r--r--core/java/android/hardware/camera2/impl/CameraDeviceImpl.java23
2 files changed, 24 insertions, 2 deletions
diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java
index e8e989f20ef7..f61032ef8250 100644
--- a/core/java/android/hardware/camera2/CameraManager.java
+++ b/core/java/android/hardware/camera2/CameraManager.java
@@ -290,7 +290,8 @@ public final class CameraManager {
cameraId,
callback,
handler,
- characteristics);
+ characteristics,
+ mContext.getApplicationInfo().targetSdkVersion);
ICameraDeviceCallbacks callbacks = deviceImpl.getCallbacks();
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
index e75b3758a31e..ab87f15d8794 100644
--- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
@@ -36,6 +36,7 @@ import android.hardware.camera2.params.StreamConfigurationMap;
import android.hardware.camera2.utils.SubmitInfo;
import android.hardware.camera2.utils.SurfaceUtils;
import android.hardware.ICameraService;
+import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
@@ -118,6 +119,8 @@ public class CameraDeviceImpl extends CameraDevice
private CameraCaptureSessionCore mCurrentSession;
private int mNextSessionId = 0;
+ private final int mAppTargetSdkVersion;
+
// Runnables for all state transitions, except error, which needs the
// error code argument
@@ -234,7 +237,7 @@ public class CameraDeviceImpl extends CameraDevice
};
public CameraDeviceImpl(String cameraId, StateCallback callback, Handler handler,
- CameraCharacteristics characteristics) {
+ CameraCharacteristics characteristics, int appTargetSdkVersion) {
if (cameraId == null || callback == null || handler == null || characteristics == null) {
throw new IllegalArgumentException("Null argument given");
}
@@ -242,6 +245,7 @@ public class CameraDeviceImpl extends CameraDevice
mDeviceCallback = callback;
mDeviceHandler = handler;
mCharacteristics = characteristics;
+ mAppTargetSdkVersion = appTargetSdkVersion;
final int MAX_TAG_LEN = 23;
String tag = String.format("CameraDevice-JV-%s", mCameraId);
@@ -671,6 +675,16 @@ public class CameraDeviceImpl extends CameraDevice
}
}
+ private void overrideEnableZsl(CameraMetadataNative request, boolean newValue) {
+ Boolean enableZsl = request.get(CaptureRequest.CONTROL_ENABLE_ZSL);
+ if (enableZsl == null) {
+ // If enableZsl is not available, don't override.
+ return;
+ }
+
+ request.set(CaptureRequest.CONTROL_ENABLE_ZSL, newValue);
+ }
+
@Override
public CaptureRequest.Builder createCaptureRequest(int templateType)
throws CameraAccessException {
@@ -681,6 +695,13 @@ public class CameraDeviceImpl extends CameraDevice
templatedRequest = mRemoteDevice.createDefaultRequest(templateType);
+ // If app target SDK is older than O, or it's not a still capture template, enableZsl
+ // must be false in the default request.
+ if (mAppTargetSdkVersion < Build.VERSION_CODES.O ||
+ templateType != TEMPLATE_STILL_CAPTURE) {
+ overrideEnableZsl(templatedRequest, false);
+ }
+
CaptureRequest.Builder builder = new CaptureRequest.Builder(
templatedRequest, /*reprocess*/false, CameraCaptureSession.SESSION_ID_NONE);