Camera3: Set focus distance calibration static metadata

Remove hardcoded min focus distance as well.

Bug: 12957245
Bug: 12132757
Change-Id: I5d3bbc4c8d108f9f396fbd041c9afee3f2faf955

Conflicts:
	QCamera2/HAL3/QCamera3HWI.cpp
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp
index 760c14f..32bdc5f 100644
--- a/camera/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp
@@ -136,6 +136,15 @@
     { ANDROID_STATISTICS_FACE_DETECT_MODE_FULL,   CAM_FACE_DETECT_MODE_FULL    }
 };
 
+const QCamera3HardwareInterface::QCameraMap QCamera3HardwareInterface::FOCUS_CALIBRATION_MAP[] = {
+    { ANDROID_LENS_INFO_FOCUS_DISTANCE_CALIBRATION_UNCALIBRATED,
+      CAM_FOCUS_UNCALIBRATED },
+    { ANDROID_LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE,
+      CAM_FOCUS_APPROXIMATE },
+    { ANDROID_LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED,
+      CAM_FOCUS_CALIBRATED }
+};
+
 const int32_t available_thumbnail_sizes[] = {0, 0,
                                              176, 144,
                                              320, 240,
@@ -2742,18 +2751,8 @@
 
     int facingBack = gCamCapability[cameraId]->position == CAM_POSITION_BACK;
     /*HAL 3 only*/
-    /*staticInfo.update(ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE,
-                    &gCamCapability[cameraId]->min_focus_distance, 1); */
-
-    /*hard coded for now but this should come from sensor*/
-    float min_focus_distance;
-    if(facingBack){
-        min_focus_distance = 10;
-    } else {
-        min_focus_distance = 0;
-    }
     staticInfo.update(ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE,
-                    &min_focus_distance, 1);
+                    &gCamCapability[cameraId]->min_focus_distance, 1);
 
     staticInfo.update(ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE,
                     &gCamCapability[cameraId]->hyper_focal_distance, 1);
@@ -3089,6 +3088,14 @@
     staticInfo.update(ANDROID_LED_AVAILABLE_LEDS,
                       &avail_leds, 0);
 
+    int8_t val = lookupFwkName(FOCUS_CALIBRATION_MAP,
+            sizeof(FOCUS_CALIBRATION_MAP)/sizeof(FOCUS_CALIBRATION_MAP[0]),
+            gCamCapability[cameraId]->focus_dist_calibrated);
+    if (val != NAME_NOT_FOUND) {
+        staticInfo.update(ANDROID_LENS_INFO_FOCUS_DISTANCE_CALIBRATION,
+                     &gCamCapability[cameraId]->focus_dist_calibrated, 1);
+    }
+
     gStaticMetadata[cameraId] = staticInfo.release();
     return rc;
 }
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.h b/camera/QCamera2/HAL3/QCamera3HWI.h
index c4d7f52..b1bece1 100755
--- a/camera/QCamera2/HAL3/QCamera3HWI.h
+++ b/camera/QCamera2/HAL3/QCamera3HWI.h
@@ -277,6 +277,7 @@
     static const QCameraMap AE_FLASH_MODE_MAP[];
     static const QCameraMap FLASH_MODES_MAP[];
     static const QCameraMap FACEDETECT_MODES_MAP[];
+    static const QCameraMap FOCUS_CALIBRATION_MAP[];
 
     static pthread_mutex_t mCameraSessionLock;
     static unsigned int mCameraSessionActive;
diff --git a/camera/QCamera2/stack/common/cam_intf.h b/camera/QCamera2/stack/common/cam_intf.h
index b626564..7ee6097 100755
--- a/camera/QCamera2/stack/common/cam_intf.h
+++ b/camera/QCamera2/stack/common/cam_intf.h
@@ -292,6 +292,8 @@
     uint8_t flash_available;
 
     cam_rational_type_t base_gain_factor;    /* sensor base gain factor */
+
+    uint8_t focus_dist_calibrated;
 } cam_capability_t;
 
 typedef enum {
diff --git a/camera/QCamera2/stack/common/cam_types.h b/camera/QCamera2/stack/common/cam_types.h
index 3177a9f..5957a16 100644
--- a/camera/QCamera2/stack/common/cam_types.h
+++ b/camera/QCamera2/stack/common/cam_types.h
@@ -1312,4 +1312,10 @@
     CAM_AWB_STATE_LOCKED
 } cam_awb_state_t;
 
+typedef enum {
+    CAM_FOCUS_UNCALIBRATED,
+    CAM_FOCUS_APPROXIMATE,
+    CAM_FOCUS_CALIBRATED
+} cam_focus_calibration_t;
+
 #endif /* __QCAMERA_TYPES_H__ */