summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Justin Yun <justinyun@google.com> 2018-05-18 20:39:45 +0900
committer Justin Yun <justinyun@google.com> 2018-05-18 21:27:05 +0900
commitf01e40c5e1a2dc708809d130652e33d8336026cf (patch)
treedf05dd9b34e0233f3c2cb2fddddd61812f117c4a
parent2b3c858296d34741e32c03b144b14f9532b19bb2 (diff)
Camera: Use fallback key if the requested key returns null
If the key returns null, try with the fallback key to get the values. This is to support old key names for old camera hals. Bug: 79183654 Test: Launch GCA in P and P+OMR1 walleye devices. Change-Id: I1d55cc53b159401d4cd47da9a02f174cb6cb9e5e
-rw-r--r--core/java/android/hardware/camera2/CameraCharacteristics.java9
-rw-r--r--core/java/android/hardware/camera2/CaptureResult.java9
-rw-r--r--core/java/android/hardware/camera2/impl/CameraMetadataNative.java31
3 files changed, 48 insertions, 1 deletions
diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java
index 4279b1972058..87c64cd12903 100644
--- a/core/java/android/hardware/camera2/CameraCharacteristics.java
+++ b/core/java/android/hardware/camera2/CameraCharacteristics.java
@@ -81,6 +81,15 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
*
* @hide
*/
+ public Key(String name, String fallbackName, Class<T> type) {
+ mKey = new CameraMetadataNative.Key<T>(name, fallbackName, type);
+ }
+
+ /**
+ * Visible for testing and vendor extensions only.
+ *
+ * @hide
+ */
public Key(String name, Class<T> type) {
mKey = new CameraMetadataNative.Key<T>(name, type);
}
diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java
index c1566161eb6c..6439338428ee 100644
--- a/core/java/android/hardware/camera2/CaptureResult.java
+++ b/core/java/android/hardware/camera2/CaptureResult.java
@@ -87,6 +87,15 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
*
* @hide
*/
+ public Key(String name, String fallbackName, Class<T> type) {
+ mKey = new CameraMetadataNative.Key<T>(name, fallbackName, type);
+ }
+
+ /**
+ * Visible for testing and vendor extensions only.
+ *
+ * @hide
+ */
public Key(String name, Class<T> type) {
mKey = new CameraMetadataNative.Key<T>(name, type);
}
diff --git a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
index e4b1339fd663..4baf2638d888 100644
--- a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
+++ b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
@@ -84,6 +84,7 @@ public class CameraMetadataNative implements Parcelable {
private final Class<T> mType;
private final TypeReference<T> mTypeReference;
private final String mName;
+ private final String mFallbackName;
private final int mHash;
/**
@@ -96,6 +97,7 @@ public class CameraMetadataNative implements Parcelable {
throw new NullPointerException("Type needs to be non-null");
}
mName = name;
+ mFallbackName = null;
mType = type;
mVendorId = vendorId;
mTypeReference = TypeReference.createSpecializedTypeReference(type);
@@ -103,6 +105,22 @@ public class CameraMetadataNative implements Parcelable {
}
/**
+ * @hide
+ */
+ public Key(String name, String fallbackName, Class<T> type) {
+ if (name == null) {
+ throw new NullPointerException("Key needs a valid name");
+ } else if (type == null) {
+ throw new NullPointerException("Type needs to be non-null");
+ }
+ mName = name;
+ mFallbackName = fallbackName;
+ mType = type;
+ mTypeReference = TypeReference.createSpecializedTypeReference(type);
+ mHash = mName.hashCode() ^ mTypeReference.hashCode();
+ }
+
+ /**
* Visible for testing only.
*
* <p>Use the CameraCharacteristics.Key, CaptureResult.Key, or CaptureRequest.Key
@@ -115,6 +133,7 @@ public class CameraMetadataNative implements Parcelable {
throw new NullPointerException("Type needs to be non-null");
}
mName = name;
+ mFallbackName = null;
mType = type;
mTypeReference = TypeReference.createSpecializedTypeReference(type);
mHash = mName.hashCode() ^ mTypeReference.hashCode();
@@ -134,6 +153,7 @@ public class CameraMetadataNative implements Parcelable {
throw new NullPointerException("TypeReference needs to be non-null");
}
mName = name;
+ mFallbackName = null;
mType = (Class<T>)typeReference.getRawType();
mTypeReference = typeReference;
mHash = mName.hashCode() ^ mTypeReference.hashCode();
@@ -494,7 +514,16 @@ public class CameraMetadataNative implements Parcelable {
int tag = nativeGetTagFromKeyLocal(key.getName());
byte[] values = readValues(tag);
if (values == null) {
- return null;
+ // If the key returns null, use the fallback key if exists.
+ // This is to support old key names for the newly published keys.
+ if (key.mFallbackName == null) {
+ return null;
+ }
+ tag = nativeGetTagFromKeyLocal(key.mFallbackName);
+ values = readValues(tag);
+ if (values == null) {
+ return null;
+ }
}
int nativeType = nativeGetTypeFromTagLocal(tag);