////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
// All rights reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
//
// Not a Contribution.
// Apache license notifications and license are retained
// for attribution purposes only.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  camxhal3metadatatags.h
/// @brief Declarations of wrapped HAL3 metadata tag types mirroring.
///
/// Original tag definitions are defined in system/media/camera/include/system/camera_metadata_tags.h
/// Additional documentation on Google defined metadata tags can be found at system/media/camera/docs/docs.html
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

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

// NOWHINE FILE DC012: Enum members not documented.
// NOWHINE FILE GR002: Little extra length == much greater readability

#ifndef CAMXHAL3METADATATAGS_H
#define CAMXHAL3METADATATAGS_H

#include "camxdefs.h"

CAMX_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Constants
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/// @brief Maximum number of values possible for a metadata tag.
static const UINT MaxTagValues = 32;

// InvalidIndex is assigned an arbitrarily large value
static const UINT32 InvalidIndex = 0xffffffff;

// Default values for JPEG image/thumbnail quality
static const UINT32 JpegImageDefaultQuality     = 100;
static const UINT32 JpegThumbnailDefaultQuality = 85;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Forward Declarations
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Type Declarations
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/// @brief Camera Metadata section definitions
enum CameraMetadataSection
{
    MetadataSectionColorCorrection,
    MetadataSectionControl,
    MetadataSectionDemosaic,
    MetadataSectionEdge,
    MetadataSectionFlash,
    MetadataSectionFlashInfo,
    MetadataSectionHotPixel,
    MetadataSectionJPEG,
    MetadataSectionLens,
    MetadataSectionLensInfo,
    MetadataSectionNoiseReduction,
    MetadataSectionQuirks,
    MetadataSectionRequest,
    MetadataSectionScaler,
    MetadataSectionSensor,
    MetadataSectionSensorInfo,
    MetadataSectionShading,
    MetadataSectionStatistics,
    MetadataSectionStatisticsInfo,
    MetadataSectionTonemap,
    MetadataSectionLed,
    MetadataSectionInfo,
    MetadataSectionBlackLevel,
    MetadataSectionSync,
    MetadataSectionReprocess,
    MetadataSectionDepth,
    MetadataSectionLogicalMultiCamera,
    MetadataSectionDistortionCorrection,
    MetadataSectionHEIC,
    MetadataSectionHEICInfo,
    MetadataSectionSectionCount,
    MetadataSectionVendorSection = 0x8000
};

/// @brief Hierarchy positions in enum space. All vendor extension tags must be defined with tag >= VendorSectionStart
enum CameraMetadataSectionStart
{
    MetadataSectionColorCorrectionStart      = MetadataSectionColorCorrection      << 16,
    MetadataSectionControlStart              = MetadataSectionControl              << 16,
    MetadataSectionDemosaicStart             = MetadataSectionDemosaic             << 16,
    MetadataSectionEdgeStart                 = MetadataSectionEdge                 << 16,
    MetadataSectionFlashStart                = MetadataSectionFlash                << 16,
    MetadataSectionFlashInfoStart            = MetadataSectionFlashInfo            << 16,
    MetadataSectionHotPixelStart             = MetadataSectionHotPixel             << 16,
    MetadataSectionJPEGStart                 = MetadataSectionJPEG                 << 16,
    MetadataSectionLensStart                 = MetadataSectionLens                 << 16,
    MetadataSectionLensInfoStart             = MetadataSectionLensInfo             << 16,
    MetadataSectionNoiseReductionStart       = MetadataSectionNoiseReduction       << 16,
    MetadataSectionQuirksStart               = MetadataSectionQuirks               << 16,
    MetadataSectionRequestStart              = MetadataSectionRequest              << 16,
    MetadataSectionScalerStart               = MetadataSectionScaler               << 16,
    MetadataSectionSensorStart               = MetadataSectionSensor               << 16,
    MetadataSectionSensorInfoStart           = MetadataSectionSensorInfo           << 16,
    MetadataSectionShadingStart              = MetadataSectionShading              << 16,
    MetadataSectionStatisticsStart           = MetadataSectionStatistics           << 16,
    MetadataSectionStatisticsInfoStart       = MetadataSectionStatisticsInfo       << 16,
    MetadataSectionTonemapStart              = MetadataSectionTonemap              << 16,
    MetadataSectionLedStart                  = MetadataSectionLed                  << 16,
    MetadataSectionInfoStart                 = MetadataSectionInfo                 << 16,
    MetadataSectionBlackLevelStart           = MetadataSectionBlackLevel           << 16,
    MetadataSectionSyncStart                 = MetadataSectionSync                 << 16,
    MetadataSectionReprocessStart            = MetadataSectionReprocess            << 16,
    MetadataSectionDepthStart                = MetadataSectionDepth                << 16,
    MetadataSectionLogicalMultiCameraStart   = MetadataSectionLogicalMultiCamera   << 16,
    MetadataSectionDistortionCorrectionStart = MetadataSectionDistortionCorrection << 16,
    MetadataSectionHEICStart                 = MetadataSectionHEIC                 << 16,
    MetadataSectionHEICInfoStart             = MetadataSectionHEICInfo             << 16,
    MetadataSectionVendorSectionStart        = MetadataSectionVendorSection        << 16
};

/// @brief This is setup to allow us to duplicate the definitions of metadata for certain pools use
enum class MetadataPoolSection : UINT32
{
    /// If any change is made to this enum, same change should be made in chicommon.h
    // Result is implicit, and 0x0000
    Input          = 0x0800, // Input must be bitwise exclusive to the other so we can uniquely identify for both tags and
                             // props
    Usecase        = 0x2000,
    Static         = 0x7000,
    GlobalUsecase  = 0x400
    // 0x3000 - Result Prop
    // 0x4000 - Internal Prop
    // 0x5000 - Usecase Prop
    // 0x6000 - DebugData Prop
};

/// Mask that shows if using special groups
static const UINT32  DriverInternalGroupMask = 0x7C00 << 16;

/// Mask that shows if using property groups
static const UINT32  PropertyGroupMask = 0xF0000000;

/// Mask that shows if the metadata is a vendor tag
static const UINT32 VendorTagMask = 0x80000000;

/// Mask to OR with tags to represent input pool residency
static const UINT32 InputMetadataSectionMask   = static_cast<UINT32>(MetadataPoolSection::Input)   << 16;

/// Mask to OR with tags to represent usecase pool residency
static const UINT32 UsecaseMetadataSectionMask = static_cast<UINT32>(MetadataPoolSection::Usecase) << 16;

/// Mask to OR with tags to represent static pool residency
static const UINT32 StaticMetadataSectionMask = static_cast<UINT32>(MetadataPoolSection::Static) << 16;

/// Mask to OR with tags to represent global pool residency
static const UINT32 GlobalUsecaseMetadataSectionMask = static_cast<UINT32>(MetadataPoolSection::GlobalUsecase) << 16;

/// @brief Main enum for defining camera metadata tags.
/// @note  MUST modify HAL3MetadataUtils::Tag{Elements,Factor,Type} consts to define new tag properties in the proper order
///        Must update for other pool types too
enum CameraMetadataTag : INT32
{
    ColorCorrectionMode                             = MetadataSectionColorCorrectionStart,
    ColorCorrectionTransform,
    ColorCorrectionGains,
    ColorCorrectionAberrationMode,
    ColorCorrectionAvailableAberrationModes,
    ColorCorrectionEnd,

    ControlAEAntibandingMode                        = MetadataSectionControlStart,
    ControlAEExposureCompensation,
    ControlAELock,
    ControlAEMode,
    ControlAERegions,
    ControlAETargetFpsRange,
    ControlAEPrecaptureTrigger,
    ControlAFMode,
    ControlAFRegions,
    ControlAFTrigger,
    ControlAWBLock,
    ControlAWBMode,
    ControlAWBRegions,
    ControlCaptureIntent,
    ControlEffectMode,
    ControlMode,
    ControlSceneMode,
    ControlVideoStabilizationMode,
    ControlAEAvailableAntibandingModes,
    ControlAEAvailableModes,
    ControlAEAvailableTargetFPSRanges,
    ControlAECompensationRange,
    ControlAECompensationStep,
    ControlAFAvailableModes,
    ControlAvailableEffects,
    ControlAvailableSceneModes,
    ControlAvailableVideoStabilizationModes,
    ControlAWBAvailableModes,
    ControlMaxRegions,
    ControlSceneModeOverrides,
    ControlAEPrecaptureId,
    ControlAEState,
    ControlAFState,
    ControlAFTriggerId,
    ControlAWBState,
    ControlAvailableHighSpeedVideoConfigurations,
    ControlAELockAvailable,
    ControlAWBLockAvailable,
    ControlAvailableModes,
    ControlPostRawSensitivityBoostRange,
    ControlPostRawSensitivityBoost,
    ControlZslEnable,
    ControlAFSceneChange,
    ControlAvailableExtendedSceneModeMaxSizes,
    ControlAvailableExtendedSceneModeZoomRatioRanges,
    ControlExtendedSceneMode,
    ControlZoomRatioRange,
    ControlZoomRatio,
    ControlAvailableHighSpeedVideoConfigurationsMaximumResolution,
    ControlAFRegionSet,
    ControlAERegionSet,
    ControlAWBRegionSet,
#if (defined(CAMX_ANDROID_API) && (CAMX_ANDROID_API >= 33)) // Android-U or better
    ControlSettingsOverride,
    ControlAvailableSettingsOverrides,
    ControlSettingsOverridingFrameNumber,
#endif // Android-U or better
    ControlEnd,

    DemosaicMode                                    = MetadataSectionDemosaicStart,
    DemosaicEnd,

    EdgeMode                                        = MetadataSectionEdgeStart,
    EdgeStrength,
    EdgeAvailableEdgeModes,
    EdgeEnd,

    FlashFiringPower                                = MetadataSectionFlashStart,
    FlashFiringTime,
    FlashMode,
    FlashColorTemperature,
    FlashMaxEnergy,
    FlashState,
    FlashEnd,

    FlashInfoAvailable                              = MetadataSectionFlashInfoStart,
    FlashInfoChargeDuration,
    FlashInfoStrengthMaximumLevel,
    FlashInfoStrengthDefaultLevel,
    FlashInfoEnd,

    HotPixelMode                                    = MetadataSectionHotPixelStart,
    HotPixelAvailableHotPixelModes,
    HotPixelEnd,

    JPEGGpsCoordinates                              = MetadataSectionJPEGStart,
    JPEGGpsProcessingMethod,
    JPEGGpsTimestamp,
    JPEGOrientation,
    JPEGQuality,
    JPEGThumbnailQuality,
    JPEGThumbnailSize,
    JPEGAvailableThumbnailSizes,
    JPEGMaxSize,
    JPEGSize,
    JPEGEnd,

    LensAperture                                    = MetadataSectionLensStart,
    LensFilterDensity,
    LensFocalLength,
    LensFocusDistance,
    LensOpticalStabilizationMode,
    LensFacing,
    LensPoseRotation,
    LensPoseTranslation,
    LensFocusRange,
    LensState,
    LensIntrinsicCalibration,
    LensRadialDistortion,
    LensPoseReference,
    LensDistortion,
    LensDistortionMaximumResolution,
    LensIntrinsicCalibrationMaximumResolution,
    LensEnd,

    LensInfoAvailableApertures                      = MetadataSectionLensInfoStart,
    LensInfoAvailableFilterDensities,
    LensInfoAvailableFocalLengths,
    LensInfoAvailableOpticalStabilization,
    LensInfoHyperfocalDistance,
    LensInfoMinimumFocusDistance,
    LensInfoShadingMapSize,
    LensInfoFocusDistanceCalibration,
    LensInfoEnd,

    NoiseReductionMode                              = MetadataSectionNoiseReductionStart,
    NoiseReductionStrength,
    NoiseReductionAvailableNoiseReductionModes,
    NoiseReductionEnd,

    QuirksMeteringCropRegion                        = MetadataSectionQuirksStart,
    QuirksTriggerAFWithAuto,
    QuirksUseZslFormat,
    QuirksUsePartialResult,
    QuirksPartialResult,
    QuirksEnd,

    RequestFrameCount                               = MetadataSectionRequestStart,
    RequestId,
    RequestInputStreams,
    RequestMetadataMode,
    RequestOutputStreams,
    RequestType,
    RequestMaxNumOutputStreams,
    RequestMaxNumReprocessStreams,
    RequestMaxNumInputStreams,
    RequestPipelineDepth,
    RequestPipelineMaxDepth,
    RequestPartialResultCount,
    RequestAvailableCapabilities,
    RequestAvailableRequestKeys,
    RequestAvailableResultKeys,
    RequestAvailableCharacteristicsKeys,
    RequestAvailableSessionKeys,
    RequestAvailablePhysicalCameraRequestKeys,
    RequestCharacteristicKeysNeedingPermission,
    RequestAvailableDynamicRangeProfilesMap,
    RequestRecommendedTenBitDynamicRangeProfile,
    RequestAvailableColorSpaceProfilesMap,
    RequestEnd,

    ScalerCropRegion                                = MetadataSectionScalerStart,
    ScalerAvailableFormats,
    ScalerAvailableJPEGMinDurations,
    ScalerAvailableJPEGSizes,
    ScalerAvailableMaxDigitalZoom,
    ScalerAvailableProcessedMinDurations,
    ScalerAvailableProcessedSizes,
    ScalerAvailableRawMinDurations,
    ScalerAvailableRawSizes,
    ScalerAvailableInputOutputFormatsMap,
    ScalerAvailableStreamConfigurations,
    ScalerAvailableMinFrameDurations,
    ScalerAvailableStallDurations,
    ScalerCroppingType,
    ScalerAvailableRecommendedStreamConfigurations,
    ScalerAvailableRecommendedInputOutputFormatsMap,
    ScalerAvailableRotateAndCropModes,
    ScalerRotateAndCrop,
    ScalerDefaultSecureImageSize,
    ScalerPhysicalCameraMultiResolutionStreamConfigurations,
    ScalerAvailableStreamConfigurationsMaximumResolution,
    ScalerAvailableMinFrameDurationsMaximumResolution,
    ScalerAvailableStallDurationsMaximumResolution,
    ScalerAvailableInputOutputFormatsMapMaximumResolution,
    ScalerMultiResolutionStreamSupported,
    ScalarCropRegionSet,
    ScalerAvailableStreamUseCases,
    ScalerRawCropRegion,
    ScalerEnd,

    SensorExposureTime                              = MetadataSectionSensorStart,
    SensorFrameDuration,
    SensorSensitivity,
    SensorReferenceIlluminant1,
    SensorReferenceIlluminant2,
    SensorCalibrationTransform1,
    SensorCalibrationTransform2,
    SensorColorTransform1,
    SensorColorTransform2,
    SensorForwardMatrix1,
    SensorForwardMatrix2,
    SensorBaseGainFactor,
    SensorBlackLevelPattern,
    SensorMaxAnalogSensitivity,
    SensorOrientation,
    SensorProfileHueSaturationMapDimensions,
    SensorTimestamp,
    SensorTemperature,
    SensorNeutralColorPoint,
    SensorNoiseProfile,
    SensorProfileHueSaturationMap,
    SensorProfileToneCurve,
    SensorGreenSplit,
    SensorTestPatternData,
    SensorTestPatternMode,
    SensorAvailableTestPatternModes,
    SensorRollingShutterSkew,
    SensorOpticalBlackRegions,
    SensorDynamicBlackLevel,
    SensorDynamicWhiteLevel,
    SensorOpaqueRawSize,
    SensorOpaqueRawSizeMaximumResolution,
    SensorPixelMode,
    SensorRawBinningFactorUsed,
    SensorEnd,

