auto import from //branches/cupcake/...@127101
diff --git a/libs/ui/Camera.cpp b/libs/ui/Camera.cpp
index 4a325ac..50c6008 100644
--- a/libs/ui/Camera.cpp
+++ b/libs/ui/Camera.cpp
@@ -125,10 +125,9 @@
 status_t Camera::reconnect()
 {
     LOGV("reconnect");
-    if (mCamera != 0) {
-        return mCamera->connect(this);
-    }
-    return NO_INIT;
+    sp <ICamera> c = mCamera;
+    if (c == 0) return NO_INIT;
+    return c->connect(this);
 }
 
 sp<ICamera> Camera::remote()
@@ -138,14 +137,16 @@
 
 status_t Camera::lock()
 {
-    if (mCamera != 0) return mCamera->lock();
-    return NO_INIT;
+    sp <ICamera> c = mCamera;
+    if (c == 0) return NO_INIT;
+    return c->lock();
 }
 
 status_t Camera::unlock()
 {
-    if (mCamera != 0) return mCamera->unlock();
-    return NO_INIT;
+    sp <ICamera> c = mCamera;
+    if (c == 0) return NO_INIT;
+    return c->unlock();
 }
 
 // pass the buffered ISurface to the camera service
@@ -156,7 +157,9 @@
         LOGE("app passed NULL surface");
         return NO_INIT;
     }
-    return mCamera->setPreviewDisplay(surface->getISurface());
+    sp <ICamera> c = mCamera;
+    if (c == 0) return NO_INIT;
+    return c->setPreviewDisplay(surface->getISurface());
 }
 
 status_t Camera::setPreviewDisplay(const sp<ISurface>& surface)
@@ -166,7 +169,9 @@
         LOGE("app passed NULL surface");
         return NO_INIT;
     }
-    return mCamera->setPreviewDisplay(surface);
+    sp <ICamera> c = mCamera;
+    if (c == 0) return NO_INIT;
+    return c->setPreviewDisplay(surface);
 }
 
 
@@ -174,48 +179,62 @@
 status_t Camera::startPreview()
 {
     LOGV("startPreview");
-    return mCamera->startPreview();
+    sp <ICamera> c = mCamera;
+    if (c == 0) return NO_INIT;
+    return c->startPreview();
 }
 
 // stop preview mode
 void Camera::stopPreview()
 {
     LOGV("stopPreview");
-    mCamera->stopPreview();
+    sp <ICamera> c = mCamera;
+    if (c == 0) return;
+    c->stopPreview();
 }
 
 // get preview state
 bool Camera::previewEnabled()
 {
     LOGV("previewEnabled");
-    return mCamera->previewEnabled();
+    sp <ICamera> c = mCamera;
+    if (c == 0) return false;
+    return c->previewEnabled();
 }
 
 status_t Camera::autoFocus()
 {
     LOGV("autoFocus");
-    return mCamera->autoFocus();
+    sp <ICamera> c = mCamera;
+    if (c == 0) return NO_INIT;
+    return c->autoFocus();
 }
 
 // take a picture
 status_t Camera::takePicture()
 {
     LOGV("takePicture");
-    return mCamera->takePicture();
+    sp <ICamera> c = mCamera;
+    if (c == 0) return NO_INIT;
+    return c->takePicture();
 }
 
 // set preview/capture parameters - key/value pairs
 status_t Camera::setParameters(const String8& params)
 {
     LOGV("setParameters");
-    return mCamera->setParameters(params);
+    sp <ICamera> c = mCamera;
+    if (c == 0) return NO_INIT;
+    return c->setParameters(params);
 }
 
 // get preview/capture parameters - key/value pairs
 String8 Camera::getParameters() const
 {
     LOGV("getParameters");
-    String8 params = mCamera->getParameters();
+    String8 params;
+    sp <ICamera> c = mCamera;
+    if (c != 0) params = mCamera->getParameters();
     return params;
 }
 
@@ -252,6 +271,8 @@
     LOGV("setFrameCallback");
     mFrameCallback = cb;
     mFrameCallbackCookie = cookie;
+    sp <ICamera> c = mCamera;
+    if (c == 0) return;
     mCamera->setFrameCallbackFlag(frame_callback_flag);
 }