FP2-1751: Fix the camera issue for CTS test case failed
Fix the "android.hardware.camera2.cts.RecordingTest#testBurstVideoSnapshot fail" issue
Illegal state encountered in camera service.
Change-Id: I7888ada0a266a41095eedd3616ba5ba393b71ded
diff --git a/QCamera2/HAL/QCameraStateMachine.cpp b/QCamera2/HAL/QCameraStateMachine.cpp
index f803524..79961e3 100644
--- a/QCamera2/HAL/QCameraStateMachine.cpp
+++ b/QCamera2/HAL/QCameraStateMachine.cpp
@@ -1128,39 +1128,74 @@
}
break;
case QCAMERA_SM_EVT_TAKE_PICTURE:
- {
- if ( m_parent->mParameters.getRecordingHintValue() == false) {
- if (m_parent->isZSLMode() || m_parent->isLongshotEnabled()) {
- m_state = QCAMERA_SM_STATE_PREVIEW_PIC_TAKING;
- rc = m_parent->takePicture();
- if (rc != NO_ERROR) {
- // move state to previewing state
- m_state = QCAMERA_SM_STATE_PREVIEWING;
- }
- } else {
- m_state = QCAMERA_SM_STATE_PIC_TAKING;
- rc = m_parent->takePicture();
- if (rc != NO_ERROR) {
- // move state to preview stopped state
- m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED;
- }
- }
+ // {
+ // if ( m_parent->mParameters.getRecordingHintValue() == false) {
+ // if (m_parent->isZSLMode() || m_parent->isLongshotEnabled()) {
+ // m_state = QCAMERA_SM_STATE_PREVIEW_PIC_TAKING;
+ // rc = m_parent->takePicture();
+ // if (rc != NO_ERROR) {
+ // // move state to previewing state
+ // m_state = QCAMERA_SM_STATE_PREVIEWING;
+ // }
+ // } else {
+ // m_state = QCAMERA_SM_STATE_PIC_TAKING;
+ // rc = m_parent->takePicture();
+ // if (rc != NO_ERROR) {
+ // // move state to preview stopped state
+ // m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED;
+ // }
+ // }
- result.status = rc;
- result.request_api = evt;
- result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
- m_parent->signalAPIResult(&result);
- } else {
+ // result.status = rc;
+ // result.request_api = evt;
+ // result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
+ // m_parent->signalAPIResult(&result);
+ // } else {
+ // m_state = QCAMERA_SM_STATE_PREVIEW_PIC_TAKING;
+ // rc = m_parent->takeLiveSnapshot();
+ // if (rc != NO_ERROR ) {
+ // m_state = QCAMERA_SM_STATE_PREVIEWING;
+ // }
+ // result.status = rc;
+ // result.request_api = evt;
+ // result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
+ // m_parent->signalAPIResult(&result);
+ // }
+ // }
+ // break;
+ {
+ if ( m_parent->mParameters.getRecordingHintValue() == true) {
+ m_parent->stopPreview();
+ m_parent->mParameters.updateRecordingHintValue(FALSE);
+ // start preview again
+ rc = m_parent->preparePreview();
+ if (rc == NO_ERROR) {
+ rc = m_parent->startPreview();
+ if (rc != NO_ERROR) {
+ m_parent->unpreparePreview();
+ }
+ }
+ }
+ if (m_parent->isZSLMode() || m_parent->isLongshotEnabled()) {
m_state = QCAMERA_SM_STATE_PREVIEW_PIC_TAKING;
- rc = m_parent->takeLiveSnapshot();
- if (rc != NO_ERROR ) {
+ rc = m_parent->takePicture();
+ if (rc != NO_ERROR) {
+ // move state to previewing state
m_state = QCAMERA_SM_STATE_PREVIEWING;
}
- result.status = rc;
- result.request_api = evt;
- result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
- m_parent->signalAPIResult(&result);
+ } else {
+ m_state = QCAMERA_SM_STATE_PIC_TAKING;
+ rc = m_parent->takePicture();
+ if (rc != NO_ERROR) {
+ // move state to preview stopped state
+ m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED;
+ }
}
+
+ 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: