Camera: Prevent crash with prebuilt camera metadata

* Some devices need prebuilt camera metadata along with
  prebuilt libcameraservice for propreitary interfaces
  implemented by OEM.
* However, Prebuilt camera metadata of 12.0 crashed on 12.1
  since exceptions weren't handled properly. Fix it.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
diff --git a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
index 53c6868..9523c2c 100644
--- a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
+++ b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
@@ -592,31 +592,35 @@
     }
 
     private <T> T getBase(Key<T> key) {
-        int tag;
-        if (key.hasTag()) {
-            tag = key.getTag();
-        } else {
-            tag = nativeGetTagFromKeyLocal(mMetadataPtr, key.getName());
-            key.cacheTag(tag);
-        }
-        byte[] values = readValues(tag);
-        if (values == 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;
+        try {
+            int tag;
+            if (key.hasTag()) {
+                tag = key.getTag();
+            } else {
+                tag = nativeGetTagFromKeyLocal(mMetadataPtr, key.getName());
+                key.cacheTag(tag);
             }
-            tag = nativeGetTagFromKeyLocal(mMetadataPtr, key.mFallbackName);
-            values = readValues(tag);
+            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(mMetadataPtr, key.mFallbackName);
+                values = readValues(tag);
+                if (values == null) {
+                    return null;
+                }
             }
-        }
 
-        int nativeType = nativeGetTypeFromTagLocal(mMetadataPtr, tag);
-        Marshaler<T> marshaler = getMarshalerForKey(key, nativeType);
-        ByteBuffer buffer = ByteBuffer.wrap(values).order(ByteOrder.nativeOrder());
-        return marshaler.unmarshal(buffer);
+            int nativeType = nativeGetTypeFromTagLocal(mMetadataPtr, tag);
+            Marshaler<T> marshaler = getMarshalerForKey(key, nativeType);
+            ByteBuffer buffer = ByteBuffer.wrap(values).order(ByteOrder.nativeOrder());
+            return marshaler.unmarshal(buffer);
+        } catch (Exception e) {
+                return null;
+        }
     }
 
     // Use Command pattern here to avoid lots of expensive if/equals checks in get for overridden