Merge "QCamera2 : Differentiate focus events for CAF and normal AF."
diff --git a/QCamera2/HAL/QCamera2HWI.cpp b/QCamera2/HAL/QCamera2HWI.cpp
index a36a6bf..e3eb252 100644
--- a/QCamera2/HAL/QCamera2HWI.cpp
+++ b/QCamera2/HAL/QCamera2HWI.cpp
@@ -992,6 +992,7 @@
       mDumpSkipCnt(0),
       mThermalLevel(QCAMERA_THERMAL_NO_ADJUSTMENT),
       mCancelAutoFocus(false),
+      mActiveAF(false),
       m_HDRSceneEnabled(false),
       mLongshotEnabled(false),
       m_max_pic_width(0),
@@ -2035,6 +2036,7 @@
 int QCamera2HardwareInterface::stopPreview()
 {
     CDBG_HIGH("%s: E", __func__);
+    mActiveAF = false;
     // stop preview stream
     stopChannel(QCAMERA_CH_TYPE_ZSL);
     stopChannel(QCAMERA_CH_TYPE_PREVIEW);
@@ -2174,6 +2176,7 @@
 {
     int rc = NO_ERROR;
     setCancelAutoFocus(false);
+    mActiveAF = true;
     cam_focus_mode_type focusMode = mParameters.getFocusMode();
     CDBG_HIGH("[AF_DBG] %s: focusMode=%d, m_currentFocusState=%d, m_bAFRunning=%d",
           __func__, focusMode, m_currentFocusState, isAFRunning());
@@ -2211,6 +2214,7 @@
 {
     int rc = NO_ERROR;
     setCancelAutoFocus(true);
+    mActiveAF = false;
     cam_focus_mode_type focusMode = mParameters.getFocusMode();
 
     switch (focusMode) {
@@ -3646,6 +3650,13 @@
             break;
         }
 
+        if (focus_data.focus_state == CAM_AF_PASSIVE_SCANNING ||
+            focus_data.focus_state == CAM_AF_PASSIVE_FOCUSED ||
+            focus_data.focus_state == CAM_AF_PASSIVE_UNFOCUSED) {
+            //ignore passive(CAF) events in Auto/Macro AF modes
+            break;
+        }
+
         if (focus_data.focus_state == CAM_AF_SCANNING ||
             focus_data.focus_state == CAM_AF_INACTIVE) {
             // in the middle of focusing, just ignore it
@@ -3660,17 +3671,28 @@
         break;
     case CAM_FOCUS_MODE_CONTINOUS_VIDEO:
     case CAM_FOCUS_MODE_CONTINOUS_PICTURE:
-        if (focus_data.focus_state == CAM_AF_FOCUSED ||
+        if (mActiveAF &&
+            (focus_data.focus_state == CAM_AF_PASSIVE_FOCUSED ||
+            focus_data.focus_state == CAM_AF_PASSIVE_UNFOCUSED)) {
+            //ignore passive(CAF) events during AF triggered by app/HAL
+            break;
+        }
+
+        if (focus_data.focus_state == CAM_AF_PASSIVE_FOCUSED ||
+            focus_data.focus_state == CAM_AF_PASSIVE_UNFOCUSED ||
+            focus_data.focus_state == CAM_AF_FOCUSED ||
             focus_data.focus_state == CAM_AF_NOT_FOCUSED) {
+
             // update focus distance
             mParameters.updateFocusDistances(&focus_data.focus_dist);
 
             ret = sendEvtNotify(CAMERA_MSG_FOCUS,
-                  (focus_data.focus_state == CAM_AF_FOCUSED)? true : false,
+                  (focus_data.focus_state == CAM_AF_PASSIVE_FOCUSED ||
+                   focus_data.focus_state == CAM_AF_FOCUSED)? true : false,
                   0);
         }
         ret = sendEvtNotify(CAMERA_MSG_FOCUS_MOVE,
-                (focus_data.focus_state == CAM_AF_SCANNING)? true : false,
+                (focus_data.focus_state == CAM_AF_PASSIVE_SCANNING)? true : false,
                 0);
         break;
     case CAM_FOCUS_MODE_INFINITY:
@@ -3681,6 +3703,12 @@
         break;
     }
 
+    //Reset mActiveAF once we receive focus done event
+    if (focus_data.focus_state == CAM_AF_FOCUSED ||
+        focus_data.focus_state == CAM_AF_NOT_FOCUSED) {
+        mActiveAF = false;
+    }
+
     // we save cam_auto_focus_data_t.focus_pos to parameters,
     // in any focus mode.
     CDBG_HIGH("%s, update focus position: %d", __func__, focus_data.focus_pos);
diff --git a/QCamera2/HAL/QCamera2HWI.h b/QCamera2/HAL/QCamera2HWI.h
index 17c9545..0365e57 100644
--- a/QCamera2/HAL/QCamera2HWI.h
+++ b/QCamera2/HAL/QCamera2HWI.h
@@ -564,6 +564,7 @@
     mm_jpeg_exif_params_t mExifParams;
     qcamera_thermal_level_enum_t mThermalLevel;
     bool mCancelAutoFocus;
+    bool mActiveAF;
     bool m_HDRSceneEnabled;
     bool mLongshotEnabled;
     int32_t m_max_pic_width;
diff --git a/QCamera2/stack/common/cam_types.h b/QCamera2/stack/common/cam_types.h
index 78426d8..10784d9 100644
--- a/QCamera2/stack/common/cam_types.h
+++ b/QCamera2/stack/common/cam_types.h
@@ -798,7 +798,10 @@
     CAM_AF_SCANNING,
     CAM_AF_FOCUSED,
     CAM_AF_NOT_FOCUSED,
-    CAM_AF_INACTIVE
+    CAM_AF_INACTIVE,
+    CAM_AF_PASSIVE_SCANNING,
+    CAM_AF_PASSIVE_FOCUSED,
+    CAM_AF_PASSIVE_UNFOCUSED,
 } cam_autofocus_state_t;
 
 typedef struct {