    SensorInfoActiveArraySize                       = MetadataSectionSensorInfoStart,
    SensorInfoSensitivityRange,
    SensorInfoColorFilterArrangement,
    SensorInfoExposureTimeRange,
    SensorInfoMaxFrameDuration,
    SensorInfoPhysicalSize,
    SensorInfoPixelArraySize,
    SensorInfoWhiteLevel,
    SensorInfoTimestampSource,
    SensorInfoLensShadingApplied,
    SensorInfoPreCorrectionActiveArraySize,
    SensorInfoActiveArraySizeMaximumResolution,
    SensorInfoPixelArraySizeMaximumResolution,
    SensorInfoPreCorrectionActiveArraySizeMaximumResolution,
    SensorInfoBinningFactor,
    SensorInfoEnd,

    ShadingMode                                     = MetadataSectionShadingStart,
    ShadingStrength,
    ShadingAvailableModes,
    ShadingEnd,

    StatisticsFaceDetectMode                        = MetadataSectionStatisticsStart,
    StatisticsHistogramMode,
    StatisticsSharpnessMapMode,
    StatisticsHotPixelMapMode,
    StatisticsFaceIds,
    StatisticsFaceLandmarks,
    StatisticsFaceRectangles,
    StatisticsFaceScores,
    StatisticsHistogram,
    StatisticsSharpnessMap,
    StatisticsLensShadingCorrectionMap,
    StatisticsLensShadingMap,
    StatisticsPredictedColorGains,
    StatisticsPredictedColorTransform,
    StatisticsSceneFlicker,
    StatisticsHotPixelMap,
    StatisticsLensShadingMapMode,
    StatisticsOISDataMode,
    StatisticsOISTimestamps,
    StatisticsOISXShifts,
    StatisticsOISYShifts,
    StatisticsEnd,

    StatisticsInfoAvailableFaceDetectModes          = MetadataSectionStatisticsInfoStart,
    StatisticsInfoHistogramBucketCount,
    StatisticsInfoMaxFaceCount,
    StatisticsInfoMaxHistogramCount,
    StatisticsInfoMaxSharpnessMapValue,
    StatisticsInfoSharpnessMapSize,
    StatisticsInfoAvailableHotPixelMapModes,
    StatisticsInfoAvailableLensShadingMapModes,
    StatisticsInfoAvailableOISDataModes,
    StatisticsInfoEnd,

    TonemapCurveBlue                                = MetadataSectionTonemapStart,
    TonemapCurveGreen,
    TonemapCurveRed,
    TonemapMode,
    TonemapMaxCurvePoints,
    TonemapAvailableToneMapModes,
    TonemapGamma,
    TonemapPresetCurve,
    TonemapEnd,

    LedTransmit                                     = MetadataSectionLedStart,
    LedAvailableLeds,
    LedEnd,

    InfoSupportedHardwareLevel                      = MetadataSectionInfoStart,
    InfoVersion,
    InfoSupportedBufferManagementVersion,
    InfoEnd,

    BlackLevelLock                                  = MetadataSectionBlackLevelStart,
    BlackLevelEnd,

    SyncFrameNumber                                 = MetadataSectionSyncStart,
    SyncMaxLatency,
    SyncEnd,

    ReprocessEffectiveExposureFactor                = MetadataSectionReprocessStart,
    ReprocessMaxCaptureStall,
    ReprocessEnd,

    DepthMaxDepthSamples                            = MetadataSectionDepthStart,
    DepthAvailableDepthStreamConfigurations,
    DepthAvailableDepthMinFrameDurations,
    DepthAvailableDepthStallDurations,
    DepthDepthIsExclusive,
    DepthAvailableRecommendedDepthStreamConfigurations,
    DepthAvailableDynamicDepthStreamConfigurations,
    DepthAvailableDynamicDepthMinFrameDurations,
    DepthAvailableDynamicDepthStallDurations,
    DepthAvailableDepthStreamConfigurationsMaximumResolution,
    DepthAvailableDepthMinFrameDurationsMaximumResolution,
    DepthAvailableDepthStallDurationsMaximumResolution,
    DepthAvailableDynamicDepthStreamConfigurationsMaximumResolution,
    DepthAvailableDynamicDepthMinFrameDurationsMaximumResolution,
    DepthAvailableDynamicDepthStallDurationsMaximumResolution,
    DepthEnd,

    LogicalMultiCameraPhysicalIDs                     = MetadataSectionLogicalMultiCameraStart,
    LogicalMultiCameraSensorSyncType,
    LogicalMultiCameraActivePhysicalId,
    LogicalMultiCameraEnd,

    DistortionCorrectionMode                          = MetadataSectionDistortionCorrectionStart,
    DistortionCorrectionAvailableModes,
    DistortionCorrectionEnd,

    HEICAvailableHEICStreamConfigurations             = MetadataSectionHEICStart,
    HEICAvailableHEICMinFrameDurations,
    HEICAvailableHEICStallDurations,
    HEICAvailableHEICStreamConfigurationsMaximumResolution,
    HEICAvailableHEICMinFrameDurationsMaximumResolution,
    HEICAvailableHEICStallDurationsMaximumResolution,
    HEICEnd,

    HEICInfoSupported                                 = MetadataSectionHEICInfoStart,
    HEICInfoMaxJpegAppSegmentsCount,
    HEICInfoEnd,

    InputColorCorrectionMode                          = ColorCorrectionMode                          | InputMetadataSectionMask,
    InputColorCorrectionTransform                     = ColorCorrectionTransform                     | InputMetadataSectionMask,
    InputColorCorrectionGains                         = ColorCorrectionGains                         | InputMetadataSectionMask,
    InputColorCorrectionAberrationMode                = ColorCorrectionAberrationMode                | InputMetadataSectionMask,
    InputColorCorrectionAvailableAberrationModes      = ColorCorrectionAvailableAberrationModes      | InputMetadataSectionMask,
    InputColorCorrectionEnd                           = ColorCorrectionEnd                           | InputMetadataSectionMask,

    InputControlAEAntibandingMode                     = ControlAEAntibandingMode                     | InputMetadataSectionMask,
    InputControlAEExposureCompensation                = ControlAEExposureCompensation                | InputMetadataSectionMask,
    InputControlAELock                                = ControlAELock                                | InputMetadataSectionMask,
    InputControlAEMode                                = ControlAEMode                                | InputMetadataSectionMask,
    InputControlAERegions                             = ControlAERegions                             | InputMetadataSectionMask,
    InputControlAETargetFpsRange                      = ControlAETargetFpsRange                      | InputMetadataSectionMask,
    InputControlAEPrecaptureTrigger                   = ControlAEPrecaptureTrigger                   | InputMetadataSectionMask,
    InputControlAFMode                                = ControlAFMode                                | InputMetadataSectionMask,
    InputControlAFRegions                             = ControlAFRegions                             | InputMetadataSectionMask,
    InputControlAFTrigger                             = ControlAFTrigger                             | InputMetadataSectionMask,
    InputControlAWBLock                               = ControlAWBLock                               | InputMetadataSectionMask,
    InputControlAWBMode                               = ControlAWBMode                               | InputMetadataSectionMask,
    InputControlAWBRegions                            = ControlAWBRegions                            | InputMetadataSectionMask,
    InputControlCaptureIntent                         = ControlCaptureIntent                         | InputMetadataSectionMask,
    InputControlEffectMode                            = ControlEffectMode                            | InputMetadataSectionMask,
    InputControlMode                                  = ControlMode                                  | InputMetadataSectionMask,
    InputControlSceneMode                             = ControlSceneMode                             | InputMetadataSectionMask,
    InputControlVideoStabilizationMode                = ControlVideoStabilizationMode                | InputMetadataSectionMask,
    InputControlAEAvailableAntibandingModes           = ControlAEAvailableAntibandingModes           | InputMetadataSectionMask,
    InputControlAEAvailableModes                      = ControlAEAvailableModes                      | InputMetadataSectionMask,
    InputControlAEAvailableTargetFPSRanges            = ControlAEAvailableTargetFPSRanges            | InputMetadataSectionMask,
    InputControlAECompensationRange                   = ControlAECompensationRange                   | InputMetadataSectionMask,
    InputControlAECompensationStep                    = ControlAECompensationStep                    | InputMetadataSectionMask,
    InputControlAFAvailableModes                      = ControlAFAvailableModes                      | InputMetadataSectionMask,
    InputControlAvailableEffects                      = ControlAvailableEffects                      | InputMetadataSectionMask,
    InputControlAvailableSceneModes                   = ControlAvailableSceneModes                   | InputMetadataSectionMask,
    InputControlAvailableVideoStabilizationModes      = ControlAvailableVideoStabilizationModes      | InputMetadataSectionMask,
    InputControlAWBAvailableModes                     = ControlAWBAvailableModes                     | InputMetadataSectionMask,
    InputControlMaxRegions                            = ControlMaxRegions                            | InputMetadataSectionMask,
    InputControlSceneModeOverrides                    = ControlSceneModeOverrides                    | InputMetadataSectionMask,
    InputControlAEPrecaptureId                        = ControlAEPrecaptureId                        | InputMetadataSectionMask,
    InputControlAEState                               = ControlAEState                               | InputMetadataSectionMask,
    InputControlAFState                               = ControlAFState                               | InputMetadataSectionMask,
    InputControlAFTriggerId                           = ControlAFTriggerId                           | InputMetadataSectionMask,
    InputControlAWBState                              = ControlAWBState                              | InputMetadataSectionMask,
    InputControlAvailableHighSpeedVideoConfigurations = ControlAvailableHighSpeedVideoConfigurations | InputMetadataSectionMask,
    InputControlAELockAvailable                       = ControlAELockAvailable                       | InputMetadataSectionMask,
    InputControlAWBLockAvailable                      = ControlAWBLockAvailable                      | InputMetadataSectionMask,
    InputControlAvailableModes                        = ControlAvailableModes                        | InputMetadataSectionMask,
    InputControlPostRawSensitivityBoostRange          = ControlPostRawSensitivityBoostRange          | InputMetadataSectionMask,
    InputControlPostRawSensitivityBoost               = ControlPostRawSensitivityBoost               | InputMetadataSectionMask,
    InputControlZslEnable                             = ControlZslEnable                             | InputMetadataSectionMask,
    InputControlAFSceneChange                         = ControlAFSceneChange                         | InputMetadataSectionMask,
    InputControlExtendedSceneMode                     = ControlExtendedSceneMode                     | InputMetadataSectionMask,
    InputControlZoomRatio                             = ControlZoomRatio                             | InputMetadataSectionMask,
    InputControlAvailableHighSpeedVideoConfigurationsMaximumResolution =
        ControlAvailableHighSpeedVideoConfigurationsMaximumResolution | InputMetadataSectionMask,
    InputControlEnd                                   = ControlEnd                                   | InputMetadataSectionMask,

    InputDemosaicMode                                 = DemosaicMode                                 | InputMetadataSectionMask,
    InputDemosaicEnd                                  = DemosaicEnd                                  | InputMetadataSectionMask,

    InputEdgeMode                                     = EdgeMode                                     | InputMetadataSectionMask,
    InputEdgeStrength                                 = EdgeStrength                                 | InputMetadataSectionMask,
    InputEdgeAvailableEdgeModes                       = EdgeAvailableEdgeModes                       | InputMetadataSectionMask,
    InputEdgeEnd                                      = EdgeEnd                                      | InputMetadataSectionMask,

    InputFlashFiringPower                             = FlashFiringPower                             | InputMetadataSectionMask,
    InputFlashFiringTime                              = FlashFiringTime                              | InputMetadataSectionMask,
    InputFlashMode                                    = FlashMode                                    | InputMetadataSectionMask,
    InputFlashColorTemperature                        = FlashColorTemperature                        | InputMetadataSectionMask,
    InputFlashMaxEnergy                               = FlashMaxEnergy                               | InputMetadataSectionMask,
    InputFlashState                                   = FlashState                                   | InputMetadataSectionMask,
    InputFlashEnd                                     = FlashEnd                                     | InputMetadataSectionMask,

    InputFlashInfoAvailable                           = FlashInfoAvailable                           | InputMetadataSectionMask,
    InputFlashInfoChargeDuration                      = FlashInfoChargeDuration                      | InputMetadataSectionMask,
    InputFlashInfoEnd                                 = FlashInfoEnd                                 | InputMetadataSectionMask,

    InputHotPixelMode                                 = HotPixelMode                                 | InputMetadataSectionMask,
    InputHotPixelAvailableHotPixelModes               = HotPixelAvailableHotPixelModes               | InputMetadataSectionMask,
    InputHotPixelEnd                                  = HotPixelEnd                                  | InputMetadataSectionMask,

    InputJPEGGpsCoordinates                           = JPEGGpsCoordinates                           | InputMetadataSectionMask,
    InputJPEGGpsProcessingMethod                      = JPEGGpsProcessingMethod                      | InputMetadataSectionMask,
    InputJPEGGpsTimestamp                             = JPEGGpsTimestamp                             | InputMetadataSectionMask,
    InputJPEGOrientation                              = JPEGOrientation                              | InputMetadataSectionMask,
    InputJPEGQuality                                  = JPEGQuality                                  | InputMetadataSectionMask,
    InputJPEGThumbnailQuality                         = JPEGThumbnailQuality                         | InputMetadataSectionMask,
    InputJPEGThumbnailSize                            = JPEGThumbnailSize                            | InputMetadataSectionMask,
    InputJPEGAvailableThumbnailSizes                  = JPEGAvailableThumbnailSizes                  | InputMetadataSectionMask,
    InputJPEGMaxSize                                  = JPEGMaxSize                                  | InputMetadataSectionMask,
    InputJPEGSize                                     = JPEGSize                                     | InputMetadataSectionMask,
    InputJPEGEnd                                      = JPEGEnd                                      | InputMetadataSectionMask,

    InputLensAperture                                 = LensAperture                                 | InputMetadataSectionMask,
    InputLensFilterDensity                            = LensFilterDensity                            | InputMetadataSectionMask,
    InputLensFocalLength                              = LensFocalLength                              | InputMetadataSectionMask,
    InputLensFocusDistance                            = LensFocusDistance                            | InputMetadataSectionMask,
    InputLensOpticalStabilizationMode                 = LensOpticalStabilizationMode                 | InputMetadataSectionMask,
    InputLensFacing                                   = LensFacing                                   | InputMetadataSectionMask,
    InputLensPoseRotation                             = LensPoseRotation                             | InputMetadataSectionMask,
    InputLensPoseTranslation                          = LensPoseTranslation                          | InputMetadataSectionMask,
    InputLensFocusRange                               = LensFocusRange                               | InputMetadataSectionMask,
    InputLensState                                    = LensState                                    | InputMetadataSectionMask,
    InputLensIntrinsicCalibration                     = LensIntrinsicCalibration                     | InputMetadataSectionMask,
    InputLensRadialDistortion                         = LensRadialDistortion                         | InputMetadataSectionMask,
    InputLensPoseReference                            = LensPoseReference                            | InputMetadataSectionMask,
    InputLensDistortion                               = LensDistortion                               | InputMetadataSectionMask,
    InputLensDistortionMaximumResolution              = LensDistortionMaximumResolution              | InputMetadataSectionMask,
    InputLensIntrinsicCalibrationMaximumResolution    = LensIntrinsicCalibrationMaximumResolution
                                                                                                     | InputMetadataSectionMask,
    InputLensEnd                                      = LensEnd                                      | InputMetadataSectionMask,

