From 2adc2dbbd65fc89983f20702db2004f9b8cf8258 Mon Sep 17 00:00:00 2001 From: James Dong Date: Thu, 23 Apr 2009 14:07:23 -0700 Subject: [PATCH] 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. --- include/ui/Camera.h | 4 ++-- 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 e593feab7899a..12fa20f105b4d 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& camera); - + Camera(const sp& camera); // to be removed + static sp create(const sp& camera); static sp connect(); ~Camera(); void init(); diff --git a/libs/ui/Camera.cpp b/libs/ui/Camera.cpp index b3cbda14fb06f..0fba82c74d491 100644 --- a/libs/ui/Camera.cpp +++ b/libs/ui/Camera.cpp @@ -75,6 +75,19 @@ Camera::Camera(const sp& camera) } } + +sp Camera::create(const sp& camera) +{ + sp 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;