blob: f5d0eec113a51ec857d4995e07967e70b1d156b8 [file] [log] [blame]
/*
* 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);
};