/*
 * Copyright (C) 2017 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.
 */

/*
 * Autogenerated from camera metadata definitions in
 * /system/media/camera/docs/metadata_definitions.xml
 * *** DO NOT EDIT BY HAND ***
 */

package android.hardware.camera.metadata@3.3;

import android.hardware.camera.metadata@3.2;

/**
 * Top level hierarchy definitions for camera metadata. *_INFO sections are for
 * the static metadata that can be retrived without opening the camera device.
 */
enum CameraMetadataSection : @3.2::CameraMetadataSection {
    ANDROID_LOGICAL_MULTI_CAMERA =
        android.hardware.camera.metadata@3.2::CameraMetadataSection:ANDROID_SECTION_COUNT,

    ANDROID_DISTORTION_CORRECTION,

    ANDROID_SECTION_COUNT_3_3,

    VENDOR_SECTION_3_3 = 0x8000,

};

/**
 * Hierarchy positions in enum space. All vendor extension sections must be
 * defined with tag >= VENDOR_SECTION_START
 */
enum CameraMetadataSectionStart : android.hardware.camera.metadata@3.2::CameraMetadataSectionStart {
    ANDROID_LOGICAL_MULTI_CAMERA_START = CameraMetadataSection:ANDROID_LOGICAL_MULTI_CAMERA << 16,

    ANDROID_DISTORTION_CORRECTION_START = CameraMetadataSection:ANDROID_DISTORTION_CORRECTION << 16,

    VENDOR_SECTION_START_3_3 = CameraMetadataSection:VENDOR_SECTION_3_3 << 16,

};

/**
 * Main enumeration for defining camera metadata tags added in this revision
 *
 * <p>Partial documentation is included for each tag; for complete documentation, reference
 * '/system/media/camera/docs/docs.html' in the corresponding Android source tree.</p>
 */
enum CameraMetadataTag : @3.2::CameraMetadataTag {
    /** android.control.afSceneChange [dynamic, enum, public]
     *
     * <p>Whether a significant scene change is detected within the currently-set AF
     * region(s).</p>
     */
    ANDROID_CONTROL_AF_SCENE_CHANGE = android.hardware.camera.metadata@3.2::CameraMetadataTag:ANDROID_CONTROL_END,

    ANDROID_CONTROL_END_3_3,

    /** android.lens.poseReference [static, enum, public]
     *
     * <p>The origin for ANDROID_LENS_POSE_TRANSLATION, and the accuracy of
     * ANDROID_LENS_POSE_TRANSLATION and ANDROID_LENS_POSE_ROTATION.</p>
     *
     * @see ANDROID_LENS_POSE_ROTATION
     * @see ANDROID_LENS_POSE_TRANSLATION
     */
    ANDROID_LENS_POSE_REFERENCE = android.hardware.camera.metadata@3.2::CameraMetadataTag:ANDROID_LENS_END,

    /** android.lens.distortion [dynamic, float[], public]
     *
     * <p>The correction coefficients to correct for this camera device's
     * radial and tangential lens distortion.</p>
     * <p>Replaces the deprecated ANDROID_LENS_RADIAL_DISTORTION field, which was
     * inconsistently defined.</p>
     *
     * @see ANDROID_LENS_RADIAL_DISTORTION
     */
    ANDROID_LENS_DISTORTION,

    ANDROID_LENS_END_3_3,

    /** android.request.availableSessionKeys [static, int32[], ndk_public]
     *
     * <p>A subset of the available request keys that the camera device
     * can pass as part of the capture session initialization.</p>
     */
    ANDROID_REQUEST_AVAILABLE_SESSION_KEYS = android.hardware.camera.metadata@3.2::CameraMetadataTag:ANDROID_REQUEST_END,

    /** android.request.availablePhysicalCameraRequestKeys [static, int32[], ndk_public]
     *
     * <p>A subset of the available request keys that can be overridden for
     * physical devices backing a logical multi-camera.</p>
     */
    ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS,

    ANDROID_REQUEST_END_3_3,

    /** android.statistics.oisDataMode [dynamic, enum, public]
     *
     * <p>A control for selecting whether optical stabilization (OIS) position
     * information is included in output result metadata.</p>
     */
    ANDROID_STATISTICS_OIS_DATA_MODE = android.hardware.camera.metadata@3.2::CameraMetadataTag:ANDROID_STATISTICS_END,

    /** android.statistics.oisTimestamps [dynamic, int64[], ndk_public]
     *
     * <p>An array of timestamps of OIS samples, in nanoseconds.</p>
     */
    ANDROID_STATISTICS_OIS_TIMESTAMPS,

    /** android.statistics.oisXShifts [dynamic, float[], ndk_public]
     *
     * <p>An array of shifts of OIS samples, in x direction.</p>
     */
    ANDROID_STATISTICS_OIS_X_SHIFTS,

    /** android.statistics.oisYShifts [dynamic, float[], ndk_public]
     *
     * <p>An array of shifts of OIS samples, in y direction.</p>
     */
    ANDROID_STATISTICS_OIS_Y_SHIFTS,

    ANDROID_STATISTICS_END_3_3,

