1 /* 2 * Copyright (C) 2013 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 package android.hardware; 18 19 import android.hardware.ICamera; 20 import android.hardware.ICameraClient; 21 import android.hardware.camera2.ICameraDeviceUser; 22 import android.hardware.camera2.ICameraDeviceCallbacks; 23 import android.hardware.camera2.params.VendorTagDescriptor; 24 import android.hardware.camera2.params.VendorTagDescriptorCache; 25 import android.hardware.camera2.utils.ConcurrentCameraIdCombination; 26 import android.hardware.camera2.utils.CameraIdAndSessionConfiguration; 27 import android.hardware.camera2.impl.CameraMetadataNative; 28 import android.hardware.ICameraServiceListener; 29 import android.hardware.CameraInfo; 30 import android.hardware.CameraStatus; 31 32 /** 33 * Binder interface for the native camera service running in mediaserver. 34 * 35 * @hide 36 */ 37 interface ICameraService 38 { 39 /** 40 * All camera service and device Binder calls may return a 41 * ServiceSpecificException with the following error codes 42 */ 43 const int ERROR_PERMISSION_DENIED = 1; 44 const int ERROR_ALREADY_EXISTS = 2; 45 const int ERROR_ILLEGAL_ARGUMENT = 3; 46 const int ERROR_DISCONNECTED = 4; 47 const int ERROR_TIMED_OUT = 5; 48 const int ERROR_DISABLED = 6; 49 const int ERROR_CAMERA_IN_USE = 7; 50 const int ERROR_MAX_CAMERAS_IN_USE = 8; 51 const int ERROR_DEPRECATED_HAL = 9; 52 const int ERROR_INVALID_OPERATION = 10; 53 54 /** 55 * Types for getNumberOfCameras 56 */ 57 const int CAMERA_TYPE_BACKWARD_COMPATIBLE = 0; 58 const int CAMERA_TYPE_ALL = 1; 59 60 /** 61 * Return the number of camera devices available in the system 62 */ getNumberOfCameras(int type)63 int getNumberOfCameras(int type); 64 65 /** 66 * Fetch basic camera information for a camera device 67 */ getCameraInfo(int cameraId)68 CameraInfo getCameraInfo(int cameraId); 69 70 /** 71 * Default UID/PID values for non-privileged callers of 72 * connect(), connectDevice(), and connectLegacy() 73 */ 74 const int USE_CALLING_UID = -1; 75 const int USE_CALLING_PID = -1; 76 77 /** 78 * Open a camera device through the old camera API 79 */ connect(ICameraClient client, int cameraId, String opPackageName, int clientUid, int clientPid)80 ICamera connect(ICameraClient client, 81 int cameraId, 82 String opPackageName, 83 int clientUid, int clientPid); 84 85 /** 86 * Open a camera device through the new camera API 87 * Only supported for device HAL versions >= 3.2 88 */ connectDevice(ICameraDeviceCallbacks callbacks, String cameraId, String opPackageName, @nullable String featureId, int clientUid)89 ICameraDeviceUser connectDevice(ICameraDeviceCallbacks callbacks, 90 String cameraId, 91 String opPackageName, 92 @nullable String featureId, 93 int clientUid); 94 95 /** 96 * halVersion constant for connectLegacy 97 */ 98 const int CAMERA_HAL_API_VERSION_UNSPECIFIED = -1; 99 100 /** 101 * Open a camera device in legacy mode, if supported by the camera module HAL. 102 */ connectLegacy(ICameraClient client, int cameraId, int halVersion, String opPackageName, int clientUid)103 ICamera connectLegacy(ICameraClient client, 104 int cameraId, 105 int halVersion, 106 String opPackageName, 107 int clientUid); 108 109 /** 110 * Add listener for changes to camera device and flashlight state. 111 * 112 * Also returns the set of currently-known camera IDs and state of each device. 113 * Adding a listener will trigger the torch status listener to fire for all 114 * devices that have a flash unit. 115 */ addListener(ICameraServiceListener listener)116 CameraStatus[] addListener(ICameraServiceListener listener); 117 118 /** 119 * Get a list of combinations of camera ids which support concurrent streaming. 120 * 121 */ getConcurrentCameraIds()122 ConcurrentCameraIdCombination[] getConcurrentCameraIds(); 123 124 /** 125 * Check whether a particular set of session configurations are concurrently supported by the 126 * corresponding camera ids. 127 * 128 * @param sessions the set of camera id and session configuration pairs to be queried. 129 * @return true - the set of concurrent camera id and stream combinations is supported. 130 * false - the set of concurrent camera id and stream combinations is not supported 131 * OR the method was called with a set of camera ids not returned by 132 * getConcurrentCameraIds(). 133 */ isConcurrentSessionConfigurationSupported( in CameraIdAndSessionConfiguration[] sessions)134 boolean isConcurrentSessionConfigurationSupported( 135 in CameraIdAndSessionConfiguration[] sessions); 136 137 /** 138 * Remove listener for changes to camera device and flashlight state. 139 */ removeListener(ICameraServiceListener listener)140 void removeListener(ICameraServiceListener listener); 141 142 /** 143 * Read the static camera metadata for a camera device. 144 * Only supported for device HAL versions >= 3.2 145 */ getCameraCharacteristics(String cameraId)146 CameraMetadataNative getCameraCharacteristics(String cameraId); 147 148 /** 149 * Read in the vendor tag descriptors from the camera module HAL. 150 * Intended to be used by the native code of CameraMetadataNative to correctly 151 * interpret camera metadata with vendor tags. 152 */ getCameraVendorTagDescriptor()153 VendorTagDescriptor getCameraVendorTagDescriptor(); 154 155 /** 156 * Retrieve the vendor tag descriptor cache which can have multiple vendor 157 * providers. 158 * Intended to be used by the native code of CameraMetadataNative to correctly 159 * interpret camera metadata with vendor tags. 160 */ getCameraVendorTagCache()161 VendorTagDescriptorCache getCameraVendorTagCache(); 162 163 /** 164 * Read the legacy camera1 parameters into a String 165 */ getLegacyParameters(int cameraId)166 String getLegacyParameters(int cameraId); 167 168 /** 169 * apiVersion constants for supportsCameraApi 170 */ 171 const int API_VERSION_1 = 1; 172 const int API_VERSION_2 = 2; 173 174 // Determines if a particular API version is supported directly for a cameraId. supportsCameraApi(String cameraId, int apiVersion)175 boolean supportsCameraApi(String cameraId, int apiVersion); 176 // Determines if a cameraId is a hidden physical camera of a logical multi-camera. isHiddenPhysicalCamera(String cameraId)177 boolean isHiddenPhysicalCamera(String cameraId); 178 setTorchMode(String cameraId, boolean enabled, IBinder clientBinder)179 void setTorchMode(String cameraId, boolean enabled, IBinder clientBinder); 180 181 /** 182 * Notify the camera service of a system event. Should only be called from system_server. 183 * 184 * Callers require the android.permission.CAMERA_SEND_SYSTEM_EVENTS permission. 185 */ 186 const int EVENT_NONE = 0; 187 const int EVENT_USER_SWITCHED = 1; // The argument is the set of new foreground user IDs. notifySystemEvent(int eventId, in int[] args)188 oneway void notifySystemEvent(int eventId, in int[] args); 189 190 /** 191 * Notify the camera service of a device physical status change. May only be called from 192 * a privileged process. 193 * 194 * newState is a bitfield consisting of DEVICE_STATE_* values combined together. Valid state 195 * combinations are device-specific. At device startup, the camera service will assume the device 196 * state is NORMAL until otherwise notified. 197 * 198 * Callers require the android.permission.CAMERA_SEND_SYSTEM_EVENTS permission. 199 */ notifyDeviceStateChange(long newState)200 oneway void notifyDeviceStateChange(long newState); 201 202 // Bitfield constants for notifyDeviceStateChange 203 // All bits >= 32 are for custom vendor states 204 // Written as ints since AIDL does not support long constants. 205 const int DEVICE_STATE_NORMAL = 0; 206 const int DEVICE_STATE_BACK_COVERED = 1; 207 const int DEVICE_STATE_FRONT_COVERED = 2; 208 const int DEVICE_STATE_FOLDED = 4; 209 const int DEVICE_STATE_LAST_FRAMEWORK_BIT = 0x80000000; // 1 << 31; 210 211 } 212