blob: 105629dec3a1a1b41a0e6d1dcad027298af9fe3a [file] [log] [blame]
Zhijun He8486e412016-09-12 15:30:51 -07001/*
2 * Copyright (C) 2016 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
17package android.hardware.camera.provider@2.4;
18
19import ICameraProviderCallback;
20import android.hardware.camera.common@1.0::types;
21import android.hardware.camera.device@1.0::ICameraDevice;
22import android.hardware.camera.device@3.2::ICameraDevice;
23
24/**
25 * Camera provider HAL, which enumerates the available individual camera devices
26 * known to the provider, and provides updates about changes to device status,
27 * such as connection, disconnection, or torch mode enable/disable.
28 *
29 * The provider is responsible for generating a list of camera device service
30 * names that can then be opened via the hardware service manager.
31 *
32 * Multiple camera provider HALs may be present in a single system.
33 * For discovery, the service names, and process names, must be of the form
34 * "android.hardware.camera.provider@<major>.<minor>/<type>/<instance>"
35 * where
36 * - <major>/<minor> is the provider HAL HIDL version,
37 * - <type> is the type of devices this provider knows about, such as
Emilian Peev36ad1192018-03-02 12:38:30 +000038 * "internal", "legacy", "external", "remote" etc. The camera framework
39 * must not differentiate or chage its behavior based on the specific type.
Zhijun He8486e412016-09-12 15:30:51 -070040 * - <instance> is a non-negative integer starting from 0 to disambiguate
41 * between multiple HALs of the same type.
42 *
43 * The "legacy" type is only used for passthrough legacy HAL mode, and must
44 * not be used by a standalone binderized HAL.
45 *
Yin-Chia Yehcd171002018-02-12 14:13:37 -080046 * The device instance names enumerated by the provider in getCameraIdList() or
47 * ICameraProviderCallback::cameraDeviceStatusChange() must be of the form
Zhijun He8486e412016-09-12 15:30:51 -070048 * "device@<major>.<minor>/<type>/<id>" where
49 * <major>/<minor> is the HIDL version of the interface. <id> is either a small
50 * incrementing integer for "internal" device types, with 0 being the main
51 * back-facing camera and 1 being the main front-facing camera, if they exist.
Yin-Chia Yehcd171002018-02-12 14:13:37 -080052 * Or, for external devices, a unique serial number (if possible) that can be
53 * used to identify the device reliably when it is disconnected and reconnected.
Zhijun He8486e412016-09-12 15:30:51 -070054 *
Yin-Chia Yehcd171002018-02-12 14:13:37 -080055 * Multiple providers must not enumerate the same device ID.
Zhijun He8486e412016-09-12 15:30:51 -070056 */
57interface ICameraProvider {
58
59 /**
60 * setCallback:
61 *
62 * Provide a callback interface to the HAL provider to inform framework of
63 * asynchronous camera events. The framework must call this function once
64 * during camera service startup, before any other calls to the provider
65 * (note that in case the camera service restarts, this method must be
66 * invoked again during its startup).
67 *
68 * @param callback
69 * A non-null callback interface to invoke when camera events occur.
70 * @return status
71 * Status code for the operation, one of:
72 * OK:
73 * On success
74 * INTERNAL_ERROR:
75 * An unexpected internal error occurred while setting the callbacks
76 * ILLEGAL_ARGUMENT:
77 * The callback argument is invalid (for example, null).
78 *
79 */
80 setCallback(ICameraProviderCallback callback) generates (Status status);
81
82 /**
83 * getVendorTags:
84 *
85 * Retrieve all vendor tags supported by devices discoverable through this
86 * provider. The tags are grouped into sections.
87 *
88 * @return status
89 * Status code for the operation, one of:
90 * OK:
91 * On success
92 * INTERNAL_ERROR:
93 * An unexpected internal error occurred while setting the callbacks
94 * @return sections
95 * The supported vendor tag sections; empty if there are no supported
96 * vendor tags, or status is not OK.
97 *
98 */
99 getVendorTags() generates (Status status, vec<VendorTagSection> sections);
100
101 /**
Yin-Chia Yehcd171002018-02-12 14:13:37 -0800102 * getCameraIdList:
Zhijun He8486e412016-09-12 15:30:51 -0700103 *
104 * Returns the list of internal camera device interfaces known to this
105 * camera provider. These devices can then be accessed via the hardware
106 * service manager.
107 *
108 * External camera devices (camera facing EXTERNAL) must be reported through
109 * the device status change callback, not in this list. Only devices with
110 * facing BACK or FRONT must be listed here.
111 *
112 * @return status Status code for the operation, one of:
113 * OK:
114 * On a succesful generation of camera ID list
115 * INTERNAL_ERROR:
116 * A camera ID list cannot be created. This may be due to
117 * a failure to initialize the camera subsystem, for example.
Shuzhen Wang05066102020-01-10 12:43:08 -0800118 * @return cameraDeviceNames The vector of internal camera device
Zhijun He8486e412016-09-12 15:30:51 -0700119 * names known to this provider.
120 */
121 getCameraIdList()
122 generates (Status status, vec<string> cameraDeviceNames);
123
124 /**
Yin-Chia Yehf906b3b2016-12-14 19:13:15 -0800125 * isSetTorchModeSupported:
126 *
127 * Returns if the camera devices known to this camera provider support
128 * setTorchMode API or not. If the provider does not support setTorchMode
129 * API, calling to setTorchMode will return METHOD_NOT_SUPPORTED.
130 *
131 * Note that not every camera device has a flash unit, so even this API
132 * returns true, setTorchMode call might still fail due to the camera device
133 * does not have a flash unit. In such case, the returned status will be
134 * OPERATION_NOT_SUPPORTED.
135 *
136 * @return status Status code for the operation, one of:
137 * OK:
138 * On a succesful call
139 * INTERNAL_ERROR:
140 * Torch API support cannot be queried. This may be due to
141 * a failure to initialize the camera subsystem, for example.
142 * @return support Whether the camera devices known to this provider
Yin-Chia Yeh51ea7c92019-04-05 14:15:29 -0700143 * supports setTorchMode API or not. Devices launched with SDK
144 * level 29 or higher must return true.
Yin-Chia Yehf906b3b2016-12-14 19:13:15 -0800145 *
146 */
147 isSetTorchModeSupported() generates (Status status, bool support);
148
149 /**
Zhijun He8486e412016-09-12 15:30:51 -0700150 * getCameraDeviceInterface_VN_x:
151 *
152 * Return a android.hardware.camera.device@N.x/ICameraDevice interface for
153 * the requested device name. This does not power on the camera device, but
154 * simply acquires the interface for querying the device static information,
155 * or to additionally open the device for active use.
156 *
157 * A separate method is required for each major revision of the camera device
158 * HAL interface, since they are not compatible with each other.
159 *
160 * Valid device names for this provider can be obtained via either
161 * getCameraIdList(), or via availability callbacks from
162 * ICameraProviderCallback::cameraDeviceStatusChange().
163 *
164 * The returned interface must be of the highest defined minor version for
165 * the major version; it's the responsibility of the HAL client to ensure
166 * they do not use methods/etc that are not valid for the actual minor
167 * version of the device.
168 *
169 * @param cameraDeviceName the name of the device to get an interface to.
170 * @return status Status code for the operation, one of:
171 * OK:
172 * On a succesful generation of camera ID list
173 * ILLEGAL_ARGUMENT:
174 * This device name is unknown, or has been disconnected
175 * OPERATION_NOT_SUPPORTED:
176 * The specified device does not support this major version of the
177 * HAL interface.
178 * INTERNAL_ERROR:
179 * A camera interface cannot be returned due to an unexpected
180 * internal error.
181 * @return device The inteface to this camera device, or null in case of
182 * error.
183 */
184 getCameraDeviceInterface_V1_x(string cameraDeviceName) generates
185 (Status status,
186 android.hardware.camera.device@1.0::ICameraDevice device);
187 getCameraDeviceInterface_V3_x(string cameraDeviceName) generates
188 (Status status,
189 android.hardware.camera.device@3.2::ICameraDevice device);
190
191};