diff options
Diffstat (limited to 'libs/camera/ICameraService.cpp')
| -rw-r--r-- | libs/camera/ICameraService.cpp | 41 | 
1 files changed, 39 insertions, 2 deletions
| diff --git a/libs/camera/ICameraService.cpp b/libs/camera/ICameraService.cpp index 46b54786a25b..85f1a29feb1a 100644 --- a/libs/camera/ICameraService.cpp +++ b/libs/camera/ICameraService.cpp @@ -34,12 +34,34 @@ public:      {      } +    // get number of cameras available +    virtual int32_t getNumberOfCameras() +    { +        Parcel data, reply; +        data.writeInterfaceToken(ICameraService::getInterfaceDescriptor()); +        remote()->transact(BnCameraService::GET_NUMBER_OF_CAMERAS, data, &reply); +        return reply.readInt32(); +    } + +    // get information about a camera +    virtual status_t getCameraInfo(int cameraId, +                                   struct CameraInfo* cameraInfo) { +        Parcel data, reply; +        data.writeInterfaceToken(ICameraService::getInterfaceDescriptor()); +        data.writeInt32(cameraId); +        remote()->transact(BnCameraService::GET_CAMERA_INFO, data, &reply); +        cameraInfo->facing = reply.readInt32(); +        cameraInfo->orientation = reply.readInt32(); +        return reply.readInt32(); +    } +      // connect to camera service -    virtual sp<ICamera> connect(const sp<ICameraClient>& cameraClient) +    virtual sp<ICamera> connect(const sp<ICameraClient>& cameraClient, int cameraId)      {          Parcel data, reply;          data.writeInterfaceToken(ICameraService::getInterfaceDescriptor());          data.writeStrongBinder(cameraClient->asBinder()); +        data.writeInt32(cameraId);          remote()->transact(BnCameraService::CONNECT, data, &reply);          return interface_cast<ICamera>(reply.readStrongBinder());      } @@ -53,10 +75,25 @@ status_t BnCameraService::onTransact(      uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)  {      switch(code) { +        case GET_NUMBER_OF_CAMERAS: { +            CHECK_INTERFACE(ICameraService, data, reply); +            reply->writeInt32(getNumberOfCameras()); +            return NO_ERROR; +        } break; +        case GET_CAMERA_INFO: { +            CHECK_INTERFACE(ICameraService, data, reply); +            CameraInfo cameraInfo; +            memset(&cameraInfo, 0, sizeof(cameraInfo)); +            status_t result = getCameraInfo(data.readInt32(), &cameraInfo); +            reply->writeInt32(cameraInfo.facing); +            reply->writeInt32(cameraInfo.orientation); +            reply->writeInt32(result); +            return NO_ERROR; +        } break;          case CONNECT: {              CHECK_INTERFACE(ICameraService, data, reply);              sp<ICameraClient> cameraClient = interface_cast<ICameraClient>(data.readStrongBinder()); -            sp<ICamera> camera = connect(cameraClient); +            sp<ICamera> camera = connect(cameraClient, data.readInt32());              reply->writeStrongBinder(camera->asBinder());              return NO_ERROR;          } break; | 
