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