blob: d720b26e5c02a86519441b800787bce9a6f7db2c [file] [log] [blame]
/*
* Copyright (C) 2020 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.6;
import @2.5::ICameraProvider;
import android.hardware.camera.common@1.0::Status;
import android.hardware.camera.device@3.4::StreamConfiguration;
/**
* Camera provider HAL
*
* @2.6::adds support for the getConcurrentStreamingCameraIds() and
* isConcurrentStreamCombinationSupported()
* @2.6::ICameraProviderCallback to receive physical camera availability
* callbacks for logical multi-cameras.
*/
interface ICameraProvider extends @2.5::ICameraProvider {
/**
* getConcurrentStreamingCameraIds
*
* Get a vector of combinations of camera device ids that are able to
* configure streams concurrently. Each camera device advertised in a
* combination MUST at the very least support the following streams while
* streaming concurrently with the other camera ids in the combination.
*
* Target 1 Target 2
* -----------------------------------------------------
* | Type | Size | Type | Size |
* -----------------------------------------------------
* | YUV | s1440p | |
* -----------------------------------------------------
* | JPEG | s1440p | |
* -----------------------------------------------------
* | PRIV | s1440p | |
* -----------------------------------------------------
* | YUV / PRIV | s720p | YUV / PRIV | s1440p |
* -----------------------------------------------------
* | YUV / PRIV | s720p | JPEG | s1440p |
* -----------------------------------------------------
*
* where:
* s720p - min (max output resolution for the given format, 1280 X 720)
* s1440p - min (max output resolution for the given format, 1920 X 1440)
*
* If a device has MONOCHROME capability (device's capabilities include
* ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME) and therefore supports Y8
* outputs, stream combinations mentioned above, where YUV is substituted by
* Y8 must be also supported.
*
* Devices whose capabilities do not include
* ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE, must support
* at least a single Y16 stream, Dataspace::DEPTH with sVGA resolution,
* during concurrent operation.
* Where sVGA - min (max output resolution for the given format, 640 X 480)
*
* The camera framework must call this method whenever it gets a
* cameraDeviceStatusChange callback adding a new camera device or removing
* a camera device known to it. This is so that the camera framework can get new combinations
* of camera ids that can stream concurrently, that might have potentially appeared.
*
* For each combination (and their subsets) of camera device ids returned by
* getConcurrentStreamingCameraIds(): If only the mandatory combinations can
* be supported concurrently by each device, then the resource costs must
* sum up to > 100 for the concurrent set, to ensure arbitration between
* camera applications work as expected. Only if resources are sufficient
* to run a set of cameras at full capability (maximally
* resource-consuming framerate and stream size settings available in the
* configuration settings exposed through camera metadata), should the sum
* of resource costs for the combination be <= 100.
*
* For guaranteed concurrent camera operation, the camera framework must call
* ICameraDevice.open() on all devices (intended for concurrent operation), before configuring
* any streams on them. This gives the camera HAL process an opportunity to potentially
* distribute hardware resources better before stream configuration.
*
* Due to potential hardware constraints around internal switching of physical camera devices,
* a device's complete ZOOM_RATIO_RANGE(if supported), may not apply during concurrent
* operation. If ZOOM_RATIO is supported, camera HALs must ensure ZOOM_RATIO_RANGE of
* [1.0, ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM] is supported by that device, during
* concurrent operation.
*
* @return status Status code for the operation
* @return cameraIds a list of camera id combinations that support
* concurrent stream configurations with the minimum guarantees
* specified.
*/
getConcurrentStreamingCameraIds() generates (Status status, vec<vec<string>> cameraIds);
/**
* isConcurrentStreamCombinationSupported:
*
* Check for device support of specific camera stream combinations while
* streaming concurrently with other devices.
*
* The per device streamList must contain at least one output-capable stream, and may
* not contain more than one input-capable stream.
* In contrast to regular stream configuration the framework does not create
* or initialize any actual streams. This means that Hal must not use or
* consider the stream "id" value.
*
* ------------------------------------------------------------------------
*
* Preconditions:
*
* The framework can call this method at any time before, during and
* after active session configuration per device. This means that calls must not
* impact the performance of pending camera requests in any way. In
* particular there must not be any glitches or delays during normal
* camera streaming.
*
* The framework must not call this method with any combination of camera
* ids that is not a subset of the camera ids advertised by getConcurrentStreamingCameraIds of
* the same provider.
*
* Performance requirements:
* This call is expected to be significantly faster than stream
* configuration. In general HW and SW camera settings must not be
* changed and there must not be a user-visible impact on camera performance.
*
* @param configs a vector of camera ids and their corresponding stream
* configurations that need to be queried for support.
*
* @return status Status code for the operation, one of:
* OK:
* On successful stream combination query.
* METHOD_NOT_SUPPORTED:
* The camera provider does not support stream combination query.
* INTERNAL_ERROR:
* The stream combination query cannot complete due to internal
* error.
* @return true in case the stream combination is supported, false otherwise.
*
*
*/
isConcurrentStreamCombinationSupported(vec<CameraIdAndStreamCombination> configs)
generates (Status status, bool queryStatus);
};