diff options
| author | James Dong <jdong@google.com> | 2009-04-23 14:07:23 -0700 |
|---|---|---|
| committer | James Dong <jdong@google.com> | 2009-04-23 14:07:23 -0700 |
| commit | 2adc2dbbd65fc89983f20702db2004f9b8cf8258 (patch) | |
| tree | c6cb8b422dbe5e3f1bd41eec0f0944216e1856c9 | |
| parent | 0a57e5b730beaea75c1c1b1ca51b40c463918b4d (diff) | |
| download | frameworks_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.h | 4 | ||||
| -rw-r--r-- | libs/ui/Camera.cpp | 13 |
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; |
