summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera
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-16 16:42:17 +0530
commit2c8e62861dba447a6f4ff698593401e9c1db749c (patch)
treee3b97704cd4081644fb890a9a4d0e6efd7cca0f7 /src/com/android/camera
parent0202eb424a9f8dfe472b6cfbf35b88f3fdacd025 (diff)
downloadandroid_packages_apps_Snap-2c8e62861dba447a6f4ff698593401e9c1db749c.tar.gz
android_packages_apps_Snap-2c8e62861dba447a6f4ff698593401e9c1db749c.tar.bz2
android_packages_apps_Snap-2c8e62861dba447a6f4ff698593401e9c1db749c.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/com/android/camera')
-rw-r--r--src/com/android/camera/PhotoModule.java59
1 files changed, 36 insertions, 23 deletions
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index e2fc34b0c..4c19356d6 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -1520,28 +1520,31 @@ 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);
- // Unlock AE&AWB, if they continue
- // to be locked during snapshot, then
- // side effects could be triggered w.r.t.
- // flash.
- mFocusManager.setAeAwbLock(false);
- setAutoExposureLockIfSupported();
- setAutoWhiteBalanceLockIfSupported();
+ 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();
+ // Unlock AE&AWB, if they continue
+ // to be locked during snapshot, then
+ // side effects could be triggered w.r.t.
+ // flash.
+ mFocusManager.setAeAwbLock(false);
+ setAutoExposureLockIfSupported();
+ setAutoWhiteBalanceLockIfSupported();
+
+ mCameraDevice.setParameters(mParameters);
+ mParameters = mCameraDevice.getParameters();
+ }
mBurstSnapNum = mParameters.getInt("num-snaps-per-shutter");
mReceivedSnapNum = 0;
@@ -1885,8 +1888,10 @@ public class PhotoModule
if (oldOrientation != mOrientation) {
if (mParameters != null && mCameraDevice != null && mCameraState == IDLE) {
Log.v(TAG, "onOrientationChanged, update parameters");
- setFlipValue();
- mCameraDevice.setParameters(mParameters);
+ synchronized (mCameraDevice) {
+ setFlipValue();
+ mCameraDevice.setParameters(mParameters);
+ }
}
mUI.setOrientation(mOrientation, true);
if (mGraphView != null) {
@@ -4285,10 +4290,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;
}
@@ -4382,6 +4389,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)) {