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);