diff options
author | Sai Kumar Sanagavarapu <ssanagav@codeaurora.org> | 2015-03-13 11:35:58 +0530 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2015-03-15 22:56:01 -0700 |
commit | 17205b597d7ba0c12f537ae0cfc6cee2293e427a (patch) | |
tree | b0e80935bea9a06afdaa948d01de31b16a0a90f1 /src | |
parent | 1d373ecbf3276891a0d2d27a9f3eb736941046ad (diff) | |
download | android_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.java | 29 |
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."); |