| /* |
| * Copyright (C) 2018 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.frameworks.cameraservice.device@2.0; |
| |
| import android.frameworks.cameraservice.common@2.0::Status; |
| |
| interface ICameraDeviceUser { |
| /** |
| * disconnect from using the camera device. |
| * This method must block till in-flight requests are completed and stop |
| * all the requests submitted through submitRequestList(). |
| */ |
| disconnect(); |
| |
| /** |
| * Retrieve the fast message queue to be optionally used in CaptureRequests, |
| * to pass the settings metadata. |
| * If the client decides to use FMQ, it must: |
| * - Call getCaptureRequestMetadataQueue to retrieve the fast message queue |
| * - In submitRequestList calls, for each request set the fmqMetadataSize |
| * in the settings field of physicalCameraSettings, to the size of the |
| * metadata. |
| * |
| * @return queue the queue that the client writes the request settings |
| * metadata to. |
| */ |
| getCaptureRequestMetadataQueue() generates (fmq_sync<uint8_t> queue); |
| |
| /** |
| * Retrieve the fast message queue used along with |
| * ICameraDeviceCallback.onResultReceived. |
| * |
| * Note: The client's use of this function does not affect the hidl |
| * service's decision to use / not use FMQ to pass result metadata to the |
| * cleint. |
| * |
| * Clients implementing the callback must: |
| * - Retrieve the queue using getCaptureResultMetadataQueue. |
| * - In the implementation of ICameraDeviceCallback.onResultReceived, if |
| * PhysicalCaptureResultInfo.physicalCameraMetadata has a valid |
| * fmqMetadataSize (which is > 0), the metadata must be read from the FMQ, |
| * else, it must be read from the metadata field. |
| * The same applies to resultMetadata. |
| * |
| * @return queue the queue that the client reads the result metadata from. |
| */ |
| getCaptureResultMetadataQueue() generates (fmq_sync<uint8_t> queue); |
| |
| /** |
| * Submit a list of capture requests. |
| * |
| * Note: Clients must call submitRequestList() serially if they opt |
| * to utilize an fmq (obtained by calling getCaptureRequestMetadataQueue) |
| * for any CaptureRequest's physicalCameraSettings metadata. |
| |
| * @param requestList The list of CaptureRequests |
| * @param isRepeating Whether the set of requests repeats indefinitely. |
| * |
| * @return status status code of the operation. |
| * @return submitInfo data structure containing the request id of the |
| * capture request and the frame number of the last frame that will |
| * be produced(In case the request is not repeating. Otherwise it |
| * contains the frame number of the last request, of the previus |
| * batch of repeating requests, if any. If there is no previous |
| * batch, the frame number returned will be -1.) |
| */ |
| submitRequestList(vec<CaptureRequest> requestList, bool isRepeating) |
| generates (Status status, SubmitInfo submitInfo); |
| |
| /** |
| * Cancel the current repeating request. |
| * |
| * The current repeating request may be stopped by camera device due to an |
| * error. |
| * |
| * Calling this method when there is no active repeating request, will |
| * trigger Status::INVALID_OPERATION. |
| * |
| * @return status the status code of the opertion. |
| * @return frameNumber the frame number of the last frame that will be |
| * produced from this repeating request. If there are no inflight |
| * repeating requests, this will return -1 as the frameNumber. |
| * If the status is not NO_ERROR, the frame number should not be |
| * used. |
| */ |
| cancelRepeatingRequest() |
| generates (Status status, int64_t frameNumber); |
| |
| /* |
| * Begin device configuration. |
| * |
| * @return status the status code of the operation. |
| */ |
| beginConfigure() generates (Status status); |
| |
| /** |
| * End the device configuration. |
| * |
| * endConfigure must be called after stream configuration is complete |
| * (i.e. after a call to beginConfigure and subsequent |
| * createStream/deleteStream calls). It must be called before any |
| * requests can be submitted. |
| * |
| * @param operatingMode The kind of session to create; either NORMAL_MODE, |
| * CONSTRAINED_HIGH_SPEED_MODE, or one of the vendor modes. |
| * @param sessionParams Session-wide camera parameters. Empty session |
| * parameters are legal inputs. |
| * |
| * @return status the status code of the operation. |
| */ |
| endConfigure(StreamConfigurationMode operatingMode, |
| CameraMetadata sessionParams) generates (Status status); |
| |
| /** |
| * delete the stream specified by streamId. |
| * |
| * Note: deleteStream() must only be called within a beginConfigure() and an |
| * endConfigure() block. |
| * |
| * @param streamId the stream id of the stream to be deleted |
| * @return status the status code of the operation |
| */ |
| deleteStream(int32_t streamId) generates (Status status); |
| |
| /** |
| * Create an output stream based on the given output configuration. |
| * |
| * Note: createStream() must only be called within a beginConfigure() and an |
| * endConfigure() block. |
| * |
| * @param outputConfiguration size, format, and other parameters for the |
| * stream |
| * @return status the status code of the operation. |
| * @return streamID new stream ID generated. |
| */ |
| createStream(OutputConfiguration outputConfiguration) |
| generates (Status status, int32_t streamID); |
| |
| /** |
| * Create a default capture request for capturing an image. |
| * |
| * @param templateId the type of capture request to be created. |
| * |
| * @return status the status code of the operation. |
| * @return metadata the settings metadata of the request. |
| */ |
| createDefaultRequest(TemplateId templateId) |
| generates (Status status, CameraMetadata metadata); |
| |
| /** |
| * Block until the device is idle. |
| * |
| * Note: This method will not block and instead will fail with |
| * Status::INVALID_OPERATION if there are active repeating requests. |
| * |
| * @return status the status code of the operation. |
| */ |
| waitUntilIdle() generates (Status status); |
| |
| /** |
| * flush all the requests pending on the device. |
| * |
| * @return status the status code of the operation. |
| * @return lastFrameNumber the frame number of the last frame flushed. |
| */ |
| flush() generates (Status status, int64_t lastFrameNumber); |
| |
| /** |
| * Update a previously set output configuration. |
| * |
| * Note: It is legal to call this method outside of |
| * beginConfigure()/endConfigure() blocks and also when the device |
| * is not idle. |
| * |
| * @param streamId the stream id whose output configuration needs to be |
| * updated. |
| * @param outputConfiguration the new outputConfiguration. |
| * |
| * @return status the status code of the operation. |
| */ |
| updateOutputConfiguration( |
| int32_t streamId, OutputConfiguration outputConfiguration) |
| generates (Status status); |
| |
| /** |
| * Check whether a particular session configuration has camera device |
| * support. |
| * |
| * @param sessionConfiguration Specific session configuration to be verified. |
| * |
| * @return status the status code of the operation |
| * @return true - in case the stream combination is supported. |
| * false - in case there is no device support. |
| */ |
| isSessionConfigurationSupported(SessionConfiguration sessionConfiguration) |
| generates (Status status, bool supported); |
| }; |