    InputLensInfoAvailableApertures                   = LensInfoAvailableApertures                   | InputMetadataSectionMask,
    InputLensInfoAvailableFilterDensities             = LensInfoAvailableFilterDensities             | InputMetadataSectionMask,
    InputLensInfoAvailableFocalLengths                = LensInfoAvailableFocalLengths                | InputMetadataSectionMask,
    InputLensInfoAvailableOpticalStabilization        = LensInfoAvailableOpticalStabilization        | InputMetadataSectionMask,
    InputLensInfoHyperfocalDistance                   = LensInfoHyperfocalDistance                   | InputMetadataSectionMask,
    InputLensInfoMinimumFocusDistance                 = LensInfoMinimumFocusDistance                 | InputMetadataSectionMask,
    InputLensInfoShadingMapSize                       = LensInfoShadingMapSize                       | InputMetadataSectionMask,
    InputLensInfoFocusDistanceCalibration             = LensInfoFocusDistanceCalibration             | InputMetadataSectionMask,
    InputLensInfoEnd                                  = LensInfoEnd                                  | InputMetadataSectionMask,

    InputNoiseReductionMode                           = NoiseReductionMode                           | InputMetadataSectionMask,
    InputNoiseReductionStrength                       = NoiseReductionStrength                       | InputMetadataSectionMask,
    InputNoiseReductionAvailableNoiseReductionModes   = NoiseReductionAvailableNoiseReductionModes   | InputMetadataSectionMask,
    InputNoiseReductionEnd                            = NoiseReductionEnd                            | InputMetadataSectionMask,

    InputQuirksMeteringCropRegion                     = QuirksMeteringCropRegion                     | InputMetadataSectionMask,
    InputQuirksTriggerAFWithAuto                      = QuirksTriggerAFWithAuto                      | InputMetadataSectionMask,
    InputQuirksUseZslFormat                           = QuirksUseZslFormat                           | InputMetadataSectionMask,
    InputQuirksUsePartialResult                       = QuirksUsePartialResult                       | InputMetadataSectionMask,
    InputQuirksPartialResult                          = QuirksPartialResult                          | InputMetadataSectionMask,
    InputQuirksEnd                                    = QuirksEnd                                    | InputMetadataSectionMask,

    InputRequestFrameCount                            = RequestFrameCount                            | InputMetadataSectionMask,
    InputRequestId                                    = RequestId                                    | InputMetadataSectionMask,
    InputRequestInputStreams                          = RequestInputStreams                          | InputMetadataSectionMask,
    InputRequestMetadataMode                          = RequestMetadataMode                          | InputMetadataSectionMask,
    InputRequestOutputStreams                         = RequestOutputStreams                         | InputMetadataSectionMask,
    InputRequestType                                  = RequestType                                  | InputMetadataSectionMask,
    InputRequestMaxNumOutputStreams                   = RequestMaxNumOutputStreams                   | InputMetadataSectionMask,
    InputRequestMaxNumReprocessStreams                = RequestMaxNumReprocessStreams                | InputMetadataSectionMask,
    InputRequestMaxNumInputStreams                    = RequestMaxNumInputStreams                    | InputMetadataSectionMask,
    InputRequestPipelineDepth                         = RequestPipelineDepth                         | InputMetadataSectionMask,
    InputRequestPipelineMaxDepth                      = RequestPipelineMaxDepth                      | InputMetadataSectionMask,
    InputRequestPartialResultCount                    = RequestPartialResultCount                    | InputMetadataSectionMask,
    InputRequestAvailableCapabilities                 = RequestAvailableCapabilities                 | InputMetadataSectionMask,
    InputRequestAvailableRequestKeys                  = RequestAvailableRequestKeys                  | InputMetadataSectionMask,
    InputRequestAvailableResultKeys                   = RequestAvailableResultKeys                   | InputMetadataSectionMask,
    InputRequestAvailableCharacteristicsKeys          = RequestAvailableCharacteristicsKeys          | InputMetadataSectionMask,
    InputRequestAvailableSessionKeys                  = RequestAvailableSessionKeys                  | InputMetadataSectionMask,
    InputRequestAvailablePhysicalCameraRequestKeys    = RequestAvailablePhysicalCameraRequestKeys    | InputMetadataSectionMask,
    InputRequestCharacteristicKeysNeedingPermission   = RequestCharacteristicKeysNeedingPermission   | InputMetadataSectionMask,
    InputRequestEnd                                   = RequestEnd                                   | InputMetadataSectionMask,

    InputScalerCropRegion                             = ScalerCropRegion                             | InputMetadataSectionMask,
    InputScalerAvailableFormats                       = ScalerAvailableFormats                       | InputMetadataSectionMask,
    InputScalerAvailableJPEGMinDurations              = ScalerAvailableJPEGMinDurations              | InputMetadataSectionMask,
    InputScalerAvailableJPEGSizes                     = ScalerAvailableJPEGSizes                     | InputMetadataSectionMask,
    InputScalerAvailableMaxDigitalZoom                = ScalerAvailableMaxDigitalZoom                | InputMetadataSectionMask,
    InputScalerAvailableProcessedMinDurations         = ScalerAvailableProcessedMinDurations         | InputMetadataSectionMask,
    InputScalerAvailableProcessedSizes                = ScalerAvailableProcessedSizes                | InputMetadataSectionMask,
    InputScalerAvailableRawMinDurations               = ScalerAvailableRawMinDurations               | InputMetadataSectionMask,
    InputScalerAvailableRawSizes                      = ScalerAvailableRawSizes                      | InputMetadataSectionMask,
    InputScalerAvailableInputOutputFormatsMap         = ScalerAvailableInputOutputFormatsMap         | InputMetadataSectionMask,
    InputScalerAvailableStreamConfigurations          = ScalerAvailableStreamConfigurations          | InputMetadataSectionMask,
    InputScalerAvailableMinFrameDurations             = ScalerAvailableMinFrameDurations             | InputMetadataSectionMask,
    InputScalerAvailableStallDurations                = ScalerAvailableStallDurations                | InputMetadataSectionMask,
    InputScalerCroppingType                           = ScalerCroppingType                           | InputMetadataSectionMask,
    InputScalerAvailableStreamConfigurationsMaximumResolution = ScalerAvailableStreamConfigurationsMaximumResolution
                                                                                                     | InputMetadataSectionMask,
    InputScalerAvailableMinFrameDurationsMaximumResolution = ScalerAvailableMinFrameDurationsMaximumResolution
                                                                                                     | InputMetadataSectionMask,
    InputScalerAvailableStallDurationsMaximumResolution = ScalerAvailableStallDurationsMaximumResolution
                                                                                                     | InputMetadataSectionMask,
    InputScalerAvailableInputOutputFormatsMapMaximumResolution = ScalerAvailableInputOutputFormatsMapMaximumResolution
                                                                                                     | InputMetadataSectionMask,
    InputScalerEnd                                    = ScalerEnd                                    | InputMetadataSectionMask,

    InputSensorExposureTime                           = SensorExposureTime                           | InputMetadataSectionMask,
    InputSensorFrameDuration                          = SensorFrameDuration                          | InputMetadataSectionMask,
    InputSensorSensitivity                            = SensorSensitivity                            | InputMetadataSectionMask,
    InputSensorReferenceIlluminant1                   = SensorReferenceIlluminant1                   | InputMetadataSectionMask,
    InputSensorReferenceIlluminant2                   = SensorReferenceIlluminant2                   | InputMetadataSectionMask,
    InputSensorCalibrationTransform1                  = SensorCalibrationTransform1                  | InputMetadataSectionMask,
    InputSensorCalibrationTransform2                  = SensorCalibrationTransform2                  | InputMetadataSectionMask,
    InputSensorColorTransform1                        = SensorColorTransform1                        | InputMetadataSectionMask,
    InputSensorColorTransform2                        = SensorColorTransform2                        | InputMetadataSectionMask,
    InputSensorForwardMatrix1                         = SensorForwardMatrix1                         | InputMetadataSectionMask,
    InputSensorForwardMatrix2                         = SensorForwardMatrix2                         | InputMetadataSectionMask,
    InputSensorBaseGainFactor                         = SensorBaseGainFactor                         | InputMetadataSectionMask,
    InputSensorBlackLevelPattern                      = SensorBlackLevelPattern                      | InputMetadataSectionMask,
    InputSensorMaxAnalogSensitivity                   = SensorMaxAnalogSensitivity                   | InputMetadataSectionMask,
    InputSensorOrientation                            = SensorOrientation                            | InputMetadataSectionMask,
    InputSensorProfileHueSaturationMapDimensions      = SensorProfileHueSaturationMapDimensions      | InputMetadataSectionMask,
    InputSensorTimestamp                              = SensorTimestamp                              | InputMetadataSectionMask,
    InputSensorTemperature                            = SensorTemperature                            | InputMetadataSectionMask,
    InputSensorNeutralColorPoint                      = SensorNeutralColorPoint                      | InputMetadataSectionMask,
    InputSensorNoiseProfile                           = SensorNoiseProfile                           | InputMetadataSectionMask,
    InputSensorProfileHueSaturationMap                = SensorProfileHueSaturationMap                | InputMetadataSectionMask,
    InputSensorProfileToneCurve                       = SensorProfileToneCurve                       | InputMetadataSectionMask,
    InputSensorGreenSplit                             = SensorGreenSplit                             | InputMetadataSectionMask,
    InputSensorTestPatternData                        = SensorTestPatternData                        | InputMetadataSectionMask,
    InputSensorTestPatternMode                        = SensorTestPatternMode                        | InputMetadataSectionMask,
    InputSensorAvailableTestPatternModes              = SensorAvailableTestPatternModes              | InputMetadataSectionMask,
    InputSensorRollingShutterSkew                     = SensorRollingShutterSkew                     | InputMetadataSectionMask,
    InputSensorDynamicBlackLevel                      = SensorDynamicBlackLevel                      | InputMetadataSectionMask,
    InputSensorDynamicWhiteLevel                      = SensorDynamicWhiteLevel                      | InputMetadataSectionMask,
    InputSensorPixelMode                              = SensorPixelMode                              | InputMetadataSectionMask,
    InputSensorRawBinningFactorUsed                   = SensorRawBinningFactorUsed                   | InputMetadataSectionMask,
    InputSensorEnd                                    = SensorEnd                                    | InputMetadataSectionMask,

    InputSensorInfoActiveArraySize                    = SensorInfoActiveArraySize                    | InputMetadataSectionMask,
    InputSensorInfoSensitivityRange                   = SensorInfoSensitivityRange                   | InputMetadataSectionMask,
    InputSensorInfoColorFilterArrangement             = SensorInfoColorFilterArrangement             | InputMetadataSectionMask,
    InputSensorInfoExposureTimeRange                  = SensorInfoExposureTimeRange                  | InputMetadataSectionMask,
    InputSensorInfoMaxFrameDuration                   = SensorInfoMaxFrameDuration                   | InputMetadataSectionMask,
    InputSensorInfoPhysicalSize                       = SensorInfoPhysicalSize                       | InputMetadataSectionMask,
    InputSensorInfoPixelArraySize                     = SensorInfoPixelArraySize                     | InputMetadataSectionMask,
    InputSensorInfoWhiteLevel                         = SensorInfoWhiteLevel                         | InputMetadataSectionMask,
    InputSensorInfoTimestampSource                    = SensorInfoTimestampSource                    | InputMetadataSectionMask,
    InputSensorInfoLensShadingApplied                 = SensorInfoLensShadingApplied                 | InputMetadataSectionMask,
    InputSensorInfoPreCorrectionActiveArraySize       = SensorInfoPreCorrectionActiveArraySize       | InputMetadataSectionMask,
    InputSensorInfoActiveArraySizeMaximumResolution   = SensorInfoActiveArraySizeMaximumResolution   | InputMetadataSectionMask,
    InputSensorInfoPixelArraySizeMaximumResolution    = SensorInfoPixelArraySizeMaximumResolution    | InputMetadataSectionMask,
    InputSensorInfoPreCorrectionActiveArraySizeMaximumResolution = SensorInfoPreCorrectionActiveArraySizeMaximumResolution
                                                                                                     | InputMetadataSectionMask,
    InputSensorInfoBinningFactor                      = SensorInfoBinningFactor                      | InputMetadataSectionMask,
    InputSensorInfoEnd                                = SensorInfoEnd                                | InputMetadataSectionMask,

    InputShadingMode                                  = ShadingMode                                  | InputMetadataSectionMask,
    InputShadingStrength                              = ShadingStrength                              | InputMetadataSectionMask,
    InputShadingAvailableModes                        = ShadingAvailableModes                        | InputMetadataSectionMask,
    InputShadingEnd                                   = ShadingEnd                                   | InputMetadataSectionMask,

    InputStatisticsFaceDetectMode                     = StatisticsFaceDetectMode                     | InputMetadataSectionMask,
    InputStatisticsHistogramMode                      = StatisticsHistogramMode                      | InputMetadataSectionMask,
    InputStatisticsSharpnessMapMode                   = StatisticsSharpnessMapMode                   | InputMetadataSectionMask,
    InputStatisticsHotPixelMapMode                    = StatisticsHotPixelMapMode                    | InputMetadataSectionMask,
    InputStatisticsFaceIds                            = StatisticsFaceIds                            | InputMetadataSectionMask,
    InputStatisticsFaceLandmarks                      = StatisticsFaceLandmarks                      | InputMetadataSectionMask,
    InputStatisticsFaceRectangles                     = StatisticsFaceRectangles                     | InputMetadataSectionMask,
    InputStatisticsFaceScores                         = StatisticsFaceScores                         | InputMetadataSectionMask,
    InputStatisticsHistogram                          = StatisticsHistogram                          | InputMetadataSectionMask,
    InputStatisticsSharpnessMap                       = StatisticsSharpnessMap                       | InputMetadataSectionMask,
    InputStatisticsLensShadingCorrectionMap           = StatisticsLensShadingCorrectionMap           | InputMetadataSectionMask,
    InputStatisticsLensShadingMap                     = StatisticsLensShadingMap                     | InputMetadataSectionMask,
    InputStatisticsPredictedColorGains                = StatisticsPredictedColorGains                | InputMetadataSectionMask,
    InputStatisticsPredictedColorTransform            = StatisticsPredictedColorTransform            | InputMetadataSectionMask,
    InputStatisticsSceneFlicker                       = StatisticsSceneFlicker                       | InputMetadataSectionMask,
    InputStatisticsHotPixelMap                        = StatisticsHotPixelMap                        | InputMetadataSectionMask,
    InputStatisticsLensShadingMapMode                 = StatisticsLensShadingMapMode                 | InputMetadataSectionMask,
    InputStatisticsOISDataMode                        = StatisticsOISDataMode                        | InputMetadataSectionMask,
    InputStatisticsOISTimestamps                      = StatisticsOISTimestamps                      | InputMetadataSectionMask,
    InputStatisticsOISXShifts                         = StatisticsOISXShifts                         | InputMetadataSectionMask,
    InputStatisticsOISYShifts                         = StatisticsOISYShifts                         | InputMetadataSectionMask,
    InputStatisticsEnd                                = StatisticsEnd                                | InputMetadataSectionMask,

    InputStatisticsInfoAvailableFaceDetectModes       = StatisticsInfoAvailableFaceDetectModes       | InputMetadataSectionMask,
    InputStatisticsInfoHistogramBucketCount           = StatisticsInfoHistogramBucketCount           | InputMetadataSectionMask,
    InputStatisticsInfoMaxFaceCount                   = StatisticsInfoMaxFaceCount                   | InputMetadataSectionMask,
    InputStatisticsInfoMaxHistogramCount              = StatisticsInfoMaxHistogramCount              | InputMetadataSectionMask,
    InputStatisticsInfoMaxSharpnessMapValue           = StatisticsInfoMaxSharpnessMapValue           | InputMetadataSectionMask,
    InputStatisticsInfoSharpnessMapSize               = StatisticsInfoSharpnessMapSize               | InputMetadataSectionMask,
    InputStatisticsInfoAvailableHotPixelMapModes      = StatisticsInfoAvailableHotPixelMapModes      | InputMetadataSectionMask,
    InputStatisticsInfoAvailableLensShadingMapModes   = StatisticsInfoAvailableLensShadingMapModes   | InputMetadataSectionMask,
    InputStatisticsInfoEnd                            = StatisticsInfoEnd                            | InputMetadataSectionMask,

    InputTonemapCurveBlue                             = TonemapCurveBlue                             | InputMetadataSectionMask,
    InputTonemapCurveGreen                            = TonemapCurveGreen                            | InputMetadataSectionMask,
    InputTonemapCurveRed                              = TonemapCurveRed                              | InputMetadataSectionMask,
    InputTonemapMode                                  = TonemapMode                                  | InputMetadataSectionMask,
    InputTonemapMaxCurvePoints                        = TonemapMaxCurvePoints                        | InputMetadataSectionMask,
    InputTonemapAvailableToneMapModes                 = TonemapAvailableToneMapModes                 | InputMetadataSectionMask,
    InputTonemapGamma                                 = TonemapGamma                                 | InputMetadataSectionMask,
    InputTonemapPresetCurve                           = TonemapPresetCurve                           | InputMetadataSectionMask,
    InputTonemapEnd                                   = TonemapEnd                                   | InputMetadataSectionMask,

    InputLedTransmit                                  = LedTransmit                                  | InputMetadataSectionMask,
    InputLedAvailableLeds                             = LedAvailableLeds                             | InputMetadataSectionMask,
    InputLedEnd                                       = LedEnd                                       | InputMetadataSectionMask,

    InputInfoSupportedHardwareLevel                   = InfoSupportedHardwareLevel                   | InputMetadataSectionMask,
    InputInfoEnd                                      = InfoEnd                                      | InputMetadataSectionMask,

    InputBlackLevelLock                               = BlackLevelLock                               | InputMetadataSectionMask,
    InputBlackLevelEnd                                = BlackLevelEnd                                | InputMetadataSectionMask,

    InputSyncFrameNumber                              = SyncFrameNumber                              | InputMetadataSectionMask,
    InputSyncMaxLatency                               = SyncMaxLatency                               | InputMetadataSectionMask,
    InputSyncEnd                                      = SyncEnd                                      | InputMetadataSectionMask,

    InputReprocessEffectiveExposureFactor             = ReprocessEffectiveExposureFactor             | InputMetadataSectionMask,
    InputReprocessMaxCaptureStall                     = ReprocessMaxCaptureStall                     | InputMetadataSectionMask,
    InputReprocessEnd                                 = ReprocessEnd                                 | InputMetadataSectionMask,

    InputDepthMaxDepthSamples                         = DepthMaxDepthSamples                         | InputMetadataSectionMask,
    InputDepthAvailableDepthStreamConfigurations      = DepthAvailableDepthStreamConfigurations      | InputMetadataSectionMask,
    InputDepthAvailableDepthMinFrameDurations         = DepthAvailableDepthMinFrameDurations         | InputMetadataSectionMask,
    InputDepthAvailableDepthStallDurations            = DepthAvailableDepthStallDurations            | InputMetadataSectionMask,
    InputDepthDepthIsExclusive                        = DepthDepthIsExclusive                        | InputMetadataSectionMask,
    InputDepthAvailableDepthStreamConfigurationsMaximumResolution             =
        DepthAvailableDepthStreamConfigurationsMaximumResolution                                     | InputMetadataSectionMask,
    InputDepthAvailableDepthMinFrameDurationsMaximumResolution                =
        DepthAvailableDepthMinFrameDurationsMaximumResolution                                        | InputMetadataSectionMask,
    InputDepthAvailableDepthStallDurationsMaximumResolution              =
        DepthAvailableDepthStallDurationsMaximumResolution                                           | InputMetadataSectionMask,
    InputDepthDepthAvailableDynamicDepthStreamConfigurationsMaximumResolution =
        DepthAvailableDynamicDepthStreamConfigurationsMaximumResolution                              | InputMetadataSectionMask,
    InputDepthDepthAvailableDynamicDepthMinFrameDurationsMaximumResolution    =
        DepthAvailableDynamicDepthMinFrameDurationsMaximumResolution                                 | InputMetadataSectionMask,
    InputDepthDepthAvailableDynamicDepthStallDurationsMaximumResolution       =
        DepthAvailableDynamicDepthStallDurationsMaximumResolution                                    | InputMetadataSectionMask,
    InputDepthEnd                                     = DepthEnd                                     | InputMetadataSectionMask,
    InputLogicalMultiCameraPhysicalIDs                = LogicalMultiCameraPhysicalIDs                | InputMetadataSectionMask,
    InputLogicalMultiCameraSensorSyncType             = LogicalMultiCameraSensorSyncType             | InputMetadataSectionMask,
    InputLogicalMultiCameraEnd                        = LogicalMultiCameraEnd                        | InputMetadataSectionMask,

    StaticColorCorrectionMode                             = ColorCorrectionMode                             | StaticMetadataSectionMask,
    StaticColorCorrectionTransform                        = ColorCorrectionTransform                        | StaticMetadataSectionMask,
    StaticColorCorrectionGains                            = ColorCorrectionGains                            | StaticMetadataSectionMask,
    StaticColorCorrectionAberrationMode                   = ColorCorrectionAberrationMode                   | StaticMetadataSectionMask,
    StaticColorCorrectionAvailableAberrationModes         = ColorCorrectionAvailableAberrationModes         | StaticMetadataSectionMask,
    StaticColorCorrectionEnd                              = ColorCorrectionEnd                              | StaticMetadataSectionMask,

    StaticControlAEAntibandingMode                        = ControlAEAntibandingMode                        | StaticMetadataSectionMask,
    StaticControlAEExposureCompensation                   = ControlAEExposureCompensation                   | StaticMetadataSectionMask,
    StaticControlAELock                                   = ControlAELock                                   | StaticMetadataSectionMask,
    StaticControlAEMode                                   = ControlAEMode                                   | StaticMetadataSectionMask,
    StaticControlAERegions                                = ControlAERegions                                | StaticMetadataSectionMask,
    StaticControlAETargetFpsRange                         = ControlAETargetFpsRange                         | StaticMetadataSectionMask,
    StaticControlAEPrecaptureTrigger                      = ControlAEPrecaptureTrigger                      | StaticMetadataSectionMask,
    StaticControlAFMode                                   = ControlAFMode                                   | StaticMetadataSectionMask,
    StaticControlAFRegions                                = ControlAFRegions                                | StaticMetadataSectionMask,
    StaticControlAFTrigger                                = ControlAFTrigger                                | StaticMetadataSectionMask,
    StaticControlAWBLock                                  = ControlAWBLock                                  | StaticMetadataSectionMask,
    StaticControlAWBMode                                  = ControlAWBMode                                  | StaticMetadataSectionMask,
    StaticControlAWBRegions                               = ControlAWBRegions                               | StaticMetadataSectionMask,
    StaticControlCaptureIntent                            = ControlCaptureIntent                            | StaticMetadataSectionMask,
    StaticControlEffectMode                               = ControlEffectMode                               | StaticMetadataSectionMask,
    StaticControlMode                                     = ControlMode                                     | StaticMetadataSectionMask,
    StaticControlSceneMode                                = ControlSceneMode                                | StaticMetadataSectionMask,
    StaticControlVideoStabilizationMode                   = ControlVideoStabilizationMode                   | StaticMetadataSectionMask,
    StaticControlAEAvailableAntibandingModes              = ControlAEAvailableAntibandingModes              | StaticMetadataSectionMask,
    StaticControlAEAvailableModes                         = ControlAEAvailableModes                         | StaticMetadataSectionMask,
    StaticControlAEAvailableTargetFPSRanges               = ControlAEAvailableTargetFPSRanges               | StaticMetadataSectionMask,
    StaticControlAECompensationRange                      = ControlAECompensationRange                      | StaticMetadataSectionMask,
    StaticControlAECompensationStep                       = ControlAECompensationStep                       | StaticMetadataSectionMask,
    StaticControlAFAvailableModes                         = ControlAFAvailableModes                         | StaticMetadataSectionMask,
    StaticControlAvailableEffects                         = ControlAvailableEffects                         | StaticMetadataSectionMask,
    StaticControlAvailableSceneModes                      = ControlAvailableSceneModes                      | StaticMetadataSectionMask,
    StaticControlAvailableVideoStabilizationModes         = ControlAvailableVideoStabilizationModes         | StaticMetadataSectionMask,
    StaticControlAWBAvailableModes                        = ControlAWBAvailableModes                        | StaticMetadataSectionMask,
    StaticControlMaxRegions                               = ControlMaxRegions                               | StaticMetadataSectionMask,
    StaticControlSceneModeOverrides                       = ControlSceneModeOverrides                       | StaticMetadataSectionMask,
    StaticControlAEPrecaptureId                           = ControlAEPrecaptureId                           | StaticMetadataSectionMask,
    StaticControlAEState                                  = ControlAEState                                  | StaticMetadataSectionMask,
    StaticControlAFState                                  = ControlAFState                                  | StaticMetadataSectionMask,
    StaticControlAFTriggerId                              = ControlAFTriggerId                              | StaticMetadataSectionMask,
    StaticControlAWBState                                 = ControlAWBState                                 | StaticMetadataSectionMask,
    StaticControlAvailableHighSpeedVideoConfigurations    = ControlAvailableHighSpeedVideoConfigurations    | StaticMetadataSectionMask,
    StaticControlAELockAvailable                          = ControlAELockAvailable                          | StaticMetadataSectionMask,
    StaticControlAWBLockAvailable                         = ControlAWBLockAvailable                         | StaticMetadataSectionMask,
    StaticControlAvailableModes                           = ControlAvailableModes                           | StaticMetadataSectionMask,
    StaticControlPostRawSensitivityBoostRange             = ControlPostRawSensitivityBoostRange             | StaticMetadataSectionMask,
    StaticControlPostRawSensitivityBoost                  = ControlPostRawSensitivityBoost                  | StaticMetadataSectionMask,
#if ((CAMX_ANDROID_API) && (CAMX_ANDROID_API >= 30)) // Android-R or better
    StaticControlAvailableExtendedSceneModeMaxSizes         = ControlAvailableExtendedSceneModeMaxSizes         | StaticMetadataSectionMask,
    StaticControlAvailableExtendedSceneModeZoomRatioRanges  = ControlAvailableExtendedSceneModeZoomRatioRanges  | StaticMetadataSectionMask,
    StaticControlZoomRatioRange                             = ControlZoomRatioRange                             | StaticMetadataSectionMask,
#endif // Android-R or better
    StaticControlEnd                                      = ControlEnd                                      | StaticMetadataSectionMask,

    StaticDemosaicMode                                    = DemosaicMode                                    | StaticMetadataSectionMask,
    StaticDemosaicEnd                                     = DemosaicEnd                                     | StaticMetadataSectionMask,

    StaticEdgeMode                                        = EdgeMode                                        | StaticMetadataSectionMask,
    StaticEdgeStrength                                    = EdgeStrength                                    | StaticMetadataSectionMask,
    StaticEdgeAvailableEdgeModes                          = EdgeAvailableEdgeModes                          | StaticMetadataSectionMask,
    StaticEdgeEnd                                         = EdgeEnd                                         | StaticMetadataSectionMask,

    StaticFlashFiringPower                                = FlashFiringPower                                | StaticMetadataSectionMask,
    StaticFlashFiringTime                                 = FlashFiringTime                                 | StaticMetadataSectionMask,
    StaticFlashMode                                       = FlashMode                                       | StaticMetadataSectionMask,
    StaticFlashColorTemperature                           = FlashColorTemperature                           | StaticMetadataSectionMask,
    StaticFlashMaxEnergy                                  = FlashMaxEnergy                                  | StaticMetadataSectionMask,
    StaticFlashState                                      = FlashState                                      | StaticMetadataSectionMask,
    StaticFlashEnd                                        = FlashEnd                                        | StaticMetadataSectionMask,

    StaticFlashInfoAvailable                              = FlashInfoAvailable                              | StaticMetadataSectionMask,
    StaticFlashInfoChargeDuration                         = FlashInfoChargeDuration                         | StaticMetadataSectionMask,
    StaticFlashInfoEnd                                    = FlashInfoEnd                                    | StaticMetadataSectionMask,

    StaticHotPixelMode                                    = HotPixelMode                                    | StaticMetadataSectionMask,
    StaticHotPixelAvailableHotPixelModes                  = HotPixelAvailableHotPixelModes                  | StaticMetadataSectionMask,
    StaticHotPixelEnd                                     = HotPixelEnd                                     | StaticMetadataSectionMask,

    StaticJPEGGpsCoordinates                              = JPEGGpsCoordinates                              | StaticMetadataSectionMask,
    StaticJPEGGpsProcessingMethod                         = JPEGGpsProcessingMethod                         | StaticMetadataSectionMask,
    StaticJPEGGpsTimestamp                                = JPEGGpsTimestamp                                | StaticMetadataSectionMask,
    StaticJPEGOrientation                                 = JPEGOrientation                                 | StaticMetadataSectionMask,
    StaticJPEGQuality                                     = JPEGQuality                                     | StaticMetadataSectionMask,
    StaticJPEGThumbnailQuality                            = JPEGThumbnailQuality                            | StaticMetadataSectionMask,
    StaticJPEGThumbnailSize                               = JPEGThumbnailSize                               | StaticMetadataSectionMask,
    StaticJPEGAvailableThumbnailSizes                     = JPEGAvailableThumbnailSizes                     | StaticMetadataSectionMask,
    StaticJPEGMaxSize                                     = JPEGMaxSize                                     | StaticMetadataSectionMask,
    StaticJPEGSize                                        = JPEGSize                                        | StaticMetadataSectionMask,
    StaticJPEGEnd                                         = JPEGEnd                                         | StaticMetadataSectionMask,

