diff options
author | Santhosh Kumar Thimmanna Bhattar <sthim@codeaurora.org> | 2014-01-10 14:50:30 +0530 |
---|---|---|
committer | Santhosh Kumar Thimmanna Bhattar <sthim@codeaurora.org> | 2014-01-13 18:20:03 +0530 |
commit | edc737a2dd8e844b56508ed387c22eb9a7048d72 (patch) | |
tree | 50c1ebc09f75d0921ab128551297854fdcf37367 | |
parent | abb8aa280b72c90b966f8f06480b2dfb76f9cd8b (diff) | |
download | android_packages_apps_Snap-edc737a2dd8e844b56508ed387c22eb9a7048d72.tar.gz android_packages_apps_Snap-edc737a2dd8e844b56508ed387c22eb9a7048d72.tar.bz2 android_packages_apps_Snap-edc737a2dd8e844b56508ed387c22eb9a7048d72.zip |
Camera2: Synchronize access to camera parameters
- Concurrent access between the main handler
thread and the camera start-up thread w.r.t.
'mParameters' is possible. This change will
synchronize the two threads in order to avoid
any exceptions.
( cherrypicked from commit e988411c441410f270fe0b98dfd0d9b1f033503f )
Change-Id: I290452723b3687eba5240f451cc94aef175a9fc4
CRs-Fixed: 539634
-rw-r--r-- | src/com/android/camera/PhotoModule.java | 58 |
1 files changed, 33 insertions, 25 deletions
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java index c85447e05..f12f13008 100644 --- a/src/com/android/camera/PhotoModule.java +++ b/src/com/android/camera/PhotoModule.java @@ -443,9 +443,11 @@ public class PhotoModule case CONFIGURE_SKIN_TONE_FACTOR: { if ((mCameraDevice != null) && isCameraIdle()) { - mParameters = mCameraDevice.getParameters(); - mParameters.set("skinToneEnhancement", String.valueOf(msg.arg1)); - mCameraDevice.setParameters(mParameters); + synchronized (mCameraDevice) { + mParameters = mCameraDevice.getParameters(); + mParameters.set("skinToneEnhancement", String.valueOf(msg.arg1)); + mCameraDevice.setParameters(mParameters); + } } break; } @@ -1937,10 +1939,12 @@ public class PhotoModule (mFocusManager.getCurrentFocusState() != mFocusManager.STATE_FOCUSING_SNAP_ON_FINISH) ) { if (mbrightness > MINIMUM_BRIGHTNESS) { mbrightness-=mbrightness_step; - /* Set the "luma-adaptation" parameter */ - mParameters = mCameraDevice.getParameters(); - mParameters.set("luma-adaptation", String.valueOf(mbrightness)); - mCameraDevice.setParameters(mParameters); + synchronized (mCameraDevice) { + /* Set the "luma-adaptation" parameter */ + mParameters = mCameraDevice.getParameters(); + mParameters.set("luma-adaptation", String.valueOf(mbrightness)); + mCameraDevice.setParameters(mParameters); + } } brightnessProgressBar.setProgress(mbrightness); brightnessProgressBar.setVisibility(View.VISIBLE); @@ -1952,10 +1956,12 @@ public class PhotoModule (mFocusManager.getCurrentFocusState() != mFocusManager.STATE_FOCUSING_SNAP_ON_FINISH) ) { if (mbrightness < MAXIMUM_BRIGHTNESS) { mbrightness+=mbrightness_step; - /* Set the "luma-adaptation" parameter */ - mParameters = mCameraDevice.getParameters(); - mParameters.set("luma-adaptation", String.valueOf(mbrightness)); - mCameraDevice.setParameters(mParameters); + synchronized (mCameraDevice) { + /* Set the "luma-adaptation" parameter */ + mParameters = mCameraDevice.getParameters(); + mParameters.set("luma-adaptation", String.valueOf(mbrightness)); + mCameraDevice.setParameters(mParameters); + } } brightnessProgressBar.setProgress(mbrightness); brightnessProgressBar.setVisibility(View.VISIBLE); @@ -2705,25 +2711,27 @@ public class PhotoModule // the subsets actually need updating. The PREFERENCE set needs extra // locking because the preference can be changed from GLThread as well. private void setCameraParameters(int updateSet) { - boolean doModeSwitch = false; + synchronized (mCameraDevice) { + boolean doModeSwitch = false; - if ((updateSet & UPDATE_PARAM_INITIALIZE) != 0) { - updateCameraParametersInitialize(); - } + if ((updateSet & UPDATE_PARAM_INITIALIZE) != 0) { + updateCameraParametersInitialize(); + } - if ((updateSet & UPDATE_PARAM_ZOOM) != 0) { - updateCameraParametersZoom(); - } + if ((updateSet & UPDATE_PARAM_ZOOM) != 0) { + updateCameraParametersZoom(); + } - if ((updateSet & UPDATE_PARAM_PREFERENCE) != 0) { - doModeSwitch = updateCameraParametersPreference(); - } + if ((updateSet & UPDATE_PARAM_PREFERENCE) != 0) { + doModeSwitch = updateCameraParametersPreference(); + } - mCameraDevice.setParameters(mParameters); + mCameraDevice.setParameters(mParameters); - // Switch to gcam module if HDR+ was selected - if (doModeSwitch && !mIsImageCaptureIntent) { - mHandler.sendEmptyMessage(SWITCH_TO_GCAM_MODULE); + // Switch to gcam module if HDR+ was selected + if (doModeSwitch && !mIsImageCaptureIntent) { + mHandler.sendEmptyMessage(SWITCH_TO_GCAM_MODULE); + } } } |