From 506acca748d12525e2a6aae4c054113425c04907 Mon Sep 17 00:00:00 2001
From: Emilian Peev
Date: Tue, 12 Mar 2019 18:00:42 -0700
Subject: [PATCH] Camera: Add low latency suggested use case
Extend the recommended configuration map use cases
with additional entry for low latency snapshots.
The map could be absent in case devices are not able
to support such low latency requests.
Bug: 128450197
Test: Camera CTS
Change-Id: Ica9285978aeb40fce636f519f38488ac539c0bce
---
api/current.txt | 1 +
.../hardware/camera2/CameraCharacteristics.java | 3 ++-
.../camera2/impl/CameraMetadataNative.java | 7 +++++--
.../params/RecommendedStreamConfigurationMap.java | 14 +++++++++++++-
4 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/api/current.txt b/api/current.txt
index d1b77f2c10960..c40346f08d128 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -17376,6 +17376,7 @@ package android.hardware.camera2.params {
method @Nullable public java.util.Set getValidOutputFormatsForInput(int);
method public boolean isOutputSupportedFor(int);
method public boolean isOutputSupportedFor(@NonNull android.view.Surface);
+ field public static final int USECASE_LOW_LATENCY_SNAPSHOT = 6; // 0x6
field public static final int USECASE_PREVIEW = 0; // 0x0
field public static final int USECASE_RAW = 5; // 0x5
field public static final int USECASE_RECORD = 1; // 0x1
diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java
index 7ae673c1ededd..c39796b881ca0 100644
--- a/core/java/android/hardware/camera2/CameraCharacteristics.java
+++ b/core/java/android/hardware/camera2/CameraCharacteristics.java
@@ -336,6 +336,7 @@ public final class CameraCharacteristics extends CameraMetadata{@link RecommendedStreamConfigurationMap#USECASE_SNAPSHOT}
* {@link RecommendedStreamConfigurationMap#USECASE_RAW}
* {@link RecommendedStreamConfigurationMap#USECASE_ZSL}
+ * {@link RecommendedStreamConfigurationMap#USECASE_LOW_LATENCY_SNAPSHOT}
*
*
*
@@ -400,7 +401,7 @@ public final class CameraCharacteristics extends CameraMetadata= RecommendedStreamConfigurationMap.USECASE_PREVIEW) &&
- (usecase <= RecommendedStreamConfigurationMap.USECASE_RAW)) ||
+ (usecase <= RecommendedStreamConfigurationMap.USECASE_LOW_LATENCY_SNAPSHOT)) ||
((usecase >= RecommendedStreamConfigurationMap.USECASE_VENDOR_START) &&
(usecase < RecommendedStreamConfigurationMap.MAX_USECASE_COUNT))) {
if (mRecommendedConfigurations == null) {
diff --git a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
index 1cdf23530ddc4..e909c0075f383 100644
--- a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
+++ b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
@@ -1113,8 +1113,10 @@ public class CameraMetadataNative implements Parcelable {
depthStreamDurationList.get(i), depthStreamStallList.get(i), depthScData);
}
- if ((scData.streamConfigurationArray == null) &&
- (depthScData.streamConfigurationArray == null)) {
+ if ((scData.streamConfigurationArray == null ||
+ scData.streamConfigurationArray.length == 0) &&
+ (depthScData.streamConfigurationArray == null ||
+ depthScData.streamConfigurationArray.length == 0)) {
recommendedConfigurations.add(null);
continue;
}
@@ -1125,6 +1127,7 @@ public class CameraMetadataNative implements Parcelable {
switch (i) {
case RecommendedStreamConfigurationMap.USECASE_PREVIEW:
case RecommendedStreamConfigurationMap.USECASE_RAW:
+ case RecommendedStreamConfigurationMap.USECASE_LOW_LATENCY_SNAPSHOT:
case RecommendedStreamConfigurationMap.USECASE_VIDEO_SNAPSHOT:
map = new StreamConfigurationMap(scData.streamConfigurationArray,
scData.minDurationArray, scData.stallDurationArray,
diff --git a/core/java/android/hardware/camera2/params/RecommendedStreamConfigurationMap.java b/core/java/android/hardware/camera2/params/RecommendedStreamConfigurationMap.java
index 068c0ce8d0525..b659c86f7e0f1 100644
--- a/core/java/android/hardware/camera2/params/RecommendedStreamConfigurationMap.java
+++ b/core/java/android/hardware/camera2/params/RecommendedStreamConfigurationMap.java
@@ -136,6 +136,17 @@ public final class RecommendedStreamConfigurationMap {
*/
public static final int USECASE_RAW = 0x5;
+ /**
+ * The recommended stream configuration map for use case low latency snapshot must contain
+ * subset of configurations with end-to-end latency that does not exceed 200 ms. under standard
+ * operating conditions (reasonable light levels, not loaded system). The expected output format
+ * will be primarily {@link android.graphics.ImageFormat#JPEG} however other image formats can
+ * be present as well. Even if available for the camera device, high speed and input
+ * configurations will be absent. This suggested configuration map may be absent on some devices
+ * that can not support any low latency requests.
+ */
+ public static final int USECASE_LOW_LATENCY_SNAPSHOT = 0x6;
+
/**
* Device specific use cases.
* @hide
@@ -150,7 +161,8 @@ public final class RecommendedStreamConfigurationMap {
USECASE_VIDEO_SNAPSHOT,
USECASE_SNAPSHOT,
USECASE_ZSL,
- USECASE_RAW })
+ USECASE_RAW,
+ USECASE_LOW_LATENCY_SNAPSHOT})
public @interface RecommendedUsecase {};
/**