summaryrefslogtreecommitdiffstats
path: root/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java
diff options
context:
space:
mode:
authorIgor Murashkin <iam@google.com>2014-09-09 11:50:23 -0700
committerThe Android Automerger <android-build@google.com>2014-09-09 15:20:50 -0700
commitbcf9446a175d8f5090a2832296e5e42d71b1a601 (patch)
tree2b9ba4fa3ba533d1a4842c90ca6df899a6cad906 /camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java
parentee79c6e741bf8a5ba4166836d4f4cf92bfca6428 (diff)
downloadandroid_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.java19
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);
}
}