    StaticLensAperture                                    = LensAperture                                    | StaticMetadataSectionMask,
    StaticLensFilterDensity                               = LensFilterDensity                               | StaticMetadataSectionMask,
    StaticLensFocalLength                                 = LensFocalLength                                 | StaticMetadataSectionMask,
    StaticLensFocusDistance                               = LensFocusDistance                               | StaticMetadataSectionMask,
    StaticLensOpticalStabilizationMode                    = LensOpticalStabilizationMode                    | StaticMetadataSectionMask,
    StaticLensFacing                                      = LensFacing                                      | StaticMetadataSectionMask,
    StaticLensPoseRotation                                = LensPoseRotation                                | StaticMetadataSectionMask,
    StaticLensPoseTranslation                             = LensPoseTranslation                             | StaticMetadataSectionMask,
    StaticLensFocusRange                                  = LensFocusRange                                  | StaticMetadataSectionMask,
    StaticLensState                                       = LensState                                       | StaticMetadataSectionMask,
    StaticLensIntrinsicCalibration                        = LensIntrinsicCalibration                        | StaticMetadataSectionMask,
    StaticLensRadialDistortion                            = LensRadialDistortion                            | StaticMetadataSectionMask,
    StaticLensPoseReference                               = LensPoseReference                               | StaticMetadataSectionMask,
    StaticLensDistortion                                  = LensDistortion                                  | StaticMetadataSectionMask,
    StaticLensDistortionMaximumResolution                 = LensDistortionMaximumResolution                 | StaticMetadataSectionMask,
    StaticLensIntrinsicCalibrationMaximumResolution       = LensIntrinsicCalibrationMaximumResolution       | StaticMetadataSectionMask,
    StaticLensEnd                                         = LensEnd                                         | StaticMetadataSectionMask,

    StaticLensInfoAvailableApertures                      = LensInfoAvailableApertures                      | StaticMetadataSectionMask,
    StaticLensInfoAvailableFilterDensities                = LensInfoAvailableFilterDensities                | StaticMetadataSectionMask,
    StaticLensInfoAvailableFocalLengths                   = LensInfoAvailableFocalLengths                   | StaticMetadataSectionMask,
    StaticLensInfoAvailableOpticalStabilization           = LensInfoAvailableOpticalStabilization           | StaticMetadataSectionMask,
    StaticLensInfoHyperfocalDistance                      = LensInfoHyperfocalDistance                      | StaticMetadataSectionMask,
    StaticLensInfoMinimumFocusDistance                    = LensInfoMinimumFocusDistance                    | StaticMetadataSectionMask,
    StaticLensInfoShadingMapSize                          = LensInfoShadingMapSize                          | StaticMetadataSectionMask,
    StaticLensInfoFocusDistanceCalibration                = LensInfoFocusDistanceCalibration                | StaticMetadataSectionMask,
    StaticLensInfoEnd                                     = LensInfoEnd                                     | StaticMetadataSectionMask,

    StaticNoiseReductionMode                              = NoiseReductionMode                              | StaticMetadataSectionMask,
    StaticNoiseReductionStrength                          = NoiseReductionStrength                          | StaticMetadataSectionMask,
    StaticNoiseReductionAvailableNoiseReductionModes      = NoiseReductionAvailableNoiseReductionModes      | StaticMetadataSectionMask,
    StaticNoiseReductionEnd                               = NoiseReductionEnd                               | StaticMetadataSectionMask,

    StaticQuirksMeteringCropRegion                        = QuirksMeteringCropRegion                        | StaticMetadataSectionMask,
    StaticQuirksTriggerAFWithAuto                         = QuirksTriggerAFWithAuto                         | StaticMetadataSectionMask,
    StaticQuirksUseZslFormat                              = QuirksUseZslFormat                              | StaticMetadataSectionMask,
    StaticQuirksUsePartialResult                          = QuirksUsePartialResult                          | StaticMetadataSectionMask,
    StaticQuirksPartialResult                             = QuirksPartialResult                             | StaticMetadataSectionMask,
    StaticQuirksEnd                                       = QuirksEnd                                       | StaticMetadataSectionMask,

    StaticRequestFrameCount                               = RequestFrameCount                               | StaticMetadataSectionMask,
    StaticRequestId                                       = RequestId                                       | StaticMetadataSectionMask,
    StaticRequestInputStreams                             = RequestInputStreams                             | StaticMetadataSectionMask,
    StaticRequestMetadataMode                             = RequestMetadataMode                             | StaticMetadataSectionMask,
    StaticRequestOutputStreams                            = RequestOutputStreams                            | StaticMetadataSectionMask,
    StaticRequestType                                     = RequestType                                     | StaticMetadataSectionMask,
    StaticRequestMaxNumOutputStreams                      = RequestMaxNumOutputStreams                      | StaticMetadataSectionMask,
    StaticRequestMaxNumReprocessStreams                   = RequestMaxNumReprocessStreams                   | StaticMetadataSectionMask,
    StaticRequestMaxNumInputStreams                       = RequestMaxNumInputStreams                       | StaticMetadataSectionMask,
    StaticRequestPipelineDepth                            = RequestPipelineDepth                            | StaticMetadataSectionMask,
    StaticRequestPipelineMaxDepth                         = RequestPipelineMaxDepth                         | StaticMetadataSectionMask,
    StaticRequestPartialResultCount                       = RequestPartialResultCount                       | StaticMetadataSectionMask,
    StaticRequestAvailableCapabilities                    = RequestAvailableCapabilities                    | StaticMetadataSectionMask,
    StaticRequestAvailableRequestKeys                     = RequestAvailableRequestKeys                     | StaticMetadataSectionMask,
    StaticRequestAvailableResultKeys                      = RequestAvailableResultKeys                      | StaticMetadataSectionMask,
    StaticRequestAvailableCharacteristicsKeys             = RequestAvailableCharacteristicsKeys             | StaticMetadataSectionMask,
    StaticRequestAvailableSessionKeys                     = RequestAvailableSessionKeys                     | StaticMetadataSectionMask,
    StaticRequestAvailablePhysicalCameraRequestKeys       = RequestAvailablePhysicalCameraRequestKeys       | StaticMetadataSectionMask,
    StaticRequestCharacteristicKeysNeedingPermission      = RequestCharacteristicKeysNeedingPermission      | StaticMetadataSectionMask,
    StaticRequestEnd                                      = RequestEnd                                      | StaticMetadataSectionMask,

    StaticScalerCropRegion                                = ScalerCropRegion                                | StaticMetadataSectionMask,
    StaticScalerAvailableFormats                          = ScalerAvailableFormats                          | StaticMetadataSectionMask,
    StaticScalerAvailableJPEGMinDurations                 = ScalerAvailableJPEGMinDurations                 | StaticMetadataSectionMask,
    StaticScalerAvailableJPEGSizes                        = ScalerAvailableJPEGSizes                        | StaticMetadataSectionMask,
    StaticScalerAvailableMaxDigitalZoom                   = ScalerAvailableMaxDigitalZoom                   | StaticMetadataSectionMask,
    StaticScalerAvailableProcessedMinDurations            = ScalerAvailableProcessedMinDurations            | StaticMetadataSectionMask,
    StaticScalerAvailableProcessedSizes                   = ScalerAvailableProcessedSizes                   | StaticMetadataSectionMask,
    StaticScalerAvailableRawMinDurations                  = ScalerAvailableRawMinDurations                  | StaticMetadataSectionMask,
    StaticScalerAvailableRawSizes                         = ScalerAvailableRawSizes                         | StaticMetadataSectionMask,
    StaticScalerAvailableInputOutputFormatsMap            = ScalerAvailableInputOutputFormatsMap            | StaticMetadataSectionMask,
    StaticScalerAvailableStreamConfigurations             = ScalerAvailableStreamConfigurations             | StaticMetadataSectionMask,
    StaticScalerAvailableMinFrameDurations                = ScalerAvailableMinFrameDurations                | StaticMetadataSectionMask,
    StaticScalerAvailableStallDurations                   = ScalerAvailableStallDurations                   | StaticMetadataSectionMask,
    StaticScalerCroppingType                              = ScalerCroppingType                              | StaticMetadataSectionMask,
    StaticScalerAvailableRecommendedStreamConfigurations  = ScalerAvailableRecommendedStreamConfigurations  | StaticMetadataSectionMask,
    StaticScalerAvailableRecommendedInputOutputFormatsMap = ScalerAvailableRecommendedInputOutputFormatsMap | StaticMetadataSectionMask,
    StaticScalerAvailableRotateAndCropModes               = ScalerAvailableRotateAndCropModes               | StaticMetadataSectionMask,
    StaticScalerRotateAndCrop                             = ScalerRotateAndCrop                             | StaticMetadataSectionMask,
    StaticScalerDefaultSecureImageSize                    = ScalerDefaultSecureImageSize                    | StaticMetadataSectionMask,
    StaticScalerPhysicalCameraMultiResolutionStreamConfigurations = ScalerPhysicalCameraMultiResolutionStreamConfigurations
                                                                                                            | StaticMetadataSectionMask,
    StaticScalerAvailableStreamConfigurationsMaximumResolution = ScalerAvailableStreamConfigurationsMaximumResolution
                                                                                                            | StaticMetadataSectionMask,
    StaticScalerAvailableMinFrameDurationsMaximumResolution = ScalerAvailableMinFrameDurationsMaximumResolution
                                                                                                            | StaticMetadataSectionMask,
    StaticScalerAvailableStallDurationsMaximumResolution  = ScalerAvailableStallDurationsMaximumResolution
                                                                                                            | StaticMetadataSectionMask,
    StaticScalerAvailableInputOutputFormatsMapMaximumResolution = ScalerAvailableInputOutputFormatsMapMaximumResolution
                                                                                                            | StaticMetadataSectionMask,
    StaticScalerMultiResolutionStreamSupported            = ScalerMultiResolutionStreamSupported            | StaticMetadataSectionMask,
    StaticScalarCropRegionSet                             = ScalarCropRegionSet                             | StaticMetadataSectionMask,
    StaticScalerAvailableStreamUseCases                   = ScalerAvailableStreamUseCases                   | StaticMetadataSectionMask,
    StaticScalerEnd                                       = ScalerEnd                                       | StaticMetadataSectionMask,

    StaticSensorExposureTime                              = SensorExposureTime                              | StaticMetadataSectionMask,
    StaticSensorFrameDuration                             = SensorFrameDuration                             | StaticMetadataSectionMask,
    StaticSensorSensitivity                               = SensorSensitivity                               | StaticMetadataSectionMask,
    StaticSensorReferenceIlluminant1                      = SensorReferenceIlluminant1                      | StaticMetadataSectionMask,
    StaticSensorReferenceIlluminant2                      = SensorReferenceIlluminant2                      | StaticMetadataSectionMask,
    StaticSensorCalibrationTransform1                     = SensorCalibrationTransform1                     | StaticMetadataSectionMask,
    StaticSensorCalibrationTransform2                     = SensorCalibrationTransform2                     | StaticMetadataSectionMask,
    StaticSensorColorTransform1                           = SensorColorTransform1                           | StaticMetadataSectionMask,
    StaticSensorColorTransform2                           = SensorColorTransform2                           | StaticMetadataSectionMask,
    StaticSensorForwardMatrix1                            = SensorForwardMatrix1                            | StaticMetadataSectionMask,
    StaticSensorForwardMatrix2                            = SensorForwardMatrix2                            | StaticMetadataSectionMask,
    StaticSensorBaseGainFactor                            = SensorBaseGainFactor                            | StaticMetadataSectionMask,
    StaticSensorBlackLevelPattern                         = SensorBlackLevelPattern                         | StaticMetadataSectionMask,
    StaticSensorMaxAnalogSensitivity                      = SensorMaxAnalogSensitivity                      | StaticMetadataSectionMask,
    StaticSensorOrientation                               = SensorOrientation                               | StaticMetadataSectionMask,
    StaticSensorProfileHueSaturationMapDimensions         = SensorProfileHueSaturationMapDimensions         | StaticMetadataSectionMask,
    StaticSensorTimestamp                                 = SensorTimestamp                                 | StaticMetadataSectionMask,
    StaticSensorTemperature                               = SensorTemperature                               | StaticMetadataSectionMask,
    StaticSensorNeutralColorPoint                         = SensorNeutralColorPoint                         | StaticMetadataSectionMask,
    StaticSensorNoiseProfile                              = SensorNoiseProfile                              | StaticMetadataSectionMask,
    StaticSensorProfileHueSaturationMap                   = SensorProfileHueSaturationMap                   | StaticMetadataSectionMask,
    StaticSensorProfileToneCurve                          = SensorProfileToneCurve                          | StaticMetadataSectionMask,
    StaticSensorGreenSplit                                = SensorGreenSplit                                | StaticMetadataSectionMask,
    StaticSensorTestPatternData                           = SensorTestPatternData                           | StaticMetadataSectionMask,
    StaticSensorTestPatternMode                           = SensorTestPatternMode                           | StaticMetadataSectionMask,
    StaticSensorAvailableTestPatternModes                 = SensorAvailableTestPatternModes                 | StaticMetadataSectionMask,
    StaticSensorRollingShutterSkew                        = SensorRollingShutterSkew                        | StaticMetadataSectionMask,
    StaticSensorOpaqueRawSize                             = SensorOpaqueRawSize                             | StaticMetadataSectionMask,
    StaticSensorOpaqueRawSizeMaximumResolution            = SensorOpaqueRawSizeMaximumResolution            | StaticMetadataSectionMask,
    StaticSensorEnd                                       = SensorEnd                                       | StaticMetadataSectionMask,

    StaticSensorInfoActiveArraySize                       = SensorInfoActiveArraySize                       | StaticMetadataSectionMask,
    StaticSensorInfoSensitivityRange                      = SensorInfoSensitivityRange                      | StaticMetadataSectionMask,
    StaticSensorInfoColorFilterArrangement                = SensorInfoColorFilterArrangement                | StaticMetadataSectionMask,
    StaticSensorInfoExposureTimeRange                     = SensorInfoExposureTimeRange                     | StaticMetadataSectionMask,
    StaticSensorInfoMaxFrameDuration                      = SensorInfoMaxFrameDuration                      | StaticMetadataSectionMask,
    StaticSensorInfoPhysicalSize                          = SensorInfoPhysicalSize                          | StaticMetadataSectionMask,
    StaticSensorInfoPixelArraySize                        = SensorInfoPixelArraySize                        | StaticMetadataSectionMask,
    StaticSensorInfoWhiteLevel                            = SensorInfoWhiteLevel                            | StaticMetadataSectionMask,
    StaticSensorInfoTimestampSource                       = SensorInfoTimestampSource                       | StaticMetadataSectionMask,
    StaticSensorInfoLensShadingApplied                    = SensorInfoLensShadingApplied                    | StaticMetadataSectionMask,
    StaticSensorInfoPreCorrectionActiveArraySize          = SensorInfoPreCorrectionActiveArraySize          | StaticMetadataSectionMask,
    StaticSensorInfoActiveArraySizeMaximumResolution      = SensorInfoActiveArraySizeMaximumResolution      | StaticMetadataSectionMask,
    StaticSensorInfoPixelArraySizeMaximumResolution       = SensorInfoPixelArraySizeMaximumResolution       | StaticMetadataSectionMask,
    StaticSensorPreCorrectionActiveArraySizeMaximumResolution = SensorInfoPreCorrectionActiveArraySizeMaximumResolution
                                                                                                            | StaticMetadataSectionMask,
    StaticSensorInfoBinningFactor                         = SensorInfoBinningFactor                         | StaticMetadataSectionMask,
    StaticSensorInfoEnd                                   = SensorInfoEnd                                   | StaticMetadataSectionMask,

    StaticShadingMode                                     = ShadingMode                                     | StaticMetadataSectionMask,
    StaticShadingStrength                                 = ShadingStrength                                 | StaticMetadataSectionMask,
    StaticShadingAvailableModes                           = ShadingAvailableModes                           | StaticMetadataSectionMask,
    StaticShadingEnd                                      = ShadingEnd                                      | StaticMetadataSectionMask,

