You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
7.9 KiB
188 lines
7.9 KiB
/* |
|
* Copyright (C) 2016 The Android Open Source Project |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
*/ |
|
|
|
package android.hardware.camera.provider@2.4; |
|
|
|
import ICameraProviderCallback; |
|
import android.hardware.camera.common@1.0::types; |
|
import android.hardware.camera.device@1.0::ICameraDevice; |
|
import android.hardware.camera.device@3.2::ICameraDevice; |
|
|
|
/** |
|
* Camera provider HAL, which enumerates the available individual camera devices |
|
* known to the provider, and provides updates about changes to device status, |
|
* such as connection, disconnection, or torch mode enable/disable. |
|
* |
|
* The provider is responsible for generating a list of camera device service |
|
* names that can then be opened via the hardware service manager. |
|
* |
|
* Multiple camera provider HALs may be present in a single system. |
|
* For discovery, the service names, and process names, must be of the form |
|
* "android.hardware.camera.provider@<major>.<minor>/<type>/<instance>" |
|
* where |
|
* - <major>/<minor> is the provider HAL HIDL version, |
|
* - <type> is the type of devices this provider knows about, such as |
|
* "internal", "legacy", "usb", or "remote" |
|
* - <instance> is a non-negative integer starting from 0 to disambiguate |
|
* between multiple HALs of the same type. |
|
* |
|
* The "legacy" type is only used for passthrough legacy HAL mode, and must |
|
* not be used by a standalone binderized HAL. |
|
* |
|
* The device instance names enumerated by the provider must be of the form |
|
* "device@<major>.<minor>/<type>/<id>" where |
|
* <major>/<minor> is the HIDL version of the interface. <id> is either a small |
|
* incrementing integer for "internal" device types, with 0 being the main |
|
* back-facing camera and 1 being the main front-facing camera, if they exist. |
|
* Or, for external devices such as type "usb", a unique serial number that can |
|
* be used to identify the device reliably when it is disconnected and |
|
* reconnected. Multiple providers may not enumerate the same device ID. |
|
* |
|
*/ |
|
interface ICameraProvider { |
|
|
|
/** |
|
* setCallback: |
|
* |
|
* Provide a callback interface to the HAL provider to inform framework of |
|
* asynchronous camera events. The framework must call this function once |
|
* during camera service startup, before any other calls to the provider |
|
* (note that in case the camera service restarts, this method must be |
|
* invoked again during its startup). |
|
* |
|
* @param callback |
|
* A non-null callback interface to invoke when camera events occur. |
|
* @return status |
|
* Status code for the operation, one of: |
|
* OK: |
|
* On success |
|
* INTERNAL_ERROR: |
|
* An unexpected internal error occurred while setting the callbacks |
|
* ILLEGAL_ARGUMENT: |
|
* The callback argument is invalid (for example, null). |
|
* |
|
*/ |
|
setCallback(ICameraProviderCallback callback) generates (Status status); |
|
|
|
/** |
|
* getVendorTags: |
|
* |
|
* Retrieve all vendor tags supported by devices discoverable through this |
|
* provider. The tags are grouped into sections. |
|
* |
|
* @return status |
|
* Status code for the operation, one of: |
|
* OK: |
|
* On success |
|
* INTERNAL_ERROR: |
|
* An unexpected internal error occurred while setting the callbacks |
|
* @return sections |
|
* The supported vendor tag sections; empty if there are no supported |
|
* vendor tags, or status is not OK. |
|
* |
|
*/ |
|
getVendorTags() generates (Status status, vec<VendorTagSection> sections); |
|
|
|
/** |
|
* getCameraDeviceList: |
|
* |
|
* Returns the list of internal camera device interfaces known to this |
|
* camera provider. These devices can then be accessed via the hardware |
|
* service manager. |
|
* |
|
* External camera devices (camera facing EXTERNAL) must be reported through |
|
* the device status change callback, not in this list. Only devices with |
|
* facing BACK or FRONT must be listed here. |
|
* |
|
* @return status Status code for the operation, one of: |
|
* OK: |
|
* On a succesful generation of camera ID list |
|
* INTERNAL_ERROR: |
|
* A camera ID list cannot be created. This may be due to |
|
* a failure to initialize the camera subsystem, for example. |
|
* @return cameraDeviceServiceNames The vector of internal camera device |
|
* names known to this provider. |
|
*/ |
|
getCameraIdList() |
|
generates (Status status, vec<string> cameraDeviceNames); |
|
|
|
/** |
|
* isSetTorchModeSupported: |
|
* |
|
* Returns if the camera devices known to this camera provider support |
|
* setTorchMode API or not. If the provider does not support setTorchMode |
|
* API, calling to setTorchMode will return METHOD_NOT_SUPPORTED. |
|
* |
|
* Note that not every camera device has a flash unit, so even this API |
|
* returns true, setTorchMode call might still fail due to the camera device |
|
* does not have a flash unit. In such case, the returned status will be |
|
* OPERATION_NOT_SUPPORTED. |
|
* |
|
* @return status Status code for the operation, one of: |
|
* OK: |
|
* On a succesful call |
|
* INTERNAL_ERROR: |
|
* Torch API support cannot be queried. This may be due to |
|
* a failure to initialize the camera subsystem, for example. |
|
* @return support Whether the camera devices known to this provider |
|
* supports setTorchMode API or not. |
|
* |
|
*/ |
|
isSetTorchModeSupported() generates (Status status, bool support); |
|
|
|
/** |
|
* getCameraDeviceInterface_VN_x: |
|
* |
|
* Return a android.hardware.camera.device@N.x/ICameraDevice interface for |
|
* the requested device name. This does not power on the camera device, but |
|
* simply acquires the interface for querying the device static information, |
|
* or to additionally open the device for active use. |
|
* |
|
* A separate method is required for each major revision of the camera device |
|
* HAL interface, since they are not compatible with each other. |
|
* |
|
* Valid device names for this provider can be obtained via either |
|
* getCameraIdList(), or via availability callbacks from |
|
* ICameraProviderCallback::cameraDeviceStatusChange(). |
|
* |
|
* The returned interface must be of the highest defined minor version for |
|
* the major version; it's the responsibility of the HAL client to ensure |
|
* they do not use methods/etc that are not valid for the actual minor |
|
* version of the device. |
|
* |
|
* @param cameraDeviceName the name of the device to get an interface to. |
|
* @return status Status code for the operation, one of: |
|
* OK: |
|
* On a succesful generation of camera ID list |
|
* ILLEGAL_ARGUMENT: |
|
* This device name is unknown, or has been disconnected |
|
* OPERATION_NOT_SUPPORTED: |
|
* The specified device does not support this major version of the |
|
* HAL interface. |
|
* INTERNAL_ERROR: |
|
* A camera interface cannot be returned due to an unexpected |
|
* internal error. |
|
* @return device The inteface to this camera device, or null in case of |
|
* error. |
|
*/ |
|
getCameraDeviceInterface_V1_x(string cameraDeviceName) generates |
|
(Status status, |
|
android.hardware.camera.device@1.0::ICameraDevice device); |
|
getCameraDeviceInterface_V3_x(string cameraDeviceName) generates |
|
(Status status, |
|
android.hardware.camera.device@3.2::ICameraDevice device); |
|
|
|
};
|
|
|