summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/CameraManager.java
diff options
context:
space:
mode:
authorAngus Kong <shkong@google.com>2013-04-15 12:11:15 -0700
committerAngus Kong <shkong@google.com>2013-04-15 13:59:14 -0700
commit36ed867759d089723fc40947d772bb21deba5096 (patch)
tree296dc152acacac080551cbf2030a71692989761b /src/com/android/camera/CameraManager.java
parent0408c9aef21d1e4e9afb1862897afdc8e21906fd (diff)
downloadandroid_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.java36
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() {