summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSai Kumar Sanagavarapu <ssanagav@codeaurora.org>2015-03-13 11:35:58 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2015-03-15 22:56:01 -0700
commit17205b597d7ba0c12f537ae0cfc6cee2293e427a (patch)
treeb0e80935bea9a06afdaa948d01de31b16a0a90f1 /src
parent1d373ecbf3276891a0d2d27a9f3eb736941046ad (diff)
downloadandroid_packages_apps_Snap-17205b597d7ba0c12f537ae0cfc6cee2293e427a.tar.gz
android_packages_apps_Snap-17205b597d7ba0c12f537ae0cfc6cee2293e427a.tar.bz2
android_packages_apps_Snap-17205b597d7ba0c12f537ae0cfc6cee2293e427a.zip
SnapdragonCamera: Fix preview window race condition.
There could be race condition between onPreviewUIReady() and start preview thread leading to final null preview window being set to camera device even though a valid surface is available at the time of start preview. Fix this by synchronizing these two threads. Change-Id: I07654ee3c5d1c71530ef5b588f30d22c65f04e61
Diffstat (limited to 'src')
-rw-r--r--src/com/android/camera/PhotoModule.java29
1 files changed, 16 insertions, 13 deletions
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index 72e0f3f4d..3cc70c63c 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -576,12 +576,14 @@ public class PhotoModule
if (mCameraState == PREVIEW_STOPPED) {
startPreview();
} else {
- SurfaceHolder sh = mUI.getSurfaceHolder();
- if (sh == null) {
- Log.w(TAG, "startPreview: holder for preview are not ready.");
- return;
+ synchronized (mCameraDevice) {
+ SurfaceHolder sh = mUI.getSurfaceHolder();
+ if (sh == null) {
+ Log.w(TAG, "startPreview: holder for preview are not ready.");
+ return;
+ }
+ mCameraDevice.setPreviewDisplay(sh);
}
- mCameraDevice.setPreviewDisplay(sh);
}
}
@@ -2581,15 +2583,16 @@ public class PhotoModule
return;
}
- SurfaceHolder sh = null;
- Log.v(TAG, "startPreview: SurfaceHolder (MDP path)");
- if (mUI != null) {
- sh = mUI.getSurfaceHolder();
- }
+ synchronized (mCameraDevice) {
+ SurfaceHolder sh = null;
+ Log.v(TAG, "startPreview: SurfaceHolder (MDP path)");
+ if (mUI != null) {
+ sh = mUI.getSurfaceHolder();
+ }
- setCameraParameters(UPDATE_PARAM_ALL);
- // Let UI set its expected aspect ratio
- mCameraDevice.setPreviewDisplay(sh);
+ // Let UI set its expected aspect ratio
+ mCameraDevice.setPreviewDisplay(sh);
+ }
if (!mCameraPreviewParamsReady) {
Log.w(TAG, "startPreview: parameters for preview are not ready.");