summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Dong <jdong@google.com>2009-04-23 14:07:23 -0700
committerJames Dong <jdong@google.com>2009-04-23 14:07:23 -0700
commit2adc2dbbd65fc89983f20702db2004f9b8cf8258 (patch)
treec6cb8b422dbe5e3f1bd41eec0f0944216e1856c9
parent0a57e5b730beaea75c1c1b1ca51b40c463918b4d (diff)
downloadframeworks_base-2adc2dbbd65fc89983f20702db2004f9b8cf8258.zip
frameworks_base-2adc2dbbd65fc89983f20702db2004f9b8cf8258.tar.gz
frameworks_base-2adc2dbbd65fc89983f20702db2004f9b8cf8258.tar.bz2
Fix a media server crash (bug 1807910): part one
Add a factory method that creates a Camera object from a remote client Next: The changes in authordriver.cpp and android_camera_input.cpp will come. and the constructor for Camera object will be removed.
-rw-r--r--include/ui/Camera.h4
-rw-r--r--libs/ui/Camera.cpp13
2 files changed, 15 insertions, 2 deletions
diff --git a/include/ui/Camera.h b/include/ui/Camera.h
index e593fea..12fa20f 100644
--- a/include/ui/Camera.h
+++ b/include/ui/Camera.h
@@ -78,8 +78,8 @@ class Camera : public BnCameraClient, public IBinder::DeathRecipient
{
public:
// construct a camera client from an existing remote
- Camera(const sp<ICamera>& camera);
-
+ Camera(const sp<ICamera>& camera); // to be removed
+ static sp<Camera> create(const sp<ICamera>& camera);
static sp<Camera> connect();
~Camera();
void init();
diff --git a/libs/ui/Camera.cpp b/libs/ui/Camera.cpp
index b3cbda1..0fba82c 100644
--- a/libs/ui/Camera.cpp
+++ b/libs/ui/Camera.cpp
@@ -75,6 +75,19 @@ Camera::Camera(const sp<ICamera>& camera)
}
}
+
+sp<Camera> Camera::create(const sp<ICamera>& camera)
+{
+ sp<Camera> c = new Camera();
+ // connect this client to existing camera remote
+ if (camera->connect(c) == NO_ERROR) {
+ c->mStatus = NO_ERROR;
+ c->mCamera = camera;
+ camera->asBinder()->linkToDeath(c);
+ }
+ return c;
+}
+
void Camera::init()
{
mStatus = UNKNOWN_ERROR;