diff options
author | Angus Kong <shkong@google.com> | 2013-04-15 12:11:15 -0700 |
---|---|---|
committer | Angus Kong <shkong@google.com> | 2013-04-15 13:59:14 -0700 |
commit | 36ed867759d089723fc40947d772bb21deba5096 (patch) | |
tree | 296dc152acacac080551cbf2030a71692989761b /src/com/android/camera/CameraManager.java | |
parent | 0408c9aef21d1e4e9afb1862897afdc8e21906fd (diff) | |
download | android_packages_apps_Snap-36ed867759d089723fc40947d772bb21deba5096.tar.gz android_packages_apps_Snap-36ed867759d089723fc40947d772bb21deba5096.tar.bz2 android_packages_apps_Snap-36ed867759d089723fc40947d772bb21deba5096.zip |
Use extra copy of parameters for concurrent access
bug:8585306
Change-Id: I21b8915c53508e4820e46b49171149189cb6012e
Diffstat (limited to 'src/com/android/camera/CameraManager.java')
-rw-r--r-- | src/com/android/camera/CameraManager.java | 36 |
1 files changed, 15 insertions, 21 deletions
diff --git a/src/com/android/camera/CameraManager.java b/src/com/android/camera/CameraManager.java index af4b13f29..c7005cf54 100644 --- a/src/com/android/camera/CameraManager.java +++ b/src/com/android/camera/CameraManager.java @@ -68,15 +68,18 @@ public class CameraManager { private static final int SET_ERROR_CALLBACK = 18; private static final int SET_PARAMETERS = 19; private static final int GET_PARAMETERS = 20; - private static final int SET_PARAMETERS_ASYNC = 21; - private static final int SET_PREVIEW_DISPLAY_ASYNC = 22; - private static final int SET_PREVIEW_CALLBACK = 23; - private static final int ENABLE_SHUTTER_SOUND = 24; - private static final int REFRESH_PARAMETERS = 25; + private static final int SET_PREVIEW_DISPLAY_ASYNC = 21; + private static final int SET_PREVIEW_CALLBACK = 22; + private static final int ENABLE_SHUTTER_SOUND = 23; + private static final int REFRESH_PARAMETERS = 24; private Handler mCameraHandler; private android.hardware.Camera mCamera; + // Used to retain a copy of Parameters for setting parameters. + private Parameters mParamsToSet; + + // This holder is used when we need to pass the exception // back to the calling thread. SynchornousQueue doesn't // allow we to pass a null object thus a holder is needed. @@ -226,7 +229,8 @@ public class CameraManager { case SET_PARAMETERS: mParametersIsDirty = true; - mCamera.setParameters((Parameters) msg.obj); + mParamsToSet.unflatten((String) msg.obj); + mCamera.setParameters(mParamsToSet); return; case GET_PARAMETERS: @@ -236,10 +240,6 @@ public class CameraManager { } return; - case SET_PARAMETERS_ASYNC: - mCamera.setParameters((Parameters) msg.obj); - return; - case SET_PREVIEW_CALLBACK: mCamera.setPreviewCallback((PreviewCallback) msg.obj); return; @@ -287,6 +287,9 @@ public class CameraManager { mCamera = android.hardware.Camera.open(cameraId); if (mCamera != null) { mParametersIsDirty = true; + if (mParamsToSet == null) { + mParamsToSet = mCamera.getParameters(); + } return new CameraProxy(); } else { return null; @@ -432,17 +435,8 @@ public class CameraManager { Log.v(TAG, "null parameters in setParameters()"); return; } - mCameraHandler.obtainMessage(SET_PARAMETERS, params).sendToTarget(); - } - - public void setParametersAsync(Parameters params) { - // TODO: remove this. - if (params == null) { - Log.v(TAG, "null parameters in setParameters()"); - return; - } - mCameraHandler.removeMessages(SET_PARAMETERS_ASYNC); - mCameraHandler.obtainMessage(SET_PARAMETERS_ASYNC, params).sendToTarget(); + mCameraHandler.obtainMessage(SET_PARAMETERS, params.flatten()) + .sendToTarget(); } public Parameters getParameters() { |