diff options
author | Angus Kong <shkong@google.com> | 2013-04-01 14:30:30 -0700 |
---|---|---|
committer | Angus Kong <shkong@google.com> | 2013-04-01 15:11:23 -0700 |
commit | 73749f2d3c4a403b7b8455edcfd260c1d8633be8 (patch) | |
tree | 7e8521847c45545453d74c69485e503c46caebd2 /src/com/android/camera/CameraManager.java | |
parent | e5a79a5bd8ca3e25c14e4fe5df7c1ee1b544dc7e (diff) | |
download | android_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
Diffstat (limited to 'src/com/android/camera/CameraManager.java')
-rw-r--r-- | src/com/android/camera/CameraManager.java | 68 |
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"); + } + } } } } |