Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7524fba2 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Camera: Add support for multi-resolution input and output streams" into...

Merge "Camera: Add support for multi-resolution input and output streams" into sc-dev am: b9ccda69

Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/interfaces/+/13420291

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Ifaf666920c7f821f3043c53adce4296220724fd0
parents a2cd51a0 b9ccda69
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
// This file is autogenerated by hidl-gen -Landroidbp.

hidl_interface {
    name: "android.hardware.camera.device@3.7",
    root: "android.hardware",
    srcs: [
        "types.hal",
        "ICameraDevice.hal",
        "ICameraDeviceSession.hal",
    ],
    interfaces: [
        "android.hardware.camera.common@1.0",
        "android.hardware.camera.device@3.2",
        "android.hardware.camera.device@3.3",
        "android.hardware.camera.device@3.4",
        "android.hardware.camera.device@3.5",
        "android.hardware.camera.device@3.6",
        "android.hardware.graphics.common@1.0",
        "android.hidl.base@1.0",
    ],
    gen_java: false,
}
+43 −0
Original line number Diff line number Diff line
/*
 * 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 android.hardware.camera.common@1.0::Status;
import @3.6::ICameraDevice;

/**
 * Camera device interface
 *
 * Supports the android.hardware.Camera API, and the android.hardware.camera2
 * API at LIMITED or better hardware level.
 *
 * ICameraDevice.open() must return @3.2::ICameraDeviceSession,
 * @3.5::ICameraDeviceSession, @3.6::ICameraDeviceSession, or
 * @3.7::ICameraDeviceSession.
 */
interface ICameraDevice extends @3.6::ICameraDevice {
    /**
     * isStreamCombinationSupported_3_7:
     *
     * Identical to @3.5::ICameraDevice.isStreamCombinationSupported, except
     * that it takes a @3.7::StreamConfiguration parameter, which could contain
     * information about multi-resolution input and output streams.
     *
     */
    isStreamCombinationSupported_3_7(StreamConfiguration streams)
            generates (Status status, bool queryStatus);
};
+124 −0
Original line number Diff line number Diff line
/*
 * 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 android.hardware.camera.common@1.0::Status;
import @3.2::BufferCache;
import @3.5::StreamConfiguration;
import @3.6::ICameraDeviceSession;
import @3.6::HalStreamConfiguration;

/**
 * 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.6::ICameraDeviceSession {
    /**
     * configureStreams_3_7:
     *
     * Identical to @3.6::ICameraDeviceSession.configureStreams_3_6, except that:
     *
     * - The requestedConfiguration allows the camera framework to configure
     *   stream groups.
     * - For requested configurations of streams within the same group, the
     *   corresponding halConfiguration must have the same usage flags and
     *   maxBuffers.
     * - Within a CaptureRequest, the application is guaranteed not to request
     *   more than one streams within the same stream group. When one of the
     *   stream within a stream group is requested, the camera HAL can either
     *   produce output on that stream, or any other stream within the same
     *   stream group.
     * - The requestedConfiguration allows the camera framework to indicate that
     *   input images of different sizes may be submitted within capture
     *   requests.
     *
     * @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
     *           - Unsupported stream groupIds, or unsupported multi-resolution
     *             input stream.
     *         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_7(StreamConfiguration requestedConfiguration)
        generates (Status status, @3.6::HalStreamConfiguration halConfiguration);

    /**
     * processCaptureRequest_3_7:
     *
     * Identical to @3.4::ICameraDeviceSession.processCaptureRequest, except that:
     *
     * - The capture request can include width and height of the input buffer for
     *   a reprocessing request.
     *
     * @return status Status code for the operation, one of:
     *     OK:
     *         On a successful start to processing the capture request
     *     ILLEGAL_ARGUMENT:
     *         If the input is malformed (the settings are empty when not
     *         allowed, the physical camera settings are invalid, there are 0
     *         output buffers, etc) and capture processing
     *         cannot start. Failures during request processing must be
     *         handled by calling ICameraDeviceCallback::notify(). In case of
     *         this error, the framework retains responsibility for the
     *         stream buffers' fences and the buffer handles; the HAL must not
     *         close the fences or return these buffers with
     *         ICameraDeviceCallback::processCaptureResult().
     *         In case of multi-resolution input image, this error must be returned
     *         if the caller passes in a CaptureRequest with an invalid
     *         [inputWith, inputHeight].
     *     INTERNAL_ERROR:
     *         If the camera device has encountered a serious error. After this
     *         error is returned, only the close() method can be successfully
     *         called by the framework.
     * @return numRequestProcessed Number of requests successfully processed by
     *     camera HAL. When status is OK, this must be equal to the size of
     *     requests. When the call fails, this number is the number of requests
     *     that HAL processed successfully before HAL runs into an error.
     *
     */
    processCaptureRequest_3_7(vec<CaptureRequest> requests, vec<BufferCache> cachesToRemove)
            generates (Status status, uint32_t numRequestProcessed);
};
+136 −0
Original line number Diff line number Diff line
/*
 * 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;

/**
 * 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 simliar 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;
};

/**
 * 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;
};
+16 −0
Original line number Diff line number Diff line
@@ -42,6 +42,14 @@ enum CameraMetadataTag : @3.5::CameraMetadataTag {
     */
    ANDROID_SCALER_DEFAULT_SECURE_IMAGE_SIZE = android.hardware.camera.metadata@3.5::CameraMetadataTag:ANDROID_SCALER_END_3_5,

    /** android.scaler.physicalCameraMultiResolutionStreamConfigurations [static, enum[], ndk_public]
     *
     * <p>The available multi-resolution stream configurations that this
     * physical camera device supports
     * (i.e. format, width, height, output/input stream).</p>
     */
    ANDROID_SCALER_PHYSICAL_CAMERA_MULTI_RESOLUTION_STREAM_CONFIGURATIONS,

    ANDROID_SCALER_END_3_6,

};
@@ -49,3 +57,11 @@ enum CameraMetadataTag : @3.5::CameraMetadataTag {
/*
 * Enumeration definitions for the various entries that need them
 */

/** android.scaler.physicalCameraMultiResolutionStreamConfigurations enumeration values
 * @see ANDROID_SCALER_PHYSICAL_CAMERA_MULTI_RESOLUTION_STREAM_CONFIGURATIONS
 */
enum CameraMetadataEnumAndroidScalerPhysicalCameraMultiResolutionStreamConfigurations : uint32_t {
    ANDROID_SCALER_PHYSICAL_CAMERA_MULTI_RESOLUTION_STREAM_CONFIGURATIONS_OUTPUT,
    ANDROID_SCALER_PHYSICAL_CAMERA_MULTI_RESOLUTION_STREAM_CONFIGURATIONS_INPUT,
};
Loading