/* * Copyright (C) 2021 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.7; import @3.2::CameraMetadata; import @3.2::StreamConfigurationMode; import @3.4::CaptureRequest; import @3.4::Stream; import android.hardware.camera.metadata@3.6::CameraMetadataEnumAndroidSensorPixelMode; /** * Stream: * * A descriptor for a single camera input or output stream. A stream is defined * by the framework by its buffer resolution and format, and additionally by the * HAL with the gralloc usage flags and the maximum in-flight buffer count. * * This version extends the @3.4 Stream with the multi-resolution output surface * group Id field. */ struct Stream { /** * The definition of Stream from the prior version. */ @3.4::Stream v3_4; /** * The surface group id used for multi-resolution output streams. * * This works similar to the surfaceGroupId of OutputConfiguration in the * public API, with the exception that this is for multi-resolution image * reader and is used by the camera HAL to choose a target stream within * the same group to which images are written. All streams in the same group * will have the same image format, data space, and usage flag. * * The framework must only call processCaptureRequest on at most one of the * streams within a surface group. Depending on current active physical * camera backing the logical multi-camera, or the pixel mode the camera is * running in, the HAL can choose to request and return a buffer from any * stream within the same group. -1 means that this stream is an input * stream, or is an output stream which doesn't belong to any group. * * Streams with the same non-negative group id must have the same format and * usage flag. */ int32_t groupId; /** * The sensor pixel modes used by this stream. This can assist the camera * HAL in decision making about stream combination support. * If this is empty, the HAL must assume that this stream will only be used * with ANDROID_SENSOR_PIXEL_MODE set to ANDROID_SENSOR_PIXEL_MODE_DEFAULT. */ vec sensorPixelModesUsed; }; /** * StreamConfiguration: * * Identical to @3.5::StreamConfiguration, except that the streams * vector contains @3.7::Stream. */ struct StreamConfiguration { /** * An array of camera stream pointers, defining the input/output * configuration for the camera HAL device. */ vec streams; /** * The definition of operation mode from prior version. * */ @3.2::StreamConfigurationMode operationMode; /** * The definition of session parameters from prior version. */ @3.2::CameraMetadata sessionParams; /** * The definition of stream configuration counter from prior version. */ uint32_t streamConfigCounter; /** * If an input stream is configured, whether the input stream is expected to * receive variable resolution images. * * This flag can only be set to true if the camera device supports * multi-resolution input streams by advertising input stream configurations in * physicalCameraMultiResolutionStreamConfigurations in its physical cameras' * characteristics. * * When this flag is set to true, the input stream's width and height can be * any one of the supported multi-resolution input stream sizes. */ bool multiResolutionInputImage; }; /** * CaptureRequest: * * This version extends 3.4::CaptureRequest with the input buffer's width and * height. */ struct CaptureRequest { /** * The definition of CaptureRequest from the prior version. */ @3.4::CaptureRequest v3_4; /** * The width and height of the input buffer for this capture request. * * These fields will be [0, 0] if no input buffer exists in the capture * request. * * If the stream configuration contains an input stream and has the * multiResolutionInputImage flag set to true, the camera client may submit a * reprocessing request with input buffer size different than the * configured input stream size. In that case, the inputWith and inputHeight * fields will be the actual size of the input image. * * If the stream configuration contains an input stream and the * multiResolutionInputImage flag is false, the inputWidth and inputHeight must * match the input stream size. */ uint32_t inputWidth; uint32_t inputHeight; };