diff options
author | Sol Boucher <solb@google.com> | 2014-06-05 13:47:24 -0700 |
---|---|---|
committer | Solomon Boucher <solb@google.com> | 2014-06-06 01:43:00 +0000 |
commit | 4b3f8004382192e066bb0c38bf39421f312daaf2 (patch) | |
tree | 94c1f6bda1169ffb00500df8b0c3cfc28df98611 /core/java/android | |
parent | 5b29e12cfbb600cbd39b8d95cfc2a18e50ad1739 (diff) | |
download | frameworks_base-4b3f8004382192e066bb0c38bf39421f312daaf2.zip frameworks_base-4b3f8004382192e066bb0c38bf39421f312daaf2.tar.gz frameworks_base-4b3f8004382192e066bb0c38bf39421f312daaf2.tar.bz2 |
camera2: Fix ordering issue between #onOpened and createCaptureSession
This resolves an issue where the CameraDevice.StateListener callbacks were
erroneously called before the CameraCaptureSession.StateListener ones,
preventing e.g. creating a capture session from the
CameraDevice.StateListener#onOpened() callback.
It also explicitly ignores CameraDevice.StateListener#onUnconfigured() calls
occurring before the first call to #close .
Bug: 15449190
Change-Id: Ic0094d53a65e42108201d7bb50734d17290fa9bf
Diffstat (limited to 'core/java/android')
-rw-r--r-- | core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java | 7 | ||||
-rw-r--r-- | core/java/android/hardware/camera2/impl/CameraDeviceImpl.java | 14 |
2 files changed, 13 insertions, 8 deletions
diff --git a/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java index f74fbaa..c3e042e 100644 --- a/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java @@ -446,7 +446,12 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession { @Override public void onUnconfigured(CameraDevice camera) { - mUnconfigureDrainer.taskFinished(); + synchronized (session) { + // Ignore #onUnconfigured before #close is called + if (mClosed) { + mUnconfigureDrainer.taskFinished(); + } + } } }; diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java index 9795082..d4adae1 100644 --- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java @@ -101,11 +101,11 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { @Override public void run() { if (!CameraDeviceImpl.this.isClosed()) { - mDeviceListener.onOpened(CameraDeviceImpl.this); StateListener sessionListener = mSessionStateListener; if (sessionListener != null) { sessionListener.onOpened(CameraDeviceImpl.this); } + mDeviceListener.onOpened(CameraDeviceImpl.this); } } }; @@ -114,11 +114,11 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { @Override public void run() { if (!CameraDeviceImpl.this.isClosed()) { - mDeviceListener.onUnconfigured(CameraDeviceImpl.this); StateListener sessionListener = mSessionStateListener; if (sessionListener != null) { sessionListener.onUnconfigured(CameraDeviceImpl.this); } + mDeviceListener.onUnconfigured(CameraDeviceImpl.this); } } }; @@ -127,11 +127,11 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { @Override public void run() { if (!CameraDeviceImpl.this.isClosed()) { - mDeviceListener.onActive(CameraDeviceImpl.this); StateListener sessionListener = mSessionStateListener; if (sessionListener != null) { sessionListener.onActive(CameraDeviceImpl.this); } + mDeviceListener.onActive(CameraDeviceImpl.this); } } }; @@ -140,11 +140,11 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { @Override public void run() { if (!CameraDeviceImpl.this.isClosed()) { - mDeviceListener.onBusy(CameraDeviceImpl.this); StateListener sessionListener = mSessionStateListener; if (sessionListener != null) { sessionListener.onBusy(CameraDeviceImpl.this); } + mDeviceListener.onBusy(CameraDeviceImpl.this); } } }; @@ -152,11 +152,11 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { private final Runnable mCallOnClosed = new Runnable() { @Override public void run() { - mDeviceListener.onClosed(CameraDeviceImpl.this); StateListener sessionListener = mSessionStateListener; if (sessionListener != null) { sessionListener.onClosed(CameraDeviceImpl.this); } + mDeviceListener.onClosed(CameraDeviceImpl.this); } }; @@ -164,11 +164,11 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { @Override public void run() { if (!CameraDeviceImpl.this.isClosed()) { - mDeviceListener.onIdle(CameraDeviceImpl.this); StateListener sessionListener = mSessionStateListener; if (sessionListener != null) { sessionListener.onIdle(CameraDeviceImpl.this); } + mDeviceListener.onIdle(CameraDeviceImpl.this); } } }; @@ -177,11 +177,11 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { @Override public void run() { if (!CameraDeviceImpl.this.isClosed()) { - mDeviceListener.onDisconnected(CameraDeviceImpl.this); StateListener sessionListener = mSessionStateListener; if (sessionListener != null) { sessionListener.onDisconnected(CameraDeviceImpl.this); } + mDeviceListener.onDisconnected(CameraDeviceImpl.this); } } }; |