camera: apply Fast Autofocus algorithm

to speed-up the Auto-Focus performance.

Change-Id: Id33ad29c583d6b6d79a865edadba729f0712f7f0
diff --git a/camera/Android.mk b/camera/Android.mk
index 8627e8d..9a87f08 100644
--- a/camera/Android.mk
+++ b/camera/Android.mk
@@ -75,6 +75,10 @@
         LOCAL_HAL_FILES := QualcommCamera.cpp QualcommCameraHardware.cpp
       endif
 
+      ifeq ($(BOARD_USES_CAMERA_FAST_AUTOFOCUS),true)
+        LOCAL_CFLAGS += -DFAST_AF
+      endif
+
       LOCAL_CFLAGS+= -DHW_ENCODE
 
       # if debug service layer and up , use stub camera!
diff --git a/camera/QCameraHWI_Parm.cpp b/camera/QCameraHWI_Parm.cpp
index 7312e87..d81fd32 100755
--- a/camera/QCameraHWI_Parm.cpp
+++ b/camera/QCameraHWI_Parm.cpp
@@ -2047,6 +2047,21 @@
                 if(!strcmp(str, QCameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO) ||
                    !strcmp(str, QCameraParameters::FOCUS_MODE_CONTINUOUS_PICTURE)){
                     cafSupport = TRUE;
+#ifdef FAST_AF
+                    int caf_type=0;
+                    bool rc = false;
+                    if(!strcmp(str, QCameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO))
+                    {
+                        caf_type = 1;
+                        rc = native_set_parms(MM_CAMERA_PARM_CAF_TYPE, sizeof(caf_type), (void *)&caf_type);
+                    }
+                    else if(!strcmp(str, QCameraParameters::FOCUS_MODE_CONTINUOUS_PICTURE))
+                    {
+                        caf_type = 2;
+                        rc = native_set_parms(MM_CAMERA_PARM_CAF_TYPE, sizeof(caf_type), (void *)&caf_type);
+                    }
+                    ALOGE("SM: caf_type %d rc %d", caf_type, rc);
+#endif
                 }
                 ALOGV("Continuous Auto Focus %d", cafSupport);
                 ret = native_set_parms(MM_CAMERA_PARM_CONTINUOUS_AF, sizeof(cafSupport),
diff --git a/camera/QCamera_Intf.h b/camera/QCamera_Intf.h
index 471e4cc..a385937 100644
--- a/camera/QCamera_Intf.h
+++ b/camera/QCamera_Intf.h
@@ -423,6 +423,9 @@
     MM_CAMERA_PARM_FACIAL_FEATURE_INFO,
     MM_CAMERA_PARM_CAF_LOCK_CANCEL,
     MM_CAMERA_PARM_ZSL_FLASH,
+#ifdef FAST_AF
+    MM_CAMERA_PARM_CAF_TYPE,
+#endif
     MM_CAMERA_PARM_MAX
 } mm_camera_parm_type_t;
 
@@ -569,6 +572,9 @@
   CAMERA_GET_FACIAL_FEATURE_INFO,
   CAMERA_SET_CAF_LOCK_CANCEL,
   CAMERA_GET_PARM_HDR,
+#ifdef FAST_AF
+  CAMERA_SET_PARM_CAF_TYPE,
+#endif
   CAMERA_CTRL_PARM_MAX
 } cam_ctrl_type;
 
diff --git a/camera/mm-camera-interface/Android.mk b/camera/mm-camera-interface/Android.mk
index 67c2a03..facf99b 100644
--- a/camera/mm-camera-interface/Android.mk
+++ b/camera/mm-camera-interface/Android.mk
@@ -14,6 +14,9 @@
         mm_omx_jpeg_encoder.c
 
 LOCAL_CFLAGS+= -D_ANDROID_
+ifeq ($(BOARD_USES_CAMERA_FAST_AUTOFOCUS),true)
+  LOCAL_CFLAGS += -DFAST_AF
+endif
 LOCAL_COPY_HEADERS_TO := mm-camera-interface
 LOCAL_COPY_HEADERS += mm_camera_interface2.h
 LOCAL_COPY_HEADERS += mm_omx_jpeg_encoder.h
diff --git a/camera/mm-camera-interface/mm_camera.c b/camera/mm-camera-interface/mm_camera.c
index 4de1f47..5ba4996 100644
--- a/camera/mm-camera-interface/mm_camera.c
+++ b/camera/mm-camera-interface/mm_camera.c
@@ -392,6 +392,12 @@
       return mm_camera_send_native_ctrl_cmd(my_obj,
                   CAMERA_SET_LOW_POWER_MODE, sizeof(uint32_t), (void *)parm->p_value);
 
+#ifdef FAST_AF
+    case MM_CAMERA_PARM_CAF_TYPE:
+      CDBG("SM : %s : MM_CAMERA_PARM_CAF_TYPE value : %d",__func__,*((int *)(parm->p_value)));
+      return mm_camera_send_native_ctrl_cmd(my_obj,
+                  CAMERA_SET_PARM_CAF_TYPE, sizeof(int32_t), (void *)parm->p_value);
+#endif
     case MM_CAMERA_PARM_HDR:
       return mm_camera_send_native_ctrl_cmd(my_obj,
                         CAMERA_SET_PARM_HDR, sizeof(exp_bracketing_t), (void *)parm->p_value);