Loading camera/Camera.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,9 @@ Camera::Camera(int cameraId) { } CameraTraits<Camera>::TCamConnectService CameraTraits<Camera>::fnConnectService = &ICameraService::connect; // construct a camera client from an existing camera remote sp<Camera> Camera::create(const sp<ICamera>& camera) { Loading camera/CameraBase.cpp +8 −3 Original line number Diff line number Diff line Loading @@ -98,14 +98,19 @@ sp<TCam> CameraBase<TCam, TCamTraits>::connect(int cameraId, 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; Loading camera/ICameraService.cpp +60 −21 Original line number Diff line number Diff line Loading @@ -120,8 +120,10 @@ public: } // connect to camera service (android.hardware.Camera) virtual sp<ICamera> connect(const sp<ICameraClient>& cameraClient, int cameraId, const String16 &clientPackageName, int clientUid) virtual status_t connect(const sp<ICameraClient>& cameraClient, int cameraId, const String16 &clientPackageName, int clientUid, /*out*/ sp<ICamera>& device) { Parcel data, reply; data.writeInterfaceToken(ICameraService::getInterfaceDescriptor()); Loading @@ -131,13 +133,19 @@ public: data.writeInt32(clientUid); remote()->transact(BnCameraService::CONNECT, data, &reply); if (readExceptionCode(reply)) return NULL; return interface_cast<ICamera>(reply.readStrongBinder()); if (readExceptionCode(reply)) return -EPROTO; status_t status = reply.readInt32(); if (reply.readInt32() != 0) { device = interface_cast<ICamera>(reply.readStrongBinder()); } return status; } // connect to camera service (pro client) virtual sp<IProCameraUser> connect(const sp<IProCameraCallbacks>& cameraCb, int cameraId, const String16 &clientPackageName, int clientUid) virtual status_t connectPro(const sp<IProCameraCallbacks>& cameraCb, int cameraId, const String16 &clientPackageName, int clientUid, /*out*/ sp<IProCameraUser>& device) { Parcel data, reply; data.writeInterfaceToken(ICameraService::getInterfaceDescriptor()); Loading @@ -147,16 +155,22 @@ public: data.writeInt32(clientUid); remote()->transact(BnCameraService::CONNECT_PRO, data, &reply); if (readExceptionCode(reply)) return NULL; return interface_cast<IProCameraUser>(reply.readStrongBinder()); if (readExceptionCode(reply)) return -EPROTO; status_t status = reply.readInt32(); if (reply.readInt32() != 0) { device = interface_cast<IProCameraUser>(reply.readStrongBinder()); } return status; } // connect to camera service (android.hardware.camera2.CameraDevice) virtual sp<ICameraDeviceUser> connect( virtual status_t connectDevice( const sp<ICameraDeviceCallbacks>& cameraCb, int cameraId, const String16& clientPackageName, int clientUid) int clientUid, /*out*/ sp<ICameraDeviceUser>& device) { Parcel data, reply; data.writeInterfaceToken(ICameraService::getInterfaceDescriptor()); Loading @@ -166,8 +180,12 @@ public: data.writeInt32(clientUid); remote()->transact(BnCameraService::CONNECT_DEVICE, data, &reply); if (readExceptionCode(reply)) return NULL; return interface_cast<ICameraDeviceUser>(reply.readStrongBinder()); if (readExceptionCode(reply)) return -EPROTO; status_t status = reply.readInt32(); if (reply.readInt32() != 0) { device = interface_cast<ICameraDeviceUser>(reply.readStrongBinder()); } return status; } virtual status_t addListener(const sp<ICameraServiceListener>& listener) Loading Loading @@ -228,10 +246,17 @@ status_t BnCameraService::onTransact( int32_t cameraId = data.readInt32(); const String16 clientName = data.readString16(); int32_t clientUid = data.readInt32(); sp<ICamera> camera = connect(cameraClient, cameraId, clientName, clientUid); sp<ICamera> camera; status_t status = connect(cameraClient, cameraId, clientName, clientUid, /*out*/ camera); reply->writeNoException(); reply->writeInt32(status); if (camera != NULL) { reply->writeInt32(1); reply->writeStrongBinder(camera->asBinder()); } else { reply->writeInt32(0); } return NO_ERROR; } break; case CONNECT_PRO: { Loading @@ -241,10 +266,17 @@ status_t BnCameraService::onTransact( int32_t cameraId = data.readInt32(); const String16 clientName = data.readString16(); int32_t clientUid = data.readInt32(); sp<IProCameraUser> camera = connect(cameraClient, cameraId, clientName, clientUid); sp<IProCameraUser> camera; status_t status = connectPro(cameraClient, cameraId, clientName, clientUid, /*out*/ camera); reply->writeNoException(); reply->writeInt32(status); if (camera != NULL) { reply->writeInt32(1); reply->writeStrongBinder(camera->asBinder()); } else { reply->writeInt32(0); } return NO_ERROR; } break; case CONNECT_DEVICE: { Loading @@ -254,10 +286,17 @@ status_t BnCameraService::onTransact( int32_t cameraId = data.readInt32(); const String16 clientName = data.readString16(); int32_t clientUid = data.readInt32(); sp<ICameraDeviceUser> camera = connect(cameraClient, cameraId, clientName, clientUid); sp<ICameraDeviceUser> camera; status_t status = connectDevice(cameraClient, cameraId, clientName, clientUid, /*out*/ camera); reply->writeNoException(); reply->writeInt32(status); if (camera != NULL) { reply->writeInt32(1); reply->writeStrongBinder(camera->asBinder()); } else { reply->writeInt32(0); } return NO_ERROR; } break; case ADD_LISTENER: { Loading camera/ProCamera.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ #include <binder/IMemory.h> #include <camera/ProCamera.h> #include <camera/ICameraService.h> #include <camera/IProCameraUser.h> #include <camera/IProCameraCallbacks.h> Loading @@ -47,6 +46,9 @@ ProCamera::ProCamera(int cameraId) { } CameraTraits<ProCamera>::TCamConnectService CameraTraits<ProCamera>::fnConnectService = &ICameraService::connectPro; ProCamera::~ProCamera() { Loading include/camera/Camera.h +6 −0 Original line number Diff line number Diff line Loading @@ -51,8 +51,14 @@ struct CameraTraits<Camera> typedef CameraListener TCamListener; typedef ICamera TCamUser; typedef ICameraClient TCamCallbacks; typedef status_t (ICameraService::*TCamConnectService)(const sp<ICameraClient>&, int, const String16&, int, /*out*/ sp<ICamera>&); static TCamConnectService fnConnectService; }; class Camera : public CameraBase<Camera>, public BnCameraClient Loading Loading
camera/Camera.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,9 @@ Camera::Camera(int cameraId) { } CameraTraits<Camera>::TCamConnectService CameraTraits<Camera>::fnConnectService = &ICameraService::connect; // construct a camera client from an existing camera remote sp<Camera> Camera::create(const sp<ICamera>& camera) { Loading
camera/CameraBase.cpp +8 −3 Original line number Diff line number Diff line Loading @@ -98,14 +98,19 @@ sp<TCam> CameraBase<TCam, TCamTraits>::connect(int cameraId, 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; Loading
camera/ICameraService.cpp +60 −21 Original line number Diff line number Diff line Loading @@ -120,8 +120,10 @@ public: } // connect to camera service (android.hardware.Camera) virtual sp<ICamera> connect(const sp<ICameraClient>& cameraClient, int cameraId, const String16 &clientPackageName, int clientUid) virtual status_t connect(const sp<ICameraClient>& cameraClient, int cameraId, const String16 &clientPackageName, int clientUid, /*out*/ sp<ICamera>& device) { Parcel data, reply; data.writeInterfaceToken(ICameraService::getInterfaceDescriptor()); Loading @@ -131,13 +133,19 @@ public: data.writeInt32(clientUid); remote()->transact(BnCameraService::CONNECT, data, &reply); if (readExceptionCode(reply)) return NULL; return interface_cast<ICamera>(reply.readStrongBinder()); if (readExceptionCode(reply)) return -EPROTO; status_t status = reply.readInt32(); if (reply.readInt32() != 0) { device = interface_cast<ICamera>(reply.readStrongBinder()); } return status; } // connect to camera service (pro client) virtual sp<IProCameraUser> connect(const sp<IProCameraCallbacks>& cameraCb, int cameraId, const String16 &clientPackageName, int clientUid) virtual status_t connectPro(const sp<IProCameraCallbacks>& cameraCb, int cameraId, const String16 &clientPackageName, int clientUid, /*out*/ sp<IProCameraUser>& device) { Parcel data, reply; data.writeInterfaceToken(ICameraService::getInterfaceDescriptor()); Loading @@ -147,16 +155,22 @@ public: data.writeInt32(clientUid); remote()->transact(BnCameraService::CONNECT_PRO, data, &reply); if (readExceptionCode(reply)) return NULL; return interface_cast<IProCameraUser>(reply.readStrongBinder()); if (readExceptionCode(reply)) return -EPROTO; status_t status = reply.readInt32(); if (reply.readInt32() != 0) { device = interface_cast<IProCameraUser>(reply.readStrongBinder()); } return status; } // connect to camera service (android.hardware.camera2.CameraDevice) virtual sp<ICameraDeviceUser> connect( virtual status_t connectDevice( const sp<ICameraDeviceCallbacks>& cameraCb, int cameraId, const String16& clientPackageName, int clientUid) int clientUid, /*out*/ sp<ICameraDeviceUser>& device) { Parcel data, reply; data.writeInterfaceToken(ICameraService::getInterfaceDescriptor()); Loading @@ -166,8 +180,12 @@ public: data.writeInt32(clientUid); remote()->transact(BnCameraService::CONNECT_DEVICE, data, &reply); if (readExceptionCode(reply)) return NULL; return interface_cast<ICameraDeviceUser>(reply.readStrongBinder()); if (readExceptionCode(reply)) return -EPROTO; status_t status = reply.readInt32(); if (reply.readInt32() != 0) { device = interface_cast<ICameraDeviceUser>(reply.readStrongBinder()); } return status; } virtual status_t addListener(const sp<ICameraServiceListener>& listener) Loading Loading @@ -228,10 +246,17 @@ status_t BnCameraService::onTransact( int32_t cameraId = data.readInt32(); const String16 clientName = data.readString16(); int32_t clientUid = data.readInt32(); sp<ICamera> camera = connect(cameraClient, cameraId, clientName, clientUid); sp<ICamera> camera; status_t status = connect(cameraClient, cameraId, clientName, clientUid, /*out*/ camera); reply->writeNoException(); reply->writeInt32(status); if (camera != NULL) { reply->writeInt32(1); reply->writeStrongBinder(camera->asBinder()); } else { reply->writeInt32(0); } return NO_ERROR; } break; case CONNECT_PRO: { Loading @@ -241,10 +266,17 @@ status_t BnCameraService::onTransact( int32_t cameraId = data.readInt32(); const String16 clientName = data.readString16(); int32_t clientUid = data.readInt32(); sp<IProCameraUser> camera = connect(cameraClient, cameraId, clientName, clientUid); sp<IProCameraUser> camera; status_t status = connectPro(cameraClient, cameraId, clientName, clientUid, /*out*/ camera); reply->writeNoException(); reply->writeInt32(status); if (camera != NULL) { reply->writeInt32(1); reply->writeStrongBinder(camera->asBinder()); } else { reply->writeInt32(0); } return NO_ERROR; } break; case CONNECT_DEVICE: { Loading @@ -254,10 +286,17 @@ status_t BnCameraService::onTransact( int32_t cameraId = data.readInt32(); const String16 clientName = data.readString16(); int32_t clientUid = data.readInt32(); sp<ICameraDeviceUser> camera = connect(cameraClient, cameraId, clientName, clientUid); sp<ICameraDeviceUser> camera; status_t status = connectDevice(cameraClient, cameraId, clientName, clientUid, /*out*/ camera); reply->writeNoException(); reply->writeInt32(status); if (camera != NULL) { reply->writeInt32(1); reply->writeStrongBinder(camera->asBinder()); } else { reply->writeInt32(0); } return NO_ERROR; } break; case ADD_LISTENER: { Loading
camera/ProCamera.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ #include <binder/IMemory.h> #include <camera/ProCamera.h> #include <camera/ICameraService.h> #include <camera/IProCameraUser.h> #include <camera/IProCameraCallbacks.h> Loading @@ -47,6 +46,9 @@ ProCamera::ProCamera(int cameraId) { } CameraTraits<ProCamera>::TCamConnectService CameraTraits<ProCamera>::fnConnectService = &ICameraService::connectPro; ProCamera::~ProCamera() { Loading
include/camera/Camera.h +6 −0 Original line number Diff line number Diff line Loading @@ -51,8 +51,14 @@ struct CameraTraits<Camera> typedef CameraListener TCamListener; typedef ICamera TCamUser; typedef ICameraClient TCamCallbacks; typedef status_t (ICameraService::*TCamConnectService)(const sp<ICameraClient>&, int, const String16&, int, /*out*/ sp<ICamera>&); static TCamConnectService fnConnectService; }; class Camera : public CameraBase<Camera>, public BnCameraClient Loading