Merge "camera2: Add HDR vendor tag for legacy mode." into lmp-dev
diff --git a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2Capabilities.java b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2Capabilities.java
index bd610cc..8001a37 100644
--- a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2Capabilities.java
+++ b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2Capabilities.java
@@ -204,7 +204,6 @@
                 return SceneMode.CANDLELIGHT;
             case CONTROL_SCENE_MODE_FIREWORKS:
                 return SceneMode.FIREWORKS;
-            // TODO: We cannot support HDR
             case CONTROL_SCENE_MODE_LANDSCAPE:
                 return SceneMode.LANDSCAPE;
             case CONTROL_SCENE_MODE_NIGHT:
@@ -226,6 +225,11 @@
                 return SceneMode.THEATRE;
             // TODO: We cannot expose FACE_PRIORITY, or HIGH_SPEED_VIDEO
         }
+
+        if (sm == LegacyVendorTags.CONTROL_SCENE_MODE_HDR) {
+            return SceneMode.HDR;
+        }
+
         Log.w(TAG, "Unable to convert from API 2 scene mode: " + sm);
         return null;
     }
diff --git a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2Settings.java b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2Settings.java
index 0d3ef26..d668f85 100644
--- a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2Settings.java
+++ b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2Settings.java
@@ -419,7 +419,10 @@
                     mode = CONTROL_SCENE_MODE_FIREWORKS;
                     break;
                 }
-                // TODO: We cannot support HDR
+                case HDR: {
+                    mode = LegacyVendorTags.CONTROL_SCENE_MODE_HDR;
+                    break;
+                }
                 case LANDSCAPE: {
                     mode = CONTROL_SCENE_MODE_LANDSCAPE;
                     break;
diff --git a/camera2/portability/src/com/android/ex/camera2/portability/CameraCapabilities.java b/camera2/portability/src/com/android/ex/camera2/portability/CameraCapabilities.java
index 0d7c302..60c8cb2 100644
--- a/camera2/portability/src/com/android/ex/camera2/portability/CameraCapabilities.java
+++ b/camera2/portability/src/com/android/ex/camera2/portability/CameraCapabilities.java
@@ -184,7 +184,7 @@
          * Capture a scene using high dynamic range imaging techniques.
          * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_HDR}.
          */
-        // TODO: Unsupported on API 2
+        // Note: Supported as a vendor tag on the Camera2 API for some LEGACY devices.
         HDR,
         /**
          * Take pictures on distant objects.
diff --git a/camera2/portability/src/com/android/ex/camera2/portability/LegacyVendorTags.java b/camera2/portability/src/com/android/ex/camera2/portability/LegacyVendorTags.java
new file mode 100644
index 0000000..e55748d
--- /dev/null
+++ b/camera2/portability/src/com/android/ex/camera2/portability/LegacyVendorTags.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.ex.camera2.portability;
+
+import android.hardware.camera2.CameraCharacteristics;
+
+import java.lang.ExceptionInInitializerError;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+/**
+ * Vendor tag declarations for the Legacy Camera2 API implementation.
+ */
+public class LegacyVendorTags {
+
+    /**
+     * Hidden enum for scene modes supported only by the Camera1 API.
+     */
+    public static final int CONTROL_SCENE_MODE_HDR;
+
+    static {
+        try {
+            CONTROL_SCENE_MODE_HDR =
+                    Class.forName("android.hardware.camera2.CameraCharacteristics").
+                            getField("CONTROL_SCENE_MODE_HDR").getInt(null);
+        } catch (Exception e) {
+            throw new ExceptionInInitializerError(
+                    "Error while reflecting on LegacyVendorTags: " + e);
+        }
+    }
+
+    private LegacyVendorTags() {
+        throw new AssertionError();
+    }
+}
\ No newline at end of file