diff options
author | Tyler Luu <tluu@ti.com> | 2011-10-26 04:44:38 -0500 |
---|---|---|
committer | Iliyan Malchev <malchev@google.com> | 2011-11-07 12:07:36 -0800 |
commit | a58c483de2c8188e41fd9635042c31820d13b845 (patch) | |
tree | 96c330d843163689d59011128e27d99decf60082 /camera/BaseCameraAdapter.cpp | |
parent | d9949c1e47698ef0e36ffadeebe642a3abe53f8b (diff) | |
download | hardware_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.cpp | 81 |
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() |