OSDN Git Service

camera2: (legacy) Fix the comparison for fixed-focus cameras
authorIgor Murashkin <iam@google.com>
Sat, 9 Aug 2014 00:40:17 +0000 (17:40 -0700)
committerIgor Murashkin <iam@google.com>
Mon, 11 Aug 2014 20:25:01 +0000 (13:25 -0700)
* Use #equals instead of == for string comparison
* Also make sure lens.info.minimumFocusDistance shows up in
  CameraCharacteristics#getKeys() for fixed-focus cameras

Bug: 16900875
Change-Id: I3b9248c5cb62ddcfb13587c6349525e145e353ac

core/java/android/hardware/camera2/legacy/LegacyMetadataMapper.java

index faacbeb..0337c96 100644 (file)
@@ -188,10 +188,6 @@ public class LegacyMetadataMapper {
          */
         mapFlash(m, p);
 
-        /*
-         * request.*
-         */
-        mapRequest(m, p);
         // TODO: map other fields
 
         /*
@@ -224,6 +220,13 @@ public class LegacyMetadataMapper {
          */
         mapScalerStreamConfigs(m, p);
 
+        // Order matters below: Put this last so that we can read the metadata set previously
+
+        /*
+         * request.*
+         */
+        mapRequest(m, p);
+
     }
 
     private static void mapScalerStreamConfigs(CameraMetadataNative m, Camera.Parameters p) {
@@ -553,11 +556,23 @@ public class LegacyMetadataMapper {
          *  We can tell if the lens is fixed focus;
          *  but if it's not, we can't tell the minimum focus distance, so leave it null then.
          */
-        if (p.getFocusMode() == Camera.Parameters.FOCUS_MODE_FIXED) {
+        if (VERBOSE) {
+            Log.v(TAG, "mapLens - focus-mode='" + p.getFocusMode() + "'");
+        }
+
+        if (Camera.Parameters.FOCUS_MODE_FIXED.equals(p.getFocusMode())) {
             /*
              * lens.info.minimumFocusDistance
              */
             m.set(LENS_INFO_MINIMUM_FOCUS_DISTANCE, LENS_INFO_MINIMUM_FOCUS_DISTANCE_FIXED_FOCUS);
+
+            if (VERBOSE) {
+                Log.v(TAG, "mapLens - lens.info.minimumFocusDistance = 0");
+            }
+        } else {
+            if (VERBOSE) {
+                Log.v(TAG, "mapLens - lens.info.minimumFocusDistance is unknown");
+            }
         }
 
         float[] focalLengths = new float[] { p.getFocalLength() };
@@ -628,7 +643,17 @@ public class LegacyMetadataMapper {
                     CameraCharacteristics.STATISTICS_INFO_MAX_FACE_COUNT                  ,
                     CameraCharacteristics.SYNC_MAX_LATENCY                                ,
             };
-            m.set(REQUEST_AVAILABLE_CHARACTERISTICS_KEYS, getTagsForKeys(availableKeys));
+            List<Key<?>> characteristicsKeys = new ArrayList<>(Arrays.asList(availableKeys));
+
+            /*
+             * Add the conditional keys
+             */
+            if (m.get(LENS_INFO_MINIMUM_FOCUS_DISTANCE) != null) {
+                characteristicsKeys.add(LENS_INFO_MINIMUM_FOCUS_DISTANCE);
+            }
+
+            m.set(REQUEST_AVAILABLE_CHARACTERISTICS_KEYS,
+                    getTagsForKeys(characteristicsKeys.toArray(new Key<?>[0])));
         }
 
         /*
@@ -1141,6 +1166,11 @@ public class LegacyMetadataMapper {
                 }
             }
 
+            if (VERBOSE) {
+                Log.v(TAG, "createRequestTemplate (templateId=" + templateId + ")," +
+                        " afMode=" + afMode + ", minimumFocusDistance=" + minimumFocusDistance);
+            }
+
             m.set(CaptureRequest.CONTROL_AF_MODE, afMode);
         }