diff options
| -rw-r--r-- | core/java/android/hardware/camera2/CameraManager.java | 3 | ||||
| -rw-r--r-- | core/java/android/hardware/camera2/impl/CameraDeviceImpl.java | 23 |
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); |