summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPuneet Lall <puneetl@google.com>2014-09-12 18:02:34 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-09-12 18:02:34 +0000
commit5c56b2c4bf6b31dee65806fcfa67b877657c3975 (patch)
tree56186f88ed5038122e8c6471d698defff7793067
parent3c324d34bd0930c615bac32bdb6bbbf7d9cf31c5 (diff)
parent70a96525f16ca6c6abb9a7a9dab26ba1e61235dd (diff)
downloadandroid_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.java81
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;
}
}