summaryrefslogtreecommitdiffstats
path: root/camera/BaseCameraAdapter.cpp
diff options
context:
space:
mode:
authorTyler Luu <tluu@ti.com>2011-10-26 04:44:38 -0500
committerIliyan Malchev <malchev@google.com>2011-11-07 12:07:36 -0800
commita58c483de2c8188e41fd9635042c31820d13b845 (patch)
tree96c330d843163689d59011128e27d99decf60082 /camera/BaseCameraAdapter.cpp
parentd9949c1e47698ef0e36ffadeebe642a3abe53f8b (diff)
downloadhardware_ti_omap4xxx-a58c483de2c8188e41fd9635042c31820d13b845.zip
hardware_ti_omap4xxx-a58c483de2c8188e41fd9635042c31820d13b845.tar.gz
hardware_ti_omap4xxx-a58c483de2c8188e41fd9635042c31820d13b845.tar.bz2
CameraHal: Add function to rollback state machine
Fix 1/3 for b/5472396. Adding a function to rollback the state machine to INTITIALIZED_STATE from any given current state. With this function, we can better manage the different states that CameraAdapter could be in when stopPreview is called. Change-Id: I0a456738e8575873b5ac6fb2a31395dab54ef6f7 Signed-off-by: Tyler Luu <tluu@ti.com>
Diffstat (limited to 'camera/BaseCameraAdapter.cpp')
-rw-r--r--camera/BaseCameraAdapter.cpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/camera/BaseCameraAdapter.cpp b/camera/BaseCameraAdapter.cpp
index 789682e..d95fdc3 100644
--- a/camera/BaseCameraAdapter.cpp
+++ b/camera/BaseCameraAdapter.cpp
@@ -2123,6 +2123,87 @@ status_t BaseCameraAdapter::setState(CameraCommands operation)
return ret;
}
+status_t BaseCameraAdapter::rollbackToInitializedState()
+{
+ status_t ret = NO_ERROR;
+
+ LOG_FUNCTION_NAME;
+
+ while ((getState() != INTIALIZED_STATE) && (ret == NO_ERROR)) {
+ ret = rollbackToPreviousState();
+ }
+
+ LOG_FUNCTION_NAME_EXIT;
+
+ return ret;
+}
+
+status_t BaseCameraAdapter::rollbackToPreviousState()
+{
+ status_t ret = NO_ERROR;
+
+ LOG_FUNCTION_NAME;
+
+ CameraAdapter::AdapterState currentState = getState();
+
+ switch (currentState) {
+ case INTIALIZED_STATE:
+ return NO_ERROR;
+
+ case PREVIEW_STATE:
+ ret = sendCommand(CAMERA_STOP_PREVIEW);
+ break;
+
+ case CAPTURE_STATE:
+ ret = sendCommand(CAMERA_STOP_IMAGE_CAPTURE);
+ break;
+
+ case BRACKETING_STATE:
+ ret = sendCommand(CAMERA_STOP_BRACKET_CAPTURE);
+ break;
+
+ case AF_STATE:
+ ret = sendCommand(CAMERA_CANCEL_AUTOFOCUS);
+ break;
+
+ case ZOOM_STATE:
+ ret = sendCommand(CAMERA_STOP_SMOOTH_ZOOM);
+ break;
+
+ case VIDEO_STATE:
+ ret = sendCommand(CAMERA_STOP_VIDEO);
+ break;
+
+ case VIDEO_AF_STATE:
+ ret = sendCommand(CAMERA_CANCEL_AUTOFOCUS);
+ break;
+
+ case VIDEO_CAPTURE_STATE:
+ ret = sendCommand(CAMERA_STOP_IMAGE_CAPTURE);
+ break;
+
+ case AF_ZOOM_STATE:
+ ret = sendCommand(CAMERA_STOP_SMOOTH_ZOOM);
+ break;
+
+ case VIDEO_ZOOM_STATE:
+ ret = sendCommand(CAMERA_STOP_SMOOTH_ZOOM);
+ break;
+
+ case BRACKETING_ZOOM_STATE:
+ ret = sendCommand(CAMERA_STOP_SMOOTH_ZOOM);
+ break;
+
+ default:
+ CAMHAL_LOGEA("Invalid Adapter state!");
+ ret = INVALID_OPERATION;
+ }
+
+ LOG_FUNCTION_NAME_EXIT;
+
+ return ret;
+}
+
//State transition finished successfully.
//Commit the state and unlock the adapter state.
status_t BaseCameraAdapter::commitState()