    StaticStatisticsFaceDetectMode                        = StatisticsFaceDetectMode                        | StaticMetadataSectionMask,
    StaticStatisticsHistogramMode                         = StatisticsHistogramMode                         | StaticMetadataSectionMask,
    StaticStatisticsSharpnessMapMode                      = StatisticsSharpnessMapMode                      | StaticMetadataSectionMask,
    StaticStatisticsHotPixelMapMode                       = StatisticsHotPixelMapMode                       | StaticMetadataSectionMask,
    StaticStatisticsFaceIds                               = StatisticsFaceIds                               | StaticMetadataSectionMask,
    StaticStatisticsFaceLandmarks                         = StatisticsFaceLandmarks                         | StaticMetadataSectionMask,
    StaticStatisticsFaceRectangles                        = StatisticsFaceRectangles                        | StaticMetadataSectionMask,
    StaticStatisticsFaceScores                            = StatisticsFaceScores                            | StaticMetadataSectionMask,
    StaticStatisticsHistogram                             = StatisticsHistogram                             | StaticMetadataSectionMask,
    StaticStatisticsSharpnessMap                          = StatisticsSharpnessMap                          | StaticMetadataSectionMask,
    StaticStatisticsLensShadingCorrectionMap              = StatisticsLensShadingCorrectionMap              | StaticMetadataSectionMask,
    StaticStatisticsLensShadingMap                        = StatisticsLensShadingMap                        | StaticMetadataSectionMask,
    StaticStatisticsPredictedColorGains                   = StatisticsPredictedColorGains                   | StaticMetadataSectionMask,
    StaticStatisticsPredictedColorTransform               = StatisticsPredictedColorTransform               | StaticMetadataSectionMask,
    StaticStatisticsSceneFlicker                          = StatisticsSceneFlicker                          | StaticMetadataSectionMask,
    StaticStatisticsHotPixelMap                           = StatisticsHotPixelMap                           | StaticMetadataSectionMask,
    StaticStatisticsLensShadingMapMode                    = StatisticsLensShadingMapMode                    | StaticMetadataSectionMask,
    StaticStatisticsEnd                                   = StatisticsEnd                                   | StaticMetadataSectionMask,

    StaticStatisticsInfoAvailableFaceDetectModes          = StatisticsInfoAvailableFaceDetectModes          | StaticMetadataSectionMask,
    StaticStatisticsInfoHistogramBucketCount              = StatisticsInfoHistogramBucketCount              | StaticMetadataSectionMask,
    StaticStatisticsInfoMaxFaceCount                      = StatisticsInfoMaxFaceCount                      | StaticMetadataSectionMask,
    StaticStatisticsInfoMaxHistogramCount                 = StatisticsInfoMaxHistogramCount                 | StaticMetadataSectionMask,
    StaticStatisticsInfoMaxSharpnessMapValue              = StatisticsInfoMaxSharpnessMapValue              | StaticMetadataSectionMask,
    StaticStatisticsInfoSharpnessMapSize                  = StatisticsInfoSharpnessMapSize                  | StaticMetadataSectionMask,
    StaticStatisticsInfoAvailableHotPixelMapModes         = StatisticsInfoAvailableHotPixelMapModes         | StaticMetadataSectionMask,
    StaticStatisticsInfoAvailableLensShadingMapModes      = StatisticsInfoAvailableLensShadingMapModes      | StaticMetadataSectionMask,
    StaticStatisticsInfoEnd                               = StatisticsInfoEnd                               | StaticMetadataSectionMask,

    StaticTonemapCurveBlue                                = TonemapCurveBlue                                | StaticMetadataSectionMask,
    StaticTonemapCurveGreen                               = TonemapCurveGreen                               | StaticMetadataSectionMask,
    StaticTonemapCurveRed                                 = TonemapCurveRed                                 | StaticMetadataSectionMask,
    StaticTonemapMode                                     = TonemapMode                                     | StaticMetadataSectionMask,
    StaticTonemapMaxCurvePoints                           = TonemapMaxCurvePoints                           | StaticMetadataSectionMask,
    StaticTonemapAvailableToneMapModes                    = TonemapAvailableToneMapModes                    | StaticMetadataSectionMask,
    StaticTonemapGamma                                    = TonemapGamma                                    | StaticMetadataSectionMask,
    StaticTonemapPresetCurve                              = TonemapPresetCurve                              | StaticMetadataSectionMask,
    StaticTonemapEnd                                      = TonemapEnd                                      | StaticMetadataSectionMask,

    StaticLedTransmit                                     = LedTransmit                                     | StaticMetadataSectionMask,
    StaticLedAvailableLeds                                = LedAvailableLeds                                | StaticMetadataSectionMask,
    StaticLedEnd                                          = LedEnd                                          | StaticMetadataSectionMask,

    StaticInfoSupportedHardwareLevel                      = InfoSupportedHardwareLevel                      | StaticMetadataSectionMask,
    StaticInfoVersion                                     = InfoVersion                                     | StaticMetadataSectionMask,
    StaticInfoSupportedBufferManagementVersion            = InfoSupportedBufferManagementVersion            | StaticMetadataSectionMask,
    StaticInfoEnd                                         = InfoEnd                                         | StaticMetadataSectionMask,

    StaticBlackLevelLock                                  = BlackLevelLock                                  | StaticMetadataSectionMask,
    StaticBlackLevelEnd                                   = BlackLevelEnd                                   | StaticMetadataSectionMask,

    StaticSyncFrameNumber                                 = SyncFrameNumber                                 | StaticMetadataSectionMask,
    StaticSyncMaxLatency                                  = SyncMaxLatency                                  | StaticMetadataSectionMask,
    StaticSyncEnd                                         = SyncEnd                                         | StaticMetadataSectionMask,

    StaticReprocessEffectiveExposureFactor                = ReprocessEffectiveExposureFactor                | StaticMetadataSectionMask,
    StaticReprocessMaxCaptureStall                        = ReprocessMaxCaptureStall                        | StaticMetadataSectionMask,
    StaticReprocessEnd                                    = ReprocessEnd                                    | StaticMetadataSectionMask,

    StaticDepthMaxDepthSamples                            = DepthMaxDepthSamples                            | StaticMetadataSectionMask,
    StaticDepthAvailableDepthStreamConfigurations         = DepthAvailableDepthStreamConfigurations         | StaticMetadataSectionMask,
    StaticDepthAvailableDepthMinFrameDurations            = DepthAvailableDepthMinFrameDurations            | StaticMetadataSectionMask,
    StaticDepthAvailableDepthStallDurations               = DepthAvailableDepthStallDurations               | StaticMetadataSectionMask,
    StaticDepthDepthIsExclusive                           = DepthDepthIsExclusive                           | StaticMetadataSectionMask,
    StaticDepthEnd                                        = DepthEnd                                        | StaticMetadataSectionMask,
    StaticLogicalMultiCameraPhysicalIDs                   = LogicalMultiCameraPhysicalIDs                   | StaticMetadataSectionMask,
    StaticLogicalMultiCameraSensorSyncType                = LogicalMultiCameraSensorSyncType                | StaticMetadataSectionMask,
    StaticLogicalMultiCameraEnd                           = LogicalMultiCameraEnd                           | StaticMetadataSectionMask,
    StaticHEICInfoSupported                               = HEICInfoSupported                               | StaticMetadataSectionMask,
    StaticHEICInfoMaxJpegAppSegmentsCount                 = HEICInfoMaxJpegAppSegmentsCount                 | StaticMetadataSectionMask,
    StaticHEICInfoSupportedEnd                            = HEICInfoEnd                                     | StaticMetadataSectionMask,
};

/// @brief Definition of the starting linear offset of each section
enum SectionLinearTagOffsets
{
    ColorCorrectionOffset       = 0,
    ControlOffset               = (ColorCorrectionOffset      + ColorCorrectionEnd      - MetadataSectionColorCorrectionStart),
    DemosaicOffset              = (ControlOffset              + ControlEnd              - MetadataSectionControlStart),
    EdgeOffset                  = (DemosaicOffset             + DemosaicEnd             - MetadataSectionDemosaicStart),
    FlashOffset                 = (EdgeOffset                 + EdgeEnd                 - MetadataSectionEdgeStart),
    FlashInfoOffset             = (FlashOffset                + FlashEnd                - MetadataSectionFlashStart),
    HotPixelOffset              = (FlashInfoOffset            + FlashInfoEnd            - MetadataSectionFlashInfoStart),
    JPEGOffset                  = (HotPixelOffset             + HotPixelEnd             - MetadataSectionHotPixelStart),
    LensOffset                  = (JPEGOffset                 + JPEGEnd                 - MetadataSectionJPEGStart),
    LensInfoOffset              = (LensOffset                 + LensEnd                 - MetadataSectionLensStart),
    NoiseReductionOffset        = (LensInfoOffset             + LensInfoEnd             - MetadataSectionLensInfoStart),
    QuirksOffset                = (NoiseReductionOffset       + NoiseReductionEnd       - MetadataSectionNoiseReductionStart),
    RequestOffset               = (QuirksOffset               + QuirksEnd               - MetadataSectionQuirksStart),
    ScalerOffset                = (RequestOffset              + RequestEnd              - MetadataSectionRequestStart),
    SensorOffset                = (ScalerOffset               + ScalerEnd               - MetadataSectionScalerStart),
    SensorInfoOffset            = (SensorOffset               + SensorEnd               - MetadataSectionSensorStart),
    ShadingOffset               = (SensorInfoOffset           + SensorInfoEnd           - MetadataSectionSensorInfoStart),
    StatisticsOffset            = (ShadingOffset              + ShadingEnd              - MetadataSectionShadingStart),
    StatisticsInfoOffset        = (StatisticsOffset           + StatisticsEnd           - MetadataSectionStatisticsStart),
    TonemapOffset               = (StatisticsInfoOffset       + StatisticsInfoEnd       - MetadataSectionStatisticsInfoStart),
    LedOffset                   = (TonemapOffset              + TonemapEnd              - MetadataSectionTonemapStart),
    InfoOffset                  = (LedOffset                  + LedEnd                  - MetadataSectionLedStart),
    BlackLevelOffset            = (InfoOffset                 + InfoEnd                 - MetadataSectionInfoStart),
    SyncOffset                  = (BlackLevelOffset           + BlackLevelEnd           - MetadataSectionBlackLevelStart),
    ReprocessOffset             = (SyncOffset                 + SyncEnd                 - MetadataSectionSyncStart),
    DepthOffset                 = (ReprocessOffset            + ReprocessEnd            - MetadataSectionReprocessStart),
    LogicalMultiCameraOffset    = (DepthOffset                + DepthEnd                - MetadataSectionDepthStart),
    DistortionCorrectionOffset  = (LogicalMultiCameraOffset   + LogicalMultiCameraEnd   - MetadataSectionLogicalMultiCameraStart),
    HEICOffset                  = (DistortionCorrectionOffset + DistortionCorrectionEnd - MetadataSectionDistortionCorrectionStart),
    HEICInfoOffset              = (HEICOffset                 + HEICEnd                 - MetadataSectionHEICStart),
    VendorSectionOffset         = (HEICInfoOffset             + HEICInfoEnd             - MetadataSectionHEICInfoStart),
};

/// @brief LUT for each section, allowing for a linear, contiguous id to be generated from tag. See CAMX_TAG_TO_INDEX
static const UINT32 SectionLinearTagLUT[] =
{
    ColorCorrectionOffset,
    ControlOffset,
    DemosaicOffset,
    EdgeOffset,
    FlashOffset,
    FlashInfoOffset,
    HotPixelOffset,
    JPEGOffset,
    LensOffset,
    LensInfoOffset,
    NoiseReductionOffset,
    QuirksOffset,
    RequestOffset,
    ScalerOffset,
    SensorOffset,
    SensorInfoOffset,
    ShadingOffset,
    StatisticsOffset,
    StatisticsInfoOffset,
    TonemapOffset,
    LedOffset,
    InfoOffset,
    BlackLevelOffset,
    SyncOffset,
    ReprocessOffset,
    DepthOffset,
    LogicalMultiCameraOffset,
    DistortionCorrectionOffset,
    HEICOffset,
    HEICInfoOffset,
    VendorSectionOffset,
};

/// @brief Maximum number of google fixed camera metadata tags
static const UINT MaxMetadataTagCount = VendorSectionOffset;

/// @brief ColorCorrectionMode
enum ColorCorrectionModeValues
{
    ColorCorrectionModeTransformMatrix,
    ColorCorrectionModeFast,
    ColorCorrectionModeHighQuality,
    ColorCorrectionModeEnd
};

/// @brief ColorCorrectionAberrationMode
enum ColorCorrectionAberrationModeValues
{
    ColorCorrectionAberrationModeOff,
    ColorCorrectionAberrationModeFast,
    ColorCorrectionAberrationModeHighQuality,
    ColorCorrectionAberrationModeEnd
};

/// @brief ControlAEAntibandingMode
enum ControlAEAntibandingModeValues
{
    ControlAEAntibandingModeOff,
    ControlAEAntibandingMode50Hz,
    ControlAEAntibandingMode60Hz,
    ControlAEAntibandingModeAuto,
    ControlAEAntibandingAuto_50HZ,
    ControlAEAntibandingAuto_60HZ,
    ControlAEAntibandingModeEnd
};

/// @brief ControlAELock
enum ControlAELockValues
{
    ControlAELockOff,
    ControlAELockOn,
    ControlAELockEnd
};

/// @brief ControlAEMode
enum ControlAEModeValues
{
    ControlAEModeOff,
    ControlAEModeOn,
    ControlAEModeOnAutoFlash,
    ControlAEModeOnAlwaysFlash,
    ControlAEModeOnAutoFlashRedeye,
    ControlAEModeOnExternalFlash,
    ControlAEModeEnd
};

/// @brief ControlAEPrecaptureTrigger
enum ControlAEPrecaptureTriggerValues
{
    ControlAEPrecaptureTriggerIdle,
    ControlAEPrecaptureTriggerStart,
    ControlAEPrecaptureTriggerCancel,
    ControlAEPrecaptureTriggerEnd
};

/// @brief ControlAFMode
enum ControlAFModeValues
{
    ControlAFModeOff,
    ControlAFModeAuto,
    ControlAFModeMacro,
    ControlAFModeContinuousVideo,
    ControlAFModeContinuousPicture,
    ControlAFModeEdof,
    ControlAFModeEnd
};

/// @brief ControlAFTrigger
enum ControlAFTriggerValues
{
    ControlAFTriggerIdle,
    ControlAFTriggerStart,
    ControlAFTriggerCancel,
    ControlAFTriggerEnd
};

/// @brief ControlAWBLock
enum ControlAWBLockValues
{
    ControlAWBLockOff,
    ControlAWBLockOn,
    ControlAWBLockEnd
};

/// @brief ControlAWBMode
enum ControlAWBModeValues
{
    ControlAWBModeOff,
    ControlAWBModeAuto,
    ControlAWBModeIncandescent,
    ControlAWBModeFluorescent,
    ControlAWBModeWarmFluorescent,
    ControlAWBModeDaylight,
    ControlAWBModeCloudyDaylight,
    ControlAWBModeTwilight,
    ControlAWBModeShade,
    ControlAWBModeEnd
};

/// @brief ControlCaptureIntent
enum ControlCaptureIntentValues
{
    ControlCaptureIntentCustom,
    ControlCaptureIntentPreview,
    ControlCaptureIntentStillCapture,
    ControlCaptureIntentVideoRecord,
    ControlCaptureIntentVideoSnapshot,
    ControlCaptureIntentZeroShutterLag,
    ControlCaptureIntentManual,
    ControlCaptureIntentMotionTracking,
    ControlCaptureIntentEnd
};

