From b7fb257b4b4feb36a0ba5a9c8cfab0cf0c3b0884 Mon Sep 17 00:00:00 2001 From: Ravneet Dhanjal Date: Fri, 6 Jan 2023 06:48:13 +0000 Subject: [PATCH] Fix CTS extension errors - Add null check for capture and repeating surface targets before checking whether they are contained in the request target to prevent incorrect validation of the capture request targets - Prevent checking validity of the postview surface if one is not requested to fix incorrect 'postview feature is not available' error Test: CTS test Bug: 264321351 Change-Id: Ia8a4a2d12d3ec6748c3bf2004159306127985dd8 --- .../CameraAdvancedExtensionSessionImpl.java | 21 ++++++++++++------- .../impl/CameraExtensionSessionImpl.java | 20 +++++++++++------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java index 2d591c33a7c1c..9437ea76180a4 100644 --- a/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java @@ -176,7 +176,7 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes } Surface postviewSurface = null; - if (burstCaptureSurface != null) { + if (burstCaptureSurface != null && config.getPostviewOutputConfiguration() != null) { CameraExtensionUtils.SurfaceInfo burstCaptureSurfaceInfo = CameraExtensionUtils.querySurface(burstCaptureSurface); Size burstCaptureSurfaceSize = @@ -193,8 +193,7 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes postviewSurface = CameraExtensionUtils.getPostviewSurface( config.getPostviewOutputConfiguration(), supportedPostviewSizes, burstCaptureSurfaceInfo.mFormat); - - if ((config.getPostviewOutputConfiguration() != null) && (postviewSurface == null)) { + if (postviewSurface == null) { throw new IllegalArgumentException("Unsupported output surface for postview!"); } } @@ -456,11 +455,17 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes } private void validateCaptureRequestTargets(@NonNull CaptureRequest request) { - if ((request.getTargets().size() == 1) && - (!request.containsTarget(mClientRepeatingRequestSurface) || - !request.containsTarget(mClientCaptureSurface))) { - throw new IllegalArgumentException("Target output combination requested is " + - "not supported!"); + if (request.getTargets().size() == 1) { + boolean containsCaptureTarget = + mClientCaptureSurface != null && request.containsTarget(mClientCaptureSurface); + boolean containsRepeatingTarget = + mClientRepeatingRequestSurface != null && + request.containsTarget(mClientRepeatingRequestSurface); + + if (!containsCaptureTarget && !containsRepeatingTarget) { + throw new IllegalArgumentException("Target output combination requested is " + + "not supported!"); + } } if ((request.getTargets().size() == 2) && diff --git a/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java index 5b84ec05cafd5..ed48a6dc25be1 100644 --- a/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java @@ -200,7 +200,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { } Surface postviewSurface = null; - if (burstCaptureSurface != null) { + if (burstCaptureSurface != null && config.getPostviewOutputConfiguration() != null) { CameraExtensionUtils.SurfaceInfo burstCaptureSurfaceInfo = CameraExtensionUtils.querySurface(burstCaptureSurface); Size burstCaptureSurfaceSize = @@ -218,7 +218,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { config.getPostviewOutputConfiguration(), supportedPostviewSizes, burstCaptureSurfaceInfo.mFormat); - if ((config.getPostviewOutputConfiguration() != null) && (postviewSurface == null)) { + if (postviewSurface == null) { throw new IllegalArgumentException("Unsupported output surface for postview!"); } } @@ -717,11 +717,17 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { } private void validateCaptureRequestTargets(@NonNull CaptureRequest request) { - if ((request.getTargets().size() == 1) && - (!request.containsTarget(mClientRepeatingRequestSurface) || - !request.containsTarget(mClientCaptureSurface))) { - throw new IllegalArgumentException("Target output combination requested is " + - "not supported!"); + if (request.getTargets().size() == 1) { + boolean containsCaptureTarget = + mClientCaptureSurface != null && request.containsTarget(mClientCaptureSurface); + boolean containsRepeatingTarget = + mClientRepeatingRequestSurface != null && + request.containsTarget(mClientRepeatingRequestSurface); + + if (!containsCaptureTarget && !containsRepeatingTarget) { + throw new IllegalArgumentException("Target output combination requested is " + + "not supported!"); + } } if ((request.getTargets().size() == 2) &&