    /** android.statistics.info.availableOisDataModes [static, byte[], public]
     *
     * <p>List of OIS data output modes for ANDROID_STATISTICS_OIS_DATA_MODE that
     * are supported by this camera device.</p>
     *
     * @see ANDROID_STATISTICS_OIS_DATA_MODE
     */
    ANDROID_STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES = android.hardware.camera.metadata@3.2::CameraMetadataTag:ANDROID_STATISTICS_INFO_END,

    ANDROID_STATISTICS_INFO_END_3_3,

    /** android.info.version [static, byte, public]
     *
     * <p>A short string for manufacturer version information about the camera device, such as
     * ISP hardware, sensors, etc.</p>
     */
    ANDROID_INFO_VERSION = android.hardware.camera.metadata@3.2::CameraMetadataTag:ANDROID_INFO_END,

    ANDROID_INFO_END_3_3,

    /** android.logicalMultiCamera.physicalIds [static, byte[], ndk_public]
     *
     * <p>String containing the ids of the underlying physical cameras.</p>
     */
    ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS = CameraMetadataSectionStart:ANDROID_LOGICAL_MULTI_CAMERA_START,

    /** android.logicalMultiCamera.sensorSyncType [static, enum, public]
     *
     * <p>The accuracy of frame timestamp synchronization between physical cameras</p>
     */
    ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE,

    ANDROID_LOGICAL_MULTI_CAMERA_END_3_3,

    /** android.distortionCorrection.mode [dynamic, enum, public]
     *
     * <p>Mode of operation for the lens distortion correction block.</p>
     */
    ANDROID_DISTORTION_CORRECTION_MODE = CameraMetadataSectionStart:ANDROID_DISTORTION_CORRECTION_START,

    /** android.distortionCorrection.availableModes [static, byte[], public]
     *
     * <p>List of distortion correction modes for ANDROID_DISTORTION_CORRECTION_MODE that are
     * supported by this camera device.</p>
     *
     * @see ANDROID_DISTORTION_CORRECTION_MODE
     */
    ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES,

    ANDROID_DISTORTION_CORRECTION_END_3_3,

};

/*
 * Enumeration definitions for the various entries that need them
 */

/** android.control.aeMode enumeration values added since v3.2
 * @see ANDROID_CONTROL_AE_MODE
 */
enum CameraMetadataEnumAndroidControlAeMode :
        @3.2::CameraMetadataEnumAndroidControlAeMode {
    ANDROID_CONTROL_AE_MODE_ON_EXTERNAL_FLASH,
};

/** android.control.captureIntent enumeration values added since v3.2
 * @see ANDROID_CONTROL_CAPTURE_INTENT
 */
enum CameraMetadataEnumAndroidControlCaptureIntent :
        @3.2::CameraMetadataEnumAndroidControlCaptureIntent {
    ANDROID_CONTROL_CAPTURE_INTENT_MOTION_TRACKING,
};

/** android.control.afSceneChange enumeration values
 * @see ANDROID_CONTROL_AF_SCENE_CHANGE
 */
enum CameraMetadataEnumAndroidControlAfSceneChange : uint32_t {
    ANDROID_CONTROL_AF_SCENE_CHANGE_NOT_DETECTED,
    ANDROID_CONTROL_AF_SCENE_CHANGE_DETECTED,
};

/** android.lens.poseReference enumeration values
 * @see ANDROID_LENS_POSE_REFERENCE
 */
enum CameraMetadataEnumAndroidLensPoseReference : uint32_t {
    ANDROID_LENS_POSE_REFERENCE_PRIMARY_CAMERA,
    ANDROID_LENS_POSE_REFERENCE_GYROSCOPE,
};

/** android.request.availableCapabilities enumeration values added since v3.2
 * @see ANDROID_REQUEST_AVAILABLE_CAPABILITIES
 */
enum CameraMetadataEnumAndroidRequestAvailableCapabilities :
        @3.2::CameraMetadataEnumAndroidRequestAvailableCapabilities {
    ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING,
    ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA,
    ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME,
};

/** android.statistics.oisDataMode enumeration values
 * @see ANDROID_STATISTICS_OIS_DATA_MODE
 */
enum CameraMetadataEnumAndroidStatisticsOisDataMode : uint32_t {
    ANDROID_STATISTICS_OIS_DATA_MODE_OFF,
    ANDROID_STATISTICS_OIS_DATA_MODE_ON,
};

/** android.info.supportedHardwareLevel enumeration values added since v3.2
 * @see ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL
 */
enum CameraMetadataEnumAndroidInfoSupportedHardwareLevel :
        @3.2::CameraMetadataEnumAndroidInfoSupportedHardwareLevel {
    ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL,
};

/** android.logicalMultiCamera.sensorSyncType enumeration values
 * @see ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
 */
enum CameraMetadataEnumAndroidLogicalMultiCameraSensorSyncType : uint32_t {
    ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE,
    ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED,
};

/** android.distortionCorrection.mode enumeration values
 * @see ANDROID_DISTORTION_CORRECTION_MODE
 */
enum CameraMetadataEnumAndroidDistortionCorrectionMode : uint32_t {
    ANDROID_DISTORTION_CORRECTION_MODE_OFF,
    ANDROID_DISTORTION_CORRECTION_MODE_FAST,
    ANDROID_DISTORTION_CORRECTION_MODE_HIGH_QUALITY,
};