/// @brief ControlEffectMode
enum ControlEffectModeValues
{
    ControlEffectModeOff,
    ControlEffectModeMono,
    ControlEffectModeNegative,
    ControlEffectModeSolarize,
    ControlEffectModeSepia,
    ControlEffectModePosterize,
    ControlEffectModeWhiteboard,
    ControlEffectModeBlackboard,
    ControlEffectModeAqua,
    ControlEffectModeEnd
};

/// @brief ControlMode
enum ControlModeValues
{
    ControlModeOff,
    ControlModeAuto,
    ControlModeUseSceneMode,
    ControlModeOffKeepState,
    ControlModeEnd
};

/// @brief ControlSceneMode
enum ControlSceneModeValues
{
    ControlSceneModeDisabled                        = 0,
    ControlSceneModeFacePriority,
    ControlSceneModeAction,
    ControlSceneModePortrait,
    ControlSceneModeLandscape,
    ControlSceneModeNight,
    ControlSceneModeNightPortrait,
    ControlSceneModeTheatre,
    ControlSceneModeBeach,
    ControlSceneModeSnow,
    ControlSceneModeSunset,
    ControlSceneModeSteadyphoto,
    ControlSceneModeFireworks,
    ControlSceneModeSports,
    ControlSceneModeParty,
    ControlSceneModeCandlelight,
    ControlSceneModeBarcode,
    ControlSceneModeHighSpeedVideo,
    ControlSceneModeHdr,
    ControlSceneModeFacePriorityLowLight,
    ControlSceneModeEnd
};

/// @brief ControlVideoStabilizationMode
enum ControlVideoStabilizationModeValues
{
    ControlVideoStabilizationModeOff,
    ControlVideoStabilizationModeOn,
    ControlVideoStabilizationModePreviewStabilization,
    ControlVideoStabilizationModeEnd
};

/// @brief ControlAEState
enum ControlAEStateValues
{
    ControlAEStateInactive,
    ControlAEStateSearching,
    ControlAEStateConverged,
    ControlAEStateLocked,
    ControlAEStateFlashRequired,
    ControlAEStatePrecapture,
    ControlAEStateEnd
};

/// @brief ControlAFState
enum ControlAFStateValues
{
    ControlAFStateInactive,
    ControlAFStatePassiveScan,
    ControlAFStatePassiveFocused,
    ControlAFStateActiveScan,
    ControlAFStateFocusedLocked,
    ControlAFStateNotFocusedLocked,
    ControlAFStatePassiveUnfocused,
    ControlAFStateEnd
};

/// @brief ControlAWBState
enum ControlAWBStateValues
{
    ControlAWBStateInactive,
    ControlAWBStateSearching,
    ControlAWBStateConverged,
    ControlAWBStateLocked,
    ControlAWBStateEnd
};

/// @brief ControlAELockAvailable
enum ControlAELockAvailableValues
{
    ControlAELockAvailableFalse,
    ControlAELockAvailableTrue,
    ControlAELockAvailableEnd
};

/// @brief ControlAWBLockAvailable
enum ControlAWBLockAvailableValues
{
    ControlAWBLockAvailableFalse,
    ControlAWBLockAvailableTrue,
    ControlAWBLockAvailableEnd
};

/// @brief ControlAfSceneChangeValues
enum ControlAFSceneChangeValues
{
    ControlAFSceneChangeNotDetected,
    ControlAFSceneChangeDetected,
    ControlAFSceneChangeEnd
};

/// @brief ControlExtendedSceneMode
enum ControlExtendedSceneMode
{
    ControlExtendedSceneModeOff,
    ControlExtendedSceneModeBokehStillCapture,
    ControlExtendedSceneModeBokehContinuous,
    ControlExtendedSceneModeEnd
};

/// @brief ControlSettingsOverrideValue
enum ControlSettingsOverrideValue
{
    ControlSettingsOverrideOff,
    ControlSettingsOverrideZoom,
    NumberOfControlSettingsOverride
};

/// @brief DemosaicMode
enum DemosaicModeValues
{
    DemosaicModeFast,
    DemosaicModeHighQuality,
    DemosaicModeEnd
};

/// @brief EdgeMode
enum EdgeModeValues
{
    EdgeModeOff,
    EdgeModeFast,
    EdgeModeHighQuality,
    EdgeModeZeroShutterLag,
    EdgeModeEnd
};

/// @brief FlashMode
enum FlashModeValues
{
    FlashModeOff,
    FlashModeSingle,
    FlashModeTorch,
    FlashModeEnd
};

/// @brief FlashState
enum FlashStateValues
{
    FlashStateUnavailable,
    FlashStateCharging,
    FlashStateReady,
    FlashStateFired,
    FlashStatePartial,
    FlashStateEnd
};

/// @brief FlashInfoAvailable
enum FlashInfoAvailableValues
{
    FlashInfoAvailableFalse,
    FlashInfoAvailableTrue,
    FlashInfoAvailableEnd
};

/// @brief HotPixelMode
enum HotPixelModeValues
{
    HotPixelModeOff,
    HotPixelModeFast,
    HotPixelModeHighQuality,
    HotPixelModeEnd
};

/// @brief LensOpticalStabilizationMode
enum LensOpticalStabilizationModeValues
{
    LensOpticalStabilizationModeOff,
    LensOpticalStabilizationModeOn,
    LensOpticalStabilizationModeEnd
};

/// @brief LensFacing
enum LensFacingValues
{
    LensFacingFront,
    LensFacingBack,
    LensFacingExternal,
    LensFacingInvalid
};

/// @brief LensState
enum LensStateValues
{
    LensStateStationary,
    LensStateMoving,
    LensStateEnd
};

/// @brief LensPoseReference
enum LensPoseReferenceValues
{
    LensPoseReferencePrimaryCamera,
    LensPoseReferenceGyroscope,
    LensPoseReferenceUndefined,
    LensPoseReferenceEnd
};

/// @brief LensInfoFocusDistanceCalibration
enum LensInfoFocusDistanceCalibrationValues
{
    LensInfoFocusDistanceCalibrationUncalibrated,
    LensInfoFocusDistanceCalibrationApproximate,
    LensInfoFocusDistanceCalibrationCalibrated,
    LensInfoFocusDistanceCalibrationEnd
};

/// @brief NoiseReductionMode
enum NoiseReductionModeValues
{
    NoiseReductionModeOff,
    NoiseReductionModeFast,
    NoiseReductionModeHighQuality,
    NoiseReductionModeMinimal,
    NoiseReductionModeZeroShutterLag,
    NoiseReductionModeEnd
};

/// @brief QuirksPartialResult
enum QuirksPartialResultValues
{
    QuirksPartialResultFinal,
    QuirksPartialResultPartial,
    QuirksPartialResultEnd
};

/// @brief RequestMetadataMode
enum RequestMetadataModeValues
{
    RequestMetadataModeNone,
    RequestMetadataModeFull,
    RequestMetadataModeEnd
};

/// @brief RequestType
enum RequestTypeValues
{
    RequestTypeCapture,
    RequestTypeReprocess,
    RequestTypeEnd
};

/// @brief RequestAvailableCapabilities
enum RequestAvailableCapabilitiesValues
{
    RequestAvailableCapabilitiesBackwardCompatible,
    RequestAvailableCapabilitiesManualSensor,
    RequestAvailableCapabilitiesManualPostProcessing,
    RequestAvailableCapabilitiesRaw,
    RequestAvailableCapabilitiesPrivateReprocessing,
    RequestAvailableCapabilitiesReadSensorSettings,
    RequestAvailableCapabilitiesBurstCapture,
    RequestAvailableCapabilitiesYuvReprocessing,
    RequestAvailableCapabilitiesDepthOutput,
    RequestAvailableCapabilitiesConstrainedHighSpeedVideo,
    RequestAvailableCapabilitiesMotionTracking,
    RequestAvailableCapabilitiesLogicalMultiCamera,
    RequestAvailableCapabilitiesMonochrome,
    RequestAvailableCapabilitiesSecureImageData,
    RequestAvailableCapabilitiesSystemCamera,
    RequestAvailableOfflineProcessing,
    RequestAvailableCapabilitiesUltraHighResolutionSensor,
    RequestAvailableCapabilitiesRemosaicReprocessing,
    RequestAvailableCapabilitiesDynamicRangeTenBit,
    RequestAvailableCapabilitiesStreamUseCase,
    RequestAvailableCapabilitiesColorSpaceProfiles,
    RequestAvailableCapabilitiesEnd
};

/// @brief DynamicRangeProfileMap
enum DynamicRangeProfileMapValues
{
    DynamicRangeProfileMapStandard               = 0x1,
    DynamicRangeProfileMapHLG10                  = 0x2,
    DynamicRangeProfileMapHDR10                  = 0x4,
    DynamicRangeProfileMapHDR10Plus              = 0x8,
    DynamicRangeProfileMapDolbyVision10bHdrRef   = 0x10,
    DynamicRangeProfileMapDolbyVision10bHdrRefPO = 0x20,
    DynamicRangeProfileMapDolbyVision10bHdrOem   = 0x40,
    DynamicRangeProfileMapDolbyVision10bHdrOemPO = 0x80,
    DynamicRangeProfileMapDolbyVision8bHdrRef    = 0x100,
    DynamicRangeProfileMapDolbyVision8bHdrRefPO  = 0x200,
    DynamicRangeProfileMapDolbyVision8bHdrOem    = 0x400,
    DynamicRangeProfileMapDolbyVision8bHdrOemPO  = 0x800,
    DynamicRangeProfileMapMAX                    = 0x1000,
};

/// @brief ColorSpaceProfileMap
enum ColorSpaceProfileMapValues
{
    ColorSpaceProfileMapUnspecified        = -1,
    ColorSpaceProfileMapSRGB               =  0,
    ColorSpaceProfileMapLinearSRGB         =  1,
    ColorSpaceProfileMapExtendedSRGB       =  2,
    ColorSpaceProfileMapLinearExtendedSRGB =  3,
    ColorSpaceProfileMapBT709              =  4,
    ColorSpaceProfileMapBT2020             =  5,
    ColorSpaceProfileMapDCIP3              =  6,
    ColorSpaceProfileMapDisplayP3          =  7,
    ColorSpaceProfileMapNTSC1953           =  8,
    ColorSpaceProfileMapSMPTEC             =  9,
    ColorSpaceProfileMapAdobeRGB           =  10,
    ColorSpaceProfileMapProPhotoRGB        =  11,
    ColorSpaceProfileMapACES               =  12,
    ColorSpaceProfileMapACESCG             =  13,
    ColorSpaceProfileMapCIEXYZ             =  14,
    ColorSpaceProfileMapCIELAB             =  15,
    ColorSpaceProfileMapBT2020HLG          =  16,
    ColorSpaceProfileMapMAX,
};

/// @brief ScalerAvailableFormats. This enum redefines the unnamed enum defined in system/graphics.h. Additional
///        information can be found there.
enum ScalerAvailableFormatsValues
{
    ScalerAvailableFormatsRaw16                     = 0x20,
    ScalerAvailableFormatsRawOpaque                 = 0x24,
    ScalerAvailableFormatsYV12                      = 0x32315659,
    ScalerAvailableFormatsYCrCb420Sp                = 0x11,
    ScalerAvailableFormatsImplementationDefined     = 0x22,
    ScalerAvailableFormatsYCbCr420888               = 0x23,
    ScalerAvailableFormatsBlob                      = 0x21,
    ScalerAvailableFormatsRaw10                     = 0x25,
    ScalerAvailableFormatsRaw12                     = 0x26,
    ScalerAvailableFormatsYCbCr420P010              = 0x36,
    ScalerAvailableFormatsY8                        = 0x20203859,
    ScalerAvailableFormatsRGB888                    = 0x3
    // Modify below MaxScalerFormats value is new format is added or deleted.
};

/// @brief PublicFormatValues. This enum redefines the PublicFormat enum defined in PublicFormat.h. Additional
///        information can be found there.
enum PublicFormatValues
{
    PublicFormatUnknown         = 0x0,
    PublicFormatRGBA8888        = 0x1,
    PublicFormatRGBX8888        = 0x2,
    PublicFormatRGB888          = 0x3,
    PublicFormatRGB565          = 0x4,
    PublicFormatNV16            = 0x10,
    PublicFormatNV21            = 0x11,
    PublicFormatYUY2            = 0x14,
    PublicFormatRGBAFP16        = 0x16,
    PublicFormatRawSensor       = 0x20,
    PublicFormatPrivate         = 0x22,
    PublicFormatYUV_420_888     = 0x23,
    PublicFormatRawPrivate      = 0x24,
    PublicFormatRaw10           = 0x25,
    PublicFormatRaw12           = 0x26,
    PublicFormatRGBA1010102     = 0x2b,
    PublicFormatJPEG            = 0x100,
    PublicFormatDepthPointCloud = 0x101,
    PublicFormatRawDepth        = 0x1002,
    PublicFormatRawDepth10      = 0x1003,
    PublicFormatYV12            = 0x32315659,
    PublicFormatY8              = 0x20203859,
    PublicFormatY16             = 0x20363159,
    PublicFormatYCbCrP010       = 0x36,
    PublicFormatDepth16         = 0x44363159,
    PublicFormatDepthJPEG       = 0x69656963,
    PublicFormatHEIC            = 0x48454946
};

/// @brief Maximum number of available scaler formats
static const UINT MaxScalerFormats = 12;

/// @brief Maximum number of available scaler formats
static const UINT MaxOpaqueRawSizes = 10;

static const UINT MaxStreamUsecases = 9;

/// @brief Maximum number of available dynamic range profiles
static const UINT MaxDRProfiles = 4;

/// @brief Number of entries per Dynamic range profile
static const UINT NumEntriesProfile = 3;

/// @brief Maximum number of available public formats that can be supported by a single color space. To be updated if any more
///        public formats are able to be supported by a color space.
static const UINT MaxPublicFormatsForColorSpace = 5;

/// @brief Maximum number of available color space profiles
static const UINT MaxCSProfiles = static_cast<UINT>(ColorSpaceProfileMapValues::ColorSpaceProfileMapMAX) *
                                    MaxPublicFormatsForColorSpace;

/// @brief Number of entries per color space profile
static const UINT NumEntriesCSProfile = 3;

/// @brief ScalerAvailableStreamConfigurations
enum ScalerAvailableStreamConfigurationsValues
{
    ScalerAvailableStreamConfigurationsOutput,
    ScalerAvailableStreamConfigurationsInput,
    ScalerAvailableStreamConfigurationsEnd
};

/// @brief ScalerCroppingType
enum ScalerCroppingTypeValues
{
    ScalerCroppingTypeCenterOnly,
    ScalerCroppingTypeFreeform,
    ScalerCroppingTypeEnd
};

