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.
419 lines
16 KiB
419 lines
16 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.device@1.0; |
|
|
|
import android.hardware.camera.common@1.0::types; |
|
import ICameraDeviceCallback; |
|
import ICameraDevicePreviewCallback; |
|
|
|
/** |
|
* Camera device HAL, legacy version |
|
* |
|
* DEPRECATED. New devices are strongly recommended to use Camera HAL v3.2 or |
|
* newer. |
|
* |
|
* Supports the android.hardware.Camera API, and the android.hardware.camera2 |
|
* API in LEGACY mode only. |
|
* |
|
* Will be removed in the Android P release. |
|
*/ |
|
interface ICameraDevice { |
|
|
|
/** |
|
* Get camera device resource cost information. |
|
* |
|
* This method may be called at any time, including before open() |
|
* |
|
* @return status Status code for the operation, one of: |
|
* OK: |
|
* On success. |
|
* INTERNAL_ERROR: |
|
* An unexpected internal camera HAL error occurred, and the |
|
* resource cost is not available. |
|
* CAMERA_DISCONNECTED: |
|
* An external camera device has been disconnected, and is no longer |
|
* available. This camera device interface is now stale, and a new |
|
* instance must be acquired if the device is reconnected. All |
|
* subsequent calls on this interface must return |
|
* CAMERA_DISCONNECTED. |
|
* @return resourceCost |
|
* The resources required to open this camera device, or unspecified |
|
* values if status is not OK. |
|
*/ |
|
getResourceCost() generates (Status status, CameraResourceCost resourceCost); |
|
|
|
/** |
|
* Get basic camera information. |
|
* |
|
* This method may be called at any time, including before open() |
|
* |
|
* @return status Status code for the operation, one of: |
|
* OK: |
|
* On success. |
|
* INTERNAL_ERROR: |
|
* An unexpected internal camera HAL error occurred, and the |
|
* camera information is not available. |
|
* CAMERA_DISCONNECTED: |
|
* An external camera device has been disconnected, and is no longer |
|
* available. This camera device interface is now stale, and a new |
|
* instance must be acquired if the device is reconnected. All |
|
* subsequent calls on this interface must return |
|
* CAMERA_DISCONNECTED. |
|
* @return info Basic information about this camera device, or unspecified |
|
* values if status is not OK. |
|
*/ |
|
getCameraInfo() generates (Status status, CameraInfo info); |
|
|
|
/** |
|
* setTorchMode: |
|
* |
|
* Turn on or off the torch mode of the flash unit associated with a given |
|
* camera ID. If the operation is successful, HAL must notify the framework |
|
* torch state by invoking |
|
* ICameraProviderCallback::torchModeStatusChange() with the new state. |
|
* |
|
* The camera device has a higher priority accessing the flash unit. When |
|
* there are any resource conflicts, such as when open() is called to fully |
|
* activate a camera device, the provider must notify the framework through |
|
* ICameraProviderCallback::torchModeStatusChange() that the torch mode has |
|
* been turned off and the torch mode state has become |
|
* TORCH_MODE_STATUS_NOT_AVAILABLE. When resources to turn on torch mode |
|
* become available again, the provider must notify the framework through |
|
* ICameraProviderCallback::torchModeStatusChange() that the torch mode |
|
* state has become TORCH_MODE_STATUS_AVAILABLE_OFF for set_torch_mode() to |
|
* be called. |
|
* |
|
* When the framework calls setTorchMode() to turn on the torch mode of a |
|
* flash unit, if HAL cannot keep multiple torch modes on simultaneously, |
|
* HAL must turn off the torch mode that was turned on by |
|
* a previous setTorchMode() call and notify the framework that the torch |
|
* mode state of that flash unit has become TORCH_MODE_STATUS_AVAILABLE_OFF. |
|
* |
|
* @param torchMode The new mode to set the device flash unit to. |
|
* |
|
* @return status Status code for the operation, one of: |
|
* OK: |
|
* On a successful change to the torch state. |
|
* INTERNAL_ERROR: |
|
* The flash unit cannot be operated due to an unexpected internal |
|
* error. |
|
* ILLEGAL_ARGUMENT: |
|
* The camera ID is unknown. |
|
* CAMERA_IN_USE: |
|
* This camera device has been opened, so the torch cannot be |
|
* controlled until it is closed. |
|
* MAX_CAMERAS_IN_USE: |
|
* Due to other camera devices being open, or due to other |
|
* resource constraints, the torch cannot be controlled currently. |
|
* METHOD_NOT_SUPPORTED: |
|
* This provider does not support direct operation of flashlight |
|
* torch mode. The framework must open the camera device and turn |
|
* the torch on through the device interface. |
|
* OPERATION_NOT_SUPPORTED: |
|
* This camera device does not have a flash unit. This must |
|
* be returned if and only if parameter key flash-mode-values is not present. |
|
* CAMERA_DISCONNECTED: |
|
* An external camera device has been disconnected, and is no longer |
|
* available. This camera device interface is now stale, and a new |
|
* instance must be acquired if the device is reconnected. All |
|
* subsequent calls on this interface must return |
|
* CAMERA_DISCONNECTED. |
|
* |
|
*/ |
|
setTorchMode(TorchMode mode) generates (Status status); |
|
|
|
/** |
|
* Dump state of the camera hardware. |
|
* |
|
* This must be callable at any time, whether the device is open or not. |
|
* |
|
* @param fd A native handle with one valid file descriptor. The descriptor |
|
* must be able to be used with dprintf() or equivalent to dump the |
|
* state of this camera device into the camera service dumpsys output. |
|
* |
|
* @return status The status code for this operation. |
|
*/ |
|
dumpState(handle fd) generates (Status status); |
|
|
|
/** |
|
* Open the camera device for active use. |
|
* |
|
* All methods besides getResourceCost(), getCameraInfo(), setTorchMode(), |
|
* and dump() must not be called unless open() has been called successfully, |
|
* and close() has not yet been called. |
|
* |
|
* @param callback Interface to invoke by the HAL for device callbacks. |
|
* @return status Status code for the operation, one of: |
|
* OK: |
|
* On a successful open of the camera device. |
|
* INTERNAL_ERROR: |
|
* The camera device cannot be opened due to an internal |
|
* error. |
|
* ILLEGAL_ARGUMENT: |
|
* The callback handle is invalid (for example, it is null). |
|
* CAMERA_IN_USE: |
|
* This camera device is already open. |
|
* MAX_CAMERAS_IN_USE: |
|
* The maximal number of camera devices that can be |
|
* opened concurrently were opened already. |
|
* CAMERA_DISCONNECTED: |
|
* This external camera device has been disconnected, and is no |
|
* longer available. This interface is now stale, and a new instance |
|
* must be acquired if the device is reconnected. All subsequent |
|
* calls on this interface must return CAMERA_DISCONNECTED. |
|
*/ |
|
open(ICameraDeviceCallback callback) generates (Status status); |
|
|
|
|
|
/***** |
|
* All methods below this point must only be called between a successful |
|
* open() call and a close() call. |
|
*/ |
|
|
|
/** Set the callback interface through which preview frames are sent */ |
|
setPreviewWindow(ICameraDevicePreviewCallback window) |
|
generates (Status status); |
|
|
|
/** |
|
* Enable a message, or set of messages. |
|
* |
|
* @param msgType The bitfield of messages to enable. |
|
*/ |
|
enableMsgType(FrameCallbackFlags msgType); |
|
|
|
/** |
|
* Disable a message, or a set of messages. |
|
* |
|
* Once received a call to disableMsgType(CAMERA_MSG_VIDEO_FRAME), camera |
|
* HAL must not rely on its client to call releaseRecordingFrame() to |
|
* release video recording frames sent out by the cameral HAL before and |
|
* after the disableMsgType(CAMERA_MSG_VIDEO_FRAME) call. Camera HAL |
|
* clients must not modify/access any video recording frame after calling |
|
* disableMsgType(CAMERA_MSG_VIDEO_FRAME). |
|
* |
|
* @param msgType The bitfield of messages to disable. |
|
*/ |
|
disableMsgType(FrameCallbackFlags msgType); |
|
|
|
/** |
|
* Query whether a message, or a set of messages, is enabled. Note that |
|
* this is operates as an AND, if any of the messages queried are off, this |
|
* must return false. |
|
* |
|
* @param msgType The bitfield of messages to query. |
|
* @return enabled Whether all the specified flags are enabled. |
|
*/ |
|
msgTypeEnabled(FrameCallbackFlags msgType) generates (bool enabled); |
|
|
|
/** |
|
* Start preview mode. |
|
* |
|
* @return status The status code for this operation. |
|
*/ |
|
startPreview() generates (Status status); |
|
|
|
/** |
|
* Stop a previously started preview. |
|
*/ |
|
stopPreview(); |
|
|
|
/** |
|
* Returns true if preview is enabled. |
|
* |
|
* @return enabled Whether preview is currently enabled. |
|
*/ |
|
previewEnabled() generates (bool enabled); |
|
|
|
/** |
|
* Request the camera HAL to store meta data or real YUV data in the video |
|
* buffers sent out via CAMERA_MSG_VIDEO_FRAME for a recording session. If |
|
* it is not called, the default camera HAL behavior is to store real YUV |
|
* data in the video buffers. |
|
* |
|
* This method must be called before startRecording() in order to be |
|
* effective. |
|
* |
|
* If meta data is stored in the video buffers, it is up to the receiver of |
|
* the video buffers to interpret the contents and to find the actual frame |
|
* data with the help of the meta data in the buffer. How this is done is |
|
* outside of the scope of this method. |
|
* |
|
* Some camera HALs may not support storing meta data in the video buffers, |
|
* but all camera HALs must support storing real YUV data in the video |
|
* buffers. If the camera HAL does not support storing the meta data in the |
|
* video buffers when it is requested to do do, INVALID_OPERATION must be |
|
* returned. It is very useful for the camera HAL to pass meta data rather |
|
* than the actual frame data directly to the video encoder, since the |
|
* amount of the uncompressed frame data can be very large if video size is |
|
* large. |
|
* |
|
* @param enable Set to true to instruct the camera HAL to store meta data |
|
* in the video buffers; false to instruct the camera HAL to store real |
|
* YUV data in the video buffers. |
|
* |
|
* @return status OK on success. |
|
*/ |
|
storeMetaDataInBuffers(bool enable) generates (Status status); |
|
|
|
/** |
|
* Start record mode. |
|
* |
|
* When a record image is available, a CAMERA_MSG_VIDEO_FRAME message is |
|
* sent with the corresponding frame. Every record frame must be released by |
|
* a camera HAL client via releaseRecordingFrame() before the client calls |
|
* disableMsgType(CAMERA_MSG_VIDEO_FRAME). After the client calls |
|
* disableMsgType(CAMERA_MSG_VIDEO_FRAME), it is the camera HAL's |
|
* responsibility to manage the life-cycle of the video recording frames, |
|
* and the client must not modify/access any video recording frames. |
|
* |
|
* @return status The status code for the operation. |
|
*/ |
|
startRecording() generates (Status status); |
|
|
|
/** |
|
* Stop a previously started recording. |
|
*/ |
|
stopRecording(); |
|
|
|
/** |
|
* Returns true if recording is enabled. |
|
* |
|
* @return enabled True if recording is currently active. |
|
*/ |
|
recordingEnabled() generates (bool enabled); |
|
|
|
/** |
|
* Release a record frame previously returned by CAMERA_MSG_VIDEO_FRAME in |
|
* dataCallbackTimestamp. |
|
* |
|
* It is camera HAL client's responsibility to release video recording |
|
* frames sent out by the camera HAL before the camera HAL receives a call |
|
* to disableMsgType(CAMERA_MSG_VIDEO_FRAME). After it receives the call to |
|
* disableMsgType(CAMERA_MSG_VIDEO_FRAME), it is the camera HAL's |
|
* responsibility to manage the life-cycle of the video recording frames. |
|
* |
|
* @param memId The memory buffer to release a recording frame from. |
|
* @param bufferIndex The specific buffer index to return to the HAL. |
|
*/ |
|
releaseRecordingFrame(MemoryId memId, uint32_t bufferIndex); |
|
|
|
/** |
|
* Release a record frame previously returned by CAMERA_MSG_VIDEO_FRAME in |
|
* handleCallbackTimestamp. |
|
* |
|
* It is camera HAL client's responsibility to release video recording |
|
* frames sent out by the camera HAL before the camera HAL receives a call |
|
* to disableMsgType(CAMERA_MSG_VIDEO_FRAME). After it receives the call to |
|
* disableMsgType(CAMERA_MSG_VIDEO_FRAME), it is the camera HAL's |
|
* responsibility to manage the life-cycle of the video recording frames. |
|
* |
|
* @param memId The memory buffer to release a recording frame from. |
|
* @param bufferIndex The specific buffer index to return to the HAL. |
|
* @param frame The handle for a released video frame |
|
*/ |
|
releaseRecordingFrameHandle(MemoryId memId, uint32_t bufferIndex, handle frame); |
|
|
|
/** |
|
* Release a batch of record frames previously returned by CAMERA_MSG_VIDEO_FRAME |
|
* in handleCallbackTimestampBatch. |
|
* |
|
* It is camera HAL client's responsibility to release video recording |
|
* frames sent out by the camera HAL before the camera HAL receives a call |
|
* to disableMsgType(CAMERA_MSG_VIDEO_FRAME). After it receives the call to |
|
* disableMsgType(CAMERA_MSG_VIDEO_FRAME), it is the camera HAL's |
|
* responsibility to manage the life-cycle of the video recording frames. |
|
* |
|
* @param batch A batch of recording frames to be released by camera HAL. |
|
*/ |
|
releaseRecordingFrameHandleBatch(vec<VideoFrameMessage> batch); |
|
|
|
/** |
|
* Start auto focus. |
|
* |
|
* The notification callback routine is called with |
|
* CAMERA_MSG_FOCUS once when focusing is complete. autoFocus() can be |
|
* called again after that if another auto focus is needed. |
|
* |
|
* @return status The status code for this operation. |
|
*/ |
|
autoFocus() generates (Status status); |
|
|
|
/** |
|
* Cancels auto-focus function. |
|
* |
|
* If the auto-focus is still in progress, this function must cancel |
|
* it. Whether the auto-focus is in progress or not, this function must |
|
* return the focus position to the default. If the camera does not support |
|
* auto-focus, this is a no-op. |
|
* |
|
* @return status The status code for this operation. |
|
*/ |
|
cancelAutoFocus() generates (Status status); |
|
|
|
/** |
|
* Take a picture. |
|
* |
|
* @return status The status code for this operation. |
|
*/ |
|
takePicture() generates (Status status); |
|
|
|
/** |
|
* Cancel a picture that was started with takePicture. Calling this method |
|
* when no picture is being taken is a no-op. |
|
* |
|
* @return status The status code for this operation. |
|
*/ |
|
cancelPicture() generates (Status status); |
|
|
|
/** |
|
* Set the camera parameters. |
|
* |
|
* @param params The parameter string, consisting of |
|
* '<key1>=<value1>; ...;<keyN>=<valueN>'. |
|
* @return status The status code for this operation: |
|
* OK: Parameter update was successful |
|
* ILLEGAL_ARGUMENT: At least one parameter was invalid or not supported |
|
* |
|
*/ |
|
setParameters(string params) generates (Status status); |
|
|
|
/** |
|
* Retrieve the camera parameters. |
|
*/ |
|
getParameters() generates (string parms); |
|
|
|
/** |
|
* Send command to camera driver. |
|
* The meaning of the arguments is defined by the value of cmd, documented |
|
* in the CommandType definition. |
|
* |
|
* @param cmd The command to invoke. |
|
* @param arg1 The first argument for the command, if needed. |
|
* @param arg2 The second argument for the command, if needed. |
|
* |
|
* @return status The status code for this operation. |
|
*/ |
|
sendCommand(CommandType cmd, int32_t arg1, int32_t arg2) |
|
generates (Status status); |
|
|
|
/** |
|
* Release the hardware resources owned by this object, shutting down the |
|
* camera device. |
|
*/ |
|
close(); |
|
|
|
};
|
|
|