summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);