summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSai Kumar Sanagavarapu <ssanagav@codeaurora.org>2015-04-07 19:28:18 +0530
committerSai Kumar Sanagavarapu <ssanagav@codeaurora.org>2015-04-08 11:54:49 +0530
commit918e9627ecd69dab90be053bba59c6593ad235e9 (patch)
tree757a84d68b97afca1e15df5cc7b6147c08196cc9 /src
parent2405cbf18879dd524120d82a21233863b79af5be (diff)
downloadandroid_packages_apps_Snap-918e9627ecd69dab90be053bba59c6593ad235e9.tar.gz
android_packages_apps_Snap-918e9627ecd69dab90be053bba59c6593ad235e9.tar.bz2
android_packages_apps_Snap-918e9627ecd69dab90be053bba59c6593ad235e9.zip
SnapdragonCamera: Fix camera parameters concurrent modification.
Parameters if updated from different threads will lead to concurrent modification exception in frameworks. To avoid this, use synchronize block whereever the parameters are being updated. Change-Id: I51dd27e1b4836ddef910224331551806ff66b24d
Diffstat (limited to 'src')
-rw-r--r--src/com/android/camera/PhotoModule.java47
1 files changed, 30 insertions, 17 deletions
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index bba073f68..6bfffb695 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -1518,20 +1518,23 @@ public class PhotoModule
// Set rotation and gps data.
int orientation = mOrientation;
mJpegRotation = CameraUtil.getJpegRotation(mCameraId, orientation);
- mParameters.setRotation(mJpegRotation);
String pictureFormat = mParameters.get(KEY_PICTURE_FORMAT);
Location loc = getLocationAccordPictureFormat(pictureFormat);
- CameraUtil.setGpsParameters(mParameters, loc);
- if (mRefocus) {
- mParameters.set(CameraSettings.KEY_QC_LEGACY_BURST,
- CameraSettings.KEY_QC_RE_FOCUS_COUNT);
- } else {
- mParameters.remove(CameraSettings.KEY_QC_LEGACY_BURST);
- }
+ synchronized (mCameraDevice) {
+ mParameters.setRotation(mJpegRotation);
+ CameraUtil.setGpsParameters(mParameters, loc);
- mCameraDevice.setParameters(mParameters);
- mParameters = mCameraDevice.getParameters();
+ if (mRefocus) {
+ mParameters.set(CameraSettings.KEY_QC_LEGACY_BURST,
+ CameraSettings.KEY_QC_RE_FOCUS_COUNT);
+ } else {
+ mParameters.remove(CameraSettings.KEY_QC_LEGACY_BURST);
+ }
+
+ mCameraDevice.setParameters(mParameters);
+ mParameters = mCameraDevice.getParameters();
+ }
mBurstSnapNum = mParameters.getInt("num-snaps-per-shutter");
mReceivedSnapNum = 0;
@@ -1870,9 +1873,11 @@ public class PhotoModule
if (oldOrientation != mOrientation) {
Log.v(TAG, "onOrientationChanged, update parameters");
if (mParameters != null && mCameraDevice != null) {
- setFlipValue();
- updatePowerMode();
- mCameraDevice.setParameters(mParameters);
+ synchronized (mCameraDevice) {
+ setFlipValue();
+ updatePowerMode();
+ mCameraDevice.setParameters(mParameters);
+ }
}
mUI.setOrientation(mOrientation, true);
if (mGraphView != null) {
@@ -4255,10 +4260,12 @@ public class PhotoModule
mZoomValue = index;
if (mParameters == null || mCameraDevice == null) return index;
// Set zoom parameters asynchronously
- mParameters.setZoom(mZoomValue);
- mCameraDevice.setParameters(mParameters);
- Parameters p = mCameraDevice.getParameters();
- if (p != null) return p.getZoom();
+ synchronized (mCameraDevice) {
+ mParameters.setZoom(mZoomValue);
+ mCameraDevice.setParameters(mParameters);
+ Parameters p = mCameraDevice.getParameters();
+ if (p != null) return p.getZoom();
+ }
return index;
}
@@ -4363,6 +4370,12 @@ public class PhotoModule
@Override
public void onMakeupLevel(String key, String value) {
+ synchronized (mCameraDevice) {
+ onMakeupLevelSync(key, value);
+ }
+ }
+
+ public void onMakeupLevelSync(String key, String value) {
Log.d(TAG, "PhotoModule.onMakeupLevel(): key is " + key + ", value is " + value);
if(TextUtils.isEmpty(value)) {