summaryrefslogtreecommitdiffstats
path: root/camera/CameraBase.cpp
diff options
context:
space:
mode:
authorRuben Brunk <rubenbrunk@google.com>2013-08-08 13:07:18 -0700
committerRuben Brunk <rubenbrunk@google.com>2013-08-16 14:42:28 -0700
commit0f61d8f14aa368c9cd7076528e8096e10ed100a0 (patch)
treeed95cb70d56dd3a732f4e1909c96e7889b23ce94 /camera/CameraBase.cpp
parent75c16dde986e16ac5fd4d34b06b0cc6a90679866 (diff)
downloadframeworks_av-0f61d8f14aa368c9cd7076528e8096e10ed100a0.zip
frameworks_av-0f61d8f14aa368c9cd7076528e8096e10ed100a0.tar.gz
frameworks_av-0f61d8f14aa368c9cd7076528e8096e10ed100a0.tar.bz2
Refactor CameraService to handle errors properly.
Bug: 10361136 -Connect calls now return status_t error flags. Change-Id: Idca453b111e5df31327f6c99ebe853bb2e332b95
Diffstat (limited to 'camera/CameraBase.cpp')
-rw-r--r--camera/CameraBase.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/camera/CameraBase.cpp b/camera/CameraBase.cpp
index c25c5fd..55376b0 100644
--- a/camera/CameraBase.cpp
+++ b/camera/CameraBase.cpp
@@ -92,20 +92,25 @@ const sp<ICameraService>& CameraBase<TCam, TCamTraits>::getCameraService()
template <typename TCam, typename TCamTraits>
sp<TCam> CameraBase<TCam, TCamTraits>::connect(int cameraId,
- const String16& clientPackageName,
+ const String16& clientPackageName,
int clientUid)
{
ALOGV("%s: connect", __FUNCTION__);
sp<TCam> c = new TCam(cameraId);
sp<TCamCallbacks> cl = c;
+ status_t status = NO_ERROR;
const sp<ICameraService>& cs = getCameraService();
+
if (cs != 0) {
- c->mCamera = cs->connect(cl, cameraId, clientPackageName, clientUid);
+ TCamConnectService fnConnectService = TCamTraits::fnConnectService;
+ status = (cs.get()->*fnConnectService)(cl, cameraId, clientPackageName, clientUid,
+ /*out*/ c->mCamera);
}
- if (c->mCamera != 0) {
+ if (status == OK && c->mCamera != 0) {
c->mCamera->asBinder()->linkToDeath(c);
c->mStatus = NO_ERROR;
} else {
+ ALOGW("An error occurred while connecting to camera: %d", cameraId);
c.clear();
}
return c;