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 IProCameraUser; 29 class IProCameraCallbacks; 30 class ICameraServiceListener; 31 class ICameraDeviceUser; 32 class ICameraDeviceCallbacks; 33 class CameraMetadata; 34 class VendorTagDescriptor; 35 class String16; 36 37 class ICameraService : public IInterface 38 { 39 public: 40 /** 41 * Keep up-to-date with ICameraService.aidl in frameworks/base 42 */ 43 enum { 44 GET_NUMBER_OF_CAMERAS = IBinder::FIRST_CALL_TRANSACTION, 45 GET_CAMERA_INFO, 46 CONNECT, 47 CONNECT_PRO, 48 CONNECT_DEVICE, 49 ADD_LISTENER, 50 REMOVE_LISTENER, 51 GET_CAMERA_CHARACTERISTICS, 52 GET_CAMERA_VENDOR_TAG_DESCRIPTOR, 53 GET_LEGACY_PARAMETERS, 54 SUPPORTS_CAMERA_API, 55 CONNECT_LEGACY, 56 }; 57 58 enum { 59 USE_CALLING_UID = -1 60 }; 61 62 enum { 63 API_VERSION_1 = 1, 64 API_VERSION_2 = 2, 65 }; 66 67 enum { 68 CAMERA_HAL_API_VERSION_UNSPECIFIED = -1 69 }; 70 71 public: 72 DECLARE_META_INTERFACE(CameraService); 73 74 virtual int32_t getNumberOfCameras() = 0; 75 virtual status_t getCameraInfo(int cameraId, 76 /*out*/ 77 struct CameraInfo* cameraInfo) = 0; 78 79 virtual status_t getCameraCharacteristics(int cameraId, 80 /*out*/ 81 CameraMetadata* cameraInfo) = 0; 82 83 virtual status_t getCameraVendorTagDescriptor( 84 /*out*/ 85 sp<VendorTagDescriptor>& desc) = 0; 86 87 // Returns 'OK' if operation succeeded 88 // - Errors: ALREADY_EXISTS if the listener was already added 89 virtual status_t addListener(const sp<ICameraServiceListener>& listener) 90 = 0; 91 // Returns 'OK' if operation succeeded 92 // - Errors: BAD_VALUE if specified listener was not in the listener list 93 virtual status_t removeListener(const sp<ICameraServiceListener>& listener) 94 = 0; 95 /** 96 * clientPackageName and clientUid are used for permissions checking. if 97 * clientUid == USE_CALLING_UID, then the calling UID is used instead. Only 98 * trusted callers can set a clientUid other than USE_CALLING_UID. 99 */ 100 virtual status_t connect(const sp<ICameraClient>& cameraClient, 101 int cameraId, 102 const String16& clientPackageName, 103 int clientUid, 104 /*out*/ 105 sp<ICamera>& device) = 0; 106 107 virtual status_t connectPro(const sp<IProCameraCallbacks>& cameraCb, 108 int cameraId, 109 const String16& clientPackageName, 110 int clientUid, 111 /*out*/ 112 sp<IProCameraUser>& device) = 0; 113 114 virtual status_t connectDevice( 115 const sp<ICameraDeviceCallbacks>& cameraCb, 116 int cameraId, 117 const String16& clientPackageName, 118 int clientUid, 119 /*out*/ 120 sp<ICameraDeviceUser>& device) = 0; 121 122 virtual status_t getLegacyParameters( 123 int cameraId, 124 /*out*/ 125 String16* parameters) = 0; 126 127 /** 128 * Returns OK if device supports camera2 api, 129 * returns -EOPNOTSUPP if it doesn't. 130 */ 131 virtual status_t supportsCameraApi( 132 int cameraId, int apiVersion) = 0; 133 134 /** 135 * Connect the device as a legacy device for a given HAL version. 136 * For halVersion, use CAMERA_API_DEVICE_VERSION_* for a particular 137 * version, or CAMERA_HAL_API_VERSION_UNSPECIFIED for a service-selected version. 138 */ 139 virtual status_t connectLegacy(const sp<ICameraClient>& cameraClient, 140 int cameraId, int halVersion, 141 const String16& clientPackageName, 142 int clientUid, 143 /*out*/ 144 sp<ICamera>& device) = 0; 145 }; 146 147 // ---------------------------------------------------------------------------- 148 149 class BnCameraService: public BnInterface<ICameraService> 150 { 151 public: 152 virtual status_t onTransact( uint32_t code, 153 const Parcel& data, 154 Parcel* reply, 155 uint32_t flags = 0); 156 }; 157 158 }; // namespace android 159 160 #endif 161