blob: 55aceb8fa4ac0b1280cc6b4e7b0a2bcd97947a8b [file] [log] [blame]
/*
* 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<CameraMetadataEnumAndroidSensorPixelMode> 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<Stream> 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;
};