/// @brief ScalerAvailableRecommendedStreamConfigurations
enum ScalerAvailableRecommendedStreamConfigurations
{
    ScalerAvailableRecommendedStreamConfigurationsPreview            = 0x0,
    ScalerAvailableRecommendedStreamConfigurationsRecord             = 0x1,
    ScalerAvailableRecommendedStreamConfigurationsVideoSnapshot      = 0x2,
    ScalerAvailableRecommendedStreamConfigurationsSnapshot           = 0x3,
    ScalerAvailableRecommendedStreamConfigurationsZSL                = 0x4,
    ScalerAvailableRecommendedStreamConfigurationsRAW                = 0x5,
    ScalerAvailableRecommendedStreamConfigurationsLowLatencySnapshot = 0x6,
    ScalerAvailableRecommendedStreamConfigurationsPublicEnd          = 0x7,
    ScalerAvailableRecommendedStreamConfiguration10BitOutput         = 0x8,
    ScalerAvailableRecommendedStreamConfigurationsVendorStart        = 0x18
    // Modify below MaxScalerAvailableRecommendStreamConfigurations
    // value if new format is added or deleted.
};

/// @brief Maximum number of available scaler recommended stream configs
static const UINT MaxScalerRecommendedStreamConfigs = 9;

/// @brief ScalerRotateAndCropModesValues
enum ScalerRotateAndCropModesValues
{
    ScalerRotateAndCropNone = 0,
    ScalerRotateAndCrop90,
    ScalerRotateAndCrop180,
    ScalerRotateAndCrop270,
    ScalerRotateAndCropAuto
};

/// @brief ScalerPhysicalCameraMultiResolutionStreamConfigurations
enum ScalerPhysicalCameraMultiResolutionStreamConfigurationsValues
{
    ScalerPhysicalCameraMultiResolutionStreamConfigurationsOutput = 0,
    ScalerPhysicalCameraMultiResolutionStreamConfigurationsInput,
    ScalerPhysicalCameraMultiResolutionStreamConfigurationsEnd
};

/// @brief ScalerAvailableStreamConfigurationsMaximumResolution
enum ScalerAvailableStreamConfigurationsMaximumResolutionValues
{
    ScalerAvailableStreamConfigurationsMaximumResolutionOutput = 0,
    ScalerAvailableStreamConfigurationsMaximumResolutionInput,
    ScalerAvailableStreamConfigurationsMaximumResolutionEnd
};

/// @brief ScalerMultiResolutionStreamSupported
enum ScalerMultiResolutionStreamSupportedValues
{
    ScalerMultiResolutionStreamSupportedValuesFalse = 0,
    ScalerMultiResolutionStreamSupportedValuesTrue
};

/// @brief ScalerAvailableStreamUseCases
enum ScalerAvailableStreamUseCaseValues
{
    ScalerAvailableStreamUseCasesDefault            = 0x0,
    ScalerAvailableStreamUseCasesPreview            = 0x1,
    ScalerAvailableStreamUseCasesStillCapture       = 0x2,
    ScalerAvailableStreamUseCasesVideoRecord        = 0x3,
    ScalerAvailableStreamUseCasesPreviewVideoStill  = 0x4,
    ScalerAvailableStreamUseCasesVideoCall          = 0x5,
    ScalerAvailableStreamUseCasesCroppedRaw         = 0x6,
    ScalerAvailableStreamUseCasesVendorStart        = 0x10000,
    ScalerAvailableStreamUseCasesFullFOV            = 0x10001
    // Modify MaxStreamUsecases value if new use case is added or deleted.
};

/// @brief SensorReferenceIlluminant1, SensorReferenceIlluminant2
enum SensorReferenceIlluminantValues
{
    SensorReferenceIlluminant1Daylight              = 1,
    SensorReferenceIlluminant1Fluorescent           = 2,
    SensorReferenceIlluminant1Tungsten              = 3,
    SensorReferenceIlluminant1Flash                 = 4,
    SensorReferenceIlluminant1FineWeather           = 9,
    SensorReferenceIlluminant1CloudyWeather         = 10,
    SensorReferenceIlluminant1Shade                 = 11,
    SensorReferenceIlluminant1DaylightFluorescent   = 12,
    SensorReferenceIlluminant1DayWhiteFluorescent   = 13,
    SensorReferenceIlluminant1CoolWhiteFluorescent  = 14,
    SensorReferenceIlluminant1WhiteFluorescent      = 15,
    SensorReferenceIlluminant1StandardA             = 17,
    SensorReferenceIlluminant1StandardB             = 18,
    SensorReferenceIlluminant1StandardC             = 19,
    SensorReferenceIlluminant1D55                   = 20,
    SensorReferenceIlluminant1D65                   = 21,
    SensorReferenceIlluminant1D75                   = 22,
    SensorReferenceIlluminant1D50                   = 23,
    SensorReferenceIlluminant1IsoStudioTungsten     = 24,
};

// Number of SensorReferenceIlluminant1 values
static const UINT SensorReferenceIlluminant1ValueCount = 19;

/// @brief SensorTestPatternMode
enum SensorTestPatternModeValues
{
    SensorTestPatternModeOff,
    SensorTestPatternModeSolidColor,
    SensorTestPatternModeColorBars,
    SensorTestPatternModeColorBarsFadeToGray,
    SensorTestPatternModePn9,
    SensorTestPatternModeBlack,
    SensorTestPatternModeCustom1                    = 256,
};

/// @brief SensorRawBinningFactorUsedValues
enum SensorRawBinningFactorUsedValues
{
    SensorRawBinningFactorUsedTrue,
    SensorRawBinningFactorUsedFalse,
};

// Number of defined SensorTestPatternMode values.
// Allowed values in the system may be greater as custom patterns are allowed.
static const UINT SensorTestPatternModeValuesCount = 6;

/// @brief SensorInfoColorFilterArrangement
enum SensorInfoColorFilterArrangementValues
{
    SensorInfoColorFilterArrangementRggb,
    SensorInfoColorFilterArrangementGrbg,
    SensorInfoColorFilterArrangementGbrg,
    SensorInfoColorFilterArrangementBggr,
    SensorInfoColorFilterArrangementRgb,
    SensorInfoColorFilterArrangementY,
    SensorInfoColorFilterArrangementMono,
    SensorInfoColorFilterArrangementNIR,
    SensorInfoColorFilterArrangementEnd
};

/// @brief SensorInfoTimestampSource
enum SensorInfoTimestampSourceValues
{
    SensorInfoTimestampSourceUnknown,
    SensorInfoTimestampSourceRealtime,
    SensorInfoTimestampSourceEnd
};

/// @brief SensorInfoLensShadingApplied
enum SensorInfoLensShadingAppliedValues
{
    SensorInfoLensShadingAppliedFalse,
    SensorInfoLensShadingAppliedTrue,
    SensorInfoLensShadingAppliedEnd
};

/// @brief ShadingMode
enum ShadingModeValues
{
    ShadingModeOff,
    ShadingModeFast,
    ShadingModeHighQuality,
    ShadingModeEnd
};

/// @brief StatisticsFaceDetectMode
enum StatisticsFaceDetectModeValues
{
    StatisticsFaceDetectModeOff,
    StatisticsFaceDetectModeSimple,
    StatisticsFaceDetectModeFull,
    StatisticsFaceDetectModeEnd
};

/// @brief StatisticsHistogramMode
enum StatisticsHistogramModeValues
{
    StatisticsHistogramModeOff,
    StatisticsHistogramModeOn,
    StatisticsHistogramModeEnd
};

/// @brief StatisticsSharpnessMapMode
enum StatisticsSharpnessMapModeValues
{
    StatisticsSharpnessMapModeOff,
    StatisticsSharpnessMapModeOn,
    StatisticsSharpnessMapModeEnd
};

/// @brief StatisticsHotPixelMapMode
enum StatisticsHotPixelMapModeValues
{
    StatisticsHotPixelMapModeOff,
    StatisticsHotPixelMapModeOn,
    StatisticsHotPixelMapModeEnd
};

/// @brief StatisticsSceneFlicker
enum StatisticsSceneFlickerValues
{
    StatisticsSceneFlickerNone,
    StatisticsSceneFlicker50Hz,
    StatisticsSceneFlicker60Hz,
    StatisticsSceneFlickerEnd
};

/// @brief StatisticsLensShadingMapMode
enum StatisticsLensShadingMapModeValues
{
    StatisticsLensShadingMapModeOff,
    StatisticsLensShadingMapModeOn,
    StatisticsLensShadingMapModeEnd
};

/// @brief StatisticsOISDataMode
enum StatisticsOISDataModeValues
{
    StatisticsOISDataModeOff,
    StatisticsOISDataModeOn,
    StatisticsOISDataModeEnd
};

/// @brief TonemapMode
enum TonemapModeValues
{
    TonemapModeContrastCurve,
    TonemapModeFast,
    TonemapModeHighQuality,
    TonemapModeGammaValue,
    TonemapModePresetCurve,
    TonemapModeEnd
};

/// @brief TonemapPresetCurve
enum TonemapPresetCurveValues
{
    TonemapPresetCurveSrgb,
    TonemapPresetCurveRec709,
    TonemapPresetCurveEnd
};

/// @brief LedTransmit
enum LedTransmitValues
{
    LedTransmitOff,
    LedTransmitOn,
    LedTransmitEnd
};

/// @brief LedAvailableLeds
enum LedAvailableLedsValues
{
    LedAvailableLedsTransmit,
    LedAvailableLedsEnd
};

/// @brief InfoSupportedHardwareLevel
enum InfoSupportedHardwareLevelValues
{
    InfoSupportedHardwareLevelLimited,
    InfoSupportedHardwareLevelFull,
    InfoSupportedHardwareLevelLegacy,
    InfoSupportedHardwareLevel3,
    InfoSupportedHardwareLevelExternal,
    InfoSupportedHardwareLevelEnd
};

/// @brief InfoSupportedBufferManagementVersion
enum InfoSupportedBufferManagementVersion
{
    HIDL_Device_3_5,
};

/// @brief BlackLevelLock
enum BlackLevelLockValues
{
    BlackLevelLockOff,
    BlackLevelLockOn,
    BlackLevelLockEnd
};

/// @brief SyncFrameNumber
enum SyncFrameNumberValues
{
    SyncFrameNumberConverging                       = -1,
    SyncFrameNumberUnknown                          = -2,
};

// Number of SyncFrameNumber values.
static const UINT SyncFrameNumberValuesCount = 2;

/// @brief SyncMaxLatency
enum SyncMaxLatencyValues
{
    SyncMaxLatencyPerFrameControl                   = 0,
    SyncMaxLatencyUnknown                           = -1,
};

// Number of SyncMaxLatency values.
static const UINT SyncMaxLatencyValuesCount = 2;

/// @brief DepthAvailableFormats.
enum DepthAvailableFormatsValues
{
    DepthAvailableFormatsRawDepth              = 0x20,
    DepthAvailableFormatsY16                   = 0x20363159,
    DepthAvailableFormatsBlob                  = 0x21,
};

// Maximum number of available depth formats
static const UINT MaxDepthFormats = 4;

/// @brief DepthAvailableDepthStreamConfigurations
enum DepthAvailableDepthStreamConfigurationsValues
{
    DepthAvailableDepthStreamConfigurationsOutput,
    DepthAvailableDepthStreamConfigurationsInput,
    DepthAvailableDepthStreamConfigurationsEnd
};

/// @brief DepthDepthIsExclusive
enum DepthDepthIsExclusiveValues
{
    DepthDepthIsExclusiveFalse,
    DepthDepthIsExclusiveTrue,
    DepthDepthIsExclusiveEnd
};

/// @brief DepthAvailableDynamicDepthStreamConfigurations
enum DepthAvailableDynamicDepthStreamConfigurationValues
{
    DepthAvailableDynamicDepthStreamConfigurationsOutput,
    DepthAvailableDynamicDepthStreamConfigurationsInput,
    DepthAvailableDynamicDepthStreamConfigurationsEnd
};

/// @brief DepthAvailableDepthStreamConfigurationsMaximumResolutionValues
enum DepthAvailableDepthStreamConfigurationMaximumResolutionValues
{
    DepthAvailableDepthStreamConfigurationsMaximumResolutionOutput,
    DepthAvailableDepthStreamConfigurationsMaximumResolutionInput,
    DepthAvailableDepthStreamConfigurationsMaximumResolutionEnd
};

/// @brief DepthAvailableDynamicDepthStreamConfigurationsMaximumResolutionValues
enum DepthAvailableDynamicDepthStreamConfigurationMaximumResolutionValues
{
    DepthAvailableDynamicDepthStreamConfigurationsMaximumResolutionOutput,
    DepthAvailableDynamicDepthStreamConfigurationsMaximumResolutionInput,
    DepthAvailableDynamicDepthStreamConfigurationsMaximumResolutionEnd
};

/// @brief LogicalMultiCameraSensorSyncType
enum LogicalMultiCameraSensorSyncTypeValues
{
    LogicalMultiCameraSensorSyncTypeApproximate,
    LogicalMultiCameraSensorSyncTypeCalibrated,
    LogicalMultiCameraSensorSyncTypeEnd
};

/// @brief DistortionCorrectionModes
enum DistortionCorrectionModeValues
{
    DistortionCorrectionModesOff    = 0,
    DistortionCorrectionModesFast,
    DistortionCorrectionModesHighQuality,
    DistortionCorrectionModesEnd
};

/// @brief HEICAvailableHEICStreamConfigurations
enum HEICAvailableHEICStreamConfigurationValues
{
    HEICAvailableHEICStreamConfigurationsOutput,
    HEICAvailableHEICStreamConfigurationsInput,
    HEICAvailableHEICStreamConfigurationsEnd
};

/// @brief HEICAvailableHEICStreamConfigurationsMaximumResolution
enum HEICAvailableHEICStreamConfigurationMaximumResolutionValues
{
    HEICAvailableHEICStreamConfigurationsMaximumResolutionOutput,
    HEICAvailableHEICStreamConfigurationsMaximumResolutionInput,
    HEICAvailableHEICStreamConfigurationsMaximumResolutionEnd
};

/// @brief HEICInfoSupported
enum HEICInfoSupportedValues
{
    HEICInfoSupportedFalse,
    HEICInfoSupportedTrue,
    HEICInfoSupportedEnd
};

/// @brief ExposureMeteringAvailMode
enum ExposureMeteringAvailableModes
{
    ExposureMeteringFrameAverage,
    ExposureMeteringCenterWeighted,
    ExposureMeteringSpotMetering,
    ExposureMeteringSmartMetering,
    ExposureMeteringUserMetering,
    ExposureMeteringSpotMeteringAdv,
    ExposureMeteringCenterWeightedAdv,
    ExposureMeteringCustom,
    ExposureMeteringEnd
};

/// @brief InstantAecAvailableModes
enum InstantAecAvailableModes
{
    InstantAecNormalConvergence,
    InstantAecAggressiveConvergence,
    InstantAecFastConvergence,
    InstantAecEnd
};

/// @brief InstantVideoHDRModes
enum VideoHDRAvailableModes
{
    VideoHdrOff,
    VideoHdrOn,
    VideoHdrEnd
};

/// @brief ICATransformType
enum IPEICATransformType
{
    DefaultTransform    = 0,
    InputTransform      = 1,
    ReferenceTransform  = 2
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// CameraMetadataTagToString
///
/// @brief  Returns a pointer to a const string which is a human readible representation of the metadata tag
///
/// @param  tag         Tag to stringize
/// @param  ppTagPrefix Pointer to a prefix string for the tag name
/// @param  ppTagName   Pointer to the string for the tag name
///
/// @return CamxResult status
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CamxResult CameraMetadataTagToString(
    CameraMetadataTag   tag,
    const CHAR**        ppTagPrefix,
    const CHAR**        ppTagName);

CAMX_NAMESPACE_END

#endif // CAMXHAL3METADATATAGS_H
