diff options
author | Igor Murashkin <iam@google.com> | 2014-09-09 11:50:23 -0700 |
---|---|---|
committer | The Android Automerger <android-build@google.com> | 2014-09-09 15:20:50 -0700 |
commit | bcf9446a175d8f5090a2832296e5e42d71b1a601 (patch) | |
tree | 2b9ba4fa3ba533d1a4842c90ca6df899a6cad906 /camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java | |
parent | ee79c6e741bf8a5ba4166836d4f4cf92bfca6428 (diff) | |
download | android_frameworks_ex-bcf9446a175d8f5090a2832296e5e42d71b1a601.tar.gz android_frameworks_ex-bcf9446a175d8f5090a2832296e5e42d71b1a601.tar.bz2 android_frameworks_ex-bcf9446a175d8f5090a2832296e5e42d71b1a601.zip |
portability: Fix a bug where long AF callbacks caused ISE timeouts
Bug: 17403384
Change-Id: I2f452f79ffb4c0c3327ea5bf7db3f9d26e98ff51
Diffstat (limited to 'camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java')
-rw-r--r-- | camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java index 949ac62..3704f59 100644 --- a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java +++ b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java @@ -242,6 +242,7 @@ class AndroidCameraAgentImpl extends CameraAgent { private Camera mCamera; private int mCameraId; private ParametersCache mParameterCache; + private int mCancelAfPending = 0; private class CaptureCallbacks { public final ShutterCallback mShutter; @@ -323,6 +324,7 @@ class AndroidCameraAgentImpl extends CameraAgent { @Override public void handleMessage(final Message msg) { super.handleMessage(msg); + Log.v(TAG, "handleMessage - action = '" + CameraActions.stringify(msg.what) + "'"); try { switch (msg.what) { case CameraActions.OPEN_CAMERA: { @@ -451,17 +453,32 @@ class AndroidCameraAgentImpl extends CameraAgent { } case CameraActions.AUTO_FOCUS: { + if (mCancelAfPending > 0) { + Log.v(TAG, "handleMessage - Ignored AUTO_FOCUS because there was " + + mCancelAfPending + " pending CANCEL_AUTO_FOCUS messages"); + break; // ignore AF because a CANCEL_AF is queued after this + } mCameraState.setState(AndroidCameraStateHolder.CAMERA_FOCUSING); mCamera.autoFocus((AutoFocusCallback) msg.obj); break; } case CameraActions.CANCEL_AUTO_FOCUS: { + // Ignore all AFs that were already queued until we see + // a CANCEL_AUTO_FOCUS_FINISH + mCancelAfPending++; mCamera.cancelAutoFocus(); mCameraState.setState(AndroidCameraStateHolder.CAMERA_IDLE); break; } + case CameraActions.CANCEL_AUTO_FOCUS_FINISH: { + // Stop ignoring AUTO_FOCUS messages unless there are additional + // CANCEL_AUTO_FOCUSes that were added + mCancelAfPending--; + break; + } + case CameraActions.SET_AUTO_FOCUS_MOVE_CALLBACK: { setAutoFocusMoveCallback(mCamera, msg.obj); break; @@ -585,6 +602,8 @@ class AndroidCameraAgentImpl extends CameraAgent { } }); } + } finally { + WaitDoneBundle.unblockSyncWaiters(msg); } } |