summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndroid (Google) Code Review <android-gerrit@google.com>2009-10-08 00:07:05 -0400
committerAndroid (Google) Code Review <android-gerrit@google.com>2009-10-08 00:07:05 -0400
commit281acf421f4b977add75d736d1083413e1d5f24a (patch)
tree6c62fdef4e2753f2d657b2ef343762269cc5354f
parent7c12540f09659dec0a4222831ed7e5ab8d7b0cdf (diff)
parent2133640028ef53b33a93ecfb593d30c95fed84c6 (diff)
downloadframeworks_base-281acf421f4b977add75d736d1083413e1d5f24a.zip
frameworks_base-281acf421f4b977add75d736d1083413e1d5f24a.tar.gz
frameworks_base-281acf421f4b977add75d736d1083413e1d5f24a.tar.bz2
Merge change I52479480 into eclair
* changes: Retry overlay create if it fails. Bug 2153980.
-rw-r--r--camera/libcameraservice/CameraService.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/camera/libcameraservice/CameraService.cpp b/camera/libcameraservice/CameraService.cpp
index 8279914..b63e97f 100644
--- a/camera/libcameraservice/CameraService.cpp
+++ b/camera/libcameraservice/CameraService.cpp
@@ -563,7 +563,19 @@ status_t CameraService::Client::setOverlay()
status_t ret = NO_ERROR;
if (mSurface != 0) {
if (mOverlayRef.get() == NULL) {
- mOverlayRef = mSurface->createOverlay(w, h, OVERLAY_FORMAT_DEFAULT);
+
+ // FIXME:
+ // Surfaceflinger may hold onto the previous overlay reference for some
+ // time after we try to destroy it. retry a few times. In the future, we
+ // should make the destroy call block, or possibly specify that we can
+ // wait in the createOverlay call if the previous overlay is in the
+ // process of being destroyed.
+ for (int retry = 0; retry < 50; ++retry) {
+ mOverlayRef = mSurface->createOverlay(w, h, OVERLAY_FORMAT_DEFAULT);
+ if (mOverlayRef != NULL) break;
+ LOGD("Overlay create failed - retrying");
+ usleep(20000);
+ }
if ( mOverlayRef.get() == NULL )
{
LOGE("Overlay Creation Failed!");