Home | History | Annotate | Download | only in camera
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef ANDROID_HARDWARE_ICAMERASERVICE_H
     18 #define ANDROID_HARDWARE_ICAMERASERVICE_H
     19 
     20 #include <utils/RefBase.h>
     21 #include <binder/IInterface.h>
     22 #include <binder/Parcel.h>
     23 
     24 namespace android {
     25 
     26 class ICamera;
     27 class ICameraClient;
     28 class ICameraServiceListener;
     29 class ICameraDeviceUser;
     30 class ICameraDeviceCallbacks;
     31 class CameraMetadata;
     32 class VendorTagDescriptor;
     33 class String16;
     34 
     35 class ICameraService : public IInterface
     36 {
     37 public:
     38     /**
     39      * Keep up-to-date with ICameraService.aidl in frameworks/base
     40      */
     41     enum {
     42         GET_NUMBER_OF_CAMERAS = IBinder::FIRST_CALL_TRANSACTION,
     43         GET_CAMERA_INFO,
     44         CONNECT,
     45         CONNECT_DEVICE,
     46         ADD_LISTENER,
     47         REMOVE_LISTENER,
     48         GET_CAMERA_CHARACTERISTICS,
     49         GET_CAMERA_VENDOR_TAG_DESCRIPTOR,
     50         GET_LEGACY_PARAMETERS,
     51         SUPPORTS_CAMERA_API,
     52         CONNECT_LEGACY,
     53         SET_TORCH_MODE,
     54         NOTIFY_SYSTEM_EVENT,
     55     };
     56 
     57     enum {
     58         USE_CALLING_UID = -1
     59     };
     60 
     61     enum {
     62         API_VERSION_1 = 1,
     63         API_VERSION_2 = 2,
     64     };
     65 
     66     enum {
     67         CAMERA_TYPE_BACKWARD_COMPATIBLE = 0,
     68         CAMERA_TYPE_ALL = 1,
     69     };
     70 
     71     enum {
     72         CAMERA_HAL_API_VERSION_UNSPECIFIED = -1
     73     };
     74 
     75     /**
     76      * Keep up-to-date with declarations in
     77      * frameworks/base/services/core/java/com/android/server/camera/CameraService.java
     78      *
     79      * These event codes are intended to be used with the notifySystemEvent call.
     80      */
     81     enum {
     82         NO_EVENT = 0,
     83         USER_SWITCHED,
     84     };
     85 
     86 public:
     87     DECLARE_META_INTERFACE(CameraService);
     88 
     89     // Get the number of cameras that support basic color camera operation
     90     // (type CAMERA_TYPE_BACKWARD_COMPATIBLE)
     91     virtual int32_t  getNumberOfCameras() = 0;
     92     // Get the number of cameras of the specified type, one of CAMERA_TYPE_*
     93     // enums
     94     virtual int32_t  getNumberOfCameras(int cameraType) = 0;
     95     virtual status_t getCameraInfo(int cameraId,
     96             /*out*/
     97             struct CameraInfo* cameraInfo) = 0;
     98 
     99     virtual status_t getCameraCharacteristics(int cameraId,
    100             /*out*/
    101             CameraMetadata* cameraInfo) = 0;
    102 
    103     virtual status_t getCameraVendorTagDescriptor(
    104             /*out*/
    105             sp<VendorTagDescriptor>& desc) = 0;
    106 
    107     // Returns 'OK' if operation succeeded
    108     // - Errors: ALREADY_EXISTS if the listener was already added
    109     virtual status_t addListener(const sp<ICameraServiceListener>& listener)
    110                                                                             = 0;
    111     // Returns 'OK' if operation succeeded
    112     // - Errors: BAD_VALUE if specified listener was not in the listener list
    113     virtual status_t removeListener(const sp<ICameraServiceListener>& listener)
    114                                                                             = 0;
    115     /**
    116      * clientPackageName and clientUid are used for permissions checking.  if
    117      * clientUid == USE_CALLING_UID, then the calling UID is used instead. Only
    118      * trusted callers can set a clientUid other than USE_CALLING_UID.
    119      */
    120     virtual status_t connect(const sp<ICameraClient>& cameraClient,
    121             int cameraId,
    122             const String16& clientPackageName,
    123             int clientUid,
    124             /*out*/
    125             sp<ICamera>& device) = 0;
    126 
    127     virtual status_t connectDevice(
    128             const sp<ICameraDeviceCallbacks>& cameraCb,
    129             int cameraId,
    130             const String16& clientPackageName,
    131             int clientUid,
    132             /*out*/
    133             sp<ICameraDeviceUser>& device) = 0;
    134 
    135     virtual status_t getLegacyParameters(
    136             int cameraId,
    137             /*out*/
    138             String16* parameters) = 0;
    139 
    140     /**
    141      * Returns OK if device supports camera2 api,
    142      * returns -EOPNOTSUPP if it doesn't.
    143      */
    144     virtual status_t supportsCameraApi(
    145             int cameraId, int apiVersion) = 0;
    146 
    147     /**
    148      * Connect the device as a legacy device for a given HAL version.
    149      * For halVersion, use CAMERA_API_DEVICE_VERSION_* for a particular
    150      * version, or CAMERA_HAL_API_VERSION_UNSPECIFIED for a service-selected version.
    151      */
    152     virtual status_t connectLegacy(const sp<ICameraClient>& cameraClient,
    153             int cameraId, int halVersion,
    154             const String16& clientPackageName,
    155             int clientUid,
    156             /*out*/
    157             sp<ICamera>& device) = 0;
    158 
    159     /**
    160      * Turn on or off a camera's torch mode. Torch mode will be turned off by
    161      * camera service if the lastest client binder that turns it on dies.
    162      *
    163      * return values:
    164      * 0:       on a successful operation.
    165      * -ENOSYS: the camera device doesn't support this operation. It it returned
    166      *          if and only if android.flash.into.available is false.
    167      * -EBUSY:  the camera device is opened.
    168      * -EINVAL: camera_id is invalid or clientBinder is NULL when enabling a
    169      *          torch mode.
    170      */
    171     virtual status_t setTorchMode(const String16& cameraId, bool enabled,
    172             const sp<IBinder>& clientBinder) = 0;
    173 
    174     /**
    175      * Notify the camera service of a system event.  Should only be called from system_server.
    176      */
    177     virtual void notifySystemEvent(int32_t eventId, const int32_t* args, size_t length) = 0;
    178 };
    179 
    180 // ----------------------------------------------------------------------------
    181 
    182 class BnCameraService: public BnInterface<ICameraService>
    183 {
    184 public:
    185     virtual status_t    onTransact( uint32_t code,
    186                                     const Parcel& data,
    187                                     Parcel* reply,
    188                                     uint32_t flags = 0);
    189 };
    190 
    191 }; // namespace android
    192 
    193 #endif
    194