hardware: samsung_slsi: libcamera2: bug fix of single AF
authorYounghwan Joo <yhwan.joo@samsung.com>
Wed, 26 Sep 2012 13:51:10 +0000 (22:51 +0900)
committerRebecca Schultz Zavin <rebecca@android.com>
Wed, 26 Sep 2012 20:30:10 +0000 (13:30 -0700)
This patch is to fix a bug of single AF in case of successive capturing

Change-Id: I437c128c88b76680a49b89aa98c8cc1ca696b35e
Signed-off-by: Younghwan Joo <yhwan.joo@samsung.com>
libcamera2/ExynosCameraHWInterface2.cpp
libcamera2/ExynosCameraHWInterface2.h

index 6a98f7ad6c203a1a472704c6d46bf83fcbc3bf74..b0aaeb4f1670815c2bb4681563e963bce40eb90a 100644 (file)
@@ -2942,11 +2942,11 @@ void ExynosCameraHWInterface2::m_updateAfRegion(struct camera2_shot_ext * shot_e
     }
 }
 
-void ExynosCameraHWInterface2::m_afTrigger(struct camera2_shot_ext * shot_ext)
+void ExynosCameraHWInterface2::m_afTrigger(struct camera2_shot_ext * shot_ext, int mode)
 {
     if (m_afState == HAL_AFSTATE_SCANNING) {
         ALOGD("(%s): restarting trigger ", __FUNCTION__);
-    } else if (!m_ctlInfo.flash.m_afFlashDoneFlg) {
+    } else if (!mode) {
         if (m_afState != HAL_AFSTATE_NEEDS_COMMAND)
             ALOGD("(%s): wrong trigger state %d", __FUNCTION__, m_afState);
         else
@@ -3127,7 +3127,7 @@ void ExynosCameraHWInterface2::m_sensorThreadFunc(SignalDrivenThread * self)
             shot_ext->shot.ctl.scaler.cropRegion[0] = new_cropRegion[0];
             shot_ext->shot.ctl.scaler.cropRegion[1] = new_cropRegion[1];
             shot_ext->shot.ctl.scaler.cropRegion[2] = new_cropRegion[2];
-            if (m_IsAfModeUpdateRequired) {
+            if (m_IsAfModeUpdateRequired && (m_ctlInfo.flash.m_precaptureTriggerId == 0)) {
                 ALOGD("### AF Mode change(Mode %d) ", m_afMode);
                 shot_ext->shot.ctl.aa.afMode = m_afMode;
                 if (m_afMode == AA_AFMODE_CONTINUOUS_VIDEO || m_afMode == AA_AFMODE_CONTINUOUS_PICTURE) {
@@ -3158,10 +3158,10 @@ void ExynosCameraHWInterface2::m_sensorThreadFunc(SignalDrivenThread * self)
                     if (m_ctlInfo.flash.m_flashCnt == IS_FLASH_STATE_ON_DONE) {
                         if ((m_afMode != AA_AFMODE_AUTO) && (m_afMode != AA_AFMODE_MACRO)) {
                             // Flash is enabled and start AF
-                            m_afTrigger(shot_ext);
+                            m_afTrigger(shot_ext, 1);
                         } else {
                             if (m_ctlInfo.af.m_afTriggerTimeOut == 0)
-                                m_afTrigger(shot_ext);
+                                m_afTrigger(shot_ext, 0);
                             else
                                 m_ctlInfo.af.m_afTriggerTimeOut--;
                         }
@@ -3169,10 +3169,10 @@ void ExynosCameraHWInterface2::m_sensorThreadFunc(SignalDrivenThread * self)
                 } else {
                     // non-flash case
                     if ((m_afMode != AA_AFMODE_AUTO) && (m_afMode != AA_AFMODE_MACRO)) {
-                        m_afTrigger(shot_ext);
+                        m_afTrigger(shot_ext, 0);
                     } else {
                         if (m_ctlInfo.af.m_afTriggerTimeOut == 0)
-                            m_afTrigger(shot_ext);
+                            m_afTrigger(shot_ext, 0);
                         else
                             m_ctlInfo.af.m_afTriggerTimeOut--;
                     }
@@ -4603,7 +4603,7 @@ void ExynosCameraHWInterface2::OnPrecaptureMeteringTriggerStart(int id)
             // Full flash sequence
             m_ctlInfo.flash.m_flashCnt = IS_FLASH_STATE_ON;
             m_ctlInfo.flash.m_flashEnableFlg = true;
-            m_ctlInfo.flash.m_flashTimeOut = 3;
+            m_ctlInfo.flash.m_flashTimeOut = 0;
         }
     } else {
         // Skip pre-capture in case of non-flash.
@@ -4825,11 +4825,11 @@ void ExynosCameraHWInterface2::OnPrecaptureMeteringNotificationISP()
                 if (m_ctlInfo.ae.aeStateNoti == AE_STATE_PRECAPTURE) {
                     // End notification
                     m_notifyCb(CAMERA2_MSG_AUTOEXPOSURE,
-                                    ANDROID_CONTROL_AE_STATE_LOCKED,
+                                    ANDROID_CONTROL_AE_STATE_CONVERGED,
                                     m_ctlInfo.flash.m_precaptureTriggerId, 0, m_callbackCookie);
-                    ALOGV("(%s) ANDROID_CONTROL_AE_STATE_LOCKED (%d)", __FUNCTION__, m_ctlInfo.flash.m_flashCnt);
+                    ALOGV("(%s) ANDROID_CONTROL_AE_STATE_CONVERGED (%d)", __FUNCTION__, m_ctlInfo.flash.m_flashCnt);
                     m_notifyCb(CAMERA2_MSG_AUTOWB,
-                                    ANDROID_CONTROL_AWB_STATE_LOCKED,
+                                    ANDROID_CONTROL_AWB_STATE_CONVERGED,
                                     m_ctlInfo.flash.m_precaptureTriggerId, 0, m_callbackCookie);
                     m_ctlInfo.flash.m_precaptureTriggerId = 0;
                 } else {
@@ -4850,10 +4850,10 @@ void ExynosCameraHWInterface2::OnPrecaptureMeteringNotificationISP()
                 ALOGV("(%s) INVALID flash state count. (%d)", __FUNCTION__, (int)m_ctlInfo.flash.m_flashCnt);
                 m_ctlInfo.flash.m_flashCnt = IS_FLASH_STATE_AUTO_DONE;
                 m_notifyCb(CAMERA2_MSG_AUTOEXPOSURE,
-                        ANDROID_CONTROL_AE_STATE_LOCKED,
+                        ANDROID_CONTROL_AE_STATE_CONVERGED,
                         m_ctlInfo.flash.m_precaptureTriggerId, 0, m_callbackCookie);
                 m_notifyCb(CAMERA2_MSG_AUTOWB,
-                        ANDROID_CONTROL_AWB_STATE_LOCKED,
+                        ANDROID_CONTROL_AWB_STATE_CONVERGED,
                         m_ctlInfo.flash.m_precaptureTriggerId, 0, m_callbackCookie);
                 m_ctlInfo.flash.m_precaptureTriggerId = 0;
                 break;
@@ -4862,11 +4862,11 @@ void ExynosCameraHWInterface2::OnPrecaptureMeteringNotificationISP()
             // non-flash case
             if (m_ctlInfo.ae.aeStateNoti == AE_STATE_PRECAPTURE) {
                 m_notifyCb(CAMERA2_MSG_AUTOEXPOSURE,
-                                ANDROID_CONTROL_AE_STATE_LOCKED,
+                                ANDROID_CONTROL_AE_STATE_CONVERGED,
                                 m_ctlInfo.flash.m_precaptureTriggerId, 0, m_callbackCookie);
-                ALOGV("(%s) ANDROID_CONTROL_AE_STATE_LOCKED (%d)", __FUNCTION__, m_ctlInfo.flash.m_flashCnt);
+                ALOGV("(%s) ANDROID_CONTROL_AE_STATE_CONVERGED (%d)", __FUNCTION__, m_ctlInfo.flash.m_flashCnt);
                 m_notifyCb(CAMERA2_MSG_AUTOWB,
-                                ANDROID_CONTROL_AWB_STATE_LOCKED,
+                                ANDROID_CONTROL_AWB_STATE_CONVERGED,
                                 m_ctlInfo.flash.m_precaptureTriggerId, 0, m_callbackCookie);
                 m_ctlInfo.flash.m_precaptureTriggerId = 0;
             }
index d7934c32f1c0b1e342d4483e7f25efbc932ddbba..52af6ba89266891ba236a40bb5339991bcb68980 100644 (file)
@@ -614,7 +614,7 @@ class MainThread : public SignalDrivenThread {
     void            m_preCaptureListenerSensor(struct camera2_shot_ext * shot_ext);
     void            m_preCaptureListenerISP(struct camera2_shot_ext * shot_ext);
     void            m_updateAfRegion(struct camera2_shot_ext * shot_ext);
-    void            m_afTrigger(struct camera2_shot_ext * shot_ext);
+    void            m_afTrigger(struct camera2_shot_ext * shot_ext, int mode);
     void            m_sceneModeFaceSetter(struct camera2_shot_ext * shot_ext, int mode);
     void               *m_exynosPictureCSC;
     void               *m_exynosVideoCSC;