6a9a809e36
Also Add y16 stream combinations to configureConcurrentStreamsAvailableOutputs vts test Bug: 159247271 Test: VtsHalCameraProviderV2_4TargetTest --gtest_filter=PerInstance/CameraHidlTest.configureConc* on cuttlefish Change-Id: If5fea1fc47a3bcc8d3695e23f01a55091c246eda Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
151 lines
7.3 KiB
Text
151 lines
7.3 KiB
Text
/*
|
|
* 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);
|
|
};
|