diff options
author | Puneet Lall <puneetl@google.com> | 2014-09-12 18:02:34 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-09-12 18:02:34 +0000 |
commit | 5c56b2c4bf6b31dee65806fcfa67b877657c3975 (patch) | |
tree | 56186f88ed5038122e8c6471d698defff7793067 | |
parent | 3c324d34bd0930c615bac32bdb6bbbf7d9cf31c5 (diff) | |
parent | 70a96525f16ca6c6abb9a7a9dab26ba1e61235dd (diff) | |
download | android_packages_apps_Camera2-5c56b2c4bf6b31dee65806fcfa67b877657c3975.tar.gz android_packages_apps_Camera2-5c56b2c4bf6b31dee65806fcfa67b877657c3975.tar.bz2 android_packages_apps_Camera2-5c56b2c4bf6b31dee65806fcfa67b877657c3975.zip |
am 70a96525: Don\'t send redundant requests to start the preview
* commit '70a96525f16ca6c6abb9a7a9dab26ba1e61235dd':
Don't send redundant requests to start the preview
-rw-r--r-- | src/com/android/camera/PhotoModule.java | 81 |
1 files changed, 55 insertions, 26 deletions
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java index 173ecaefc..8865a80be 100644 --- a/src/com/android/camera/PhotoModule.java +++ b/src/com/android/camera/PhotoModule.java @@ -160,6 +160,13 @@ public class PhotoModule private boolean mAwbLockSupported; private boolean mContinuousFocusSupported; + /* + * If true, attempts to start the preview will be denied. This ensures that + * we never call startPreview multiple times when making changes to + * settings. + */ + private boolean mStartPreviewLock = false; + // The degrees of the device rotated clockwise from its natural orientation. private int mOrientation = OrientationEventListener.ORIENTATION_UNKNOWN; @@ -1383,12 +1390,21 @@ public class PhotoModule // Do camera parameter dependent initialization. mCameraSettings = mCameraDevice.getSettings(); - setCameraParameters(UPDATE_PARAM_ALL); - // Set a listener which updates camera parameters based - // on changed settings. - SettingsManager settingsManager = mActivity.getSettingsManager(); - settingsManager.addListener(this); - mCameraPreviewParamsReady = true; + // HACK: The call to setCameraParameters(UPDATE_PARAM_ALL) may + // eventually recurse back into startPreview(). + // To avoid calling startPreview() twice, first acquire + // mStartPreviewLock. + mStartPreviewLock = true; + try { + setCameraParameters(UPDATE_PARAM_ALL); + // Set a listener which updates camera parameters based + // on changed settings. + SettingsManager settingsManager = mActivity.getSettingsManager(); + settingsManager.addListener(this); + mCameraPreviewParamsReady = true; + } finally { + mStartPreviewLock = false; + } startPreview(); @@ -1945,33 +1961,46 @@ public class PhotoModule * The start/stop preview should only run on the UI thread. */ private void startPreview() { - if (!checkPreviewPreconditions()) { + // HACK: The call to setCameraParameters(UPDATE_PARAM_ALL) may + // eventually recurse back into startPreview(). + // To avoid calling startPreview() twice, we must acquire + // mStartPreviewLock. + if (mStartPreviewLock) { + // do nothing return; } + mStartPreviewLock = true; + try { + if (!checkPreviewPreconditions()) { + return; + } - mCameraDevice.setErrorCallback(mHandler, mErrorCallback); - setDisplayOrientation(); + mCameraDevice.setErrorCallback(mHandler, mErrorCallback); + setDisplayOrientation(); - if (!mSnapshotOnIdle) { - // If the focus mode is continuous autofocus, call cancelAutoFocus - // to resume it because it may have been paused by autoFocus call. - if (mFocusManager.getFocusMode(mCameraSettings.getCurrentFocusMode()) == - CameraCapabilities.FocusMode.CONTINUOUS_PICTURE) { - mCameraDevice.cancelAutoFocus(); + if (!mSnapshotOnIdle) { + // If the focus mode is continuous autofocus, call cancelAutoFocus + // to resume it because it may have been paused by autoFocus call. + if (mFocusManager.getFocusMode(mCameraSettings.getCurrentFocusMode()) == + CameraCapabilities.FocusMode.CONTINUOUS_PICTURE) { + mCameraDevice.cancelAutoFocus(); + } + mFocusManager.setAeAwbLock(false); // Unlock AE and AWB. } - mFocusManager.setAeAwbLock(false); // Unlock AE and AWB. - } - setCameraParameters(UPDATE_PARAM_ALL); - mCameraDevice.setPreviewTexture(mActivity.getCameraAppUI().getSurfaceTexture()); + setCameraParameters(UPDATE_PARAM_ALL); + mCameraDevice.setPreviewTexture(mActivity.getCameraAppUI().getSurfaceTexture()); - Log.i(TAG, "startPreview"); - mCameraDevice.startPreview(); + Log.i(TAG, "startPreview"); + mCameraDevice.startPreview(); - mFocusManager.onPreviewStarted(); - onPreviewStarted(); - SessionStatsCollector.instance().previewActive(true); - if (mSnapshotOnIdle) { - mHandler.post(mDoSnapRunnable); + mFocusManager.onPreviewStarted(); + onPreviewStarted(); + SessionStatsCollector.instance().previewActive(true); + if (mSnapshotOnIdle) { + mHandler.post(mDoSnapRunnable); + } + } finally { + mStartPreviewLock = false; } } |