summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAngus Kong <shkong@google.com>2013-04-01 14:30:30 -0700
committerAngus Kong <shkong@google.com>2013-04-01 15:11:23 -0700
commit73749f2d3c4a403b7b8455edcfd260c1d8633be8 (patch)
tree7e8521847c45545453d74c69485e503c46caebd2
parente5a79a5bd8ca3e25c14e4fe5df7c1ee1b544dc7e (diff)
downloadandroid_packages_apps_Snap-73749f2d3c4a403b7b8455edcfd260c1d8633be8.tar.gz
android_packages_apps_Snap-73749f2d3c4a403b7b8455edcfd260c1d8633be8.tar.bz2
android_packages_apps_Snap-73749f2d3c4a403b7b8455edcfd260c1d8633be8.zip
Don't use SynchronousQueue to pass results.
bug:8517092 Change-Id: I0f2084bc1d52f37743559391cd2217275e3d485d
-rw-r--r--src/com/android/camera/CameraManager.java68
1 files changed, 27 insertions, 41 deletions
diff --git a/src/com/android/camera/CameraManager.java b/src/com/android/camera/CameraManager.java
index e89c2eb81..b1161cdc4 100644
--- a/src/com/android/camera/CameraManager.java
+++ b/src/com/android/camera/CameraManager.java
@@ -29,7 +29,6 @@ import android.hardware.Camera.Parameters;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.PreviewCallback;
import android.hardware.Camera.ShutterCallback;
-import android.os.ConditionVariable;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
@@ -40,7 +39,6 @@ import android.view.SurfaceHolder;
import com.android.gallery3d.common.ApiHelper;
import java.io.IOException;
-import java.util.concurrent.SynchronousQueue;
public class CameraManager {
private static final String TAG = "CameraManager";
@@ -48,10 +46,7 @@ public class CameraManager {
private Parameters mParameters;
private boolean mParametersIsDirty;
- private SynchronousQueue<Parameters> mParametersQueue =
- new SynchronousQueue<Parameters>();
- private SynchronousQueue<IOExceptionHolder> mReconnectExceptionQueue =
- new SynchronousQueue<IOExceptionHolder>();
+ private IOException mReconnectIOException;
private static final int RELEASE = 1;
private static final int RECONNECT = 2;
@@ -148,16 +143,11 @@ public class CameraManager {
return;
case RECONNECT:
- IOExceptionHolder holder = new IOExceptionHolder();
- holder.ex = null;
+ mReconnectIOException = null;
try {
mCamera.reconnect();
} catch (IOException ex) {
- holder.ex = ex;
- }
- try {
- mReconnectExceptionQueue.put(holder);
- } catch (InterruptedException ex) {
+ mReconnectIOException = ex;
}
return;
@@ -240,11 +230,7 @@ public class CameraManager {
return;
case GET_PARAMETERS:
- try {
- mParametersQueue.put(mCamera.getParameters());
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
+ mParameters = mCamera.getParameters();
return;
case SET_PARAMETERS_ASYNC:
@@ -303,14 +289,6 @@ public class CameraManager {
}
public class CameraProxy {
- private ConditionVariable mWaitDoneLock = new ConditionVariable();
- private Runnable mUnlockRunnable = new Runnable() {
- @Override
- public void run() {
- mWaitDoneLock.open();
- }
- };
-
private CameraProxy() {
Assert(mCamera != null);
@@ -329,13 +307,9 @@ public class CameraManager {
public void reconnect() throws IOException {
mCameraHandler.sendEmptyMessage(RECONNECT);
- IOExceptionHolder holder = null;
- try {
- holder = mReconnectExceptionQueue.take();
- } catch (InterruptedException ex) {
- }
- if (holder != null && holder.ex != null) {
- throw holder.ex;
+ waitDone();
+ if (mReconnectIOException != null) {
+ throw mReconnectIOException;
}
}
@@ -460,11 +434,8 @@ public class CameraManager {
public Parameters getParameters() {
if (mParametersIsDirty || mParameters == null) {
mCameraHandler.sendEmptyMessage(GET_PARAMETERS);
- try {
- mParameters = mParametersQueue.take();
- mParametersIsDirty = false;
- } catch (InterruptedException ex) {
- }
+ waitDone();
+ mParametersIsDirty = false;
}
return mParameters;
}
@@ -475,9 +446,24 @@ public class CameraManager {
}
public void waitDone() {
- mWaitDoneLock.close();
- mCameraHandler.post(mUnlockRunnable);
- mWaitDoneLock.block();
+ final Object waitDoneLock = new Object();
+ final Runnable unlockRunnable = new Runnable() {
+ @Override
+ public void run() {
+ synchronized (waitDoneLock) {
+ waitDoneLock.notifyAll();
+ }
+ }
+ };
+
+ synchronized (waitDoneLock) {
+ mCameraHandler.post(unlockRunnable);
+ try {
+ waitDoneLock.wait();
+ } catch (InterruptedException ex) {
+ Log.v(TAG, "waitDone interrupted");
+ }
+ }
}
}
}