platform_hardware_interfaces/camera/device/3.6/ICameraDeviceSession.hal
Yin-Chia Yeh 91e07785b5 Camera: add OFFLINE_PROCESSING APIs
Also a typo fix in metadata doc.

Test: N/A. New API skeleton, no implementation yet.
Bug: 135142453
Change-Id: I4852ee28242afabe81b02cfef39994c5d2705359
2019-12-16 11:40:28 -08:00

132 lines
6.5 KiB
Text

/*
* Copyright (C) 2019 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@3.6;
import android.hardware.camera.common@1.0::Status;
import @3.5::ICameraDeviceSession;
import @3.5::StreamConfiguration;
import ICameraOfflineSession;
/**
* Camera device active session interface.
*
* Obtained via ICameraDevice::open(), this interface contains the methods to
* configure and request captures from an active camera device.
*/
interface ICameraDeviceSession extends @3.5::ICameraDeviceSession {
/**
* configureStreams_3_6:
*
* Identical to @3.5::ICameraDeviceSession.configureStreams, except that:
*
* - a boolean supportOffline is added to HalStreamConfiguration to indicate
* if this stream can be switched to offline mode later.
*
* @return status Status code for the operation, one of:
* OK:
* On successful stream configuration.
* INTERNAL_ERROR:
* If there has been a fatal error and the device is no longer
* operational. Only close() can be called successfully by the
* framework after this error is returned.
* ILLEGAL_ARGUMENT:
* If the requested stream configuration is invalid. Some examples
* of invalid stream configurations include:
* - Including more than 1 INPUT stream
* - Not including any OUTPUT streams
* - Including streams with unsupported formats, or an unsupported
* size for that format.
* - Including too many output streams of a certain format.
* - Unsupported rotation configuration
* - Stream sizes/formats don't satisfy the
* StreamConfigurationMode requirements
* for non-NORMAL mode, or the requested operation_mode is not
* supported by the HAL.
* - Unsupported usage flag
* The camera service cannot filter out all possible illegal stream
* configurations, since some devices may support more simultaneous
* streams or larger stream resolutions than the minimum required
* for a given camera device hardware level. The HAL must return an
* ILLEGAL_ARGUMENT for any unsupported stream set, and then be
* ready to accept a future valid stream configuration in a later
* configureStreams call.
* @return halConfiguration The stream parameters desired by the HAL for
* each stream, including maximum buffers, the usage flags, and the
* override format.
*/
configureStreams_3_6(@3.5::StreamConfiguration requestedConfiguration)
generates (Status status, HalStreamConfiguration halConfiguration);
/**
* switchToOffline:
*
* Switch the current running session from actively streaming mode to the
* offline mode. See ICameraOfflineSession for more details.
*
* The streamsToKeep argument contains list of streams IDs where application
* still needs its output. For all streams application does not need anymore,
* camera HAL can send ERROR_BUFFER to speed up the transition, or even send
* ERROR_REQUEST if all output targets of a request is not needed. By the
* time this call returns, camera HAL must have returned all buffers coming
* from streams no longer needed and have erased buffer caches of such streams.
*
* For all requests that are going to be transferred to offline session,
* the ICameraDeviceSession is responsible to capture all input buffers from
* the image sensor before the switchToOffline call returns. Before
* switchToOffline returns, camera HAL must have completed all requests not
* switching to offline mode, and collected information on what streams and
* requests are going to continue in the offline session, in the
* offlineSessionInfo output argument.
*
* If there are no requests qualified to be transferred to offline session,
* the camera HAL must return a null ICameraOfflineSession object with OK
* status. In this scenario, the camera HAL still must flush all inflight
* requests and unconfigure all streams before returning this call.
*
* After switchToOffline returns, the ICameraDeviceSession must be back to
* unconfigured state as if it is just created and no streams are configured.
* Also, camera HAL must not call any methods in ICameraDeviceCallback since
* all unfinished requests are now transferred to the offline session.
* After the call returns, camera service may then call close to close
* the camera device, or call configureStream* again to reconfigure the
* camera and then send new capture requests with processCaptureRequest. In
* the latter case, it is legitimate for camera HAL to call methods in
* ICameraDeviceCallback again in response to the newly submitted capture
* requests.
*
* @return status Status code for the operation, one of:
* OK:
* On switching to offline session and unconfiguring streams
* successfully.
* ILLEGAL_ARGUMENT:
* If camera does not support offline mode in any one of streams
* in streamsToKeep argument. Note that the camera HAL must report
* if a stream supports offline mode in HalStreamConfiguration
* output of configureStreams_3_6 method. If all streams in
* streamsToKeep argument support offline mode, then the camera HAL
* must not return this error.
*
*
* @return offlineSessionInfo Information on what streams and requests will
* be transferred to offline session to continue processing.
*
* @return offlineSession The offline session object camera service will use
* to interact with.
*/
switchToOffline(vec<int32_t> streamsToKeep) generates (Status status,
CameraOfflineSessionInfo offlineSessionInfo, ICameraOfflineSession offlineSession);
};