Camera: Block CancelAF till HAL receives AF event.
Focus distances should not be updated after CancelAF. But due
to timing issues, sometimes we may receive AF event after
Cancel AF is issued. This will result in testCancelAutoFocus
CTS failure.
To avoid such scenarios, make Cancel AF wait for the focus event
if AF is in progress.
Change-Id: Iba641487c8f31de2d118fbc7dc3ed040c9d34601
diff --git a/QCamera2/HAL/QCameraStateMachine.cpp b/QCamera2/HAL/QCameraStateMachine.cpp
index 1e70149..864e10b 100644
--- a/QCamera2/HAL/QCameraStateMachine.cpp
+++ b/QCamera2/HAL/QCameraStateMachine.cpp
@@ -516,11 +516,14 @@
break;
case QCAMERA_SM_EVT_STOP_AUTO_FOCUS:
{
+ bool isAFRunning = m_parent->isAFRunning();
rc = m_parent->cancelAutoFocus();
- result.status = rc;
- result.request_api = evt;
- result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
- m_parent->signalAPIResult(&result);
+ if (!isAFRunning) {
+ result.status = rc;
+ result.request_api = evt;
+ result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
+ m_parent->signalAPIResult(&result);
+ }
}
break;
case QCAMERA_SM_EVT_REG_FACE_IMAGE:
@@ -783,11 +786,14 @@
break;
case QCAMERA_SM_EVT_STOP_AUTO_FOCUS:
{
+ bool isAFRunning = m_parent->isAFRunning();
rc = m_parent->cancelAutoFocus();
- result.status = rc;
- result.request_api = evt;
- result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
- m_parent->signalAPIResult(&result);
+ if (!isAFRunning) {
+ result.status = rc;
+ result.request_api = evt;
+ result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
+ m_parent->signalAPIResult(&result);
+ }
}
break;
case QCAMERA_SM_EVT_SEND_COMMAND:
@@ -1074,11 +1080,14 @@
break;
case QCAMERA_SM_EVT_STOP_AUTO_FOCUS:
{
+ bool isAFRunning = m_parent->isAFRunning();
rc = m_parent->cancelAutoFocus();
- result.status = rc;
- result.request_api = evt;
- result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
- m_parent->signalAPIResult(&result);
+ if (!isAFRunning) {
+ result.status = rc;
+ result.request_api = evt;
+ result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
+ m_parent->signalAPIResult(&result);
+ }
}
break;
case QCAMERA_SM_EVT_START_RECORDING:
@@ -1585,11 +1594,14 @@
break;
case QCAMERA_SM_EVT_STOP_AUTO_FOCUS:
{
+ bool isAFRunning = m_parent->isAFRunning();
rc = m_parent->cancelAutoFocus();
- result.status = rc;
- result.request_api = evt;
- result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
- m_parent->signalAPIResult(&result);
+ if (!isAFRunning) {
+ result.status = rc;
+ result.request_api = evt;
+ result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
+ m_parent->signalAPIResult(&result);
+ }
}
break;
case QCAMERA_SM_EVT_SEND_COMMAND:
@@ -1944,11 +1956,14 @@
break;
case QCAMERA_SM_EVT_STOP_AUTO_FOCUS:
{
+ bool isAFRunning = m_parent->isAFRunning();
rc = m_parent->cancelAutoFocus();
- result.status = rc;
- result.request_api = evt;
- result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
- m_parent->signalAPIResult(&result);
+ if (!isAFRunning) {
+ result.status = rc;
+ result.request_api = evt;
+ result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
+ m_parent->signalAPIResult(&result);
+ }
}
break;
case QCAMERA_SM_EVT_SEND_COMMAND:
@@ -2294,11 +2309,14 @@
break;
case QCAMERA_SM_EVT_STOP_AUTO_FOCUS:
{
+ bool isAFRunning = m_parent->isAFRunning();
rc = m_parent->cancelAutoFocus();
- result.status = rc;
- result.request_api = evt;
- result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
- m_parent->signalAPIResult(&result);
+ if (!isAFRunning) {
+ result.status = rc;
+ result.request_api = evt;
+ result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
+ m_parent->signalAPIResult(&result);
+ }
}
break;
case QCAMERA_SM_EVT_SEND_COMMAND:
@@ -2640,11 +2658,14 @@
break;
case QCAMERA_SM_EVT_STOP_AUTO_FOCUS:
{
+ bool isAFRunning = m_parent->isAFRunning();
rc = m_parent->cancelAutoFocus();
- result.status = rc;
- result.request_api = evt;
- result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
- m_parent->signalAPIResult(&result);
+ if (!isAFRunning) {
+ result.status = rc;
+ result.request_api = evt;
+ result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
+ m_parent->signalAPIResult(&result);
+ }
}
break;
case QCAMERA_SM_EVT_SEND_COMMAND: