Camera: Generate camera_metadata_tags and HTML docs from XML
Change-Id: Ib7e9bf4855adff91a317c910aaec960f1422302a
diff --git a/camera/docs/docs.html b/camera/docs/docs.html
new file mode 100644
index 0000000..bcf28c8
--- /dev/null
+++ b/camera/docs/docs.html
@@ -0,0 +1,9727 @@
+<!DOCTYPE html>
+<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.
+-->
+<head>
+ <!-- automatically generated from html.mako. do NOT edit directly -->
+ <meta charset="utf-8" />
+ <title>Android Camera HAL2.0 Properties</title>
+ <style type="text/css">
+ .section { font-size: 1.5em; font-weight: bold; background-color: beige; padding: 0.5em 0em 0.5em 0.1em }
+ .kind { font-size: 1.2em; font-weight: bold; padding-left: 0.5em; background-color: gray }
+ .entry { background-color: burlywood }
+
+ /* table column sizes */
+ table { table-layout: fixed; width: 100%; word-wrap: break-word }
+ td,th { border: 1px solid; }
+ .th_name { width: 20% }
+ .th_units { width: 10% }
+ .th_tags { width: 5% }
+ .th_notes { width: 30% }
+ .th_type { width: 20% }
+ td { font-size: 0.9em; }
+
+ /* hide the first thead, we need it there only to enforce column sizes */
+ .thead_dummy { visibility: hidden; }
+
+ /* Entry flair */
+ .entry_name { font-family: monospace; font-style: italic; }
+
+ /* Entry type flair */
+ .entry_type_name { color: darkgreen; font-weight: bold; }
+ .entry_type_enum_name { font-family: monospace; font-weight: bolder; }
+ .entry_type_enum_notes:before { content:" - " }
+ .entry_type_enum_value:before { content:" = " }
+ .entry_type_enum_value { font-family: monospace; }
+ .entry ul { margin: 0 0 0 0; list-style-position: inside; padding-left: 0.5em; }
+ .entry ul li { padding: 0 0 0 0; margin: 0 0 0 0;}
+
+ /* Entry tags flair */
+ .entry_tags ul { list-style-type: none; }
+
+
+ /* TODO: generate abbr element for each tag link? */
+ /* TODO for each x.y.z try to link it to the entry */
+
+ </style>
+
+ <style>
+
+ {
+ /* broken...
+ supposedly there is a bug in chrome that it lays out tables before
+ it knows its being printed, so the page-break-* styles are ignored
+ */
+ tr { page-break-after: always; page-break-inside: avoid; }
+ }
+
+ </style>
+</head>
+
+
+
+
+<body>
+ <h1>Android Camera HAL2.0 Properties</h1>
+
+ <h2>Table of Contents</h2>
+ <ul class="toc">
+ <li><a href="#tag_index">Tags</a></li>
+
+
+ <li><p class="toc_section"><a href="#section_colorCorrection">colorCorrection</a></p>
+ <ul class="toc_section">
+ <li><a href="#controls_android.colorCorrection.mode">android.colorCorrection.mode</a> (controls)</li>
+ <li><a href="#controls_android.colorCorrection.transform">android.colorCorrection.transform</a> (controls)</li>
+ <li><a href="#dynamic_android.colorCorrection.mode">android.colorCorrection.mode</a> (dynamic)</li>
+ </ul>
+ </li> <!-- toc_section -->
+ <li><p class="toc_section"><a href="#section_control">control</a></p>
+ <ul class="toc_section">
+ <li><a href="#controls_android.control.aeAntibandingMode">android.control.aeAntibandingMode</a> (controls)</li>
+ <li><a href="#controls_android.control.aeExposureCompensation">android.control.aeExposureCompensation</a> (controls)</li>
+ <li><a href="#controls_android.control.aeLock">android.control.aeLock</a> (controls)</li>
+ <li><a href="#controls_android.control.aeMode">android.control.aeMode</a> (controls)</li>
+ <li><a href="#controls_android.control.aeRegions">android.control.aeRegions</a> (controls)</li>
+ <li><a href="#controls_android.control.aeTargetFpsRange">android.control.aeTargetFpsRange</a> (controls)</li>
+ <li><a href="#controls_android.control.afMode">android.control.afMode</a> (controls)</li>
+ <li><a href="#controls_android.control.afRegions">android.control.afRegions</a> (controls)</li>
+ <li><a href="#controls_android.control.awbLock">android.control.awbLock</a> (controls)</li>
+ <li><a href="#controls_android.control.awbMode">android.control.awbMode</a> (controls)</li>
+ <li><a href="#controls_android.control.awbRegions">android.control.awbRegions</a> (controls)</li>
+ <li><a href="#controls_android.control.captureIntent">android.control.captureIntent</a> (controls)</li>
+ <li><a href="#controls_android.control.effectMode">android.control.effectMode</a> (controls)</li>
+ <li><a href="#controls_android.control.mode">android.control.mode</a> (controls)</li>
+ <li><a href="#controls_android.control.sceneMode">android.control.sceneMode</a> (controls)</li>
+ <li><a href="#controls_android.control.videoStabilizationMode">android.control.videoStabilizationMode</a> (controls)</li>
+ <li><a href="#static_android.control.aeAvailableAntibandingModes">android.control.aeAvailableAntibandingModes</a> (static)</li>
+ <li><a href="#static_android.control.aeAvailableModes">android.control.aeAvailableModes</a> (static)</li>
+ <li><a href="#static_android.control.aeAvailableTargetFpsRanges">android.control.aeAvailableTargetFpsRanges</a> (static)</li>
+ <li><a href="#static_android.control.aeCompensationRange">android.control.aeCompensationRange</a> (static)</li>
+ <li><a href="#static_android.control.aeCompensationStep">android.control.aeCompensationStep</a> (static)</li>
+ <li><a href="#static_android.control.afAvailableModes">android.control.afAvailableModes</a> (static)</li>
+ <li><a href="#static_android.control.availableEffects">android.control.availableEffects</a> (static)</li>
+ <li><a href="#static_android.control.availableSceneModes">android.control.availableSceneModes</a> (static)</li>
+ <li><a href="#static_android.control.availableVideoStabilizationModes">android.control.availableVideoStabilizationModes</a> (static)</li>
+ <li><a href="#static_android.control.awbAvailableModes">android.control.awbAvailableModes</a> (static)</li>
+ <li><a href="#static_android.control.maxRegions">android.control.maxRegions</a> (static)</li>
+ <li><a href="#static_android.control.sceneModeOverrides">android.control.sceneModeOverrides</a> (static)</li>
+ <li><a href="#dynamic_android.control.aePrecaptureId">android.control.aePrecaptureId</a> (dynamic)</li>
+ <li><a href="#dynamic_android.control.aeRegions">android.control.aeRegions</a> (dynamic)</li>
+ <li><a href="#dynamic_android.control.aeState">android.control.aeState</a> (dynamic)</li>
+ <li><a href="#dynamic_android.control.afMode">android.control.afMode</a> (dynamic)</li>
+ <li><a href="#dynamic_android.control.afRegions">android.control.afRegions</a> (dynamic)</li>
+ <li><a href="#dynamic_android.control.afState">android.control.afState</a> (dynamic)</li>
+ <li><a href="#dynamic_android.control.afTriggerId">android.control.afTriggerId</a> (dynamic)</li>
+ <li><a href="#dynamic_android.control.awbMode">android.control.awbMode</a> (dynamic)</li>
+ <li><a href="#dynamic_android.control.awbRegions">android.control.awbRegions</a> (dynamic)</li>
+ <li><a href="#dynamic_android.control.awbState">android.control.awbState</a> (dynamic)</li>
+ <li><a href="#dynamic_android.control.mode">android.control.mode</a> (dynamic)</li>
+ </ul>
+ </li> <!-- toc_section -->
+ <li><p class="toc_section"><a href="#section_demosaic">demosaic</a></p>
+ <ul class="toc_section">
+ <li><a href="#controls_android.demosaic.mode">android.demosaic.mode</a> (controls)</li>
+ </ul>
+ </li> <!-- toc_section -->
+ <li><p class="toc_section"><a href="#section_edge">edge</a></p>
+ <ul class="toc_section">
+ <li><a href="#controls_android.edge.mode">android.edge.mode</a> (controls)</li>
+ <li><a href="#controls_android.edge.strength">android.edge.strength</a> (controls)</li>
+ <li><a href="#dynamic_android.edge.mode">android.edge.mode</a> (dynamic)</li>
+ </ul>
+ </li> <!-- toc_section -->
+ <li><p class="toc_section"><a href="#section_flash">flash</a></p>
+ <ul class="toc_section">
+ <li><a href="#controls_android.flash.firingPower">android.flash.firingPower</a> (controls)</li>
+ <li><a href="#controls_android.flash.firingTime">android.flash.firingTime</a> (controls)</li>
+ <li><a href="#controls_android.flash.mode">android.flash.mode</a> (controls)</li>
+ <li><a href="#static_android.flash.info.available">android.flash.info.available</a> (static)</li>
+ <li><a href="#static_android.flash.info.chargeDuration">android.flash.info.chargeDuration</a> (static)</li>
+ <li><a href="#static_android.flash.colorTemperature">android.flash.colorTemperature</a> (static)</li>
+ <li><a href="#static_android.flash.maxEnergy">android.flash.maxEnergy</a> (static)</li>
+ <li><a href="#dynamic_android.flash.firingPower">android.flash.firingPower</a> (dynamic)</li>
+ <li><a href="#dynamic_android.flash.firingTime">android.flash.firingTime</a> (dynamic)</li>
+ <li><a href="#dynamic_android.flash.mode">android.flash.mode</a> (dynamic)</li>
+ <li><a href="#dynamic_android.flash.state">android.flash.state</a> (dynamic)</li>
+ </ul>
+ </li> <!-- toc_section -->
+ <li><p class="toc_section"><a href="#section_geometric">geometric</a></p>
+ <ul class="toc_section">
+ <li><a href="#controls_android.geometric.mode">android.geometric.mode</a> (controls)</li>
+ <li><a href="#controls_android.geometric.strength">android.geometric.strength</a> (controls)</li>
+ </ul>
+ </li> <!-- toc_section -->
+ <li><p class="toc_section"><a href="#section_hotPixel">hotPixel</a></p>
+ <ul class="toc_section">
+ <li><a href="#controls_android.hotPixel.mode">android.hotPixel.mode</a> (controls)</li>
+ <li><a href="#static_android.hotPixel.info.map">android.hotPixel.info.map</a> (static)</li>
+ <li><a href="#dynamic_android.hotPixel.mode">android.hotPixel.mode</a> (dynamic)</li>
+ </ul>
+ </li> <!-- toc_section -->
+ <li><p class="toc_section"><a href="#section_jpeg">jpeg</a></p>
+ <ul class="toc_section">
+ <li><a href="#controls_android.jpeg.gpsCoordinates">android.jpeg.gpsCoordinates</a> (controls)</li>
+ <li><a href="#controls_android.jpeg.gpsProcessingMethod">android.jpeg.gpsProcessingMethod</a> (controls)</li>
+ <li><a href="#controls_android.jpeg.gpsTimestamp">android.jpeg.gpsTimestamp</a> (controls)</li>
+ <li><a href="#controls_android.jpeg.orientation">android.jpeg.orientation</a> (controls)</li>
+ <li><a href="#controls_android.jpeg.quality">android.jpeg.quality</a> (controls)</li>
+ <li><a href="#controls_android.jpeg.thumbnailQuality">android.jpeg.thumbnailQuality</a> (controls)</li>
+ <li><a href="#controls_android.jpeg.thumbnailSize">android.jpeg.thumbnailSize</a> (controls)</li>
+ <li><a href="#static_android.jpeg.availableThumbnailSizes">android.jpeg.availableThumbnailSizes</a> (static)</li>
+ <li><a href="#static_android.jpeg.maxSize">android.jpeg.maxSize</a> (static)</li>
+ <li><a href="#dynamic_android.jpeg.gpsCoordinates">android.jpeg.gpsCoordinates</a> (dynamic)</li>
+ <li><a href="#dynamic_android.jpeg.gpsProcessingMethod">android.jpeg.gpsProcessingMethod</a> (dynamic)</li>
+ <li><a href="#dynamic_android.jpeg.gpsTimestamp">android.jpeg.gpsTimestamp</a> (dynamic)</li>
+ <li><a href="#dynamic_android.jpeg.orientation">android.jpeg.orientation</a> (dynamic)</li>
+ <li><a href="#dynamic_android.jpeg.quality">android.jpeg.quality</a> (dynamic)</li>
+ <li><a href="#dynamic_android.jpeg.size">android.jpeg.size</a> (dynamic)</li>
+ <li><a href="#dynamic_android.jpeg.thumbnailQuality">android.jpeg.thumbnailQuality</a> (dynamic)</li>
+ <li><a href="#dynamic_android.jpeg.thumbnailSize">android.jpeg.thumbnailSize</a> (dynamic)</li>
+ </ul>
+ </li> <!-- toc_section -->
+ <li><p class="toc_section"><a href="#section_lens">lens</a></p>
+ <ul class="toc_section">
+ <li><a href="#controls_android.lens.aperture">android.lens.aperture</a> (controls)</li>
+ <li><a href="#controls_android.lens.filterDensity">android.lens.filterDensity</a> (controls)</li>
+ <li><a href="#controls_android.lens.focalLength">android.lens.focalLength</a> (controls)</li>
+ <li><a href="#controls_android.lens.focusDistance">android.lens.focusDistance</a> (controls)</li>
+ <li><a href="#controls_android.lens.opticalStabilizationMode">android.lens.opticalStabilizationMode</a> (controls)</li>
+ <li><a href="#static_android.lens.info.availableApertures">android.lens.info.availableApertures</a> (static)</li>
+ <li><a href="#static_android.lens.info.availableFilterDensities">android.lens.info.availableFilterDensities</a> (static)</li>
+ <li><a href="#static_android.lens.info.availableFocalLengths">android.lens.info.availableFocalLengths</a> (static)</li>
+ <li><a href="#static_android.lens.info.availableOpticalStabilization">android.lens.info.availableOpticalStabilization</a> (static)</li>
+ <li><a href="#static_android.lens.info.geometricCorrectionMap">android.lens.info.geometricCorrectionMap</a> (static)</li>
+ <li><a href="#static_android.lens.info.geometricCorrectionMapSize">android.lens.info.geometricCorrectionMapSize</a> (static)</li>
+ <li><a href="#static_android.lens.info.hyperfocalDistance">android.lens.info.hyperfocalDistance</a> (static)</li>
+ <li><a href="#static_android.lens.info.minimumFocusDistance">android.lens.info.minimumFocusDistance</a> (static)</li>
+ <li><a href="#static_android.lens.info.shadingMap">android.lens.info.shadingMap</a> (static)</li>
+ <li><a href="#static_android.lens.info.shadingMapSize">android.lens.info.shadingMapSize</a> (static)</li>
+ <li><a href="#static_android.lens.facing">android.lens.facing</a> (static)</li>
+ <li><a href="#static_android.lens.opticalAxisAngle">android.lens.opticalAxisAngle</a> (static)</li>
+ <li><a href="#static_android.lens.position">android.lens.position</a> (static)</li>
+ <li><a href="#dynamic_android.lens.aperture">android.lens.aperture</a> (dynamic)</li>
+ <li><a href="#dynamic_android.lens.filterDensity">android.lens.filterDensity</a> (dynamic)</li>
+ <li><a href="#dynamic_android.lens.focalLength">android.lens.focalLength</a> (dynamic)</li>
+ <li><a href="#dynamic_android.lens.focusDistance">android.lens.focusDistance</a> (dynamic)</li>
+ <li><a href="#dynamic_android.lens.focusRange">android.lens.focusRange</a> (dynamic)</li>
+ <li><a href="#dynamic_android.lens.opticalStabilizationMode">android.lens.opticalStabilizationMode</a> (dynamic)</li>
+ <li><a href="#dynamic_android.lens.state">android.lens.state</a> (dynamic)</li>
+ </ul>
+ </li> <!-- toc_section -->
+ <li><p class="toc_section"><a href="#section_noiseReduction">noiseReduction</a></p>
+ <ul class="toc_section">
+ <li><a href="#controls_android.noiseReduction.mode">android.noiseReduction.mode</a> (controls)</li>
+ <li><a href="#controls_android.noiseReduction.strength">android.noiseReduction.strength</a> (controls)</li>
+ <li><a href="#dynamic_android.noiseReduction.mode">android.noiseReduction.mode</a> (dynamic)</li>
+ </ul>
+ </li> <!-- toc_section -->
+ <li><p class="toc_section"><a href="#section_quirks">quirks</a></p>
+ <ul class="toc_section">
+ <li><a href="#static_android.quirks.meteringCropRegion">android.quirks.meteringCropRegion</a> (static)</li>
+ <li><a href="#static_android.quirks.triggerAfWithAuto">android.quirks.triggerAfWithAuto</a> (static)</li>
+ <li><a href="#static_android.quirks.useZslFormat">android.quirks.useZslFormat</a> (static)</li>
+ </ul>
+ </li> <!-- toc_section -->
+ <li><p class="toc_section"><a href="#section_request">request</a></p>
+ <ul class="toc_section">
+ <li><a href="#controls_android.request.frameCount">android.request.frameCount</a> (controls)</li>
+ <li><a href="#controls_android.request.id">android.request.id</a> (controls)</li>
+ <li><a href="#controls_android.request.inputStreams">android.request.inputStreams</a> (controls)</li>
+ <li><a href="#controls_android.request.metadataMode">android.request.metadataMode</a> (controls)</li>
+ <li><a href="#controls_android.request.outputStreams">android.request.outputStreams</a> (controls)</li>
+ <li><a href="#controls_android.request.type">android.request.type</a> (controls)</li>
+ <li><a href="#static_android.request.maxNumOutputStreams">android.request.maxNumOutputStreams</a> (static)</li>
+ <li><a href="#static_android.request.maxNumReprocessStreams">android.request.maxNumReprocessStreams</a> (static)</li>
+ <li><a href="#dynamic_android.request.frameCount">android.request.frameCount</a> (dynamic)</li>
+ <li><a href="#dynamic_android.request.id">android.request.id</a> (dynamic)</li>
+ <li><a href="#dynamic_android.request.metadataMode">android.request.metadataMode</a> (dynamic)</li>
+ <li><a href="#dynamic_android.request.outputStreams">android.request.outputStreams</a> (dynamic)</li>
+ </ul>
+ </li> <!-- toc_section -->
+ <li><p class="toc_section"><a href="#section_scaler">scaler</a></p>
+ <ul class="toc_section">
+ <li><a href="#controls_android.scaler.cropRegion">android.scaler.cropRegion</a> (controls)</li>
+ <li><a href="#static_android.scaler.availableFormats">android.scaler.availableFormats</a> (static)</li>
+ <li><a href="#static_android.scaler.availableJpegMinDurations">android.scaler.availableJpegMinDurations</a> (static)</li>
+ <li><a href="#static_android.scaler.availableJpegSizes">android.scaler.availableJpegSizes</a> (static)</li>
+ <li><a href="#static_android.scaler.availableMaxDigitalZoom">android.scaler.availableMaxDigitalZoom</a> (static)</li>
+ <li><a href="#static_android.scaler.availableProcessedMinDurations">android.scaler.availableProcessedMinDurations</a> (static)</li>
+ <li><a href="#static_android.scaler.availableProcessedSizes">android.scaler.availableProcessedSizes</a> (static)</li>
+ <li><a href="#static_android.scaler.availableRawMinDurations">android.scaler.availableRawMinDurations</a> (static)</li>
+ <li><a href="#static_android.scaler.availableRawSizes">android.scaler.availableRawSizes</a> (static)</li>
+ <li><a href="#static_android.scaler.maxDigitalZoom">android.scaler.maxDigitalZoom</a> (static)</li>
+ <li><a href="#dynamic_android.scaler.cropRegion">android.scaler.cropRegion</a> (dynamic)</li>
+ </ul>
+ </li> <!-- toc_section -->
+ <li><p class="toc_section"><a href="#section_sensor">sensor</a></p>
+ <ul class="toc_section">
+ <li><a href="#controls_android.sensor.exposureTime">android.sensor.exposureTime</a> (controls)</li>
+ <li><a href="#controls_android.sensor.frameDuration">android.sensor.frameDuration</a> (controls)</li>
+ <li><a href="#controls_android.sensor.sensitivity">android.sensor.sensitivity</a> (controls)</li>
+ <li><a href="#static_android.sensor.info.activeArraySize">android.sensor.info.activeArraySize</a> (static)</li>
+ <li><a href="#static_android.sensor.info.availableSensitivities">android.sensor.info.availableSensitivities</a> (static)</li>
+ <li><a href="#static_android.sensor.info.colorFilterArrangement">android.sensor.info.colorFilterArrangement</a> (static)</li>
+ <li><a href="#static_android.sensor.info.exposureTimeRange">android.sensor.info.exposureTimeRange</a> (static)</li>
+ <li><a href="#static_android.sensor.info.maxFrameDuration">android.sensor.info.maxFrameDuration</a> (static)</li>
+ <li><a href="#static_android.sensor.info.physicalSize">android.sensor.info.physicalSize</a> (static)</li>
+ <li><a href="#static_android.sensor.info.pixelArraySize">android.sensor.info.pixelArraySize</a> (static)</li>
+ <li><a href="#static_android.sensor.info.whiteLevel">android.sensor.info.whiteLevel</a> (static)</li>
+ <li><a href="#static_android.sensor.baseGainFactor">android.sensor.baseGainFactor</a> (static)</li>
+ <li><a href="#static_android.sensor.blackLevelPattern">android.sensor.blackLevelPattern</a> (static)</li>
+ <li><a href="#static_android.sensor.calibrationTransform1">android.sensor.calibrationTransform1</a> (static)</li>
+ <li><a href="#static_android.sensor.calibrationTransform2">android.sensor.calibrationTransform2</a> (static)</li>
+ <li><a href="#static_android.sensor.colorTransform1">android.sensor.colorTransform1</a> (static)</li>
+ <li><a href="#static_android.sensor.colorTransform2">android.sensor.colorTransform2</a> (static)</li>
+ <li><a href="#static_android.sensor.forwardMatrix1">android.sensor.forwardMatrix1</a> (static)</li>
+ <li><a href="#static_android.sensor.forwardMatrix2">android.sensor.forwardMatrix2</a> (static)</li>
+ <li><a href="#static_android.sensor.maxAnalogSensitivity">android.sensor.maxAnalogSensitivity</a> (static)</li>
+ <li><a href="#static_android.sensor.noiseModelCoefficients">android.sensor.noiseModelCoefficients</a> (static)</li>
+ <li><a href="#static_android.sensor.orientation">android.sensor.orientation</a> (static)</li>
+ <li><a href="#static_android.sensor.referenceIlluminant1">android.sensor.referenceIlluminant1</a> (static)</li>
+ <li><a href="#static_android.sensor.referenceIlluminant2">android.sensor.referenceIlluminant2</a> (static)</li>
+ <li><a href="#dynamic_android.sensor.exposureTime">android.sensor.exposureTime</a> (dynamic)</li>
+ <li><a href="#dynamic_android.sensor.frameDuration">android.sensor.frameDuration</a> (dynamic)</li>
+ <li><a href="#dynamic_android.sensor.sensitivity">android.sensor.sensitivity</a> (dynamic)</li>
+ <li><a href="#dynamic_android.sensor.timestamp">android.sensor.timestamp</a> (dynamic)</li>
+ </ul>
+ </li> <!-- toc_section -->
+ <li><p class="toc_section"><a href="#section_shading">shading</a></p>
+ <ul class="toc_section">
+ <li><a href="#controls_android.shading.mode">android.shading.mode</a> (controls)</li>
+ <li><a href="#controls_android.shading.strength">android.shading.strength</a> (controls)</li>
+ <li><a href="#dynamic_android.shading.mode">android.shading.mode</a> (dynamic)</li>
+ </ul>
+ </li> <!-- toc_section -->
+ <li><p class="toc_section"><a href="#section_statistics">statistics</a></p>
+ <ul class="toc_section">
+ <li><a href="#controls_android.statistics.faceDetectMode">android.statistics.faceDetectMode</a> (controls)</li>
+ <li><a href="#controls_android.statistics.histogramMode">android.statistics.histogramMode</a> (controls)</li>
+ <li><a href="#controls_android.statistics.sharpnessMapMode">android.statistics.sharpnessMapMode</a> (controls)</li>
+ <li><a href="#static_android.statistics.info.availableFaceDetectModes">android.statistics.info.availableFaceDetectModes</a> (static)</li>
+ <li><a href="#static_android.statistics.info.histogramBucketCount">android.statistics.info.histogramBucketCount</a> (static)</li>
+ <li><a href="#static_android.statistics.info.maxFaceCount">android.statistics.info.maxFaceCount</a> (static)</li>
+ <li><a href="#static_android.statistics.info.maxHistogramCount">android.statistics.info.maxHistogramCount</a> (static)</li>
+ <li><a href="#static_android.statistics.info.maxSharpnessMapValue">android.statistics.info.maxSharpnessMapValue</a> (static)</li>
+ <li><a href="#static_android.statistics.info.sharpnessMapSize">android.statistics.info.sharpnessMapSize</a> (static)</li>
+ <li><a href="#dynamic_android.statistics.faceDetectMode">android.statistics.faceDetectMode</a> (dynamic)</li>
+ <li><a href="#dynamic_android.statistics.faceIds">android.statistics.faceIds</a> (dynamic)</li>
+ <li><a href="#dynamic_android.statistics.faceLandmarks">android.statistics.faceLandmarks</a> (dynamic)</li>
+ <li><a href="#dynamic_android.statistics.faceRectangles">android.statistics.faceRectangles</a> (dynamic)</li>
+ <li><a href="#dynamic_android.statistics.faceScores">android.statistics.faceScores</a> (dynamic)</li>
+ <li><a href="#dynamic_android.statistics.histogram">android.statistics.histogram</a> (dynamic)</li>
+ <li><a href="#dynamic_android.statistics.histogramMode">android.statistics.histogramMode</a> (dynamic)</li>
+ <li><a href="#dynamic_android.statistics.sharpnessMap">android.statistics.sharpnessMap</a> (dynamic)</li>
+ <li><a href="#dynamic_android.statistics.sharpnessMapMode">android.statistics.sharpnessMapMode</a> (dynamic)</li>
+ </ul>
+ </li> <!-- toc_section -->
+ <li><p class="toc_section"><a href="#section_tonemap">tonemap</a></p>
+ <ul class="toc_section">
+ <li><a href="#controls_android.tonemap.curveBlue">android.tonemap.curveBlue</a> (controls)</li>
+ <li><a href="#controls_android.tonemap.curveGreen">android.tonemap.curveGreen</a> (controls)</li>
+ <li><a href="#controls_android.tonemap.curveRed">android.tonemap.curveRed</a> (controls)</li>
+ <li><a href="#controls_android.tonemap.mode">android.tonemap.mode</a> (controls)</li>
+ <li><a href="#static_android.tonemap.maxCurvePoints">android.tonemap.maxCurvePoints</a> (static)</li>
+ <li><a href="#dynamic_android.tonemap.curveBlue">android.tonemap.curveBlue</a> (dynamic)</li>
+ <li><a href="#dynamic_android.tonemap.curveGreen">android.tonemap.curveGreen</a> (dynamic)</li>
+ <li><a href="#dynamic_android.tonemap.curveRed">android.tonemap.curveRed</a> (dynamic)</li>
+ <li><a href="#dynamic_android.tonemap.mode">android.tonemap.mode</a> (dynamic)</li>
+ </ul>
+ </li> <!-- toc_section -->
+ </ul>
+
+ <h1>Properties</h1>
+ <table class="properties">
+
+ <thead class="thead_dummy">
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead> <!-- so that the first occurrence of thead is not
+ above the first occurrence of tr -->
+<!-- <namespace name="android"> -->
+ <tr><td colspan="7" id="section_colorCorrection" class="section">colorCorrection</td></tr>
+
+
+ <tr><td colspan="7" class="kind">controls</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="controls_android.colorCorrection.mode">
+ <td class="entry_name">android.<wbr>color<wbr>Correction.<wbr>mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">TRANSFORM_MATRIX</span>
+ <span class="entry_type_enum_notes">Use the android.<wbr>color<wbr>Correction.<wbr>transform matrix
+ to do color conversion</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FAST</span>
+ <span class="entry_type_enum_notes">Must not slow down frame rate relative to raw
+ bayer output</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">HIGH_QUALITY</span>
+ <span class="entry_type_enum_notes">Frame rate may be reduced by high
+ quality</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.colorCorrection.transform">
+ <td class="entry_name">android.<wbr>color<wbr>Correction.<wbr>transform</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 3 x 3
+ </span>
+
+ <div class="entry_type_notes">3x3 float matrix in row-major order</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ A transform matrix to chromatically adapt
+ pixels in the CIE XYZ (1931) color space from the scene
+ illuminant to the sRGB-standard
+ D65-illuminant
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ Output values are expected to be in the range
+ (0,<wbr>1)
+ </td>
+
+ <td class="entry_notes">
+ Values outside (0,<wbr>1) should be clamped.<wbr> Need to
+ provide utilities to go from CCT (+hue?),<wbr> or (x,<wbr>y) white
+ point,<wbr> (or AWB mode) to matrix; use linear Bradford
+ algorithm.<wbr>
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">dynamic</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="dynamic_android.colorCorrection.mode">
+ <td class="entry_name">android.<wbr>color<wbr>Correction.<wbr>mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">TRANSFORM_MATRIX</span>
+ <span class="entry_type_enum_notes">Use the android.<wbr>color<wbr>Correction.<wbr>transform matrix
+ to do color conversion</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FAST</span>
+ <span class="entry_type_enum_notes">Must not slow down frame rate relative to raw
+ bayer output</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">HIGH_QUALITY</span>
+ <span class="entry_type_enum_notes">Frame rate may be reduced by high
+ quality</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+
+ <!-- end of section -->
+ <tr><td colspan="7" id="section_control" class="section">control</td></tr>
+
+
+ <tr><td colspan="7" class="kind">controls</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="controls_android.control.aeAntibandingMode">
+ <td class="entry_name">android.<wbr>control.<wbr>ae<wbr>Antibanding<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">50HZ</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">60HZ</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">AUTO</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Enum for controlling
+ antibanding
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+
+ android.<wbr>control.<wbr>ae<wbr>Available<wbr>Antibanding<wbr>Modes
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.control.aeExposureCompensation">
+ <td class="entry_name">android.<wbr>control.<wbr>ae<wbr>Exposure<wbr>Compensation</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Adjustment to AE target image
+ brightness
+ </td>
+
+ <td class="entry_units">
+ count of positive/<wbr>negative EV steps
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ For example,<wbr> if EV step is 0.<wbr>333,<wbr> '6' will mean an
+ exposure compensation of +2 EV; -3 will mean an exposure
+ compensation of -1
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.control.aeLock">
+ <td class="entry_name">android.<wbr>control.<wbr>ae<wbr>Lock</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">ON</span>
+ <span class="entry_type_enum_notes">Autoexposure lock is enabled; the AE algorithm
+ must not update the exposure and sensitivity parameters
+ while the lock is active</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ <span class="entry_type_enum_notes">Autoexposure lock is disabled; the AE algorithm
+ is free to update its parameters.<wbr></span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Whether AE is currently locked to its latest
+ calculated values
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Note that even when AE is locked,<wbr> the flash may be
+ fired if the AE mode is ON_<wbr>AUTO_<wbr>FLASH /<wbr> ON_<wbr>ALWAYS_<wbr>FLASH /<wbr>
+ ON_<wbr>AUTO_<wbr>FLASH_<wbr>REDEYE.<wbr>
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.control.aeMode">
+ <td class="entry_name">android.<wbr>control.<wbr>ae<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ <span class="entry_type_enum_notes">Autoexposure is disabled; sensor.<wbr>exposureTime
+ and sensor.<wbr>sensitivity are used</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">ON</span>
+ <span class="entry_type_enum_notes">Autoexposure is active,<wbr> no flash
+ control</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">ON_AUTO_FLASH</span>
+ <span class="entry_type_enum_notes">if flash exists Autoexposure is active,<wbr> auto
+ flash control; flash may be fired when precapture
+ trigger is activated,<wbr> and for captures for which
+ captureIntent = STILL_<wbr>CAPTURE</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">ON_ALWAYS_FLASH</span>
+ <span class="entry_type_enum_notes">if flash exists Autoexposure is active,<wbr> auto
+ flash control for precapture trigger and always flash
+ when captureIntent = STILL_<wbr>CAPTURE</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">ON_AUTO_FLASH_REDEYE</span>
+ <span class="entry_type_enum_notes">optional Automatic red eye reduction with flash.<wbr>
+ If deemed necessary,<wbr> red eye reduction sequence should
+ fire when precapture trigger is activated,<wbr> and final
+ flash should fire when captureIntent =
+ STILL_<wbr>CAPTURE</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Whether AE is currently updating the sensor
+ exposure and sensitivity fields
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ android.<wbr>control.<wbr>ae<wbr>Available<wbr>Modes
+ </td>
+
+ <td class="entry_notes">
+ Only effective if android.<wbr>control.<wbr>mode =
+ AUTO
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.control.aeRegions">
+ <td class="entry_name">android.<wbr>control.<wbr>ae<wbr>Regions</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 5 x area_count
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List of areas to use for
+ metering
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Each area is a rectangle plus weight: xmin,<wbr> ymin,<wbr>
+ xmax,<wbr> ymax,<wbr> weight.<wbr> The coordinate system is based on the
+ active pixel array,<wbr> with (0,<wbr>0) being the top-left of the
+ active pixel array,<wbr> and
+ (android.<wbr>sensor.<wbr>info.<wbr>active<wbr>Array<wbr>Size.<wbr>width,<wbr>
+ android.<wbr>sensor.<wbr>info.<wbr>active<wbr>Array<wbr>Size.<wbr>height) being the
+ bottom-right point of the active pixel array.<wbr> The weight
+ should be nonnegative.<wbr> If all regions have 0 weight,<wbr> then
+ no specific metering area needs to be used by the HAL.<wbr> If
+ the metering region is outside the current
+ android.<wbr>scaler.<wbr>crop<wbr>Region,<wbr> the HAL should ignore the
+ sections outside the region and output the used sections
+ in the frame metadata
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.control.aeTargetFpsRange">
+ <td class="entry_name">android.<wbr>control.<wbr>ae<wbr>Target<wbr>Fps<wbr>Range</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 2
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Range over which fps can be adjusted to
+ maintain exposure
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ android.<wbr>control.<wbr>ae<wbr>Available<wbr>Target<wbr>Fps<wbr>Ranges
+ </td>
+
+ <td class="entry_notes">
+ Only constrains AE algorithm,<wbr> not manual control
+ of android.<wbr>sensor.<wbr>exposure<wbr>Time
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.control.afMode">
+ <td class="entry_name">android.<wbr>control.<wbr>af<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ <span class="entry_type_enum_notes">The 3A routines do not control the lens;
+ android.<wbr>lens.<wbr>focus<wbr>Position is controlled by the
+ application</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">AUTO</span>
+ <span class="entry_type_enum_notes">if lens is not fixed focus.<wbr> Use
+ android.<wbr>lens.<wbr>minimum<wbr>Focus<wbr>Distance to determine if lens
+ is fixed focus In this mode,<wbr> the lens does not move
+ unless the autofocus trigger action is called.<wbr> When
+ that trigger is activated,<wbr> AF must transition to
+ ACTIVE_<wbr>SCAN,<wbr> then to the outcome of the scan (FOCUSED
+ or NOT_<wbr>FOCUSED).<wbr> Triggering cancel AF resets the lens
+ position to default,<wbr> and sets the AF state to
+ INACTIVE.<wbr></span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">MACRO</span>
+ <span class="entry_type_enum_notes">In this mode,<wbr> the lens does not move unless the
+ autofocus trigger action is called.<wbr> When that trigger
+ is activated,<wbr> AF must transition to ACTIVE_<wbr>SCAN,<wbr> then
+ to the outcome of the scan (FOCUSED or NOT_<wbr>FOCUSED).<wbr>
+ Triggering cancel AF resets the lens position to
+ default,<wbr> and sets the AF state to
+ INACTIVE.<wbr></span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">CONTINUOUS_VIDEO</span>
+ <span class="entry_type_enum_notes">In this mode,<wbr> the AF algorithm modifies the lens
+ position continually to attempt to provide a
+ constantly-in-focus image stream.<wbr> The focusing behavior
+ should be suitable for good quality video recording;
+ typically this means slower focus movement and no
+ overshoots.<wbr> When the AF trigger is not involved,<wbr> the AF
+ algorithm should start in INACTIVE state,<wbr> and then
+ transition into PASSIVE_<wbr>SCAN and PASSIVE_<wbr>FOCUSED states
+ as appropriate.<wbr> When the AF trigger is activated,<wbr> the
+ algorithm should immediately transition into AF_<wbr>FOCUSED
+ or AF_<wbr>NOT_<wbr>FOCUSED as appropriate,<wbr> and lock the lens
+ position until a cancel AF trigger is received.<wbr> Once
+ cancel is received,<wbr> the algorithm should transition
+ back to INACTIVE and resume passive scan.<wbr> Note that
+ this behavior is not identical to CONTINUOUS_<wbr>PICTURE,<wbr>
+ since an ongoing PASSIVE_<wbr>SCAN must immediately be
+ canceled.<wbr></span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">CONTINUOUS_PICTURE</span>
+ <span class="entry_type_enum_notes">In this mode,<wbr> the AF algorithm modifies the lens
+ position continually to attempt to provide a
+ constantly-in-focus image stream.<wbr> The focusing behavior
+ should be suitable for still image capture; typically
+ this means focusing as fast as possible.<wbr> When the AF
+ trigger is not involved,<wbr> the AF algorithm should start
+ in INACTIVE state,<wbr> and then transition into
+ PASSIVE_<wbr>SCAN and PASSIVE_<wbr>FOCUSED states as appropriate
+ as it attempts to maintain focus.<wbr> When the AF trigger
+ is activated,<wbr> the algorithm should finish its
+ PASSIVE_<wbr>SCAN if active,<wbr> and then transition into
+ AF_<wbr>FOCUSED or AF_<wbr>NOT_<wbr>FOCUSED as appropriate,<wbr> and lock
+ the lens position until a cancel AF trigger is
+ received.<wbr> When the AF cancel trigger is activated,<wbr> the
+ algorithm should transition back to INACTIVE and then
+ act as if it has just been started.<wbr></span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">EDOF</span>
+ <span class="entry_type_enum_notes">Extended depth of field (digital focus).<wbr> AF
+ trigger is ignored,<wbr> AF state should always be
+ INACTIVE.<wbr></span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Whether AF is currently enabled,<wbr> and what
+ mode it is set to
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.control.afRegions">
+ <td class="entry_name">android.<wbr>control.<wbr>af<wbr>Regions</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 5 x area_count
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List of areas to use for focus
+ estimation
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Each area is a rectangle plus weight: xmin,<wbr> ymin,<wbr>
+ xmax,<wbr> ymax,<wbr> weight.<wbr> The coordinate system is based on the
+ active pixel array,<wbr> with (0,<wbr>0) being the top-left of the
+ active pixel array,<wbr> and
+ (android.<wbr>sensor.<wbr>info.<wbr>active<wbr>Array<wbr>Size.<wbr>width,<wbr>
+ android.<wbr>sensor.<wbr>info.<wbr>active<wbr>Array<wbr>Size.<wbr>height) being the
+ bottom-right point of the active pixel array.<wbr> The weight
+ should be nonnegative.<wbr> If all regions have 0 weight,<wbr> then
+ no specific focus area needs to be used by the HAL.<wbr> If
+ the focusing region is outside the current
+ android.<wbr>scaler.<wbr>crop<wbr>Region,<wbr> the HAL should ignore the
+ sections outside the region and output the used sections
+ in the frame metadata
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.control.awbLock">
+ <td class="entry_name">android.<wbr>control.<wbr>awb<wbr>Lock</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">ON</span>
+ <span class="entry_type_enum_notes">Auto-whitebalance lock is enabled; the AWB
+ algorithm must not update the exposure and sensitivity
+ parameters while the lock is active</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ <span class="entry_type_enum_notes">Auto-whitebalance lock is disabled; the AWB
+ algorithm is free to update its parameters if in AUTO
+ mode.<wbr></span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Whether AWB is currently locked to its
+ latest calculated values
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Note that AWB lock is only meaningful for AUTO
+ mode; in other modes,<wbr> AWB is already fixed to a specific
+ setting
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.control.awbMode">
+ <td class="entry_name">android.<wbr>control.<wbr>awb<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">AUTO</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">INCANDESCENT</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FLUORESCENT</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">WARM_FLUORESCENT</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">DAYLIGHT</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">CLOUDY_DAYLIGHT</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">TWILIGHT</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">SHADE</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Whether AWB is currently setting the color
+ transform fields,<wbr> and what its illumination target
+ is
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ [BC - AWB lock,<wbr>AWB modes]
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.control.awbRegions">
+ <td class="entry_name">android.<wbr>control.<wbr>awb<wbr>Regions</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 5 x area_count
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List of areas to use for illuminant
+ estimation
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Only used in AUTO mode.<wbr> Each area is a rectangle
+ plus weight: xmin,<wbr> ymin,<wbr> xmax,<wbr> ymax,<wbr> weight.<wbr> The
+ coordinate system is based on the active pixel array,<wbr>
+ with (0,<wbr>0) being the top-left of the active pixel array,<wbr>
+ and (android.<wbr>sensor.<wbr>info.<wbr>active<wbr>Array<wbr>Size.<wbr>width,<wbr>
+ android.<wbr>sensor.<wbr>info.<wbr>active<wbr>Array<wbr>Size.<wbr>height) being the
+ bottom-right point of the active pixel array.<wbr> The weight
+ should be nonnegative.<wbr> If all regions have 0 weight,<wbr> then
+ no specific metering area needs to be used by the HAL.<wbr> If
+ the metering region is outside the current
+ android.<wbr>scaler.<wbr>crop<wbr>Region,<wbr> the HAL should ignore the
+ sections outside the region and output the used sections
+ in the frame metadata
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.control.captureIntent">
+ <td class="entry_name">android.<wbr>control.<wbr>capture<wbr>Intent</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">CUSTOM</span>
+ <span class="entry_type_enum_notes">This request doesn't fall into the other
+ categories.<wbr> Default to preview-like
+ behavior.<wbr></span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">PREVIEW</span>
+ <span class="entry_type_enum_notes">This request is for a preview-like usecase.<wbr> The
+ precapture trigger may be used to start off a metering
+ w/<wbr>flash sequence</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">STILL_CAPTURE</span>
+ <span class="entry_type_enum_notes">This request is for a still capture-type
+ usecase.<wbr></span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">VIDEO_RECORD</span>
+ <span class="entry_type_enum_notes">This request is for a video recording
+ usecase.<wbr></span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">VIDEO_SNAPSHOT</span>
+ <span class="entry_type_enum_notes">This request is for a video snapshot (still
+ image while recording video) usecase</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">ZERO_SHUTTER_LAG</span>
+ <span class="entry_type_enum_notes">This request is for a ZSL usecase; the
+ application will stream full-resolution images and
+ reprocess one or several later for a final
+ capture</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Information to 3A routines about the purpose
+ of this capture,<wbr> to help decide optimal 3A
+ strategy
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ all must be supported
+ </td>
+
+ <td class="entry_notes">
+ Only used if android.<wbr>control.<wbr>mode != OFF.<wbr>
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.control.effectMode">
+ <td class="entry_name">android.<wbr>control.<wbr>effect<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">MONO</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">NEGATIVE</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">SOLARIZE</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">SEPIA</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">POSTERIZE</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">WHITEBOARD</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">BLACKBOARD</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">AQUA</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Whether any special color effect is in use.<wbr>
+ Only used if android.<wbr>control.<wbr>mode != OFF
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ android.<wbr>control.<wbr>available<wbr>Effects
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.control.mode">
+ <td class="entry_name">android.<wbr>control.<wbr>mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ <span class="entry_type_enum_notes">Full application control of pipeline.<wbr> All 3A
+ routines are disabled,<wbr> no other settings in
+ android.<wbr>control.<wbr>* have any effect</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">AUTO</span>
+ <span class="entry_type_enum_notes">Use settings for each individual 3A routine.<wbr>
+ Manual control of capture parameters is disabled.<wbr> All
+ controls in android.<wbr>control.<wbr>* besides sceneMode take
+ effect</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">USE_SCENE_MODE</span>
+ <span class="entry_type_enum_notes">Use specific scene mode.<wbr> Enabling this disables
+ control.<wbr>aeMode,<wbr> control.<wbr>awbMode and control.<wbr>afMode
+ controls; the HAL must ignore those settings while
+ USE_<wbr>SCENE_<wbr>MODE is active (except for FACE_<wbr>PRIORITY
+ scene mode).<wbr> Other control entries are still active.<wbr>
+ This setting can only be used if availableSceneModes !=
+ UNSUPPORTED</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Overall mode of 3A control
+ routines
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ all must be supported
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.control.sceneMode">
+ <td class="entry_name">android.<wbr>control.<wbr>scene<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">UNSUPPORTED</span>
+ <span class="entry_type_enum_value">0</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FACE_PRIORITY</span>
+ <span class="entry_type_enum_notes">if face detection support exists Use face
+ detection data to drive 3A routines.<wbr> If face detection
+ statistics are disabled,<wbr> should still operate correctly
+ (but not return face detection statistics to the
+ framework).<wbr> Unlike the other scene modes,<wbr> aeMode,<wbr>
+ awbMode,<wbr> and afMode remain active when FACE_<wbr>PRIORITY is
+ set.<wbr> This is due to compatibility concerns with the old
+ camera API</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">ACTION</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">PORTRAIT</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">LANDSCAPE</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">NIGHT</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">NIGHT_PORTRAIT</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">THEATRE</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">BEACH</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">SNOW</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">SUNSET</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">STEADYPHOTO</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FIREWORKS</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">SPORTS</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">PARTY</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">CANDLELIGHT</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">BARCODE</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Which scene mode is active when
+ android.<wbr>control.<wbr>mode = SCENE_<wbr>MODE
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ android.<wbr>control.<wbr>available<wbr>Scene<wbr>Modes
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.control.videoStabilizationMode">
+ <td class="entry_name">android.<wbr>control.<wbr>video<wbr>Stabilization<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">ON</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Whether video stabilization is
+ active
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ If enabled,<wbr> video stabilization can modify the
+ android.<wbr>scaler.<wbr>crop<wbr>Region to keep the video stream
+ stabilized
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">static</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="static_android.control.aeAvailableAntibandingModes">
+ <td class="entry_name">android.<wbr>control.<wbr>ae<wbr>Available<wbr>Antibanding<wbr>Modes</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n
+ </span>
+
+ <div class="entry_type_notes">list of enums</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Which set of antibanding modes are
+ supported
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.control.aeAvailableModes">
+ <td class="entry_name">android.<wbr>control.<wbr>ae<wbr>Available<wbr>Modes</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n
+ </span>
+
+ <div class="entry_type_notes">list of enums</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Which subset of AE modes is
+ supported
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ OFF,<wbr> ON must be supported.<wbr>
+ ON_<wbr>AUTO_<wbr>FLASH/<wbr>ON_<wbr>ALWAYS_<wbr>FLASH must be supported if flash
+ unit is available
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.control.aeAvailableTargetFpsRanges">
+ <td class="entry_name">android.<wbr>control.<wbr>ae<wbr>Available<wbr>Target<wbr>Fps<wbr>Ranges</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 2 x n
+ </span>
+
+ <div class="entry_type_notes">list of pairs of frame rates</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List of frame rate ranges supported by the
+ AE algorithm/<wbr>hardware
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.control.aeCompensationRange">
+ <td class="entry_name">android.<wbr>control.<wbr>ae<wbr>Compensation<wbr>Range</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 2
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Maximum and minimum exposure compensation
+ setting,<wbr> in counts of
+ android.<wbr>control.<wbr>ae<wbr>Compensation<wbr>Step<wbr>Size
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ At least (-2,<wbr>2)/<wbr>(exp compensation step
+ size)
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.control.aeCompensationStep">
+ <td class="entry_name">android.<wbr>control.<wbr>ae<wbr>Compensation<wbr>Step</td>
+ <td class="entry_type">
+ <span class="entry_type_name">rational</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Smallest step by which exposure compensation
+ can be changed
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ <= 1/<wbr>2
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.control.afAvailableModes">
+ <td class="entry_name">android.<wbr>control.<wbr>af<wbr>Available<wbr>Modes</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n
+ </span>
+
+ <div class="entry_type_notes">List of enums</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List of AF modes that can be
+ selected
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ OFF must be included.<wbr> AUTO must be supported if
+ lens allows for changing focus
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.control.availableEffects">
+ <td class="entry_name">android.<wbr>control.<wbr>available<wbr>Effects</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n
+ </span>
+
+ <div class="entry_type_notes">list of enums</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ what subset of the full color effect enum
+ list is supported
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ OFF must be listed
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.control.availableSceneModes">
+ <td class="entry_name">android.<wbr>control.<wbr>available<wbr>Scene<wbr>Modes</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n
+ </span>
+
+ <div class="entry_type_notes">list of enums from android.<wbr>control.<wbr>scene<wbr>Mode,<wbr> plus UNSUPPORTED to indicate no scene modes are supported</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ what subset of the scene mode enum list is
+ supported.<wbr>
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ SCENE_<wbr>MODE_<wbr>FACE_<wbr>PRIORITY must be supported if face
+ detection is supported
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.control.availableVideoStabilizationModes">
+ <td class="entry_name">android.<wbr>control.<wbr>available<wbr>Video<wbr>Stabilization<wbr>Modes</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n
+ </span>
+
+ <div class="entry_type_notes">List of enums.<wbr></div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List of video stabilization modes that can
+ be supported
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ OFF must be included
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.control.awbAvailableModes">
+ <td class="entry_name">android.<wbr>control.<wbr>awb<wbr>Available<wbr>Modes</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ </td>
+
+ <td class="entry_units">
+ List of enums (android.<wbr>control.<wbr>awb<wbr>Mode)
+ </td>
+
+ <td class="entry_range">
+ OFF,<wbr> AUTO must be included
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.control.maxRegions">
+ <td class="entry_name">android.<wbr>control.<wbr>max<wbr>Regions</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ For AE,<wbr> AWB,<wbr> and AF,<wbr> how many individual
+ regions can be listed for metering?
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ >= 1
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.control.sceneModeOverrides">
+ <td class="entry_name">android.<wbr>control.<wbr>scene<wbr>Mode<wbr>Overrides</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 3 x lengthavailablescenemodes
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List of AE,<wbr> AWB,<wbr> and AF modes to use for
+ each available scene mode
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ For each listed scene mode,<wbr> lists the aeMode,<wbr>
+ awbMode,<wbr> and afMode that the HAL wants to use for that
+ scene mode.<wbr> For each entry,<wbr> the order is {aeMode,<wbr>
+ awbMode,<wbr> afMode} in order of increasing index
+ </td>
+
+ <td class="entry_notes">
+ When a scene mode is enabled,<wbr> the HAL is expected
+ to override aeMode,<wbr> awbMode,<wbr> and afMode with its
+ preferred settings for that scene mode.<wbr> To simplify
+ communication with old camera API applications,<wbr> the
+ service wants this override list in the static metadata.<wbr>
+ The order of this list matches that of
+ availableSceneModes,<wbr> with 3 entires for each scene mode.<wbr>
+ The overrides listed for SCENE_<wbr>MODE_<wbr>FACE_<wbr>PRIORITY are
+ ignored,<wbr> since for that mode,<wbr> the application-set aeMode,<wbr>
+ awbMode,<wbr> and afMode are used instead,<wbr> like they are when
+ android.<wbr>control.<wbr>mode is AUTO.<wbr> It is recommended that for
+ FACE_<wbr>PRIORITY,<wbr> the overrides should be set to 0.<wbr> As an
+ example,<wbr> if availableSceneModes is { FACE_<wbr>PRIORITY,<wbr>
+ ACTION,<wbr> NIGHT },<wbr> then the service expects this field to
+ have 9 entries; for example { 0 ,<wbr> 0,<wbr> 0,<wbr> ON_<wbr>AUTO_<wbr>FLASH,<wbr>
+ AUTO,<wbr> CONTINUOUS_<wbr>PICTURE,<wbr> ON_<wbr>AUTO_<wbr>FLASH,<wbr> INCANDESCENT,<wbr>
+ AUTO }
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">dynamic</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="dynamic_android.control.aePrecaptureId">
+ <td class="entry_name">android.<wbr>control.<wbr>ae<wbr>Precapture<wbr>Id</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ The ID sent with the latest
+ CAMERA2_<wbr>TRIGGER_<wbr>PRECAPTURE_<wbr>METERING call
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Must be 0 if no
+ CAMERA2_<wbr>TRIGGER_<wbr>PRECAPTURE_<wbr>METERING trigger received yet
+ by HAL.<wbr> Always updated even if AE algorithm ignores the
+ trigger
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.control.aeRegions">
+ <td class="entry_name">android.<wbr>control.<wbr>ae<wbr>Regions</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 5 x area_count
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List of areas to use for
+ metering
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Each area is a rectangle plus weight: xmin,<wbr> ymin,<wbr>
+ xmax,<wbr> ymax,<wbr> weight.<wbr> The coordinate system is based on the
+ active pixel array,<wbr> with (0,<wbr>0) being the top-left of the
+ active pixel array,<wbr> and
+ (android.<wbr>sensor.<wbr>info.<wbr>active<wbr>Array<wbr>Size.<wbr>width,<wbr>
+ android.<wbr>sensor.<wbr>info.<wbr>active<wbr>Array<wbr>Size.<wbr>height) being the
+ bottom-right point of the active pixel array.<wbr> The weight
+ should be nonnegative.<wbr> If all regions have 0 weight,<wbr> then
+ no specific metering area needs to be used by the HAL.<wbr> If
+ the metering region is outside the current
+ android.<wbr>scaler.<wbr>crop<wbr>Region,<wbr> the HAL should ignore the
+ sections outside the region and output the used sections
+ in the frame metadata
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.control.aeState">
+ <td class="entry_name">android.<wbr>control.<wbr>ae<wbr>State</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">INACTIVE</span>
+ <span class="entry_type_enum_notes">AE is off</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">SEARCHING</span>
+ <span class="entry_type_enum_notes">AE doesn't yet have a good set of control values
+ for the current scene</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">CONVERGED</span>
+ <span class="entry_type_enum_notes">AE has a good set of control values for the
+ current scene</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">LOCKED</span>
+ <span class="entry_type_enum_notes">AE has been locked (aeMode =
+ LOCKED)</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FLASH_REQUIRED</span>
+ <span class="entry_type_enum_notes">AE has a good set of control values,<wbr> but flash
+ needs to be fired for good quality still
+ capture</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">PRECAPTURE</span>
+ <span class="entry_type_enum_notes">AE has been asked to do a precapture sequence
+ (through the
+ trigger_<wbr>action(CAMERA2_<wbr>TRIGGER_<wbr>PRECAPTURE_<wbr>METERING)
+ call),<wbr> and is currently executing it.<wbr> Once PRECAPTURE
+ completes,<wbr> AE will transition to CONVERGED or
+ FLASH_<wbr>REQUIRED as appropriate</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Current state of AE algorithm
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Whenever the AE algorithm state changes,<wbr> a
+ MSG_<wbr>AUTOEXPOSURE notification must be send if a
+ notification callback is registered.<wbr>
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.control.afMode">
+ <td class="entry_name">android.<wbr>control.<wbr>af<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ <span class="entry_type_enum_notes">The 3A routines do not control the lens;
+ android.<wbr>lens.<wbr>focus<wbr>Position is controlled by the
+ application</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">AUTO</span>
+ <span class="entry_type_enum_notes">if lens is not fixed focus.<wbr> Use
+ android.<wbr>lens.<wbr>minimum<wbr>Focus<wbr>Distance to determine if lens
+ is fixed focus In this mode,<wbr> the lens does not move
+ unless the autofocus trigger action is called.<wbr> When
+ that trigger is activated,<wbr> AF must transition to
+ ACTIVE_<wbr>SCAN,<wbr> then to the outcome of the scan (FOCUSED
+ or NOT_<wbr>FOCUSED).<wbr> Triggering cancel AF resets the lens
+ position to default,<wbr> and sets the AF state to
+ INACTIVE.<wbr></span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">MACRO</span>
+ <span class="entry_type_enum_notes">In this mode,<wbr> the lens does not move unless the
+ autofocus trigger action is called.<wbr> When that trigger
+ is activated,<wbr> AF must transition to ACTIVE_<wbr>SCAN,<wbr> then
+ to the outcome of the scan (FOCUSED or NOT_<wbr>FOCUSED).<wbr>
+ Triggering cancel AF resets the lens position to
+ default,<wbr> and sets the AF state to
+ INACTIVE.<wbr></span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">CONTINUOUS_VIDEO</span>
+ <span class="entry_type_enum_notes">In this mode,<wbr> the AF algorithm modifies the lens
+ position continually to attempt to provide a
+ constantly-in-focus image stream.<wbr> The focusing behavior
+ should be suitable for good quality video recording;
+ typically this means slower focus movement and no
+ overshoots.<wbr> When the AF trigger is not involved,<wbr> the AF
+ algorithm should start in INACTIVE state,<wbr> and then
+ transition into PASSIVE_<wbr>SCAN and PASSIVE_<wbr>FOCUSED states
+ as appropriate.<wbr> When the AF trigger is activated,<wbr> the
+ algorithm should immediately transition into AF_<wbr>FOCUSED
+ or AF_<wbr>NOT_<wbr>FOCUSED as appropriate,<wbr> and lock the lens
+ position until a cancel AF trigger is received.<wbr> Once
+ cancel is received,<wbr> the algorithm should transition
+ back to INACTIVE and resume passive scan.<wbr> Note that
+ this behavior is not identical to CONTINUOUS_<wbr>PICTURE,<wbr>
+ since an ongoing PASSIVE_<wbr>SCAN must immediately be
+ canceled.<wbr></span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">CONTINUOUS_PICTURE</span>
+ <span class="entry_type_enum_notes">In this mode,<wbr> the AF algorithm modifies the lens
+ position continually to attempt to provide a
+ constantly-in-focus image stream.<wbr> The focusing behavior
+ should be suitable for still image capture; typically
+ this means focusing as fast as possible.<wbr> When the AF
+ trigger is not involved,<wbr> the AF algorithm should start
+ in INACTIVE state,<wbr> and then transition into
+ PASSIVE_<wbr>SCAN and PASSIVE_<wbr>FOCUSED states as appropriate
+ as it attempts to maintain focus.<wbr> When the AF trigger
+ is activated,<wbr> the algorithm should finish its
+ PASSIVE_<wbr>SCAN if active,<wbr> and then transition into
+ AF_<wbr>FOCUSED or AF_<wbr>NOT_<wbr>FOCUSED as appropriate,<wbr> and lock
+ the lens position until a cancel AF trigger is
+ received.<wbr> When the AF cancel trigger is activated,<wbr> the
+ algorithm should transition back to INACTIVE and then
+ act as if it has just been started.<wbr></span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">EDOF</span>
+ <span class="entry_type_enum_notes">Extended depth of field (digital focus).<wbr> AF
+ trigger is ignored,<wbr> AF state should always be
+ INACTIVE.<wbr></span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Whether AF is currently enabled,<wbr> and what
+ mode it is set to
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.control.afRegions">
+ <td class="entry_name">android.<wbr>control.<wbr>af<wbr>Regions</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 5 x area_count
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List of areas to use for focus
+ estimation
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Each area is a rectangle plus weight: xmin,<wbr> ymin,<wbr>
+ xmax,<wbr> ymax,<wbr> weight.<wbr> The coordinate system is based on the
+ active pixel array,<wbr> with (0,<wbr>0) being the top-left of the
+ active pixel array,<wbr> and
+ (android.<wbr>sensor.<wbr>info.<wbr>active<wbr>Array<wbr>Size.<wbr>width,<wbr>
+ android.<wbr>sensor.<wbr>info.<wbr>active<wbr>Array<wbr>Size.<wbr>height) being the
+ bottom-right point of the active pixel array.<wbr> The weight
+ should be nonnegative.<wbr> If all regions have 0 weight,<wbr> then
+ no specific focus area needs to be used by the HAL.<wbr> If
+ the focusing region is outside the current
+ android.<wbr>scaler.<wbr>crop<wbr>Region,<wbr> the HAL should ignore the
+ sections outside the region and output the used sections
+ in the frame metadata
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.control.afState">
+ <td class="entry_name">android.<wbr>control.<wbr>af<wbr>State</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">INACTIVE</span>
+ <span class="entry_type_enum_notes">AF off or has not yet tried to scan/<wbr>been asked
+ to scan</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">PASSIVE_SCAN</span>
+ <span class="entry_type_enum_notes">if CONTINUOUS_<wbr>* modes are supported AF is
+ currently doing an AF scan initiated by a continuous
+ autofocus mode</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">PASSIVE_FOCUSED</span>
+ <span class="entry_type_enum_notes">if CONTINUOUS_<wbr>* modes are supported AF currently
+ believes it is in focus,<wbr> but may restart scanning at
+ any time.<wbr></span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">ACTIVE_SCAN</span>
+ <span class="entry_type_enum_notes">if AUTO or MACRO modes are supported AF is doing
+ an AF scan because it was triggered by AF
+ trigger</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FOCUSED_LOCKED</span>
+ <span class="entry_type_enum_notes">if any AF mode besides OFF is supported AF
+ believes it is focused correctly and is
+ locked</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">NOT_FOCUSED_LOCKED</span>
+ <span class="entry_type_enum_notes">if any AF mode besides OFF is supported AF has
+ failed to focus successfully and is
+ locked</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Current state of AF algorithm
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Whenever the AF algorithm state changes,<wbr> a
+ MSG_<wbr>AUTOFOCUS notification must be send if a notification
+ callback is registered.<wbr>
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.control.afTriggerId">
+ <td class="entry_name">android.<wbr>control.<wbr>af<wbr>Trigger<wbr>Id</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ The ID sent with the latest
+ CAMERA2_<wbr>TRIGGER_<wbr>AUTOFOCUS call
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Must be 0 if no CAMERA2_<wbr>TRIGGER_<wbr>AUTOFOCUS trigger
+ received yet by HAL.<wbr> Always updated even if AF algorithm
+ ignores the trigger
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.control.awbMode">
+ <td class="entry_name">android.<wbr>control.<wbr>awb<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">AUTO</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">INCANDESCENT</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FLUORESCENT</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">WARM_FLUORESCENT</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">DAYLIGHT</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">CLOUDY_DAYLIGHT</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">TWILIGHT</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">SHADE</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Whether AWB is currently setting the color
+ transform fields,<wbr> and what its illumination target
+ is
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ [BC - AWB lock,<wbr>AWB modes]
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.control.awbRegions">
+ <td class="entry_name">android.<wbr>control.<wbr>awb<wbr>Regions</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 5 x area_count
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List of areas to use for illuminant
+ estimation
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Only used in AUTO mode.<wbr> Each area is a rectangle
+ plus weight: xmin,<wbr> ymin,<wbr> xmax,<wbr> ymax,<wbr> weight.<wbr> The
+ coordinate system is based on the active pixel array,<wbr>
+ with (0,<wbr>0) being the top-left of the active pixel array,<wbr>
+ and (android.<wbr>sensor.<wbr>info.<wbr>active<wbr>Array<wbr>Size.<wbr>width,<wbr>
+ android.<wbr>sensor.<wbr>info.<wbr>active<wbr>Array<wbr>Size.<wbr>height) being the
+ bottom-right point of the active pixel array.<wbr> The weight
+ should be nonnegative.<wbr> If all regions have 0 weight,<wbr> then
+ no specific metering area needs to be used by the HAL.<wbr> If
+ the metering region is outside the current
+ android.<wbr>scaler.<wbr>crop<wbr>Region,<wbr> the HAL should ignore the
+ sections outside the region and output the used sections
+ in the frame metadata
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.control.awbState">
+ <td class="entry_name">android.<wbr>control.<wbr>awb<wbr>State</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">INACTIVE</span>
+ <span class="entry_type_enum_notes">AWB is not in auto mode</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">SEARCHING</span>
+ <span class="entry_type_enum_notes">AWB doesn't yet have a good set of control
+ values for the current scene</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">CONVERGED</span>
+ <span class="entry_type_enum_notes">AWB has a good set of control values for the
+ current scene</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">LOCKED</span>
+ <span class="entry_type_enum_notes">AE has been locked (aeMode =
+ LOCKED)</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Current state of AWB algorithm
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Whenever the AWB algorithm state changes,<wbr> a
+ MSG_<wbr>AUTOWHITEBALANCE notification must be send if a
+ notification callback is registered.<wbr>
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.control.mode">
+ <td class="entry_name">android.<wbr>control.<wbr>mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ <span class="entry_type_enum_notes">Full application control of pipeline.<wbr> All 3A
+ routines are disabled,<wbr> no other settings in
+ android.<wbr>control.<wbr>* have any effect</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">AUTO</span>
+ <span class="entry_type_enum_notes">Use settings for each individual 3A routine.<wbr>
+ Manual control of capture parameters is disabled.<wbr> All
+ controls in android.<wbr>control.<wbr>* besides sceneMode take
+ effect</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">USE_SCENE_MODE</span>
+ <span class="entry_type_enum_notes">Use specific scene mode.<wbr> Enabling this disables
+ control.<wbr>aeMode,<wbr> control.<wbr>awbMode and control.<wbr>afMode
+ controls; the HAL must ignore those settings while
+ USE_<wbr>SCENE_<wbr>MODE is active (except for FACE_<wbr>PRIORITY
+ scene mode).<wbr> Other control entries are still active.<wbr>
+ This setting can only be used if availableSceneModes !=
+ UNSUPPORTED</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Overall mode of 3A control
+ routines
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ all must be supported
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+
+ <!-- end of section -->
+ <tr><td colspan="7" id="section_demosaic" class="section">demosaic</td></tr>
+
+
+ <tr><td colspan="7" class="kind">controls</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="controls_android.demosaic.mode">
+ <td class="entry_name">android.<wbr>demosaic.<wbr>mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">FAST</span>
+ <span class="entry_type_enum_notes">Minimal or no slowdown of frame rate compared to
+ Bayer RAW output</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">HIGH_QUALITY</span>
+ <span class="entry_type_enum_notes">High-quality may reduce output frame
+ rate</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Controls the quality of the demosaicing
+ processing
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+
+ <!-- end of section -->
+ <tr><td colspan="7" id="section_edge" class="section">edge</td></tr>
+
+
+ <tr><td colspan="7" class="kind">controls</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="controls_android.edge.mode">
+ <td class="entry_name">android.<wbr>edge.<wbr>mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ <span class="entry_type_enum_notes">No edge enhancement is applied</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FAST</span>
+ <span class="entry_type_enum_notes">Must not slow down frame rate relative to raw
+ bayer output</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">HIGH_QUALITY</span>
+ <span class="entry_type_enum_notes">Frame rate may be reduced by high
+ quality</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Operation mode for edge
+ enhancement
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.edge.strength">
+ <td class="entry_name">android.<wbr>edge.<wbr>strength</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Control the amount of edge enhancement
+ applied to the images
+ </td>
+
+ <td class="entry_units">
+ 1-10; 10 is maximum sharpening
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">dynamic</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="dynamic_android.edge.mode">
+ <td class="entry_name">android.<wbr>edge.<wbr>mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ <span class="entry_type_enum_notes">No edge enhancement is applied</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FAST</span>
+ <span class="entry_type_enum_notes">Must not slow down frame rate relative to raw
+ bayer output</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">HIGH_QUALITY</span>
+ <span class="entry_type_enum_notes">Frame rate may be reduced by high
+ quality</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Operation mode for edge
+ enhancement
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+
+ <!-- end of section -->
+ <tr><td colspan="7" id="section_flash" class="section">flash</td></tr>
+
+
+ <tr><td colspan="7" class="kind">controls</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="controls_android.flash.firingPower">
+ <td class="entry_name">android.<wbr>flash.<wbr>firing<wbr>Power</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Power for flash firing/<wbr>torch
+ </td>
+
+ <td class="entry_units">
+ 10 is max power; 0 is no flash.<wbr> Linear
+ </td>
+
+ <td class="entry_range">
+ 0 - 10
+ </td>
+
+ <td class="entry_notes">
+ Power for snapshot may use a different scale than
+ for torch mode.<wbr> Only one entry for torch mode will be
+ used
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.flash.firingTime">
+ <td class="entry_name">android.<wbr>flash.<wbr>firing<wbr>Time</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int64</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Firing time of flash relative to start of
+ exposure
+ </td>
+
+ <td class="entry_units">
+ nanoseconds
+ </td>
+
+ <td class="entry_range">
+ 0-(exposure time-flash duration)
+ </td>
+
+ <td class="entry_notes">
+ Clamped to (0,<wbr> exposure time - flash
+ duration).<wbr>
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.flash.mode">
+ <td class="entry_name">android.<wbr>flash.<wbr>mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ <span class="entry_type_enum_notes">Do not fire the flash for this
+ capture</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">SINGLE</span>
+ <span class="entry_type_enum_notes">if android.<wbr>flash.<wbr>available is true Fire flash
+ for this capture based on firingPower,<wbr>
+ firingTime.<wbr></span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">TORCH</span>
+ <span class="entry_type_enum_notes">if android.<wbr>flash.<wbr>available is true Flash
+ continuously on,<wbr> power set by
+ firingPower</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Select flash operation mode
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">static</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="static_android.flash.info.available">
+ <td class="entry_name">android.<wbr>flash.<wbr>info.<wbr>available</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Whether this camera has a
+ flash
+ </td>
+
+ <td class="entry_units">
+ boolean (0 = false,<wbr> otherwise true)
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ If no flash,<wbr> none of the flash controls do
+ anything.<wbr> All other metadata should return 0
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.flash.info.chargeDuration">
+ <td class="entry_name">android.<wbr>flash.<wbr>info.<wbr>charge<wbr>Duration</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int64</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Time taken before flash can fire
+ again
+ </td>
+
+ <td class="entry_units">
+ nanoseconds
+ </td>
+
+ <td class="entry_range">
+ 0-1e9
+ </td>
+
+ <td class="entry_notes">
+ 1 second too long/<wbr>too short for recharge? Should
+ this be power-dependent?
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+
+
+ <tr class="entry" id="static_android.flash.colorTemperature">
+ <td class="entry_name">android.<wbr>flash.<wbr>color<wbr>Temperature</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ The x,<wbr>y whitepoint of the
+ flash
+ </td>
+
+ <td class="entry_units">
+ pair of floats
+ </td>
+
+ <td class="entry_range">
+ 0-1 for both
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.flash.maxEnergy">
+ <td class="entry_name">android.<wbr>flash.<wbr>max<wbr>Energy</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Max energy output of the flash for a full
+ power single flash
+ </td>
+
+ <td class="entry_units">
+ lumen-seconds
+ </td>
+
+ <td class="entry_range">
+ >= 0
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">dynamic</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="dynamic_android.flash.firingPower">
+ <td class="entry_name">android.<wbr>flash.<wbr>firing<wbr>Power</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Power for flash firing/<wbr>torch
+ </td>
+
+ <td class="entry_units">
+ 10 is max power; 0 is no flash.<wbr> Linear
+ </td>
+
+ <td class="entry_range">
+ 0 - 10
+ </td>
+
+ <td class="entry_notes">
+ Power for snapshot may use a different scale than
+ for torch mode.<wbr> Only one entry for torch mode will be
+ used
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.flash.firingTime">
+ <td class="entry_name">android.<wbr>flash.<wbr>firing<wbr>Time</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int64</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Firing time of flash relative to start of
+ exposure
+ </td>
+
+ <td class="entry_units">
+ nanoseconds
+ </td>
+
+ <td class="entry_range">
+ 0-(exposure time-flash duration)
+ </td>
+
+ <td class="entry_notes">
+ Clamped to (0,<wbr> exposure time - flash
+ duration).<wbr>
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.flash.mode">
+ <td class="entry_name">android.<wbr>flash.<wbr>mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ <span class="entry_type_enum_notes">Do not fire the flash for this
+ capture</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">SINGLE</span>
+ <span class="entry_type_enum_notes">if android.<wbr>flash.<wbr>available is true Fire flash
+ for this capture based on firingPower,<wbr>
+ firingTime.<wbr></span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">TORCH</span>
+ <span class="entry_type_enum_notes">if android.<wbr>flash.<wbr>available is true Flash
+ continuously on,<wbr> power set by
+ firingPower</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Select flash operation mode
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.flash.state">
+ <td class="entry_name">android.<wbr>flash.<wbr>state</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">UNAVAILABLE</span>
+ <span class="entry_type_enum_notes">No flash on camera</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">CHARGING</span>
+ <span class="entry_type_enum_notes">if android.<wbr>flash.<wbr>available is true Flash is
+ charging and cannot be fired</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">READY</span>
+ <span class="entry_type_enum_notes">if android.<wbr>flash.<wbr>available is true Flash is
+ ready to fire</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FIRED</span>
+ <span class="entry_type_enum_notes">if android.<wbr>flash.<wbr>available is true Flash fired
+ for this capture</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Current state of the flash
+ unit
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+
+ <!-- end of section -->
+ <tr><td colspan="7" id="section_geometric" class="section">geometric</td></tr>
+
+
+ <tr><td colspan="7" class="kind">controls</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="controls_android.geometric.mode">
+ <td class="entry_name">android.<wbr>geometric.<wbr>mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ <span class="entry_type_enum_notes">No geometric correction is
+ applied</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FAST</span>
+ <span class="entry_type_enum_notes">Must not slow down frame rate relative to raw
+ bayer output</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">HIGH_QUALITY</span>
+ <span class="entry_type_enum_notes">Frame rate may be reduced by high
+ quality</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Operating mode of geometric
+ correction
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.geometric.strength">
+ <td class="entry_name">android.<wbr>geometric.<wbr>strength</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Control the amount of shading correction
+ applied to the images
+ </td>
+
+ <td class="entry_units">
+ unitless: 1-10; 10 is full shading
+ compensation
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+
+ <!-- end of section -->
+ <tr><td colspan="7" id="section_hotPixel" class="section">hotPixel</td></tr>
+
+
+ <tr><td colspan="7" class="kind">controls</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="controls_android.hotPixel.mode">
+ <td class="entry_name">android.<wbr>hot<wbr>Pixel.<wbr>mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ <span class="entry_type_enum_notes">No hot pixel correction can be
+ applied</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FAST</span>
+ <span class="entry_type_enum_notes">Frame rate must not be reduced compared to raw
+ Bayer output</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">HIGH_QUALITY</span>
+ <span class="entry_type_enum_notes">Frame rate may be reduced by high
+ quality</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Set operational mode for hot pixel
+ correction
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">static</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="static_android.hotPixel.info.map">
+ <td class="entry_name">android.<wbr>hot<wbr>Pixel.<wbr>info.<wbr>map</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 2 x n
+ </span>
+
+ <div class="entry_type_notes">list of coordinates based on android.<wbr>sensor.<wbr>pixel<wbr>Array<wbr>Size</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Location of hot/<wbr>defective pixels on
+ sensor
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">dynamic</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="dynamic_android.hotPixel.mode">
+ <td class="entry_name">android.<wbr>hot<wbr>Pixel.<wbr>mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ <span class="entry_type_enum_notes">No hot pixel correction can be
+ applied</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FAST</span>
+ <span class="entry_type_enum_notes">Frame rate must not be reduced compared to raw
+ Bayer output</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">HIGH_QUALITY</span>
+ <span class="entry_type_enum_notes">Frame rate may be reduced by high
+ quality</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Set operational mode for hot pixel
+ correction
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+
+ <!-- end of section -->
+ <tr><td colspan="7" id="section_jpeg" class="section">jpeg</td></tr>
+
+
+ <tr><td colspan="7" class="kind">controls</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="controls_android.jpeg.gpsCoordinates">
+ <td class="entry_name">android.<wbr>jpeg.<wbr>gps<wbr>Coordinates</td>
+ <td class="entry_type">
+ <span class="entry_type_name">double</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 3
+ </span>
+
+ <div class="entry_type_notes">latitude,<wbr> longitude,<wbr> altitude.<wbr> First two in degrees,<wbr> the third in meters</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ GPS coordinates to include in output JPEG
+ EXIF
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ (-180 - 180],<wbr> [-90,<wbr>90],<wbr> [-inf,<wbr> inf]
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.jpeg.gpsProcessingMethod">
+ <td class="entry_name">android.<wbr>jpeg.<wbr>gps<wbr>Processing<wbr>Method</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ 32 characters describing GPS algorithm to
+ include in EXIF
+ </td>
+
+ <td class="entry_units">
+ UTF-8 null-terminated string
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.jpeg.gpsTimestamp">
+ <td class="entry_name">android.<wbr>jpeg.<wbr>gps<wbr>Timestamp</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int64</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Time GPS fix was made to include in
+ EXIF
+ </td>
+
+ <td class="entry_units">
+ UTC in seconds since January 1,<wbr> 1970
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.jpeg.orientation">
+ <td class="entry_name">android.<wbr>jpeg.<wbr>orientation</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Orientation of JPEG image to
+ write
+ </td>
+
+ <td class="entry_units">
+ Degrees in multiples of 90
+ </td>
+
+ <td class="entry_range">
+ 0,<wbr> 90,<wbr> 180,<wbr> 270
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.jpeg.quality">
+ <td class="entry_name">android.<wbr>jpeg.<wbr>quality</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Compression quality of the final JPEG
+ image
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ 1-100; larger is higher quality
+ </td>
+
+ <td class="entry_notes">
+ 85-95 is typical usage range
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.jpeg.thumbnailQuality">
+ <td class="entry_name">android.<wbr>jpeg.<wbr>thumbnail<wbr>Quality</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Compression quality of JPEG
+ thumbnail
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ 1-100; larger is higher quality
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.jpeg.thumbnailSize">
+ <td class="entry_name">android.<wbr>jpeg.<wbr>thumbnail<wbr>Size</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 2
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Resolution of embedded JPEG
+ thumbnail
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ from android.<wbr>jpeg.<wbr>available<wbr>Thumbnail<wbr>Sizes
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">static</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="static_android.jpeg.availableThumbnailSizes">
+ <td class="entry_name">android.<wbr>jpeg.<wbr>available<wbr>Thumbnail<wbr>Sizes</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 2 x n
+ </span>
+
+ <div class="entry_type_notes">list of resolution pairs</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Supported resolutions for the JPEG
+ thumbnail
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ Must include at least one valid resolution,<wbr> plus
+ (0,<wbr>0) for no thumbnail generation
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.jpeg.maxSize">
+ <td class="entry_name">android.<wbr>jpeg.<wbr>max<wbr>Size</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Maximum size in bytes for the compressed
+ JPEG buffer
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ Must be large enough to fit any JPEG produced by
+ the camera
+ </td>
+
+ <td class="entry_notes">
+ This is used for sizing the gralloc buffers for
+ JPEG
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">dynamic</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="dynamic_android.jpeg.gpsCoordinates">
+ <td class="entry_name">android.<wbr>jpeg.<wbr>gps<wbr>Coordinates</td>
+ <td class="entry_type">
+ <span class="entry_type_name">double</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 3
+ </span>
+
+ <div class="entry_type_notes">latitude,<wbr> longitude,<wbr> altitude.<wbr> First two in degrees,<wbr> the third in meters</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ GPS coordinates to include in output JPEG
+ EXIF
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ (-180 - 180],<wbr> [-90,<wbr>90],<wbr> [-inf,<wbr> inf]
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.jpeg.gpsProcessingMethod">
+ <td class="entry_name">android.<wbr>jpeg.<wbr>gps<wbr>Processing<wbr>Method</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ 32 characters describing GPS algorithm to
+ include in EXIF
+ </td>
+
+ <td class="entry_units">
+ UTF-8 null-terminated string
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.jpeg.gpsTimestamp">
+ <td class="entry_name">android.<wbr>jpeg.<wbr>gps<wbr>Timestamp</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int64</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Time GPS fix was made to include in
+ EXIF
+ </td>
+
+ <td class="entry_units">
+ UTC in seconds since January 1,<wbr> 1970
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.jpeg.orientation">
+ <td class="entry_name">android.<wbr>jpeg.<wbr>orientation</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Orientation of JPEG image to
+ write
+ </td>
+
+ <td class="entry_units">
+ Degrees in multiples of 90
+ </td>
+
+ <td class="entry_range">
+ 0,<wbr> 90,<wbr> 180,<wbr> 270
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.jpeg.quality">
+ <td class="entry_name">android.<wbr>jpeg.<wbr>quality</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Compression quality of the final JPEG
+ image
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ 1-100; larger is higher quality
+ </td>
+
+ <td class="entry_notes">
+ 85-95 is typical usage range
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.jpeg.size">
+ <td class="entry_name">android.<wbr>jpeg.<wbr>size</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ The size of the compressed JPEG image,<wbr> in
+ bytes
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ >= 0
+ </td>
+
+ <td class="entry_notes">
+ If no JPEG output is produced for the request,<wbr>
+ this must be 0.<wbr> Otherwise,<wbr> this describes the real size
+ of the compressed JPEG image placed in the output stream.<wbr>
+ More specifically,<wbr> if android.<wbr>jpeg.<wbr>max<wbr>Size = 1000000,<wbr> and
+ a specific capture has android.<wbr>jpeg.<wbr>size = 500000,<wbr> then
+ the output buffer from the JPEG stream will be 1000000
+ bytes,<wbr> of which the first 500000 make up the real
+ data.<wbr>
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.jpeg.thumbnailQuality">
+ <td class="entry_name">android.<wbr>jpeg.<wbr>thumbnail<wbr>Quality</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Compression quality of JPEG
+ thumbnail
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ 1-100; larger is higher quality
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.jpeg.thumbnailSize">
+ <td class="entry_name">android.<wbr>jpeg.<wbr>thumbnail<wbr>Size</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 2
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Resolution of embedded JPEG
+ thumbnail
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ from android.<wbr>jpeg.<wbr>available<wbr>Thumbnail<wbr>Sizes
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+
+ <!-- end of section -->
+ <tr><td colspan="7" id="section_lens" class="section">lens</td></tr>
+
+
+ <tr><td colspan="7" class="kind">controls</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="controls_android.lens.aperture">
+ <td class="entry_name">android.<wbr>lens.<wbr>aperture</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Size of the lens aperture
+ </td>
+
+ <td class="entry_units">
+ f-number (f/<wbr>NNN)
+ </td>
+
+ <td class="entry_range">
+ android.<wbr>lens.<wbr>info.<wbr>available<wbr>Apertures
+ </td>
+
+ <td class="entry_notes">
+ Will not be supported on most devices.<wbr> Can only
+ pick from supported list
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.lens.filterDensity">
+ <td class="entry_name">android.<wbr>lens.<wbr>filter<wbr>Density</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ State of lens neutral density
+ filter(s)
+ </td>
+
+ <td class="entry_units">
+ number of stops of filtering
+ </td>
+
+ <td class="entry_range">
+ android.<wbr>lens.<wbr>info.<wbr>available<wbr>Filter<wbr>Densities
+ </td>
+
+ <td class="entry_notes">
+ Will not be supported on most devices.<wbr> Can only
+ pick from supported list
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.lens.focalLength">
+ <td class="entry_name">android.<wbr>lens.<wbr>focal<wbr>Length</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Lens optical zoom setting
+ </td>
+
+ <td class="entry_units">
+ focal length in mm
+ </td>
+
+ <td class="entry_range">
+ > 0
+ </td>
+
+ <td class="entry_notes">
+ Will not be supported on most devices.<wbr>
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.lens.focusDistance">
+ <td class="entry_name">android.<wbr>lens.<wbr>focus<wbr>Distance</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Distance to plane of sharpest focus,<wbr>
+ measured from frontmost surface of the lens
+ </td>
+
+ <td class="entry_units">
+ diopters (1/<wbr>m)
+ </td>
+
+ <td class="entry_range">
+ >= 0
+ </td>
+
+ <td class="entry_notes">
+ 0 = infinity focus.<wbr> Used value should be clamped
+ to (0,<wbr>minimum focus distance)
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.lens.opticalStabilizationMode">
+ <td class="entry_name">android.<wbr>lens.<wbr>optical<wbr>Stabilization<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">ON</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Whether optical image stabilization is
+ enabled.<wbr>
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ android.<wbr>lens.<wbr>available<wbr>Optical<wbr>Stabilization
+ </td>
+
+ <td class="entry_notes">
+ Will not be supported on most devices.<wbr>
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">static</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="static_android.lens.info.availableApertures">
+ <td class="entry_name">android.<wbr>lens.<wbr>info.<wbr>available<wbr>Apertures</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List of supported aperture
+ values
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ one entry required,<wbr> > 0
+ </td>
+
+ <td class="entry_notes">
+ If variable aperture not available,<wbr> only setting
+ should be for the fixed aperture
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.lens.info.availableFilterDensities">
+ <td class="entry_name">android.<wbr>lens.<wbr>info.<wbr>available<wbr>Filter<wbr>Densities</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List of supported ND filter
+ values
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ one entry required,<wbr> >= 0
+ </td>
+
+ <td class="entry_notes">
+ If not available,<wbr> only setting is 0.<wbr> Otherwise,<wbr>
+ lists the available exposure index values for dimming
+ (2 would mean the filter is set to reduce incoming
+ light by two stops)
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.lens.info.availableFocalLengths">
+ <td class="entry_name">android.<wbr>lens.<wbr>info.<wbr>available<wbr>Focal<wbr>Lengths</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n
+ </span>
+
+ <div class="entry_type_notes">the list of available focal lengths</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ If fitted with optical zoom,<wbr> what focal
+ lengths are available.<wbr> If not,<wbr> the static focal
+ length
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ > 0
+ </td>
+
+ <td class="entry_notes">
+ If optical zoom not supported,<wbr> only one value
+ should be reported
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.lens.info.availableOpticalStabilization">
+ <td class="entry_name">android.<wbr>lens.<wbr>info.<wbr>available<wbr>Optical<wbr>Stabilization</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n
+ </span>
+
+ <div class="entry_type_notes">list of enums</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List of supported optical image
+ stabilization modes
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.lens.info.geometricCorrectionMap">
+ <td class="entry_name">android.<wbr>lens.<wbr>info.<wbr>geometric<wbr>Correction<wbr>Map</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 2 x 3 x n x m
+ </span>
+
+ <div class="entry_type_notes">2D array of destination coordinate pairs for uniform grid points in source image,<wbr> per color channel.<wbr> Size in the range of 2x3x40x30</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ A low-resolution map for correction of
+ geometric distortions and chromatic aberrations,<wbr> per
+ color channel
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ N,<wbr> M >= 2
+ </td>
+
+ <td class="entry_notes">
+ [DNG wants a function instead].<wbr> What's easiest
+ for implementers? With an array size (M,<wbr> N),<wbr> entry (i,<wbr>
+ j) provides the destination for pixel (i/<wbr>(M-1) * width,<wbr>
+ j/<wbr>(N-1) * height).<wbr> Data is row-major,<wbr> with each array
+ entry being ( (X,<wbr> Y)_<wbr>r,<wbr> (X,<wbr> Y)_<wbr>g,<wbr> (X,<wbr> Y)_<wbr>b ) )
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.lens.info.geometricCorrectionMapSize">
+ <td class="entry_name">android.<wbr>lens.<wbr>info.<wbr>geometric<wbr>Correction<wbr>Map<wbr>Size</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 2
+ </span>
+
+ <div class="entry_type_notes">width and height of geometric correction map</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Dimensions of geometric correction
+ map
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ Both values >= 2
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.lens.info.hyperfocalDistance">
+ <td class="entry_name">android.<wbr>lens.<wbr>info.<wbr>hyperfocal<wbr>Distance</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Hyperfocal distance for this lens; set to
+ 0 if fixed focus
+ </td>
+
+ <td class="entry_units">
+ diopters
+ </td>
+
+ <td class="entry_range">
+ >= 0
+ </td>
+
+ <td class="entry_notes">
+ The hyperfocal distance is used for the old
+ API's 'fixed' setting
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.lens.info.minimumFocusDistance">
+ <td class="entry_name">android.<wbr>lens.<wbr>info.<wbr>minimum<wbr>Focus<wbr>Distance</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Shortest distance from frontmost surface
+ of the lens that can be focused correctly
+ </td>
+
+ <td class="entry_units">
+ diopters
+ </td>
+
+ <td class="entry_range">
+ >= 0
+ </td>
+
+ <td class="entry_notes">
+ If the lens is fixed-focus,<wbr> this should be
+ 0
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.lens.info.shadingMap">
+ <td class="entry_name">android.<wbr>lens.<wbr>info.<wbr>shading<wbr>Map</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 3 x n x m
+ </span>
+
+ <div class="entry_type_notes">2D array of float gain factors per channel to correct for lens falloff.<wbr> Should be on the order of 3x40x30</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ A low-resolution map of lens shading,<wbr> per
+ color channel
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ Each gain factor is >= 1
+ </td>
+
+ <td class="entry_notes">
+ Assume bilinear interpolation of map.<wbr> The least
+ shaded section of the image should have a gain factor
+ of 1; all other sections should have gains above
+ 1.<wbr>
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.lens.info.shadingMapSize">
+ <td class="entry_name">android.<wbr>lens.<wbr>info.<wbr>shading<wbr>Map<wbr>Size</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 2
+ </span>
+
+ <div class="entry_type_notes">width and height of lens shading map</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Dimensions of lens shading
+ map
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ Both values >= 1
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+
+
+ <tr class="entry" id="static_android.lens.facing">
+ <td class="entry_name">android.<wbr>lens.<wbr>facing</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">FRONT</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">BACK</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Direction the camera faces relative to
+ device screen
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.lens.opticalAxisAngle">
+ <td class="entry_name">android.<wbr>lens.<wbr>optical<wbr>Axis<wbr>Angle</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 2
+ </span>
+
+ <div class="entry_type_notes">degrees.<wbr> First defines the angle of separation between the perpendicular to the screen and the camera optical axis.<wbr> The second then defines the clockwise rotation of the optical axis from native device up.<wbr></div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Relative angle of camera optical axis to the
+ perpendicular axis from the display
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ [0-90) for first angle,<wbr> [0-360) for second
+ </td>
+
+ <td class="entry_notes">
+ Examples: (0,<wbr>0) means that the camera optical axis
+ is perpendicular to the display surface; (45,<wbr>0) means
+ that the camera points 45 degrees up when device is held
+ upright; (45,<wbr>90) means the camera points 45 degrees to
+ the right when the device is held upright.<wbr> Use FACING
+ field to determine perpendicular outgoing
+ direction
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.lens.position">
+ <td class="entry_name">android.<wbr>lens.<wbr>position</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 3, location in mm, in the sensor coordinate
+ system
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Coordinates of camera optical axis on
+ device
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">dynamic</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="dynamic_android.lens.aperture">
+ <td class="entry_name">android.<wbr>lens.<wbr>aperture</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Size of the lens aperture
+ </td>
+
+ <td class="entry_units">
+ f-number (f/<wbr>NNN)
+ </td>
+
+ <td class="entry_range">
+ android.<wbr>lens.<wbr>info.<wbr>available<wbr>Apertures
+ </td>
+
+ <td class="entry_notes">
+ Will not be supported on most devices.<wbr> Can only
+ pick from supported list
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.lens.filterDensity">
+ <td class="entry_name">android.<wbr>lens.<wbr>filter<wbr>Density</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ State of lens neutral density
+ filter(s)
+ </td>
+
+ <td class="entry_units">
+ number of stops of filtering
+ </td>
+
+ <td class="entry_range">
+ android.<wbr>lens.<wbr>info.<wbr>available<wbr>Filter<wbr>Densities
+ </td>
+
+ <td class="entry_notes">
+ Will not be supported on most devices.<wbr> Can only
+ pick from supported list
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.lens.focalLength">
+ <td class="entry_name">android.<wbr>lens.<wbr>focal<wbr>Length</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Lens optical zoom setting
+ </td>
+
+ <td class="entry_units">
+ focal length in mm
+ </td>
+
+ <td class="entry_range">
+ > 0
+ </td>
+
+ <td class="entry_notes">
+ Will not be supported on most devices.<wbr>
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.lens.focusDistance">
+ <td class="entry_name">android.<wbr>lens.<wbr>focus<wbr>Distance</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Distance to plane of sharpest focus,<wbr>
+ measured from frontmost surface of the lens
+ </td>
+
+ <td class="entry_units">
+ diopters (1/<wbr>m)
+ </td>
+
+ <td class="entry_range">
+ >= 0
+ </td>
+
+ <td class="entry_notes">
+ Should be zero for fixed-focus cameras
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.lens.focusRange">
+ <td class="entry_name">android.<wbr>lens.<wbr>focus<wbr>Range</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ The range of scene distances that are in
+ sharp focus (depth of field)
+ </td>
+
+ <td class="entry_units">
+ pair of focus distances in diopters: (near,<wbr>
+ far)
+ </td>
+
+ <td class="entry_range">
+ >=0
+ </td>
+
+ <td class="entry_notes">
+ If variable focus not supported,<wbr> can still report
+ fixed depth of field range
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.lens.opticalStabilizationMode">
+ <td class="entry_name">android.<wbr>lens.<wbr>optical<wbr>Stabilization<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">ON</span>
+ <span class="entry_type_enum_optional">optional</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Whether optical image stabilization is
+ enabled.<wbr>
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ android.<wbr>lens.<wbr>available<wbr>Optical<wbr>Stabilization
+ </td>
+
+ <td class="entry_notes">
+ Will not be supported on most devices.<wbr>
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.lens.state">
+ <td class="entry_name">android.<wbr>lens.<wbr>state</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">STATIONARY</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Current lens status
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+
+ <!-- end of section -->
+ <tr><td colspan="7" id="section_noiseReduction" class="section">noiseReduction</td></tr>
+
+
+ <tr><td colspan="7" class="kind">controls</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="controls_android.noiseReduction.mode">
+ <td class="entry_name">android.<wbr>noise<wbr>Reduction.<wbr>mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ <span class="entry_type_enum_notes">No noise reduction is applied</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FAST</span>
+ <span class="entry_type_enum_notes">Must not slow down frame rate relative to raw
+ bayer output</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">HIGH_QUALITY</span>
+ <span class="entry_type_enum_notes">May slow down frame rate to provide highest
+ quality</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Mode of operation for the noise reduction
+ algorithm
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ android.<wbr>noise<wbr>Reduction.<wbr>available<wbr>Modes
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.noiseReduction.strength">
+ <td class="entry_name">android.<wbr>noise<wbr>Reduction.<wbr>strength</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Control the amount of noise reduction
+ applied to the images
+ </td>
+
+ <td class="entry_units">
+ 1-10; 10 is max noise reduction
+ </td>
+
+ <td class="entry_range">
+ 1 - 10
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">dynamic</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="dynamic_android.noiseReduction.mode">
+ <td class="entry_name">android.<wbr>noise<wbr>Reduction.<wbr>mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ <span class="entry_type_enum_notes">No noise reduction is applied</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FAST</span>
+ <span class="entry_type_enum_notes">Must not slow down frame rate relative to raw
+ bayer output</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">HIGH_QUALITY</span>
+ <span class="entry_type_enum_notes">May slow down frame rate to provide highest
+ quality</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Mode of operation for the noise reduction
+ algorithm
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ android.<wbr>noise<wbr>Reduction.<wbr>available<wbr>Modes
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+
+ <!-- end of section -->
+ <tr><td colspan="7" id="section_quirks" class="section">quirks</td></tr>
+
+
+ <tr><td colspan="7" class="kind">static</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="static_android.quirks.meteringCropRegion">
+ <td class="entry_name">android.<wbr>quirks.<wbr>metering<wbr>Crop<wbr>Region</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ If set to 1,<wbr> the camera service does not
+ scale 'normalized' coordinates with respect to the crop
+ region.<wbr> This applies to metering input (a{e,<wbr>f,<wbr>wb}Region
+ and output (face rectangles).<wbr>
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Normalized coordinates refer to those in the
+ (-1000,<wbr>1000) range mentioned in the
+ android.<wbr>hardware.<wbr><wbr>Camera API.<wbr> HAL implementations should
+ instead always use and emit sensor array-relative
+ coordinates for all region data.<wbr> Does not need to be
+ listed in static metadata.<wbr> Support will be removed in
+ future versions of camera service.<wbr>
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.quirks.triggerAfWithAuto">
+ <td class="entry_name">android.<wbr>quirks.<wbr>trigger<wbr>Af<wbr>With<wbr>Auto</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ If set to 1,<wbr> then the camera service always
+ switches to FOCUS_<wbr>MODE_<wbr>AUTO before issuing a AF
+ trigger.<wbr>
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ HAL implementations should implement AF trigger
+ modes for AUTO,<wbr> MACRO,<wbr> CONTINUOUS_<wbr>FOCUS,<wbr> and
+ CONTINUOUS_<wbr>PICTURE modes instead of using this flag.<wbr> Does
+ not need to be listed in static metadata.<wbr> Support will be
+ removed in future versions of camera service
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.quirks.useZslFormat">
+ <td class="entry_name">android.<wbr>quirks.<wbr>use<wbr>Zsl<wbr>Format</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ If set to 1,<wbr> the camera service uses
+ CAMERA2_<wbr>PIXEL_<wbr>FORMAT_<wbr>ZSL instead of
+ HAL_<wbr>PIXEL_<wbr>FORMAT_<wbr>IMPLEMENTATION_<wbr>DEFINED for the zero
+ shutter lag stream
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ HAL implementations should use gralloc usage flags
+ to determine that a stream will be used for
+ zero-shutter-lag,<wbr> instead of relying on an explicit
+ format setting.<wbr> Does not need to be listed in static
+ metadata.<wbr> Support will be removed in future versions of
+ camera service.<wbr>
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+
+ <!-- end of section -->
+ <tr><td colspan="7" id="section_request" class="section">request</td></tr>
+
+
+ <tr><td colspan="7" class="kind">controls</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="controls_android.request.frameCount">
+ <td class="entry_name">android.<wbr>request.<wbr>frame<wbr>Count</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ A frame counter set by the framework.<wbr> Must
+ be maintained unchanged in output frame
+ </td>
+
+ <td class="entry_units">
+ incrementing integer
+ </td>
+
+ <td class="entry_range">
+ Any int
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.request.id">
+ <td class="entry_name">android.<wbr>request.<wbr>id</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ An application-specified ID for the current
+ request.<wbr> Must be maintained unchanged in output
+ frame
+ </td>
+
+ <td class="entry_units">
+ arbitrary integer assigned by application
+ </td>
+
+ <td class="entry_range">
+ Any int
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.request.inputStreams">
+ <td class="entry_name">android.<wbr>request.<wbr>input<wbr>Streams</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List which camera reprocess stream is used
+ for the source of reprocessing data.<wbr>
+ </td>
+
+ <td class="entry_units">
+ List of camera reprocess stream IDs
+ </td>
+
+ <td class="entry_range">
+ Typically,<wbr> only one entry allowed,<wbr> must be a valid
+ reprocess stream ID.<wbr> If android.<wbr>jpeg.<wbr>needs<wbr>Thumbnail is
+ set,<wbr> then multiple reprocess streams may be included in a
+ single request; they must be different scaled versions of
+ the same image.<wbr>
+ </td>
+
+ <td class="entry_notes">
+ Only meaningful when android.<wbr>request.<wbr>type ==
+ REPROCESS.<wbr> Ignored otherwise
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.request.metadataMode">
+ <td class="entry_name">android.<wbr>request.<wbr>metadata<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">NONE</span>
+ <span class="entry_type_enum_notes">No metadata should be produced on output,<wbr> except
+ for application-bound buffer data.<wbr> If no
+ application-bound streams exist,<wbr> no frame should be
+ placed in the output frame queue.<wbr> If such streams
+ exist,<wbr> a frame should be placed on the output queue
+ with null metadata but with the necessary output buffer
+ information.<wbr> Timestamp information should still be
+ included with any output stream buffers</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FULL</span>
+ <span class="entry_type_enum_notes">All metadata should be produced.<wbr> Statistics will
+ only be produced if they are separately
+ enabled</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ How much metadata to produce on
+ output
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.request.outputStreams">
+ <td class="entry_name">android.<wbr>request.<wbr>output<wbr>Streams</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Lists which camera output streams image data
+ from this capture must be sent to
+ </td>
+
+ <td class="entry_units">
+ List of camera stream IDs
+ </td>
+
+ <td class="entry_range">
+ List must only include streams that have been
+ created
+ </td>
+
+ <td class="entry_notes">
+ If no output streams are listed,<wbr> then the image
+ data should simply be discarded.<wbr> The image data must
+ still be captured for metadata and statistics production,<wbr>
+ and the lens and flash must operate as requested.<wbr>
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.request.type">
+ <td class="entry_name">android.<wbr>request.<wbr>type</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">CAPTURE</span>
+ <span class="entry_type_enum_notes">Capture a new image from the imaging hardware,<wbr>
+ and process it according to the
+ settings</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">REPROCESS</span>
+ <span class="entry_type_enum_notes">Process previously captured data; the
+ android.<wbr>request.<wbr>input<wbr>Stream parameter determines the
+ source reprocessing stream.<wbr> TODO: Mark dynamic metadata
+ needed for reprocessing with [RP]</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ The type of the request; either CAPTURE or
+ REPROCESS
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">static</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="static_android.request.maxNumOutputStreams">
+ <td class="entry_name">android.<wbr>request.<wbr>max<wbr>Num<wbr>Output<wbr>Streams</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 3
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ How many output streams can be allocated at
+ the same time for each type of stream
+ </td>
+
+ <td class="entry_units">
+ The number of raw sensor streams; the number of
+ processed,<wbr> uncompressed streams; and the number of
+ JPEG-compressed streams
+ </td>
+
+ <td class="entry_range">
+ >=1 for Raw and JPEG-compressed stream.<wbr> >= 3
+ for processed,<wbr> uncompressed streams
+ </td>
+
+ <td class="entry_notes">
+ Video snapshot with preview callbacks requires 3
+ processed streams (preview,<wbr> record,<wbr> app callbacks) and
+ one JPEG stream (snapshot)
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.request.maxNumReprocessStreams">
+ <td class="entry_name">android.<wbr>request.<wbr>max<wbr>Num<wbr>Reprocess<wbr>Streams</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 1
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ How many reprocessing streams of any type
+ can be allocated at the same time
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ >= 1
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">dynamic</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="dynamic_android.request.frameCount">
+ <td class="entry_name">android.<wbr>request.<wbr>frame<wbr>Count</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Number of frames captured since
+ open()
+ </td>
+
+ <td class="entry_units">
+ count of frames
+ </td>
+
+ <td class="entry_range">
+ > 0
+ </td>
+
+ <td class="entry_notes">
+ Reset on release()
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.request.id">
+ <td class="entry_name">android.<wbr>request.<wbr>id</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ An application-specified ID for the current
+ request.<wbr> Must be maintained unchanged in output
+ frame
+ </td>
+
+ <td class="entry_units">
+ arbitrary integer assigned by application
+ </td>
+
+ <td class="entry_range">
+ Any int
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.request.metadataMode">
+ <td class="entry_name">android.<wbr>request.<wbr>metadata<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">NONE</span>
+ <span class="entry_type_enum_notes">No metadata should be produced on output,<wbr> except
+ for application-bound buffer data.<wbr> If no
+ application-bound streams exist,<wbr> no frame should be
+ placed in the output frame queue.<wbr> If such streams
+ exist,<wbr> a frame should be placed on the output queue
+ with null metadata but with the necessary output buffer
+ information.<wbr> Timestamp information should still be
+ included with any output stream buffers</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FULL</span>
+ <span class="entry_type_enum_notes">All metadata should be produced.<wbr> Statistics will
+ only be produced if they are separately
+ enabled</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ How much metadata to produce on
+ output
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.request.outputStreams">
+ <td class="entry_name">android.<wbr>request.<wbr>output<wbr>Streams</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Lists which camera output streams image data
+ from this capture must be sent to
+ </td>
+
+ <td class="entry_units">
+ List of camera stream IDs
+ </td>
+
+ <td class="entry_range">
+ List must only include streams that have been
+ created
+ </td>
+
+ <td class="entry_notes">
+ If no output streams are listed,<wbr> then the image
+ data should simply be discarded.<wbr> The image data must
+ still be captured for metadata and statistics production,<wbr>
+ and the lens and flash must operate as requested.<wbr>
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+
+ <!-- end of section -->
+ <tr><td colspan="7" id="section_scaler" class="section">scaler</td></tr>
+
+
+ <tr><td colspan="7" class="kind">controls</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="controls_android.scaler.cropRegion">
+ <td class="entry_name">android.<wbr>scaler.<wbr>crop<wbr>Region</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 3
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Top-left corner and width of the output
+ region to select from the active pixel
+ array
+ </td>
+
+ <td class="entry_units">
+ (x,<wbr>y) of top-left corner,<wbr> width of region in
+ pixels; (0,<wbr>0) is top-left corner of
+ android.<wbr>sensor.<wbr>active<wbr>Pixel<wbr>Array
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ [BC - zoom] Height determined based on width and
+ aspect ratio of output stream.<wbr> Negative values for corner
+ are allowed for raw output if full pixel array is larger
+ than active pixel array.<wbr> Width may be rounded to nearest
+ larger supportable width,<wbr> especially for raw output,<wbr>
+ where only a few fixed scales may be possible
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">static</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="static_android.scaler.availableFormats">
+ <td class="entry_name">android.<wbr>scaler.<wbr>available<wbr>Formats</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n
+ </span>
+
+ <div class="entry_type_notes">values from HAL_<wbr>PIXEL_<wbr>FORMAT_<wbr>* in /<wbr>system/<wbr>core/<wbr>include/<wbr>system/<wbr>graphics.<wbr>h</div>
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">RAW_SENSOR</span>
+ <span class="entry_type_enum_value">0x20</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">YV12</span>
+ <span class="entry_type_enum_value">0x32315659</span>
+ <span class="entry_type_enum_notes">YCrCb 4:2:0 Planar</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">YCbCr_420_SP</span>
+ <span class="entry_type_enum_value">0x11</span>
+ <span class="entry_type_enum_notes">NV21</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">JPEG</span>
+ <span class="entry_type_enum_value">0x21</span>
+ <span class="entry_type_enum_notes">BLOB</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List of app-visible formats
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.scaler.availableJpegMinDurations">
+ <td class="entry_name">android.<wbr>scaler.<wbr>available<wbr>Jpeg<wbr>Min<wbr>Durations</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int64</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ The minimum frame duration that is supported
+ for each resolution in availableJpegSizes.<wbr> Should
+ correspond to the frame duration when only that JPEG
+ stream is active,<wbr> with all processing set to
+ FAST
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ When multiple streams are configured,<wbr> the minimum
+ frame duration will be >= max(individual stream min
+ durations)
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.scaler.availableJpegSizes">
+ <td class="entry_name">android.<wbr>scaler.<wbr>available<wbr>Jpeg<wbr>Sizes</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n x 2
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ The resolutions available for output from
+ the JPEG block.<wbr> Listed as width x height
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ Must include: - sensor maximum resolution Should
+ include: - half/<wbr>quarter max resolution
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.scaler.availableMaxDigitalZoom">
+ <td class="entry_name">android.<wbr>scaler.<wbr>available<wbr>Max<wbr>Digital<wbr>Zoom</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ TODO: have a real description here
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.scaler.availableProcessedMinDurations">
+ <td class="entry_name">android.<wbr>scaler.<wbr>available<wbr>Processed<wbr>Min<wbr>Durations</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int64</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ The minimum frame duration that is supported
+ for each resolution in availableProcessedSizes.<wbr> Should
+ correspond to the frame duration when only that processed
+ stream is active,<wbr> with all processing set to
+ FAST
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ When multiple streams are configured,<wbr> the minimum
+ frame duration will be >= max(individual stream min
+ durations)
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.scaler.availableProcessedSizes">
+ <td class="entry_name">android.<wbr>scaler.<wbr>available<wbr>Processed<wbr>Sizes</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n x 2
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ The resolutions available for use with
+ processed output streams,<wbr> such as YV12,<wbr> NV12,<wbr> and
+ platform opaque YUV/<wbr>RGB streams to the GPU or video
+ encoders.<wbr> Listed as width,<wbr> height
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ Must include: - sensor maximum resolution -
+ standard QCIF,<wbr> 240p,<wbr> 480p,<wbr> 720p,<wbr> and 1080p
+ resolutions
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.scaler.availableRawMinDurations">
+ <td class="entry_name">android.<wbr>scaler.<wbr>available<wbr>Raw<wbr>Min<wbr>Durations</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int64</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ The minimum frame duration that is supported
+ for each raw resolution in availableRawSizes.<wbr> Should
+ correspond to the frame duration when only the raw stream
+ is active.<wbr>
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ When multiple streams are configured,<wbr> the minimum
+ frame duration will be >= max(individual stream min
+ durations)
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.scaler.availableRawSizes">
+ <td class="entry_name">android.<wbr>scaler.<wbr>available<wbr>Raw<wbr>Sizes</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n x 2
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ The resolutions available for use with raw
+ sensor output streams,<wbr> listed as width,<wbr>
+ height
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ Must include: - sensor maximum resolution
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.scaler.maxDigitalZoom">
+ <td class="entry_name">android.<wbr>scaler.<wbr>max<wbr>Digital<wbr>Zoom</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ The maximum ratio between active area width
+ and crop region width,<wbr> or between active area height and
+ crop region height,<wbr> if the crop region height is larger
+ than width
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ >=1
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">dynamic</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="dynamic_android.scaler.cropRegion">
+ <td class="entry_name">android.<wbr>scaler.<wbr>crop<wbr>Region</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 3
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Top-left corner and width of the output
+ region to select from the active pixel
+ array
+ </td>
+
+ <td class="entry_units">
+ (x,<wbr>y) of top-left corner,<wbr> width of region in
+ pixels; (0,<wbr>0) is top-left corner of
+ android.<wbr>sensor.<wbr>active<wbr>Pixel<wbr>Array
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ [BC - zoom] Height determined based on width and
+ aspect ratio of output stream.<wbr> Negative values for corner
+ are allowed for raw output if full pixel array is larger
+ than active pixel array.<wbr> Width may be rounded to nearest
+ larger supportable width,<wbr> especially for raw output,<wbr>
+ where only a few fixed scales may be possible
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+
+ <!-- end of section -->
+ <tr><td colspan="7" id="section_sensor" class="section">sensor</td></tr>
+
+
+ <tr><td colspan="7" class="kind">controls</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="controls_android.sensor.exposureTime">
+ <td class="entry_name">android.<wbr>sensor.<wbr>exposure<wbr>Time</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int64</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Duration each pixel is exposed to
+ light
+ </td>
+
+ <td class="entry_units">
+ nanoseconds
+ </td>
+
+ <td class="entry_range">
+ android.<wbr>sensor.<wbr>info.<wbr>exposure<wbr>Time<wbr>Range
+ </td>
+
+ <td class="entry_notes">
+ 1/<wbr>10000 - 30 sec range.<wbr> No bulb mode
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.sensor.frameDuration">
+ <td class="entry_name">android.<wbr>sensor.<wbr>frame<wbr>Duration</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int64</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Duration from start of frame exposure to
+ start of next frame exposure
+ </td>
+
+ <td class="entry_units">
+ nanoseconds
+ </td>
+
+ <td class="entry_range">
+ see android.<wbr>sensor.<wbr>info.<wbr>max<wbr>Frame<wbr>Duration,<wbr>
+ android.<wbr>scaler.<wbr>info.<wbr>available<wbr>Min<wbr>Frame<wbr>Durations
+ </td>
+
+ <td class="entry_notes">
+ Exposure time has priority,<wbr> so duration is set to
+ max(duration,<wbr> exposure time + overhead)
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.sensor.sensitivity">
+ <td class="entry_name">android.<wbr>sensor.<wbr>sensitivity</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Gain applied to image data.<wbr> Must be
+ implemented through analog gain only if set to values
+ below 'maximum analog sensitivity'.<wbr>
+ </td>
+
+ <td class="entry_units">
+ ISO arithmetic units
+ </td>
+
+ <td class="entry_range">
+ android.<wbr>sensor.<wbr>info.<wbr>sensitivity<wbr>Range
+ </td>
+
+ <td class="entry_notes">
+ ISO 12232:2006 REI method
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">static</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="static_android.sensor.info.activeArraySize">
+ <td class="entry_name">android.<wbr>sensor.<wbr>info.<wbr>active<wbr>Array<wbr>Size</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 4
+ </span>
+
+ <div class="entry_type_notes">Four ints defining the active pixel rectangle</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Area of raw data which corresponds to only
+ active pixels; smaller or equal to
+ pixelArraySize.<wbr>
+ </td>
+
+ <td class="entry_units">
+ xmin,<wbr> ymin,<wbr> width,<wbr> height.<wbr> Top left of full
+ pixel array is (0,<wbr>0)
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.info.availableSensitivities">
+ <td class="entry_name">android.<wbr>sensor.<wbr>info.<wbr>available<wbr>Sensitivities</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n
+ </span>
+
+ <div class="entry_type_notes">List of supported sensitivity values</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Range of valid sensitivities
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ Must at least include 100,<wbr> 200,<wbr> 400,<wbr> 800,<wbr>
+ 1600
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.info.colorFilterArrangement">
+ <td class="entry_name">android.<wbr>sensor.<wbr>info.<wbr>color<wbr>Filter<wbr>Arrangement</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">RGGB</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">GRBG</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">GBRG</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">BGGR</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">RGB</span>
+ <span class="entry_type_enum_notes">Sensor is not Bayer; output has 3 16-bit
+ values for each pixel,<wbr> instead of just 1 16-bit value
+ per pixel.<wbr></span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Arrangement of color filters on sensor;
+ represents the colors in the top-left 2x2 section of
+ the sensor,<wbr> in reading order
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.info.exposureTimeRange">
+ <td class="entry_name">android.<wbr>sensor.<wbr>info.<wbr>exposure<wbr>Time<wbr>Range</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int64</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 2
+ </span>
+
+ <div class="entry_type_notes">nanoseconds</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Range of valid exposure
+ times
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ Min <= 100e3 (100 us),<wbr> Max >= 30e9 (30
+ sec)
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.info.maxFrameDuration">
+ <td class="entry_name">android.<wbr>sensor.<wbr>info.<wbr>max<wbr>Frame<wbr>Duration</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int64</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Maximum frame duration (minimum frame
+ rate)
+ </td>
+
+ <td class="entry_units">
+ nanoseconds
+ </td>
+
+ <td class="entry_range">
+ >= 30e9
+ </td>
+
+ <td class="entry_notes">
+ Minimum duration is a function of resolution,<wbr>
+ processing settings.<wbr> See
+ android.<wbr>scaler.<wbr>info.<wbr>available<wbr>Min<wbr>Frame<wbr>Durations
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.info.physicalSize">
+ <td class="entry_name">android.<wbr>sensor.<wbr>info.<wbr>physical<wbr>Size</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 2
+ </span>
+
+ <div class="entry_type_notes">width x height in millimeters</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ The physical dimensions of the full pixel
+ array
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Needed for FOV calculation for old API
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.info.pixelArraySize">
+ <td class="entry_name">android.<wbr>sensor.<wbr>info.<wbr>pixel<wbr>Array<wbr>Size</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 2
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Dimensions of full pixel array,<wbr> possibly
+ including black calibration pixels
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Maximum output resolution for raw format must
+ match this in
+ android.<wbr>scaler.<wbr>info.<wbr>available<wbr>Sizes<wbr>Per<wbr>Format
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.info.whiteLevel">
+ <td class="entry_name">android.<wbr>sensor.<wbr>info.<wbr>white<wbr>Level</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Maximum raw value output by
+ sensor
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ > 1024 (10-bit output)
+ </td>
+
+ <td class="entry_notes">
+ Defines sensor bit depth (10-14 bits is
+ expected)
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+
+
+ <tr class="entry" id="static_android.sensor.baseGainFactor">
+ <td class="entry_name">android.<wbr>sensor.<wbr>base<wbr>Gain<wbr>Factor</td>
+ <td class="entry_type">
+ <span class="entry_type_name">rational</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Gain factor from electrons to raw units when
+ ISO=100
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.blackLevelPattern">
+ <td class="entry_name">android.<wbr>sensor.<wbr>black<wbr>Level<wbr>Pattern</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 4
+ </span>
+
+ <div class="entry_type_notes">2x2 raw count block</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ A fixed black level offset for each of the
+ Bayer mosaic channels
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ >= 0 each
+ </td>
+
+ <td class="entry_notes">
+ As per DNG BlackLevelRepeatDim /<wbr> BlackLevel
+ tags
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.calibrationTransform1">
+ <td class="entry_name">android.<wbr>sensor.<wbr>calibration<wbr>Transform1</td>
+ <td class="entry_type">
+ <span class="entry_type_name">rational</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 9
+ </span>
+
+ <div class="entry_type_notes">3x3 matrix in row-major-order</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Per-device calibration on top of color space
+ transform 1
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.calibrationTransform2">
+ <td class="entry_name">android.<wbr>sensor.<wbr>calibration<wbr>Transform2</td>
+ <td class="entry_type">
+ <span class="entry_type_name">rational</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 9
+ </span>
+
+ <div class="entry_type_notes">3x3 matrix in row-major-order</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Per-device calibration on top of color space
+ transform 2
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.colorTransform1">
+ <td class="entry_name">android.<wbr>sensor.<wbr>color<wbr>Transform1</td>
+ <td class="entry_type">
+ <span class="entry_type_name">rational</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 9
+ </span>
+
+ <div class="entry_type_notes">3x3 matrix in row-major-order</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Linear mapping from XYZ (D50) color space to
+ reference linear sensor color,<wbr> for first reference
+ illuminant
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Use as follows XYZ = inv(transform) * clip( (raw -
+ black level(raw) ) /<wbr> ( white level - max black level) ).<wbr>
+ At least in the simple case
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.colorTransform2">
+ <td class="entry_name">android.<wbr>sensor.<wbr>color<wbr>Transform2</td>
+ <td class="entry_type">
+ <span class="entry_type_name">rational</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 9
+ </span>
+
+ <div class="entry_type_notes">3x3 matrix in row-major-order</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Linear mapping from XYZ (D50) color space to
+ reference linear sensor color,<wbr> for second reference
+ illuminant
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.forwardMatrix1">
+ <td class="entry_name">android.<wbr>sensor.<wbr>forward<wbr>Matrix1</td>
+ <td class="entry_type">
+ <span class="entry_type_name">rational</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 9
+ </span>
+
+ <div class="entry_type_notes">3x3 matrix in row-major-order</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Used by DNG for better WB
+ adaptation
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.forwardMatrix2">
+ <td class="entry_name">android.<wbr>sensor.<wbr>forward<wbr>Matrix2</td>
+ <td class="entry_type">
+ <span class="entry_type_name">rational</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 9
+ </span>
+
+ <div class="entry_type_notes">3x3 matrix in row-major-order</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Used by DNG for better WB
+ adaptation
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.maxAnalogSensitivity">
+ <td class="entry_name">android.<wbr>sensor.<wbr>max<wbr>Analog<wbr>Sensitivity</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Maximum sensitivity that is implemented
+ purely through analog gain
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ For android.<wbr>sensor.<wbr>sensitivity values less than or
+ equal to this,<wbr> all applied gain must be analog.<wbr> For
+ values above this,<wbr> it can be a mix of analog and
+ digital
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.noiseModelCoefficients">
+ <td class="entry_name">android.<wbr>sensor.<wbr>noise<wbr>Model<wbr>Coefficients</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 2
+ </span>
+
+ <div class="entry_type_notes">float constants A,<wbr> B for the noise variance model</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Estimation of sensor noise
+ characteristics
+ </td>
+
+ <td class="entry_units">
+ var(raw pixel value) = electrons * (baseGainFactor
+ * iso/<wbr>100)^2 + A * (baseGainFactor * iso/<wbr>100)^2 +
+ B
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ A represents sensor read noise before analog
+ amplification; B represents noise from A/<wbr>D conversion and
+ other circuits after amplification.<wbr> Both noise sources
+ are assumed to be gaussian,<wbr> independent,<wbr> and not to vary
+ across the sensor
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.orientation">
+ <td class="entry_name">android.<wbr>sensor.<wbr>orientation</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Clockwise angle through which the output
+ image needs to be rotated to be upright on the device
+ screen in its native orientation.<wbr> Also defines the
+ direction of rolling shutter readout,<wbr> which is from top
+ to bottom in the sensor's coordinate system
+ </td>
+
+ <td class="entry_units">
+ degrees clockwise rotation,<wbr> only multiples of
+ 90
+ </td>
+
+ <td class="entry_range">
+ 0,<wbr>90,<wbr>180,<wbr>270
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.referenceIlluminant1">
+ <td class="entry_name">android.<wbr>sensor.<wbr>reference<wbr>Illuminant1</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">DAYLIGHT</span>
+ <span class="entry_type_enum_value">1</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FLUORESCENT</span>
+ <span class="entry_type_enum_value">2</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">TUNGSTEN</span>
+ <span class="entry_type_enum_value">3</span>
+ <span class="entry_type_enum_notes">Incandescent light</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FLASH</span>
+ <span class="entry_type_enum_value">4</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FINE_WEATHER</span>
+ <span class="entry_type_enum_value">9</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">CLOUDY_WEATHER</span>
+ <span class="entry_type_enum_value">10</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">SHADE</span>
+ <span class="entry_type_enum_value">11</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">DAYLIGHT_FLUORESCENT</span>
+ <span class="entry_type_enum_value">12</span>
+ <span class="entry_type_enum_notes">D 5700 - 7100K</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">DAY_WHITE_FLUORESCENT</span>
+ <span class="entry_type_enum_value">13</span>
+ <span class="entry_type_enum_notes">N 4600 - 5400K</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">COOL_WHITE_FLUORESCENT</span>
+ <span class="entry_type_enum_value">14</span>
+ <span class="entry_type_enum_notes">W 3900 - 4500K</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">WHITE_FLUORESCENT</span>
+ <span class="entry_type_enum_value">15</span>
+ <span class="entry_type_enum_notes">WW 3200 - 3700K</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">STANDARD_A</span>
+ <span class="entry_type_enum_value">17</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">STANDARD_B</span>
+ <span class="entry_type_enum_value">18</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">STANDARD_C</span>
+ <span class="entry_type_enum_value">19</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">D55</span>
+ <span class="entry_type_enum_value">20</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">D65</span>
+ <span class="entry_type_enum_value">21</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">D75</span>
+ <span class="entry_type_enum_value">22</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">D50</span>
+ <span class="entry_type_enum_value">23</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">ISO_STUDIO_TUNGSTEN</span>
+ <span class="entry_type_enum_value">24</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Light source used to define transform
+ 1
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ [EXIF LightSource tag] Must all these be
+ supported? Need CCT for each!
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.sensor.referenceIlluminant2">
+ <td class="entry_name">android.<wbr>sensor.<wbr>reference<wbr>Illuminant2</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Light source used to define transform
+ 2
+ </td>
+
+ <td class="entry_units">
+ Same as illuminant 1
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">dynamic</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="dynamic_android.sensor.exposureTime">
+ <td class="entry_name">android.<wbr>sensor.<wbr>exposure<wbr>Time</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int64</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Duration each pixel is exposed to
+ light
+ </td>
+
+ <td class="entry_units">
+ nanoseconds
+ </td>
+
+ <td class="entry_range">
+ android.<wbr>sensor.<wbr>info.<wbr>exposure<wbr>Time<wbr>Range
+ </td>
+
+ <td class="entry_notes">
+ 1/<wbr>10000 - 30 sec range.<wbr> No bulb mode
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.sensor.frameDuration">
+ <td class="entry_name">android.<wbr>sensor.<wbr>frame<wbr>Duration</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int64</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Duration from start of frame exposure to
+ start of next frame exposure
+ </td>
+
+ <td class="entry_units">
+ nanoseconds
+ </td>
+
+ <td class="entry_range">
+ see android.<wbr>sensor.<wbr>info.<wbr>max<wbr>Frame<wbr>Duration,<wbr>
+ android.<wbr>scaler.<wbr>info.<wbr>available<wbr>Min<wbr>Frame<wbr>Durations
+ </td>
+
+ <td class="entry_notes">
+ Exposure time has priority,<wbr> so duration is set to
+ max(duration,<wbr> exposure time + overhead)
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.sensor.sensitivity">
+ <td class="entry_name">android.<wbr>sensor.<wbr>sensitivity</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Gain applied to image data.<wbr> Must be
+ implemented through analog gain only if set to values
+ below 'maximum analog sensitivity'.<wbr>
+ </td>
+
+ <td class="entry_units">
+ ISO arithmetic units
+ </td>
+
+ <td class="entry_range">
+ android.<wbr>sensor.<wbr>info.<wbr>sensitivity<wbr>Range
+ </td>
+
+ <td class="entry_notes">
+ ISO 12232:2006 REI method
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.sensor.timestamp">
+ <td class="entry_name">android.<wbr>sensor.<wbr>timestamp</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int64</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Time at start of exposure of first
+ row
+ </td>
+
+ <td class="entry_units">
+ nanoseconds
+ </td>
+
+ <td class="entry_range">
+ > 0
+ </td>
+
+ <td class="entry_notes">
+ Monotonic,<wbr> should be synced to other timestamps in
+ system
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+
+ <!-- end of section -->
+ <tr><td colspan="7" id="section_shading" class="section">shading</td></tr>
+
+
+ <tr><td colspan="7" class="kind">controls</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="controls_android.shading.mode">
+ <td class="entry_name">android.<wbr>shading.<wbr>mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ <span class="entry_type_enum_notes">No shading correction is applied</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FAST</span>
+ <span class="entry_type_enum_notes">Must not slow down frame rate relative to raw
+ bayer output</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">HIGH_QUALITY</span>
+ <span class="entry_type_enum_notes">Frame rate may be reduced by high
+ quality</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Quality of lens shading correction applied
+ to the image data
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.shading.strength">
+ <td class="entry_name">android.<wbr>shading.<wbr>strength</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Control the amount of shading correction
+ applied to the images
+ </td>
+
+ <td class="entry_units">
+ unitless: 1-10; 10 is full shading
+ compensation
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">dynamic</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="dynamic_android.shading.mode">
+ <td class="entry_name">android.<wbr>shading.<wbr>mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ <span class="entry_type_enum_notes">No shading correction is applied</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FAST</span>
+ <span class="entry_type_enum_notes">Must not slow down frame rate relative to raw
+ bayer output</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">HIGH_QUALITY</span>
+ <span class="entry_type_enum_notes">Frame rate may be reduced by high
+ quality</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Quality of lens shading correction applied
+ to the image data
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+
+ <!-- end of section -->
+ <tr><td colspan="7" id="section_statistics" class="section">statistics</td></tr>
+
+
+ <tr><td colspan="7" class="kind">controls</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="controls_android.statistics.faceDetectMode">
+ <td class="entry_name">android.<wbr>statistics.<wbr>face<wbr>Detect<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">SIMPLE</span>
+ <span class="entry_type_enum_notes">Optional Return rectangle and confidence
+ only</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FULL</span>
+ <span class="entry_type_enum_notes">Optional Return all face
+ metadata</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ State of the face detector
+ unit
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+
+ android.<wbr>statistics.<wbr>available<wbr>Face<wbr>Detect<wbr>Modes
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.statistics.histogramMode">
+ <td class="entry_name">android.<wbr>statistics.<wbr>histogram<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">ON</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Operating mode for histogram
+ generation
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.statistics.sharpnessMapMode">
+ <td class="entry_name">android.<wbr>statistics.<wbr>sharpness<wbr>Map<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">ON</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Operating mode for sharpness map
+ generation
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">static</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="static_android.statistics.info.availableFaceDetectModes">
+ <td class="entry_name">android.<wbr>statistics.<wbr>info.<wbr>available<wbr>Face<wbr>Detect<wbr>Modes</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n
+ </span>
+
+ <div class="entry_type_notes">List of enums</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Which face detection modes are available,<wbr>
+ if any
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ OFF
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.statistics.info.histogramBucketCount">
+ <td class="entry_name">android.<wbr>statistics.<wbr>info.<wbr>histogram<wbr>Bucket<wbr>Count</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Number of histogram buckets
+ supported
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ >= 64
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.statistics.info.maxFaceCount">
+ <td class="entry_name">android.<wbr>statistics.<wbr>info.<wbr>max<wbr>Face<wbr>Count</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ If face detection is supported,<wbr> how many
+ faces can be detected at once
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ >= 4 if availableFaceDetectionModes lists
+ modes besides OFF,<wbr> otherwise 0
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.statistics.info.maxHistogramCount">
+ <td class="entry_name">android.<wbr>statistics.<wbr>info.<wbr>max<wbr>Histogram<wbr>Count</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Maximum value possible for a histogram
+ bucket
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.statistics.info.maxSharpnessMapValue">
+ <td class="entry_name">android.<wbr>statistics.<wbr>info.<wbr>max<wbr>Sharpness<wbr>Map<wbr>Value</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Maximum value possible for a sharpness map
+ region.<wbr>
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="static_android.statistics.info.sharpnessMapSize">
+ <td class="entry_name">android.<wbr>statistics.<wbr>info.<wbr>sharpness<wbr>Map<wbr>Size</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ 2
+ </span>
+
+ <div class="entry_type_notes">width x height</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Dimensions of the sharpness
+ map
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ Must be at least 32 x 32
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">dynamic</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="dynamic_android.statistics.faceDetectMode">
+ <td class="entry_name">android.<wbr>statistics.<wbr>face<wbr>Detect<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">SIMPLE</span>
+ <span class="entry_type_enum_notes">Optional Return rectangle and confidence
+ only</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FULL</span>
+ <span class="entry_type_enum_notes">Optional Return all face
+ metadata</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ State of the face detector
+ unit
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+
+ android.<wbr>statistics.<wbr>available<wbr>Face<wbr>Detect<wbr>Modes
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.statistics.faceIds">
+ <td class="entry_name">android.<wbr>statistics.<wbr>face<wbr>Ids</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List of unique IDs for detected
+ faces
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Only available if faceDetectMode == FULL
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.statistics.faceLandmarks">
+ <td class="entry_name">android.<wbr>statistics.<wbr>face<wbr>Landmarks</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n x 6
+ </span>
+
+ <div class="entry_type_notes">(leftEyeX,<wbr> leftEyeY,<wbr> rightEyeX,<wbr> rightEyeY,<wbr> mouthX,<wbr> mouthY)</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List of landmarks for detected
+ faces
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Only available if faceDetectMode == FULL
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.statistics.faceRectangles">
+ <td class="entry_name">android.<wbr>statistics.<wbr>face<wbr>Rectangles</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n x 4
+ </span>
+
+ <div class="entry_type_notes">(xmin,<wbr> ymin,<wbr> xmax,<wbr> ymax).<wbr> (0,<wbr>0) is top-left of active pixel area</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List of the bounding rectangles for detected
+ faces
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ Only available if faceDetectMode != OFF
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.statistics.faceScores">
+ <td class="entry_name">android.<wbr>statistics.<wbr>face<wbr>Scores</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n
+ </span>
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ List of the face confidence scores for
+ detected faces
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ 0-100
+ </td>
+
+ <td class="entry_notes">
+ Only available if faceDetectMode != OFF
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.statistics.histogram">
+ <td class="entry_name">android.<wbr>statistics.<wbr>histogram</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n x 3
+ </span>
+
+ <div class="entry_type_notes">count of pixels for each color channel that fall into each histogram bucket,<wbr> scaled to be between 0 and maxHistogramCount</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ A 3-channel histogram based on the raw
+ sensor data
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ The k'th bucket (0-based) covers the input range
+ (with w = android.<wbr>sensor.<wbr>info.<wbr>white<wbr>Level) of [ k * w/<wbr>N,<wbr>
+ (k + 1) * w /<wbr> N ).<wbr> If only a monochrome sharpness map is
+ supported,<wbr> all channels should have the same data
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.statistics.histogramMode">
+ <td class="entry_name">android.<wbr>statistics.<wbr>histogram<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">ON</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Operating mode for histogram
+ generation
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.statistics.sharpnessMap">
+ <td class="entry_name">android.<wbr>statistics.<wbr>sharpness<wbr>Map</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n x m x 3
+ </span>
+
+ <div class="entry_type_notes">estimated sharpness for each region of the input image.<wbr> Normalized to be between 0 and maxSharpnessMapValue.<wbr> Higher values mean sharper (better focused)</div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ A 3-channel sharpness map,<wbr> based on the raw
+ sensor data
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ If only a monochrome sharpness map is supported,<wbr>
+ all channels should have the same data
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.statistics.sharpnessMapMode">
+ <td class="entry_name">android.<wbr>statistics.<wbr>sharpness<wbr>Map<wbr>Mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">OFF</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">ON</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Operating mode for sharpness map
+ generation
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+
+ <!-- end of section -->
+ <tr><td colspan="7" id="section_tonemap" class="section">tonemap</td></tr>
+
+
+ <tr><td colspan="7" class="kind">controls</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="controls_android.tonemap.curveBlue">
+ <td class="entry_name">android.<wbr>tonemap.<wbr>curve<wbr>Blue</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Table mapping blue input values to output
+ values
+ </td>
+
+ <td class="entry_units">
+ same as android.<wbr>tonemap.<wbr>curve<wbr>Red
+ </td>
+
+ <td class="entry_range">
+ same as android.<wbr>tonemap.<wbr>curve<wbr>Red
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.tonemap.curveGreen">
+ <td class="entry_name">android.<wbr>tonemap.<wbr>curve<wbr>Green</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Table mapping green input values to output
+ values
+ </td>
+
+ <td class="entry_units">
+ same as android.<wbr>tonemap.<wbr>curve<wbr>Red
+ </td>
+
+ <td class="entry_range">
+ same as android.<wbr>tonemap.<wbr>curve<wbr>Red
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.tonemap.curveRed">
+ <td class="entry_name">android.<wbr>tonemap.<wbr>curve<wbr>Red</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n x 2
+ </span>
+
+ <div class="entry_type_notes">A 1D array of pairs of floats.<wbr> mapping a 0-1 input range to a 0-1 output range.<wbr></div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Table mapping red input values to output
+ values
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ 0-1 on input and output coordinates.<wbr> Max entry
+ count speciied by android.<wbr>tonemap.<wbr>max<wbr>Curve<wbr>Points
+ </td>
+
+ <td class="entry_notes">
+ .<wbr>The input range must be monotonically increasing
+ with N,<wbr> and values between entries should be linearly
+ interpolated.<wbr> For example,<wbr> if the array is: [0.<wbr>0,<wbr> 0.<wbr>0,<wbr>
+ 0.<wbr>3,<wbr> 0.<wbr>5,<wbr> 1.<wbr>0,<wbr> 1.<wbr>0],<wbr> then the input->output mapping
+ for a few sample points would be: 0 -> 0,<wbr> 0.<wbr>15 ->
+ 0.<wbr>25,<wbr> 0.<wbr>3 -> 0.<wbr>5,<wbr> 0.<wbr>5 -> 0.<wbr>64
+ </td>
+
+ <td class="entry_tags">
+ <ul class="entry_tags">
+ </ul>
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="controls_android.tonemap.mode">
+ <td class="entry_name">android.<wbr>tonemap.<wbr>mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">CONTRAST_CURVE</span>
+ <span class="entry_type_enum_notes">Use the tone mapping curve specified in
+ android.<wbr>tonemap.<wbr>curve</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FAST</span>
+ <span class="entry_type_enum_notes">Must not slow down frame rate relative to raw
+ bayer output</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">HIGH_QUALITY</span>
+ <span class="entry_type_enum_notes">Frame rate may be reduced by high
+ quality</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">static</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="static_android.tonemap.maxCurvePoints">
+ <td class="entry_name">android.<wbr>tonemap.<wbr>max<wbr>Curve<wbr>Points</td>
+ <td class="entry_type">
+ <span class="entry_type_name">int32</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Maximum number of supported points in the
+ tonemap curve
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ >= 128
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+ <tr><td colspan="7" class="kind">dynamic</td></tr>
+
+ <thead>
+ <tr>
+ <th class="th_name">Property Name</th>
+ <th class="th_type">Type</th>
+ <th class="th_description">Description</th>
+ <th class="th_units">Units</th>
+ <th class="th_range">Range</th>
+ <th class="th_notes">Notes</th>
+ <th class="th_tags">Tags</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+
+
+
+
+
+
+
+
+ <tr class="entry" id="dynamic_android.tonemap.curveBlue">
+ <td class="entry_name">android.<wbr>tonemap.<wbr>curve<wbr>Blue</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Table mapping blue input values to output
+ values
+ </td>
+
+ <td class="entry_units">
+ same as android.<wbr>tonemap.<wbr>curve<wbr>Red
+ </td>
+
+ <td class="entry_range">
+ same as android.<wbr>tonemap.<wbr>curve<wbr>Red
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.tonemap.curveGreen">
+ <td class="entry_name">android.<wbr>tonemap.<wbr>curve<wbr>Green</td>
+ <td class="entry_type">
+ <span class="entry_type_name">byte</span>
+
+
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Table mapping green input values to output
+ values
+ </td>
+
+ <td class="entry_units">
+ same as android.<wbr>tonemap.<wbr>curve<wbr>Red
+ </td>
+
+ <td class="entry_range">
+ same as android.<wbr>tonemap.<wbr>curve<wbr>Red
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.tonemap.curveRed">
+ <td class="entry_name">android.<wbr>tonemap.<wbr>curve<wbr>Red</td>
+ <td class="entry_type">
+ <span class="entry_type_name">float</span>
+ <span class="entry_type_container">x</span>
+
+ <span class="entry_type_array">
+ n x 2
+ </span>
+
+ <div class="entry_type_notes">A 1D array of pairs of floats.<wbr> mapping a 0-1 input range to a 0-1 output range.<wbr></div>
+
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ Table mapping red input values to output
+ values
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ 0-1 on input and output coordinates.<wbr> Max entry
+ count speciied by android.<wbr>tonemap.<wbr>max<wbr>Curve<wbr>Points
+ </td>
+
+ <td class="entry_notes">
+ .<wbr>The input range must be monotonically increasing
+ with N,<wbr> and values between entries should be linearly
+ interpolated.<wbr> For example,<wbr> if the array is: [0.<wbr>0,<wbr> 0.<wbr>0,<wbr>
+ 0.<wbr>3,<wbr> 0.<wbr>5,<wbr> 1.<wbr>0,<wbr> 1.<wbr>0],<wbr> then the input->output mapping
+ for a few sample points would be: 0 -> 0,<wbr> 0.<wbr>15 ->
+ 0.<wbr>25,<wbr> 0.<wbr>3 -> 0.<wbr>5,<wbr> 0.<wbr>5 -> 0.<wbr>64
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+ <tr class="entry" id="dynamic_android.tonemap.mode">
+ <td class="entry_name">android.<wbr>tonemap.<wbr>mode</td>
+ <td class="entry_type">
+ <span class="entry_type_name">enum</span>
+
+
+
+ <ul class="entry_type_enum">
+ <li>
+ <span class="entry_type_enum_name">CONTRAST_CURVE</span>
+ <span class="entry_type_enum_notes">Use the tone mapping curve specified in
+ android.<wbr>tonemap.<wbr>curve</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">FAST</span>
+ <span class="entry_type_enum_notes">Must not slow down frame rate relative to raw
+ bayer output</span>
+ </li>
+ <li>
+ <span class="entry_type_enum_name">HIGH_QUALITY</span>
+ <span class="entry_type_enum_notes">Frame rate may be reduced by high
+ quality</span>
+ </li>
+ </ul>
+
+ </td> <!-- entry_type -->
+
+ <td class="entry_description">
+ </td>
+
+ <td class="entry_units">
+ </td>
+
+ <td class="entry_range">
+ </td>
+
+ <td class="entry_notes">
+ </td>
+
+ <td class="entry_tags">
+ </td>
+
+ </tr> <!-- end of entry -->
+
+
+
+ <!-- end of kind -->
+ </tbody>
+
+ <!-- end of section -->
+<!-- </namespace> -->
+ </table>
+
+ <div class="tags" id="tag_index">
+ <h2>Tags</h2>
+ <ul>
+ <li id="tag_AWB">AWB -
+ Needed for auto white balance
+
+ <ul class="tags_entries">
+ <li><a href="#controls_android.control.awbMode">android.control.awbMode</a> (controls)</li>
+ </ul>
+ </li> <!-- tag_AWB -->
+ <li id="tag_BC">BC -
+ Needed for backwards compatibility with old Java API
+
+ <ul class="tags_entries">
+ <li><a href="#controls_android.control.aeExposureCompensation">android.control.aeExposureCompensation</a> (controls)</li>
+ <li><a href="#controls_android.control.aeLock">android.control.aeLock</a> (controls)</li>
+ <li><a href="#controls_android.control.aeMode">android.control.aeMode</a> (controls)</li>
+ <li><a href="#controls_android.control.aeRegions">android.control.aeRegions</a> (controls)</li>
+ <li><a href="#controls_android.control.aeTargetFpsRange">android.control.aeTargetFpsRange</a> (controls)</li>
+ <li><a href="#controls_android.control.afMode">android.control.afMode</a> (controls)</li>
+ <li><a href="#controls_android.control.afRegions">android.control.afRegions</a> (controls)</li>
+ <li><a href="#controls_android.control.awbLock">android.control.awbLock</a> (controls)</li>
+ <li><a href="#controls_android.control.awbMode">android.control.awbMode</a> (controls)</li>
+ <li><a href="#controls_android.control.awbRegions">android.control.awbRegions</a> (controls)</li>
+ <li><a href="#controls_android.control.captureIntent">android.control.captureIntent</a> (controls)</li>
+ <li><a href="#controls_android.control.effectMode">android.control.effectMode</a> (controls)</li>
+ <li><a href="#controls_android.control.mode">android.control.mode</a> (controls)</li>
+ <li><a href="#controls_android.control.sceneMode">android.control.sceneMode</a> (controls)</li>
+ <li><a href="#controls_android.control.videoStabilizationMode">android.control.videoStabilizationMode</a> (controls)</li>
+ <li><a href="#static_android.control.aeCompensationRange">android.control.aeCompensationRange</a> (static)</li>
+ <li><a href="#static_android.control.aeCompensationStep">android.control.aeCompensationStep</a> (static)</li>
+ <li><a href="#static_android.control.afAvailableModes">android.control.afAvailableModes</a> (static)</li>
+ <li><a href="#static_android.control.availableEffects">android.control.availableEffects</a> (static)</li>
+ <li><a href="#static_android.control.availableSceneModes">android.control.availableSceneModes</a> (static)</li>
+ <li><a href="#static_android.control.availableVideoStabilizationModes">android.control.availableVideoStabilizationModes</a> (static)</li>
+ <li><a href="#static_android.control.awbAvailableModes">android.control.awbAvailableModes</a> (static)</li>
+ <li><a href="#static_android.control.maxRegions">android.control.maxRegions</a> (static)</li>
+ <li><a href="#static_android.control.sceneModeOverrides">android.control.sceneModeOverrides</a> (static)</li>
+ <li><a href="#controls_android.flash.mode">android.flash.mode</a> (controls)</li>
+ <li><a href="#static_android.flash.info.available">android.flash.info.available</a> (static)</li>
+ <li><a href="#controls_android.jpeg.gpsCoordinates">android.jpeg.gpsCoordinates</a> (controls)</li>
+ <li><a href="#controls_android.jpeg.gpsProcessingMethod">android.jpeg.gpsProcessingMethod</a> (controls)</li>
+ <li><a href="#controls_android.jpeg.gpsTimestamp">android.jpeg.gpsTimestamp</a> (controls)</li>
+ <li><a href="#controls_android.jpeg.orientation">android.jpeg.orientation</a> (controls)</li>
+ <li><a href="#controls_android.jpeg.quality">android.jpeg.quality</a> (controls)</li>
+ <li><a href="#controls_android.jpeg.thumbnailQuality">android.jpeg.thumbnailQuality</a> (controls)</li>
+ <li><a href="#controls_android.jpeg.thumbnailSize">android.jpeg.thumbnailSize</a> (controls)</li>
+ <li><a href="#static_android.jpeg.availableThumbnailSizes">android.jpeg.availableThumbnailSizes</a> (static)</li>
+ <li><a href="#controls_android.lens.focusDistance">android.lens.focusDistance</a> (controls)</li>
+ <li><a href="#static_android.lens.info.availableFocalLengths">android.lens.info.availableFocalLengths</a> (static)</li>
+ <li><a href="#static_android.lens.info.hyperfocalDistance">android.lens.info.hyperfocalDistance</a> (static)</li>
+ <li><a href="#dynamic_android.lens.focusRange">android.lens.focusRange</a> (dynamic)</li>
+ <li><a href="#static_android.request.maxNumOutputStreams">android.request.maxNumOutputStreams</a> (static)</li>
+ <li><a href="#controls_android.scaler.cropRegion">android.scaler.cropRegion</a> (controls)</li>
+ <li><a href="#static_android.scaler.availableFormats">android.scaler.availableFormats</a> (static)</li>
+ <li><a href="#static_android.scaler.availableJpegMinDurations">android.scaler.availableJpegMinDurations</a> (static)</li>
+ <li><a href="#static_android.scaler.availableJpegSizes">android.scaler.availableJpegSizes</a> (static)</li>
+ <li><a href="#static_android.scaler.availableProcessedMinDurations">android.scaler.availableProcessedMinDurations</a> (static)</li>
+ <li><a href="#static_android.scaler.availableProcessedSizes">android.scaler.availableProcessedSizes</a> (static)</li>
+ <li><a href="#static_android.scaler.availableRawMinDurations">android.scaler.availableRawMinDurations</a> (static)</li>
+ <li><a href="#static_android.scaler.maxDigitalZoom">android.scaler.maxDigitalZoom</a> (static)</li>
+ <li><a href="#controls_android.sensor.frameDuration">android.sensor.frameDuration</a> (controls)</li>
+ <li><a href="#static_android.sensor.info.availableSensitivities">android.sensor.info.availableSensitivities</a> (static)</li>
+ <li><a href="#static_android.sensor.info.maxFrameDuration">android.sensor.info.maxFrameDuration</a> (static)</li>
+ <li><a href="#static_android.sensor.info.physicalSize">android.sensor.info.physicalSize</a> (static)</li>
+ <li><a href="#static_android.sensor.info.pixelArraySize">android.sensor.info.pixelArraySize</a> (static)</li>
+ <li><a href="#static_android.sensor.orientation">android.sensor.orientation</a> (static)</li>
+ <li><a href="#dynamic_android.sensor.timestamp">android.sensor.timestamp</a> (dynamic)</li>
+ <li><a href="#controls_android.statistics.faceDetectMode">android.statistics.faceDetectMode</a> (controls)</li>
+ <li><a href="#dynamic_android.statistics.faceIds">android.statistics.faceIds</a> (dynamic)</li>
+ <li><a href="#dynamic_android.statistics.faceLandmarks">android.statistics.faceLandmarks</a> (dynamic)</li>
+ <li><a href="#dynamic_android.statistics.faceRectangles">android.statistics.faceRectangles</a> (dynamic)</li>
+ <li><a href="#dynamic_android.statistics.faceScores">android.statistics.faceScores</a> (dynamic)</li>
+ <li><a href="#dynamic_android.lens.focalLength">android.lens.focalLength</a> (dynamic)</li>
+ <li><a href="#dynamic_android.lens.focusDistance">android.lens.focusDistance</a> (dynamic)</li>
+ </ul>
+ </li> <!-- tag_BC -->
+ <li id="tag_V1">V1 -
+ New features for first camera 2 release (API1)
+
+ <ul class="tags_entries">
+ <li><a href="#controls_android.demosaic.mode">android.demosaic.mode</a> (controls)</li>
+ <li><a href="#controls_android.flash.firingPower">android.flash.firingPower</a> (controls)</li>
+ <li><a href="#controls_android.flash.firingTime">android.flash.firingTime</a> (controls)</li>
+ <li><a href="#static_android.flash.info.chargeDuration">android.flash.info.chargeDuration</a> (static)</li>
+ <li><a href="#controls_android.hotPixel.mode">android.hotPixel.mode</a> (controls)</li>
+ <li><a href="#controls_android.lens.aperture">android.lens.aperture</a> (controls)</li>
+ <li><a href="#controls_android.lens.filterDensity">android.lens.filterDensity</a> (controls)</li>
+ <li><a href="#controls_android.lens.focalLength">android.lens.focalLength</a> (controls)</li>
+ <li><a href="#controls_android.lens.focusDistance">android.lens.focusDistance</a> (controls)</li>
+ <li><a href="#controls_android.lens.opticalStabilizationMode">android.lens.opticalStabilizationMode</a> (controls)</li>
+ <li><a href="#static_android.lens.info.availableApertures">android.lens.info.availableApertures</a> (static)</li>
+ <li><a href="#static_android.lens.info.availableFilterDensities">android.lens.info.availableFilterDensities</a> (static)</li>
+ <li><a href="#static_android.lens.info.availableFocalLengths">android.lens.info.availableFocalLengths</a> (static)</li>
+ <li><a href="#static_android.lens.info.availableOpticalStabilization">android.lens.info.availableOpticalStabilization</a> (static)</li>
+ <li><a href="#static_android.lens.info.geometricCorrectionMapSize">android.lens.info.geometricCorrectionMapSize</a> (static)</li>
+ <li><a href="#static_android.lens.info.minimumFocusDistance">android.lens.info.minimumFocusDistance</a> (static)</li>
+ <li><a href="#static_android.lens.info.shadingMapSize">android.lens.info.shadingMapSize</a> (static)</li>
+ <li><a href="#static_android.lens.position">android.lens.position</a> (static)</li>
+ <li><a href="#dynamic_android.lens.state">android.lens.state</a> (dynamic)</li>
+ <li><a href="#controls_android.noiseReduction.mode">android.noiseReduction.mode</a> (controls)</li>
+ <li><a href="#controls_android.request.id">android.request.id</a> (controls)</li>
+ <li><a href="#controls_android.sensor.exposureTime">android.sensor.exposureTime</a> (controls)</li>
+ <li><a href="#controls_android.sensor.frameDuration">android.sensor.frameDuration</a> (controls)</li>
+ <li><a href="#controls_android.sensor.sensitivity">android.sensor.sensitivity</a> (controls)</li>
+ <li><a href="#static_android.sensor.info.availableSensitivities">android.sensor.info.availableSensitivities</a> (static)</li>
+ <li><a href="#static_android.sensor.info.exposureTimeRange">android.sensor.info.exposureTimeRange</a> (static)</li>
+ <li><a href="#static_android.sensor.info.maxFrameDuration">android.sensor.info.maxFrameDuration</a> (static)</li>
+ <li><a href="#static_android.sensor.info.physicalSize">android.sensor.info.physicalSize</a> (static)</li>
+ <li><a href="#static_android.sensor.baseGainFactor">android.sensor.baseGainFactor</a> (static)</li>
+ <li><a href="#static_android.sensor.maxAnalogSensitivity">android.sensor.maxAnalogSensitivity</a> (static)</li>
+ <li><a href="#static_android.sensor.noiseModelCoefficients">android.sensor.noiseModelCoefficients</a> (static)</li>
+ <li><a href="#controls_android.statistics.histogramMode">android.statistics.histogramMode</a> (controls)</li>
+ <li><a href="#controls_android.statistics.sharpnessMapMode">android.statistics.sharpnessMapMode</a> (controls)</li>
+ <li><a href="#dynamic_android.statistics.histogram">android.statistics.histogram</a> (dynamic)</li>
+ <li><a href="#dynamic_android.statistics.sharpnessMap">android.statistics.sharpnessMap</a> (dynamic)</li>
+ <li><a href="#dynamic_android.hotPixel.mode">android.hotPixel.mode</a> (dynamic)</li>
+ <li><a href="#dynamic_android.lens.aperture">android.lens.aperture</a> (dynamic)</li>
+ <li><a href="#dynamic_android.lens.filterDensity">android.lens.filterDensity</a> (dynamic)</li>
+ <li><a href="#dynamic_android.lens.opticalStabilizationMode">android.lens.opticalStabilizationMode</a> (dynamic)</li>
+ </ul>
+ </li> <!-- tag_V1 -->
+ <li id="tag_ADV">ADV - None
+ <ul class="tags_entries">
+ <li><a href="#static_android.flash.colorTemperature">android.flash.colorTemperature</a> (static)</li>
+ <li><a href="#static_android.flash.maxEnergy">android.flash.maxEnergy</a> (static)</li>
+ <li><a href="#controls_android.geometric.strength">android.geometric.strength</a> (controls)</li>
+ <li><a href="#static_android.hotPixel.info.map">android.hotPixel.info.map</a> (static)</li>
+ <li><a href="#static_android.lens.opticalAxisAngle">android.lens.opticalAxisAngle</a> (static)</li>
+ <li><a href="#controls_android.shading.strength">android.shading.strength</a> (controls)</li>
+ </ul>
+ </li> <!-- tag_ADV -->
+ <li id="tag_DNG">DNG -
+ Needed for DNG file support
+
+ <ul class="tags_entries">
+ <li><a href="#static_android.lens.info.geometricCorrectionMap">android.lens.info.geometricCorrectionMap</a> (static)</li>
+ <li><a href="#static_android.lens.info.shadingMap">android.lens.info.shadingMap</a> (static)</li>
+ <li><a href="#static_android.sensor.info.activeArraySize">android.sensor.info.activeArraySize</a> (static)</li>
+ <li><a href="#static_android.sensor.info.colorFilterArrangement">android.sensor.info.colorFilterArrangement</a> (static)</li>
+ <li><a href="#static_android.sensor.info.pixelArraySize">android.sensor.info.pixelArraySize</a> (static)</li>
+ <li><a href="#static_android.sensor.info.whiteLevel">android.sensor.info.whiteLevel</a> (static)</li>
+ <li><a href="#static_android.sensor.blackLevelPattern">android.sensor.blackLevelPattern</a> (static)</li>
+ <li><a href="#static_android.sensor.calibrationTransform1">android.sensor.calibrationTransform1</a> (static)</li>
+ <li><a href="#static_android.sensor.calibrationTransform2">android.sensor.calibrationTransform2</a> (static)</li>
+ <li><a href="#static_android.sensor.colorTransform1">android.sensor.colorTransform1</a> (static)</li>
+ <li><a href="#static_android.sensor.colorTransform2">android.sensor.colorTransform2</a> (static)</li>
+ <li><a href="#static_android.sensor.forwardMatrix1">android.sensor.forwardMatrix1</a> (static)</li>
+ <li><a href="#static_android.sensor.forwardMatrix2">android.sensor.forwardMatrix2</a> (static)</li>
+ <li><a href="#static_android.sensor.referenceIlluminant1">android.sensor.referenceIlluminant1</a> (static)</li>
+ <li><a href="#controls_android.tonemap.curveRed">android.tonemap.curveRed</a> (controls)</li>
+ </ul>
+ </li> <!-- tag_DNG -->
+ <li id="tag_EXIF">EXIF - None
+ <ul class="tags_entries">
+ <li><a href="#static_android.sensor.referenceIlluminant1">android.sensor.referenceIlluminant1</a> (static)</li>
+ </ul>
+ </li> <!-- tag_EXIF -->
+ </ul>
+ </div>
+
+ [ <a href="#">top</a> ]
+
+</body>
+</html>
+
diff --git a/camera/include/system/camera_metadata_tags.h b/camera/include/system/camera_metadata_tags.h
index 796e571..c5fbec2 100644
--- a/camera/include/system/camera_metadata_tags.h
+++ b/camera/include/system/camera_metadata_tags.h
@@ -20,6 +20,12 @@
* Include camera_metadata.h instead.
*/
+/**
+ * ! Do not edit this file directly !
+ *
+ * Generated automatically from camera_metadata_tags.mako
+ */
+
/** TODO: Nearly every enum in this file needs a description */
/**
@@ -28,83 +34,63 @@
* New sections must be added right before ANDROID_SECTION_COUNT to maintain
* existing enumerations.
*/
-enum {
- ANDROID_REQUEST = 0,
- ANDROID_LENS,
- ANDROID_LENS_INFO,
- ANDROID_SENSOR,
- ANDROID_SENSOR_INFO,
+typedef enum camera_metadata_section {
+ ANDROID_COLOR_CORRECTION,
+ ANDROID_CONTROL,
+ ANDROID_DEMOSAIC,
+ ANDROID_EDGE,
ANDROID_FLASH,
ANDROID_FLASH_INFO,
+ ANDROID_GEOMETRIC,
ANDROID_HOT_PIXEL,
ANDROID_HOT_PIXEL_INFO,
- ANDROID_DEMOSAIC,
- ANDROID_DEMOSAIC_INFO,
- ANDROID_NOISE,
- ANDROID_NOISE_INFO,
- ANDROID_SHADING,
- ANDROID_SHADING_INFO,
- ANDROID_GEOMETRIC,
- ANDROID_GEOMETRIC_INFO,
- ANDROID_COLOR,
- ANDROID_COLOR_INFO,
- ANDROID_TONEMAP,
- ANDROID_TONEMAP_INFO,
- ANDROID_EDGE,
- ANDROID_EDGE_INFO,
- ANDROID_SCALER,
- ANDROID_SCALER_INFO,
ANDROID_JPEG,
- ANDROID_JPEG_INFO,
- ANDROID_STATS,
- ANDROID_STATS_INFO,
- ANDROID_CONTROL,
- ANDROID_CONTROL_INFO,
- ANDROID_QUIRKS_INFO,
+ ANDROID_LENS,
+ ANDROID_LENS_INFO,
+ ANDROID_NOISE_REDUCTION,
+ ANDROID_QUIRKS,
+ ANDROID_REQUEST,
+ ANDROID_SCALER,
+ ANDROID_SENSOR,
+ ANDROID_SENSOR_INFO,
+ ANDROID_SHADING,
+ ANDROID_STATISTICS,
+ ANDROID_STATISTICS_INFO,
+ ANDROID_TONEMAP,
ANDROID_SECTION_COUNT,
VENDOR_SECTION = 0x8000
-};
+} camera_metadata_section_t;
/**
* Hierarchy positions in enum space. All vendor extension tags must be
* defined with tag >= VENDOR_SECTION_START
*/
-enum {
- ANDROID_REQUEST_START = ANDROID_REQUEST << 16,
- ANDROID_LENS_START = ANDROID_LENS << 16,
- ANDROID_LENS_INFO_START = ANDROID_LENS_INFO << 16,
- ANDROID_SENSOR_START = ANDROID_SENSOR << 16,
- ANDROID_SENSOR_INFO_START = ANDROID_SENSOR_INFO << 16,
- ANDROID_FLASH_START = ANDROID_FLASH << 16,
- ANDROID_FLASH_INFO_START = ANDROID_FLASH_INFO << 16,
- ANDROID_HOT_PIXEL_START = ANDROID_HOT_PIXEL << 16,
- ANDROID_HOT_PIXEL_INFO_START = ANDROID_HOT_PIXEL_INFO << 16,
- ANDROID_DEMOSAIC_START = ANDROID_DEMOSAIC << 16,
- ANDROID_DEMOSAIC_INFO_START = ANDROID_DEMOSAIC_INFO << 16,
- ANDROID_NOISE_START = ANDROID_NOISE << 16,
- ANDROID_NOISE_INFO_START = ANDROID_NOISE_INFO << 16,
- ANDROID_SHADING_START = ANDROID_SHADING << 16,
- ANDROID_SHADING_INFO_START = ANDROID_SHADING_INFO << 16,
- ANDROID_GEOMETRIC_START = ANDROID_GEOMETRIC << 16,
- ANDROID_GEOMETRIC_INFO_START = ANDROID_GEOMETRIC_INFO << 16,
- ANDROID_COLOR_START = ANDROID_COLOR << 16,
- ANDROID_COLOR_INFO_START = ANDROID_COLOR_INFO << 16,
- ANDROID_TONEMAP_START = ANDROID_TONEMAP << 16,
- ANDROID_TONEMAP_INFO_START = ANDROID_TONEMAP_INFO << 16,
- ANDROID_EDGE_START = ANDROID_EDGE << 16,
- ANDROID_EDGE_INFO_START = ANDROID_EDGE_INFO << 16,
- ANDROID_SCALER_START = ANDROID_SCALER << 16,
- ANDROID_SCALER_INFO_START = ANDROID_SCALER_INFO << 16,
- ANDROID_JPEG_START = ANDROID_JPEG << 16,
- ANDROID_JPEG_INFO_START = ANDROID_JPEG_INFO << 16,
- ANDROID_STATS_START = ANDROID_STATS << 16,
- ANDROID_STATS_INFO_START = ANDROID_STATS_INFO << 16,
- ANDROID_CONTROL_START = ANDROID_CONTROL << 16,
- ANDROID_CONTROL_INFO_START = ANDROID_CONTROL_INFO << 16,
- ANDROID_QUIRKS_INFO_START = ANDROID_QUIRKS_INFO << 16,
- VENDOR_SECTION_START = VENDOR_SECTION << 16
-};
+typedef enum camera_metadata_section_start {
+ ANDROID_COLOR_CORRECTION_START = ANDROID_COLOR_CORRECTION << 16,
+ ANDROID_CONTROL_START = ANDROID_CONTROL << 16,
+ ANDROID_DEMOSAIC_START = ANDROID_DEMOSAIC << 16,
+ ANDROID_EDGE_START = ANDROID_EDGE << 16,
+ ANDROID_FLASH_START = ANDROID_FLASH << 16,
+ ANDROID_FLASH_INFO_START = ANDROID_FLASH_INFO << 16,
+ ANDROID_GEOMETRIC_START = ANDROID_GEOMETRIC << 16,
+ ANDROID_HOT_PIXEL_START = ANDROID_HOT_PIXEL << 16,
+ ANDROID_HOT_PIXEL_INFO_START = ANDROID_HOT_PIXEL_INFO << 16,
+ ANDROID_JPEG_START = ANDROID_JPEG << 16,
+ ANDROID_LENS_START = ANDROID_LENS << 16,
+ ANDROID_LENS_INFO_START = ANDROID_LENS_INFO << 16,
+ ANDROID_NOISE_REDUCTION_START = ANDROID_NOISE_REDUCTION << 16,
+ ANDROID_QUIRKS_START = ANDROID_QUIRKS << 16,
+ ANDROID_REQUEST_START = ANDROID_REQUEST << 16,
+ ANDROID_SCALER_START = ANDROID_SCALER << 16,
+ ANDROID_SENSOR_START = ANDROID_SENSOR << 16,
+ ANDROID_SENSOR_INFO_START = ANDROID_SENSOR_INFO << 16,
+ ANDROID_SHADING_START = ANDROID_SHADING << 16,
+ ANDROID_STATISTICS_START = ANDROID_STATISTICS << 16,
+ ANDROID_STATISTICS_INFO_START = ANDROID_STATISTICS_INFO << 16,
+ ANDROID_TONEMAP_START = ANDROID_TONEMAP << 16,
+ VENDOR_SECTION_START = VENDOR_SECTION << 16
+} camera_metadata_section_start_t;
/**
* Main enum for defining camera metadata tags. New entries must always go
@@ -112,318 +98,306 @@
* addition, the name and type of the tag needs to be added to
* system/media/camera/src/camera_metadata_tag_info.c
*/
-enum {
- ANDROID_REQUEST_ID = ANDROID_REQUEST_START,
- ANDROID_REQUEST_TYPE,
- ANDROID_REQUEST_METADATA_MODE,
- ANDROID_REQUEST_OUTPUT_STREAMS,
- ANDROID_REQUEST_INPUT_STREAMS,
- ANDROID_REQUEST_FRAME_COUNT,
- ANDROID_REQUEST_END,
+typedef enum camera_metadata_tag {
+ ANDROID_COLOR_CORRECTION_MODE = ANDROID_COLOR_CORRECTION_START,
+ ANDROID_COLOR_CORRECTION_TRANSFORM,
+ ANDROID_COLOR_CORRECTION_END,
- ANDROID_LENS_FOCUS_DISTANCE = ANDROID_LENS_START,
- ANDROID_LENS_APERTURE,
- ANDROID_LENS_FOCAL_LENGTH,
- ANDROID_LENS_FILTER_DENSITY,
- ANDROID_LENS_OPTICAL_STABILIZATION_MODE,
- ANDROID_LENS_FOCUS_RANGE,
- ANDROID_LENS_END,
+ ANDROID_CONTROL_AE_ANTIBANDING_MODE
+ = ANDROID_CONTROL_START,
+ ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION,
+ ANDROID_CONTROL_AE_LOCK,
+ ANDROID_CONTROL_AE_MODE,
+ ANDROID_CONTROL_AE_REGIONS,
+ ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
+ ANDROID_CONTROL_AF_MODE,
+ ANDROID_CONTROL_AF_REGIONS,
+ ANDROID_CONTROL_AWB_LOCK,
+ ANDROID_CONTROL_AWB_MODE,
+ ANDROID_CONTROL_AWB_REGIONS,
+ ANDROID_CONTROL_CAPTURE_INTENT,
+ ANDROID_CONTROL_EFFECT_MODE,
+ ANDROID_CONTROL_MODE,
+ ANDROID_CONTROL_SCENE_MODE,
+ ANDROID_CONTROL_VIDEO_STABILIZATION_MODE,
+ ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES,
+ ANDROID_CONTROL_AE_AVAILABLE_MODES,
+ ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES,
+ ANDROID_CONTROL_AE_COMPENSATION_RANGE,
+ ANDROID_CONTROL_AE_COMPENSATION_STEP,
+ ANDROID_CONTROL_AF_AVAILABLE_MODES,
+ ANDROID_CONTROL_AVAILABLE_EFFECTS,
+ ANDROID_CONTROL_AVAILABLE_SCENE_MODES,
+ ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES,
+ ANDROID_CONTROL_AWB_AVAILABLE_MODES,
+ ANDROID_CONTROL_MAX_REGIONS,
+ ANDROID_CONTROL_SCENE_MODE_OVERRIDES,
+ ANDROID_CONTROL_AE_PRECAPTURE_ID,
+ ANDROID_CONTROL_AE_STATE,
+ ANDROID_CONTROL_AF_STATE,
+ ANDROID_CONTROL_AF_TRIGGER_ID,
+ ANDROID_CONTROL_AWB_STATE,
+ ANDROID_CONTROL_END,
- ANDROID_LENS_MINIMUM_FOCUS_DISTANCE = ANDROID_LENS_INFO_START,
- ANDROID_LENS_HYPERFOCAL_DISTANCE,
- ANDROID_LENS_AVAILABLE_FOCAL_LENGTHS,
- ANDROID_LENS_AVAILABLE_APERTURES,
- ANDROID_LENS_AVAILABLE_FILTER_DENSITY,
- ANDROID_LENS_AVAILABLE_OPTICAL_STABILIZATION,
- ANDROID_LENS_SHADING_MAP_SIZE,
- ANDROID_LENS_SHADING_MAP,
- ANDROID_LENS_GEOMETRIC_CORRECTION_MAP_SIZE,
- ANDROID_LENS_GEOMETRIC_CORRECTION_MAP,
- ANDROID_LENS_FACING,
- ANDROID_LENS_POSITION,
- ANDROID_LENS_INFO_END,
-
- ANDROID_SENSOR_EXPOSURE_TIME = ANDROID_SENSOR_START,
- ANDROID_SENSOR_FRAME_DURATION,
- ANDROID_SENSOR_SENSITIVITY,
- ANDROID_SENSOR_TIMESTAMP,
- ANDROID_SENSOR_END,
-
- ANDROID_SENSOR_EXPOSURE_TIME_RANGE = ANDROID_SENSOR_INFO_START,
- ANDROID_SENSOR_MAX_FRAME_DURATION,
- ANDROID_SENSOR_AVAILABLE_SENSITIVITIES,
- ANDROID_SENSOR_COLOR_FILTER_ARRANGEMENT,
- ANDROID_SENSOR_PHYSICAL_SIZE,
- ANDROID_SENSOR_PIXEL_ARRAY_SIZE,
- ANDROID_SENSOR_ACTIVE_ARRAY_SIZE,
- ANDROID_SENSOR_WHITE_LEVEL,
- ANDROID_SENSOR_BLACK_LEVEL_PATTERN,
- ANDROID_SENSOR_COLOR_TRANSFORM_1,
- ANDROID_SENSOR_COLOR_TRANSFORM_2,
- ANDROID_SENSOR_REFERENCE_ILLUMINANT_1,
- ANDROID_SENSOR_REFERENCE_ILLUMINANT_2,
- ANDROID_SENSOR_FORWARD_MATRIX_1,
- ANDROID_SENSOR_FORWARD_MATRIX_2,
- ANDROID_SENSOR_CALIBRATION_TRANSFORM_1,
- ANDROID_SENSOR_CALIBRATION_TRANSFORM_2,
- ANDROID_SENSOR_BASE_GAIN_FACTOR,
- ANDROID_SENSOR_MAX_ANALOG_SENSITIVITY,
- ANDROID_SENSOR_NOISE_MODEL_COEFFICIENTS,
- ANDROID_SENSOR_ORIENTATION,
- ANDROID_SENSOR_INFO_END,
-
- ANDROID_FLASH_MODE = ANDROID_FLASH_START,
- ANDROID_FLASH_FIRING_POWER,
- ANDROID_FLASH_FIRING_TIME,
- ANDROID_FLASH_END,
-
- ANDROID_FLASH_AVAILABLE = ANDROID_FLASH_INFO_START,
- ANDROID_FLASH_CHARGE_DURATION,
- ANDROID_FLASH_INFO_END,
-
- ANDROID_HOT_PIXEL_MODE = ANDROID_HOT_PIXEL_START,
- ANDROID_HOT_PIXEL_END,
-
- ANDROID_HOT_PIXEL_INFO_END = ANDROID_HOT_PIXEL_INFO_START,
-
- ANDROID_DEMOSAIC_MODE = ANDROID_DEMOSAIC_START,
+ ANDROID_DEMOSAIC_MODE = ANDROID_DEMOSAIC_START,
ANDROID_DEMOSAIC_END,
- ANDROID_DEMOSAIC_INFO_END = ANDROID_DEMOSAIC_INFO_START,
-
- ANDROID_NOISE_MODE = ANDROID_NOISE_START,
- ANDROID_NOISE_STRENGTH,
- ANDROID_NOISE_END,
-
- ANDROID_NOISE_INFO_END = ANDROID_NOISE_INFO_START,
-
- ANDROID_SHADING_MODE = ANDROID_SHADING_START,
- ANDROID_SHADING_END,
-
- ANDROID_SHADING_INFO_END = ANDROID_SHADING_INFO_START,
-
- ANDROID_GEOMETRIC_MODE = ANDROID_GEOMETRIC_START,
- ANDROID_GEOMETRIC_END,
-
- ANDROID_GEOMETRIC_INFO_END = ANDROID_GEOMETRIC_INFO_START,
-
- ANDROID_COLOR_MODE = ANDROID_COLOR_START,
- ANDROID_COLOR_TRANSFORM,
- ANDROID_COLOR_END,
-
- ANDROID_COLOR_INFO_END = ANDROID_COLOR_INFO_START,
-
- ANDROID_TONEMAP_MODE = ANDROID_TONEMAP_START,
- ANDROID_TONEMAP_CURVE_RED,
- ANDROID_TONEMAP_CURVE_GREEN,
- ANDROID_TONEMAP_CURVE_BLUE,
- ANDROID_TONEMAP_END,
-
- ANDROID_TONEMAP_MAX_CURVE_POINTS = ANDROID_TONEMAP_INFO_START,
- ANDROID_TONEMAP_INFO_END,
-
- ANDROID_EDGE_MODE = ANDROID_EDGE_START,
+ ANDROID_EDGE_MODE = ANDROID_EDGE_START,
ANDROID_EDGE_STRENGTH,
ANDROID_EDGE_END,
- ANDROID_EDGE_INFO_END = ANDROID_EDGE_INFO_START,
+ ANDROID_FLASH_FIRING_POWER = ANDROID_FLASH_START,
+ ANDROID_FLASH_FIRING_TIME,
+ ANDROID_FLASH_MODE,
+ ANDROID_FLASH_COLOR_TEMPERATURE,
+ ANDROID_FLASH_MAX_ENERGY,
+ ANDROID_FLASH_STATE,
+ ANDROID_FLASH_END,
- ANDROID_SCALER_CROP_REGION = ANDROID_SCALER_START,
- ANDROID_SCALER_END,
+ ANDROID_FLASH_INFO_AVAILABLE = ANDROID_FLASH_INFO_START,
+ ANDROID_FLASH_INFO_CHARGE_DURATION,
+ ANDROID_FLASH_INFO_END,
- ANDROID_SCALER_AVAILABLE_FORMATS = ANDROID_SCALER_INFO_START,
- ANDROID_SCALER_AVAILABLE_RAW_SIZES,
- ANDROID_SCALER_AVAILABLE_RAW_MIN_DURATIONS,
- ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES,
- ANDROID_SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS,
- ANDROID_SCALER_AVAILABLE_JPEG_SIZES,
- ANDROID_SCALER_AVAILABLE_JPEG_MIN_DURATIONS,
- ANDROID_SCALER_AVAILABLE_MAX_ZOOM,
- ANDROID_SCALER_INFO_END,
+ ANDROID_GEOMETRIC_MODE = ANDROID_GEOMETRIC_START,
+ ANDROID_GEOMETRIC_STRENGTH,
+ ANDROID_GEOMETRIC_END,
- ANDROID_JPEG_QUALITY = ANDROID_JPEG_START,
- ANDROID_JPEG_THUMBNAIL_SIZE,
- ANDROID_JPEG_THUMBNAIL_QUALITY,
- ANDROID_JPEG_GPS_COORDINATES,
+ ANDROID_HOT_PIXEL_MODE = ANDROID_HOT_PIXEL_START,
+ ANDROID_HOT_PIXEL_END,
+
+ ANDROID_HOT_PIXEL_INFO_MAP = ANDROID_HOT_PIXEL_INFO_START,
+ ANDROID_HOT_PIXEL_INFO_END,
+
+ ANDROID_JPEG_GPS_COORDINATES = ANDROID_JPEG_START,
ANDROID_JPEG_GPS_PROCESSING_METHOD,
ANDROID_JPEG_GPS_TIMESTAMP,
ANDROID_JPEG_ORIENTATION,
+ ANDROID_JPEG_QUALITY,
+ ANDROID_JPEG_THUMBNAIL_QUALITY,
+ ANDROID_JPEG_THUMBNAIL_SIZE,
+ ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES,
+ ANDROID_JPEG_MAX_SIZE,
ANDROID_JPEG_SIZE,
ANDROID_JPEG_END,
- ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES = ANDROID_JPEG_INFO_START,
- ANDROID_JPEG_MAX_SIZE,
- ANDROID_JPEG_INFO_END,
+ ANDROID_LENS_APERTURE = ANDROID_LENS_START,
+ ANDROID_LENS_FILTER_DENSITY,
+ ANDROID_LENS_FOCAL_LENGTH,
+ ANDROID_LENS_FOCUS_DISTANCE,
+ ANDROID_LENS_OPTICAL_STABILIZATION_MODE,
+ ANDROID_LENS_FACING,
+ ANDROID_LENS_OPTICAL_AXIS_ANGLE,
+ ANDROID_LENS_POSITION,
+ ANDROID_LENS_FOCUS_RANGE,
+ ANDROID_LENS_STATE,
+ ANDROID_LENS_END,
- ANDROID_STATS_FACE_DETECT_MODE = ANDROID_STATS_START,
- ANDROID_STATS_FACE_RECTANGLES,
- ANDROID_STATS_FACE_SCORES,
- ANDROID_STATS_FACE_LANDMARKS,
- ANDROID_STATS_FACE_IDS,
- ANDROID_STATS_HISTOGRAM_MODE,
- ANDROID_STATS_HISTOGRAM,
- ANDROID_STATS_SHARPNESS_MAP_MODE,
- ANDROID_STATS_SHARPNESS_MAP,
- ANDROID_STATS_END,
+ ANDROID_LENS_INFO_AVAILABLE_APERTURES
+ = ANDROID_LENS_INFO_START,
+ ANDROID_LENS_INFO_AVAILABLE_FILTER_DENSITIES,
+ ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS,
+ ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION,
+ ANDROID_LENS_INFO_GEOMETRIC_CORRECTION_MAP,
+ ANDROID_LENS_INFO_GEOMETRIC_CORRECTION_MAP_SIZE,
+ ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE,
+ ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE,
+ ANDROID_LENS_INFO_SHADING_MAP,
+ ANDROID_LENS_INFO_SHADING_MAP_SIZE,
+ ANDROID_LENS_INFO_END,
- ANDROID_STATS_AVAILABLE_FACE_DETECT_MODES = ANDROID_STATS_INFO_START,
- ANDROID_STATS_MAX_FACE_COUNT,
- ANDROID_STATS_HISTOGRAM_BUCKET_COUNT,
- ANDROID_STATS_MAX_HISTOGRAM_COUNT,
- ANDROID_STATS_SHARPNESS_MAP_SIZE,
- ANDROID_STATS_MAX_SHARPNESS_MAP_VALUE,
- ANDROID_STATS_INFO_END,
+ ANDROID_NOISE_REDUCTION_MODE = ANDROID_NOISE_REDUCTION_START,
+ ANDROID_NOISE_REDUCTION_STRENGTH,
+ ANDROID_NOISE_REDUCTION_END,
- ANDROID_CONTROL_CAPTURE_INTENT = ANDROID_CONTROL_START,
- ANDROID_CONTROL_MODE,
- ANDROID_CONTROL_EFFECT_MODE,
- ANDROID_CONTROL_SCENE_MODE,
- ANDROID_CONTROL_VIDEO_STABILIZATION_MODE,
- ANDROID_CONTROL_AE_MODE,
- ANDROID_CONTROL_AE_LOCK,
- ANDROID_CONTROL_AE_REGIONS,
- ANDROID_CONTROL_AE_EXP_COMPENSATION,
- ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
- ANDROID_CONTROL_AE_ANTIBANDING_MODE,
- ANDROID_CONTROL_AE_STATE,
- ANDROID_CONTROL_AE_PRECAPTURE_ID,
- ANDROID_CONTROL_AWB_MODE,
- ANDROID_CONTROL_AWB_LOCK,
- ANDROID_CONTROL_AWB_REGIONS,
- ANDROID_CONTROL_AWB_STATE,
- ANDROID_CONTROL_AF_MODE,
- ANDROID_CONTROL_AF_REGIONS,
- ANDROID_CONTROL_AF_STATE,
- ANDROID_CONTROL_AF_TRIGGER_ID,
- ANDROID_CONTROL_END,
-
- ANDROID_CONTROL_AVAILABLE_SCENE_MODES = ANDROID_CONTROL_INFO_START,
- ANDROID_CONTROL_AVAILABLE_EFFECTS,
- ANDROID_CONTROL_MAX_REGIONS,
- ANDROID_CONTROL_AE_AVAILABLE_MODES,
- ANDROID_CONTROL_AE_EXP_COMPENSATION_STEP,
- ANDROID_CONTROL_AE_EXP_COMPENSATION_RANGE,
- ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES,
- ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES,
- ANDROID_CONTROL_AWB_AVAILABLE_MODES,
- ANDROID_CONTROL_AF_AVAILABLE_MODES,
- ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES,
- ANDROID_CONTROL_SCENE_MODE_OVERRIDES,
- ANDROID_CONTROL_INFO_END,
-
- ANDROID_QUIRKS_TRIGGER_AF_WITH_AUTO = ANDROID_QUIRKS_INFO_START,
+ ANDROID_QUIRKS_METERING_CROP_REGION
+ = ANDROID_QUIRKS_START,
+ ANDROID_QUIRKS_TRIGGER_AF_WITH_AUTO,
ANDROID_QUIRKS_USE_ZSL_FORMAT,
- ANDROID_QUIRKS_METERING_CROP_REGION,
- ANDROID_QUIRKS_INFO_END
-};
+ ANDROID_QUIRKS_END,
+
+ ANDROID_REQUEST_FRAME_COUNT = ANDROID_REQUEST_START,
+ ANDROID_REQUEST_ID,
+ ANDROID_REQUEST_INPUT_STREAMS,
+ ANDROID_REQUEST_METADATA_MODE,
+ ANDROID_REQUEST_OUTPUT_STREAMS,
+ ANDROID_REQUEST_TYPE,
+ ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS,
+ ANDROID_REQUEST_MAX_NUM_REPROCESS_STREAMS,
+ ANDROID_REQUEST_END,
+
+ ANDROID_SCALER_CROP_REGION = ANDROID_SCALER_START,
+ ANDROID_SCALER_AVAILABLE_FORMATS,
+ ANDROID_SCALER_AVAILABLE_JPEG_MIN_DURATIONS,
+ ANDROID_SCALER_AVAILABLE_JPEG_SIZES,
+ ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM,
+ ANDROID_SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS,
+ ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES,
+ ANDROID_SCALER_AVAILABLE_RAW_MIN_DURATIONS,
+ ANDROID_SCALER_AVAILABLE_RAW_SIZES,
+ ANDROID_SCALER_MAX_DIGITAL_ZOOM,
+ ANDROID_SCALER_END,
+
+ ANDROID_SENSOR_EXPOSURE_TIME = ANDROID_SENSOR_START,
+ ANDROID_SENSOR_FRAME_DURATION,
+ ANDROID_SENSOR_SENSITIVITY,
+ ANDROID_SENSOR_BASE_GAIN_FACTOR,
+ ANDROID_SENSOR_BLACK_LEVEL_PATTERN,
+ ANDROID_SENSOR_CALIBRATION_TRANSFORM1,
+ ANDROID_SENSOR_CALIBRATION_TRANSFORM2,
+ ANDROID_SENSOR_COLOR_TRANSFORM1,
+ ANDROID_SENSOR_COLOR_TRANSFORM2,
+ ANDROID_SENSOR_FORWARD_MATRIX1,
+ ANDROID_SENSOR_FORWARD_MATRIX2,
+ ANDROID_SENSOR_MAX_ANALOG_SENSITIVITY,
+ ANDROID_SENSOR_NOISE_MODEL_COEFFICIENTS,
+ ANDROID_SENSOR_ORIENTATION,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT2,
+ ANDROID_SENSOR_TIMESTAMP,
+ ANDROID_SENSOR_END,
+
+ ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE
+ = ANDROID_SENSOR_INFO_START,
+ ANDROID_SENSOR_INFO_AVAILABLE_SENSITIVITIES,
+ ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT,
+ ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE,
+ ANDROID_SENSOR_INFO_MAX_FRAME_DURATION,
+ ANDROID_SENSOR_INFO_PHYSICAL_SIZE,
+ ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,
+ ANDROID_SENSOR_INFO_WHITE_LEVEL,
+ ANDROID_SENSOR_INFO_END,
+
+ ANDROID_SHADING_MODE = ANDROID_SHADING_START,
+ ANDROID_SHADING_STRENGTH,
+ ANDROID_SHADING_END,
+
+ ANDROID_STATISTICS_FACE_DETECT_MODE
+ = ANDROID_STATISTICS_START,
+ ANDROID_STATISTICS_HISTOGRAM_MODE,
+ ANDROID_STATISTICS_SHARPNESS_MAP_MODE,
+ ANDROID_STATISTICS_FACE_IDS,
+ ANDROID_STATISTICS_FACE_LANDMARKS,
+ ANDROID_STATISTICS_FACE_RECTANGLES,
+ ANDROID_STATISTICS_FACE_SCORES,
+ ANDROID_STATISTICS_HISTOGRAM,
+ ANDROID_STATISTICS_SHARPNESS_MAP,
+ ANDROID_STATISTICS_END,
+
+ ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES
+ = ANDROID_STATISTICS_INFO_START,
+ ANDROID_STATISTICS_INFO_HISTOGRAM_BUCKET_COUNT,
+ ANDROID_STATISTICS_INFO_MAX_FACE_COUNT,
+ ANDROID_STATISTICS_INFO_MAX_HISTOGRAM_COUNT,
+ ANDROID_STATISTICS_INFO_MAX_SHARPNESS_MAP_VALUE,
+ ANDROID_STATISTICS_INFO_SHARPNESS_MAP_SIZE,
+ ANDROID_STATISTICS_INFO_END,
+
+ ANDROID_TONEMAP_CURVE_BLUE = ANDROID_TONEMAP_START,
+ ANDROID_TONEMAP_CURVE_GREEN,
+ ANDROID_TONEMAP_CURVE_RED,
+ ANDROID_TONEMAP_MODE,
+ ANDROID_TONEMAP_MAX_CURVE_POINTS,
+ ANDROID_TONEMAP_END,
+
+} camera_metadata_tag_t;
/**
* Enumeration definitions for the various entries that need them
*/
-// ANDROID_REQUEST_METADATA_TYPE
-enum {
- ANDROID_REQUEST_TYPE_CAPTURE = 0,
- ANDROID_REQUEST_TYPE_REPROCESS
-};
+// ANDROID_COLOR_CORRECTION_MODE
+typedef enum camera_metadata_enum_android_color_correction_mode {
+ ANDROID_COLOR_CORRECTION_MODE_TRANSFORM_MATRIX,
+ ANDROID_COLOR_CORRECTION_MODE_FAST,
+ ANDROID_COLOR_CORRECTION_MODE_HIGH_QUALITY,
+} camera_metadata_enum_android_color_correction_mode_t;
-// ANDROID_REQUEST_METADATA_MODE
-enum {
- ANDROID_REQUEST_METADATA_NONE = 0,
- ANDROID_REQUEST_METADATA_FULL
-};
-// ANDROID_LENS_OPTICAL_STABILIZATION_MODE
-enum {
- ANDROID_LENS_OPTICAL_STABILIZATION_OFF = 0,
- ANDROID_LENS_OPTICAL_STABILIZATION_ON
-};
+// ANDROID_CONTROL_AE_ANTIBANDING_MODE
+typedef enum camera_metadata_enum_android_control_ae_antibanding_mode {
+ ANDROID_CONTROL_AE_ANTIBANDING_MODE_OFF,
+ ANDROID_CONTROL_AE_ANTIBANDING_MODE_50HZ,
+ ANDROID_CONTROL_AE_ANTIBANDING_MODE_60HZ,
+ ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO,
+} camera_metadata_enum_android_control_ae_antibanding_mode_t;
-// ANDROID_LENS_FACING
-enum {
- ANDROID_LENS_FACING_BACK = 0,
- ANDROID_LENS_FACING_FRONT
-};
+// ANDROID_CONTROL_AE_LOCK
+typedef enum camera_metadata_enum_android_control_ae_lock {
+ ANDROID_CONTROL_AE_LOCK_ON,
+ ANDROID_CONTROL_AE_LOCK_OFF,
+} camera_metadata_enum_android_control_ae_lock_t;
-// ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
-enum {
- ANDROID_SENSOR_RGGB = 0,
- ANDROID_SENSOR_GRBG,
- ANDROID_SENSOR_GBRG,
- ANDROID_SENSOR_BGGR,
- ANDROID_SENSOR_RGB
-};
+// ANDROID_CONTROL_AE_MODE
+typedef enum camera_metadata_enum_android_control_ae_mode {
+ ANDROID_CONTROL_AE_MODE_OFF,
+ ANDROID_CONTROL_AE_MODE_ON,
+ ANDROID_CONTROL_AE_MODE_ON_AUTO_FLASH,
+ ANDROID_CONTROL_AE_MODE_ON_ALWAYS_FLASH,
+ ANDROID_CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE,
+} camera_metadata_enum_android_control_ae_mode_t;
-// ANDROID_FLASH_MODE
-enum {
- ANDROID_FLASH_OFF = 0,
- ANDROID_FLASH_SINGLE,
- ANDROID_FLASH_TORCH
-};
+// ANDROID_CONTROL_AF_MODE
+typedef enum camera_metadata_enum_android_control_af_mode {
+ ANDROID_CONTROL_AF_MODE_OFF,
+ ANDROID_CONTROL_AF_MODE_AUTO,
+ ANDROID_CONTROL_AF_MODE_MACRO,
+ ANDROID_CONTROL_AF_MODE_CONTINUOUS_VIDEO,
+ ANDROID_CONTROL_AF_MODE_CONTINUOUS_PICTURE,
+ ANDROID_CONTROL_AF_MODE_EDOF,
+} camera_metadata_enum_android_control_af_mode_t;
-// General processing block modes
-enum {
- ANDROID_PROCESSING_OFF = 0,
- ANDROID_PROCESSING_FAST,
- ANDROID_PROCESSING_HIGH_QUALITY
-};
+// ANDROID_CONTROL_AWB_LOCK
+typedef enum camera_metadata_enum_android_control_awb_lock {
+ ANDROID_CONTROL_AWB_LOCK_ON,
+ ANDROID_CONTROL_AWB_LOCK_OFF,
+} camera_metadata_enum_android_control_awb_lock_t;
-// ANDROID_DEMOSAIC_MODE
-enum {
- ANDROID_DEMOSAIC_FAST = 1,
- ANDROID_DEMOSAIC_HIGH_QUALITY
-};
-
-// ANDROID_COLOR_MODE
-enum {
- ANDROID_COLOR_FAST = 1,
- ANDROID_COLOR_HIGH_QUALITY,
- ANDROID_COLOR_TRANSFORM_MATRIX
-};
-
-// ANDROID_TONEMAP_MODE
-enum {
- ANDROID_TONEMAP_FAST = 1,
- ANDROID_TONEMAP_HIGH_QUALITY,
- ANDROID_TONEMAP_CONTRAST_CURVE
-};
-
-// ANDROID_SCALER_AVAILABLE_FORMATS uses HAL_PIXEL_FORMAT_* from
-// system/graphics.h
-
-// ANDROID_STATS_FACE_DETECTION_MODE
-enum {
- ANDROID_STATS_FACE_DETECTION_OFF = 0,
- ANDROID_STATS_FACE_DETECTION_SIMPLE,
- ANDROID_STATS_FACE_DETECTION_FULL
-};
-
-// ANDROID_STATS_HISTOGRAM/SHARPNESS_MAP_MODE
-enum {
- ANDROID_STATS_OFF = 0,
- ANDROID_STATS_ON
-};
+// ANDROID_CONTROL_AWB_MODE
+typedef enum camera_metadata_enum_android_control_awb_mode {
+ ANDROID_CONTROL_AWB_MODE_OFF,
+ ANDROID_CONTROL_AWB_MODE_AUTO,
+ ANDROID_CONTROL_AWB_MODE_INCANDESCENT,
+ ANDROID_CONTROL_AWB_MODE_FLUORESCENT,
+ ANDROID_CONTROL_AWB_MODE_WARM_FLUORESCENT,
+ ANDROID_CONTROL_AWB_MODE_DAYLIGHT,
+ ANDROID_CONTROL_AWB_MODE_CLOUDY_DAYLIGHT,
+ ANDROID_CONTROL_AWB_MODE_TWILIGHT,
+ ANDROID_CONTROL_AWB_MODE_SHADE,
+} camera_metadata_enum_android_control_awb_mode_t;
// ANDROID_CONTROL_CAPTURE_INTENT
-enum {
- ANDROID_CONTROL_INTENT_CUSTOM = 0,
- ANDROID_CONTROL_INTENT_PREVIEW,
- ANDROID_CONTROL_INTENT_STILL_CAPTURE,
- ANDROID_CONTROL_INTENT_VIDEO_RECORD,
- ANDROID_CONTROL_INTENT_VIDEO_SNAPSHOT,
- ANDROID_CONTROL_INTENT_ZERO_SHUTTER_LAG
-};
+typedef enum camera_metadata_enum_android_control_capture_intent {
+ ANDROID_CONTROL_CAPTURE_INTENT_CUSTOM,
+ ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW,
+ ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE,
+ ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_RECORD,
+ ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT,
+ ANDROID_CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG,
+} camera_metadata_enum_android_control_capture_intent_t;
+
+// ANDROID_CONTROL_EFFECT_MODE
+typedef enum camera_metadata_enum_android_control_effect_mode {
+ ANDROID_CONTROL_EFFECT_MODE_OFF,
+ ANDROID_CONTROL_EFFECT_MODE_MONO,
+ ANDROID_CONTROL_EFFECT_MODE_NEGATIVE,
+ ANDROID_CONTROL_EFFECT_MODE_SOLARIZE,
+ ANDROID_CONTROL_EFFECT_MODE_SEPIA,
+ ANDROID_CONTROL_EFFECT_MODE_POSTERIZE,
+ ANDROID_CONTROL_EFFECT_MODE_WHITEBOARD,
+ ANDROID_CONTROL_EFFECT_MODE_BLACKBOARD,
+ ANDROID_CONTROL_EFFECT_MODE_AQUA,
+} camera_metadata_enum_android_control_effect_mode_t;
// ANDROID_CONTROL_MODE
-enum {
- ANDROID_CONTROL_OFF = 0,
- ANDROID_CONTROL_AUTO,
- ANDROID_CONTROL_USE_SCENE_MODE
-};
+typedef enum camera_metadata_enum_android_control_mode {
+ ANDROID_CONTROL_MODE_OFF,
+ ANDROID_CONTROL_MODE_AUTO,
+ ANDROID_CONTROL_MODE_USE_SCENE_MODE,
+} camera_metadata_enum_android_control_mode_t;
// ANDROID_CONTROL_SCENE_MODE
-enum {
- ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED = 0, // Only for availableSceneModes
+typedef enum camera_metadata_enum_android_control_scene_mode {
+ ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED = 0,
ANDROID_CONTROL_SCENE_MODE_FACE_PRIORITY,
ANDROID_CONTROL_SCENE_MODE_ACTION,
ANDROID_CONTROL_SCENE_MODE_PORTRAIT,
@@ -439,104 +413,218 @@
ANDROID_CONTROL_SCENE_MODE_SPORTS,
ANDROID_CONTROL_SCENE_MODE_PARTY,
ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT,
- ANDROID_CONTROL_SCENE_MODE_BARCODE
-};
+ ANDROID_CONTROL_SCENE_MODE_BARCODE,
+} camera_metadata_enum_android_control_scene_mode_t;
-// ANDROID_CONTROL_EFFECT_MODE
-enum {
- ANDROID_CONTROL_EFFECT_OFF = 0,
- ANDROID_CONTROL_EFFECT_MONO,
- ANDROID_CONTROL_EFFECT_NEGATIVE,
- ANDROID_CONTROL_EFFECT_SOLARIZE,
- ANDROID_CONTROL_EFFECT_SEPIA,
- ANDROID_CONTROL_EFFECT_POSTERIZE,
- ANDROID_CONTROL_EFFECT_WHITEBOARD,
- ANDROID_CONTROL_EFFECT_BLACKBOARD,
- ANDROID_CONTROL_EFFECT_AQUA
-};
-
-// ANDROID_CONTROL_AE_MODE
-enum {
- ANDROID_CONTROL_AE_OFF = 0,
- ANDROID_CONTROL_AE_ON,
- ANDROID_CONTROL_AE_ON_AUTO_FLASH,
- ANDROID_CONTROL_AE_ON_ALWAYS_FLASH,
- ANDROID_CONTROL_AE_ON_AUTO_FLASH_REDEYE
-};
-
-// ANDROID_CONTROL_AE_LOCK
-enum {
- ANDROID_CONTROL_AE_LOCK_OFF = 0,
- ANDROID_CONTROL_AE_LOCK_ON
-};
-
-// ANDROID_CONTROL_AE_ANTIBANDING_MODE
-enum {
- ANDROID_CONTROL_AE_ANTIBANDING_OFF = 0,
- ANDROID_CONTROL_AE_ANTIBANDING_50HZ,
- ANDROID_CONTROL_AE_ANTIBANDING_60HZ,
- ANDROID_CONTROL_AE_ANTIBANDING_AUTO
-};
+// ANDROID_CONTROL_VIDEO_STABILIZATION_MODE
+typedef enum camera_metadata_enum_android_control_video_stabilization_mode {
+ ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_OFF,
+ ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_ON,
+} camera_metadata_enum_android_control_video_stabilization_mode_t;
// ANDROID_CONTROL_AE_STATE
-enum {
- ANDROID_CONTROL_AE_STATE_INACTIVE = 0,
+typedef enum camera_metadata_enum_android_control_ae_state {
+ ANDROID_CONTROL_AE_STATE_INACTIVE,
ANDROID_CONTROL_AE_STATE_SEARCHING,
ANDROID_CONTROL_AE_STATE_CONVERGED,
ANDROID_CONTROL_AE_STATE_LOCKED,
ANDROID_CONTROL_AE_STATE_FLASH_REQUIRED,
- ANDROID_CONTROL_AE_STATE_PRECAPTURE
-};
-
-// ANDROID_CONTROL_AWB_MODE
-enum {
- ANDROID_CONTROL_AWB_OFF = 0,
- ANDROID_CONTROL_AWB_AUTO,
- ANDROID_CONTROL_AWB_INCANDESCENT,
- ANDROID_CONTROL_AWB_FLUORESCENT,
- ANDROID_CONTROL_AWB_WARM_FLUORESCENT,
- ANDROID_CONTROL_AWB_DAYLIGHT,
- ANDROID_CONTROL_AWB_CLOUDY_DAYLIGHT,
- ANDROID_CONTROL_AWB_TWILIGHT,
- ANDROID_CONTROL_AWB_SHADE
-};
-
-// ANDROID_CONTROL_AWB_LOCK
-enum {
- ANDROID_CONTROL_AWB_LOCK_OFF = 0,
- ANDROID_CONTROL_AWB_LOCK_ON
-};
-
-// ANDROID_CONTROL_AWB_STATE
-enum {
- ANDROID_CONTROL_AWB_STATE_INACTIVE = 0,
- ANDROID_CONTROL_AWB_STATE_SEARCHING,
- ANDROID_CONTROL_AWB_STATE_CONVERGED,
- ANDROID_CONTROL_AWB_STATE_LOCKED,
-};
-
-// ANDROID_CONTROL_AF_MODE
-enum {
- ANDROID_CONTROL_AF_OFF = 0,
- ANDROID_CONTROL_AF_AUTO,
- ANDROID_CONTROL_AF_MACRO,
- ANDROID_CONTROL_AF_CONTINUOUS_VIDEO,
- ANDROID_CONTROL_AF_CONTINUOUS_PICTURE,
- ANDROID_CONTROL_AF_EDOF
-};
+ ANDROID_CONTROL_AE_STATE_PRECAPTURE,
+} camera_metadata_enum_android_control_ae_state_t;
// ANDROID_CONTROL_AF_STATE
-enum {
- ANDROID_CONTROL_AF_STATE_INACTIVE = 0,
+typedef enum camera_metadata_enum_android_control_af_state {
+ ANDROID_CONTROL_AF_STATE_INACTIVE,
ANDROID_CONTROL_AF_STATE_PASSIVE_SCAN,
ANDROID_CONTROL_AF_STATE_PASSIVE_FOCUSED,
ANDROID_CONTROL_AF_STATE_ACTIVE_SCAN,
ANDROID_CONTROL_AF_STATE_FOCUSED_LOCKED,
- ANDROID_CONTROL_AF_STATE_NOT_FOCUSED_LOCKED
-};
+ ANDROID_CONTROL_AF_STATE_NOT_FOCUSED_LOCKED,
+} camera_metadata_enum_android_control_af_state_t;
-// ANDROID_CONTROL_VIDEO_STABILIZATION
-enum {
- ANDROID_CONTROL_VIDEO_STABILIZATION_OFF = 0,
- ANDROID_CONTROL_VIDEO_STABILIZATION_ON
-};
+// ANDROID_CONTROL_AWB_STATE
+typedef enum camera_metadata_enum_android_control_awb_state {
+ ANDROID_CONTROL_AWB_STATE_INACTIVE,
+ ANDROID_CONTROL_AWB_STATE_SEARCHING,
+ ANDROID_CONTROL_AWB_STATE_CONVERGED,
+ ANDROID_CONTROL_AWB_STATE_LOCKED,
+} camera_metadata_enum_android_control_awb_state_t;
+
+
+// ANDROID_DEMOSAIC_MODE
+typedef enum camera_metadata_enum_android_demosaic_mode {
+ ANDROID_DEMOSAIC_MODE_FAST,
+ ANDROID_DEMOSAIC_MODE_HIGH_QUALITY,
+} camera_metadata_enum_android_demosaic_mode_t;
+
+
+// ANDROID_EDGE_MODE
+typedef enum camera_metadata_enum_android_edge_mode {
+ ANDROID_EDGE_MODE_OFF,
+ ANDROID_EDGE_MODE_FAST,
+ ANDROID_EDGE_MODE_HIGH_QUALITY,
+} camera_metadata_enum_android_edge_mode_t;
+
+
+// ANDROID_FLASH_MODE
+typedef enum camera_metadata_enum_android_flash_mode {
+ ANDROID_FLASH_MODE_OFF,
+ ANDROID_FLASH_MODE_SINGLE,
+ ANDROID_FLASH_MODE_TORCH,
+} camera_metadata_enum_android_flash_mode_t;
+
+// ANDROID_FLASH_STATE
+typedef enum camera_metadata_enum_android_flash_state {
+ ANDROID_FLASH_STATE_UNAVAILABLE,
+ ANDROID_FLASH_STATE_CHARGING,
+ ANDROID_FLASH_STATE_READY,
+ ANDROID_FLASH_STATE_FIRED,
+} camera_metadata_enum_android_flash_state_t;
+
+
+
+// ANDROID_GEOMETRIC_MODE
+typedef enum camera_metadata_enum_android_geometric_mode {
+ ANDROID_GEOMETRIC_MODE_OFF,
+ ANDROID_GEOMETRIC_MODE_FAST,
+ ANDROID_GEOMETRIC_MODE_HIGH_QUALITY,
+} camera_metadata_enum_android_geometric_mode_t;
+
+
+// ANDROID_HOT_PIXEL_MODE
+typedef enum camera_metadata_enum_android_hot_pixel_mode {
+ ANDROID_HOT_PIXEL_MODE_OFF,
+ ANDROID_HOT_PIXEL_MODE_FAST,
+ ANDROID_HOT_PIXEL_MODE_HIGH_QUALITY,
+} camera_metadata_enum_android_hot_pixel_mode_t;
+
+
+
+
+// ANDROID_LENS_OPTICAL_STABILIZATION_MODE
+typedef enum camera_metadata_enum_android_lens_optical_stabilization_mode {
+ ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF,
+ ANDROID_LENS_OPTICAL_STABILIZATION_MODE_ON,
+} camera_metadata_enum_android_lens_optical_stabilization_mode_t;
+
+// ANDROID_LENS_FACING
+typedef enum camera_metadata_enum_android_lens_facing {
+ ANDROID_LENS_FACING_FRONT,
+ ANDROID_LENS_FACING_BACK,
+} camera_metadata_enum_android_lens_facing_t;
+
+// ANDROID_LENS_STATE
+typedef enum camera_metadata_enum_android_lens_state {
+ ANDROID_LENS_STATE_STATIONARY,
+} camera_metadata_enum_android_lens_state_t;
+
+
+
+// ANDROID_NOISE_REDUCTION_MODE
+typedef enum camera_metadata_enum_android_noise_reduction_mode {
+ ANDROID_NOISE_REDUCTION_MODE_OFF,
+ ANDROID_NOISE_REDUCTION_MODE_FAST,
+ ANDROID_NOISE_REDUCTION_MODE_HIGH_QUALITY,
+} camera_metadata_enum_android_noise_reduction_mode_t;
+
+
+
+// ANDROID_REQUEST_METADATA_MODE
+typedef enum camera_metadata_enum_android_request_metadata_mode {
+ ANDROID_REQUEST_METADATA_MODE_NONE,
+ ANDROID_REQUEST_METADATA_MODE_FULL,
+} camera_metadata_enum_android_request_metadata_mode_t;
+
+// ANDROID_REQUEST_TYPE
+typedef enum camera_metadata_enum_android_request_type {
+ ANDROID_REQUEST_TYPE_CAPTURE,
+ ANDROID_REQUEST_TYPE_REPROCESS,
+} camera_metadata_enum_android_request_type_t;
+
+
+// ANDROID_SCALER_AVAILABLE_FORMATS
+typedef enum camera_metadata_enum_android_scaler_available_formats {
+ ANDROID_SCALER_AVAILABLE_FORMATS_RAW_SENSOR = 0x20,
+ ANDROID_SCALER_AVAILABLE_FORMATS_YV12 = 0x32315659,
+ ANDROID_SCALER_AVAILABLE_FORMATS_YCbCr_420_SP = 0x11,
+ ANDROID_SCALER_AVAILABLE_FORMATS_JPEG = 0x21,
+} camera_metadata_enum_android_scaler_available_formats_t;
+
+
+// ANDROID_SENSOR_REFERENCE_ILLUMINANT1
+typedef enum camera_metadata_enum_android_sensor_reference_illuminant1 {
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT = 1,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_FLUORESCENT = 2,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_TUNGSTEN = 3,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_FLASH = 4,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_FINE_WEATHER = 9,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_CLOUDY_WEATHER = 10,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_SHADE = 11,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT_FLUORESCENT = 12,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_DAY_WHITE_FLUORESCENT = 13,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_COOL_WHITE_FLUORESCENT = 14,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_WHITE_FLUORESCENT = 15,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_STANDARD_A = 17,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_STANDARD_B = 18,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_STANDARD_C = 19,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_D55 = 20,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_D65 = 21,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_D75 = 22,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_D50 = 23,
+ ANDROID_SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN = 24,
+} camera_metadata_enum_android_sensor_reference_illuminant1_t;
+
+
+// ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
+typedef enum camera_metadata_enum_android_sensor_info_color_filter_arrangement {
+ ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB,
+ ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG,
+ ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GBRG,
+ ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR,
+ ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB,
+} camera_metadata_enum_android_sensor_info_color_filter_arrangement_t;
+
+
+// ANDROID_SHADING_MODE
+typedef enum camera_metadata_enum_android_shading_mode {
+ ANDROID_SHADING_MODE_OFF,
+ ANDROID_SHADING_MODE_FAST,
+ ANDROID_SHADING_MODE_HIGH_QUALITY,
+} camera_metadata_enum_android_shading_mode_t;
+
+
+// ANDROID_STATISTICS_FACE_DETECT_MODE
+typedef enum camera_metadata_enum_android_statistics_face_detect_mode {
+ ANDROID_STATISTICS_FACE_DETECT_MODE_OFF,
+ ANDROID_STATISTICS_FACE_DETECT_MODE_SIMPLE,
+ ANDROID_STATISTICS_FACE_DETECT_MODE_FULL,
+} camera_metadata_enum_android_statistics_face_detect_mode_t;
+
+// ANDROID_STATISTICS_HISTOGRAM_MODE
+typedef enum camera_metadata_enum_android_statistics_histogram_mode {
+ ANDROID_STATISTICS_HISTOGRAM_MODE_OFF,
+ ANDROID_STATISTICS_HISTOGRAM_MODE_ON,
+} camera_metadata_enum_android_statistics_histogram_mode_t;
+
+// ANDROID_STATISTICS_SHARPNESS_MAP_MODE
+typedef enum camera_metadata_enum_android_statistics_sharpness_map_mode {
+ ANDROID_STATISTICS_SHARPNESS_MAP_MODE_OFF,
+ ANDROID_STATISTICS_SHARPNESS_MAP_MODE_ON,
+} camera_metadata_enum_android_statistics_sharpness_map_mode_t;
+
+
+
+// ANDROID_TONEMAP_MODE
+typedef enum camera_metadata_enum_android_tonemap_mode {
+ ANDROID_TONEMAP_MODE_CONTRAST_CURVE,
+ ANDROID_TONEMAP_MODE_FAST,
+ ANDROID_TONEMAP_MODE_HIGH_QUALITY,
+} camera_metadata_enum_android_tonemap_mode_t;
+
+
+
+int camera_metadata_enum_snprint(uint32_t tag,
+ uint32_t value,
+ char *dst,
+ size_t size);
+
diff --git a/camera/src/camera_metadata_tag_info.c b/camera/src/camera_metadata_tag_info.c
index 2b723c9..b32fd10 100644
--- a/camera/src/camera_metadata_tag_info.c
+++ b/camera/src/camera_metadata_tag_info.c
@@ -24,549 +24,1754 @@
* sync with camera_metadata_tags.h
*/
+/**
+ * ! Do not edit this file directly !
+ *
+ * Generated automatically from camera_metadata_tag_info.mako
+ */
+
const char *camera_metadata_section_names[ANDROID_SECTION_COUNT] = {
- [ANDROID_REQUEST] = "android.request",
- [ANDROID_LENS] = "android.lens",
- [ANDROID_LENS_INFO] = "android.lens.info",
- [ANDROID_SENSOR] = "android.sensor",
- [ANDROID_SENSOR_INFO] = "android.sensor.info",
- [ANDROID_FLASH] = "android.flash",
- [ANDROID_FLASH_INFO] = "android.flash.info",
- [ANDROID_HOT_PIXEL] = "android.hotPixel",
- [ANDROID_HOT_PIXEL_INFO] = "android.hotPixel.info",
- [ANDROID_DEMOSAIC] = "android.demosaic",
- [ANDROID_DEMOSAIC_INFO] = "android.demosaic.info",
- [ANDROID_NOISE] = "android.noiseReduction",
- [ANDROID_NOISE_INFO] = "android.noiseReduction.info",
- [ANDROID_SHADING] = "android.shadingCorrection",
- [ANDROID_SHADING_INFO] = "android.shadingCorrection.info",
- [ANDROID_GEOMETRIC] = "android.geometricCorrection",
- [ANDROID_GEOMETRIC_INFO] = "android.geometricCorrection.info",
- [ANDROID_COLOR] = "android.colorCorrection",
- [ANDROID_COLOR_INFO] = "android.colorCorrection.info",
- [ANDROID_TONEMAP] = "android.tonemap",
- [ANDROID_TONEMAP_INFO] = "android.tonemap.info",
- [ANDROID_EDGE] = "android.edge",
- [ANDROID_EDGE_INFO] = "android.edge.info",
- [ANDROID_SCALER] = "android.scaler",
- [ANDROID_SCALER_INFO] = "android.scaler.info",
- [ANDROID_JPEG] = "android.jpeg",
- [ANDROID_JPEG_INFO] = "android.jpeg.info",
- [ANDROID_STATS] = "android.statistics",
- [ANDROID_STATS_INFO] = "android.statistics.info",
- [ANDROID_CONTROL] = "android.control",
- [ANDROID_CONTROL_INFO] = "android.control.info",
- [ANDROID_QUIRKS_INFO] = "android.quirks.info"
+ [ANDROID_COLOR_CORRECTION] = "android.colorCorrection",
+ [ANDROID_CONTROL] = "android.control",
+ [ANDROID_DEMOSAIC] = "android.demosaic",
+ [ANDROID_EDGE] = "android.edge",
+ [ANDROID_FLASH] = "android.flash",
+ [ANDROID_FLASH_INFO] = "android.flash.info",
+ [ANDROID_GEOMETRIC] = "android.geometric",
+ [ANDROID_HOT_PIXEL] = "android.hotPixel",
+ [ANDROID_HOT_PIXEL_INFO] = "android.hotPixel.info",
+ [ANDROID_JPEG] = "android.jpeg",
+ [ANDROID_LENS] = "android.lens",
+ [ANDROID_LENS_INFO] = "android.lens.info",
+ [ANDROID_NOISE_REDUCTION] = "android.noiseReduction",
+ [ANDROID_QUIRKS] = "android.quirks",
+ [ANDROID_REQUEST] = "android.request",
+ [ANDROID_SCALER] = "android.scaler",
+ [ANDROID_SENSOR] = "android.sensor",
+ [ANDROID_SENSOR_INFO] = "android.sensor.info",
+ [ANDROID_SHADING] = "android.shading",
+ [ANDROID_STATISTICS] = "android.statistics",
+ [ANDROID_STATISTICS_INFO] = "android.statistics.info",
+ [ANDROID_TONEMAP] = "android.tonemap",
};
unsigned int camera_metadata_section_bounds[ANDROID_SECTION_COUNT][2] = {
- [ANDROID_REQUEST] = { ANDROID_REQUEST_START,
- ANDROID_REQUEST_END },
- [ANDROID_LENS] = { ANDROID_LENS_START,
- ANDROID_LENS_END },
- [ANDROID_LENS_INFO] = { ANDROID_LENS_INFO_START,
- ANDROID_LENS_INFO_END },
- [ANDROID_SENSOR] = { ANDROID_SENSOR_START,
- ANDROID_SENSOR_END },
- [ANDROID_SENSOR_INFO] = { ANDROID_SENSOR_INFO_START,
- ANDROID_SENSOR_INFO_END },
- [ANDROID_FLASH] = { ANDROID_FLASH_START,
- ANDROID_FLASH_END },
- [ANDROID_FLASH_INFO] = { ANDROID_FLASH_INFO_START,
- ANDROID_FLASH_INFO_END },
- [ANDROID_HOT_PIXEL] = { ANDROID_HOT_PIXEL_START,
- ANDROID_HOT_PIXEL_END },
- [ANDROID_HOT_PIXEL_INFO] = { ANDROID_HOT_PIXEL_INFO_START,
- ANDROID_HOT_PIXEL_INFO_END },
- [ANDROID_DEMOSAIC] = { ANDROID_DEMOSAIC_START,
- ANDROID_DEMOSAIC_END },
- [ANDROID_DEMOSAIC_INFO] = { ANDROID_DEMOSAIC_INFO_START,
- ANDROID_DEMOSAIC_INFO_END },
- [ANDROID_NOISE] = { ANDROID_NOISE_START,
- ANDROID_NOISE_END },
- [ANDROID_NOISE_INFO] = { ANDROID_NOISE_INFO_START,
- ANDROID_NOISE_INFO_END },
- [ANDROID_SHADING] = { ANDROID_SHADING_START,
- ANDROID_SHADING_END },
- [ANDROID_SHADING_INFO] = { ANDROID_SHADING_INFO_START,
- ANDROID_SHADING_INFO_END },
- [ANDROID_GEOMETRIC] = { ANDROID_GEOMETRIC_START,
- ANDROID_GEOMETRIC_END },
- [ANDROID_GEOMETRIC_INFO] = { ANDROID_GEOMETRIC_INFO_START,
- ANDROID_GEOMETRIC_INFO_END },
- [ANDROID_COLOR] = { ANDROID_COLOR_START,
- ANDROID_COLOR_END },
- [ANDROID_COLOR_INFO] = { ANDROID_COLOR_INFO_START,
- ANDROID_COLOR_INFO_END },
- [ANDROID_TONEMAP] = { ANDROID_TONEMAP_START,
- ANDROID_TONEMAP_END },
- [ANDROID_TONEMAP_INFO] = { ANDROID_TONEMAP_INFO_START,
- ANDROID_TONEMAP_INFO_END },
- [ANDROID_EDGE] = { ANDROID_EDGE_START,
- ANDROID_EDGE_END },
- [ANDROID_EDGE_INFO] = { ANDROID_EDGE_INFO_START,
- ANDROID_EDGE_INFO_END },
- [ANDROID_SCALER] = { ANDROID_SCALER_START,
- ANDROID_SCALER_END },
- [ANDROID_SCALER_INFO] = { ANDROID_SCALER_INFO_START,
- ANDROID_SCALER_INFO_END },
- [ANDROID_JPEG] = { ANDROID_JPEG_START,
- ANDROID_JPEG_END },
- [ANDROID_JPEG_INFO] = { ANDROID_JPEG_INFO_START,
- ANDROID_JPEG_INFO_END },
- [ANDROID_STATS] = { ANDROID_STATS_START,
- ANDROID_STATS_END },
- [ANDROID_STATS_INFO] = { ANDROID_STATS_INFO_START,
- ANDROID_STATS_INFO_END },
- [ANDROID_CONTROL] = { ANDROID_CONTROL_START,
- ANDROID_CONTROL_END },
- [ANDROID_CONTROL_INFO] = { ANDROID_CONTROL_INFO_START,
- ANDROID_CONTROL_INFO_END },
- [ANDROID_QUIRKS_INFO] = { ANDROID_QUIRKS_INFO_START,
- ANDROID_QUIRKS_INFO_END }
+ [ANDROID_COLOR_CORRECTION] = { ANDROID_COLOR_CORRECTION_START,
+ ANDROID_COLOR_CORRECTION_END },
+ [ANDROID_CONTROL] = { ANDROID_CONTROL_START,
+ ANDROID_CONTROL_END },
+ [ANDROID_DEMOSAIC] = { ANDROID_DEMOSAIC_START,
+ ANDROID_DEMOSAIC_END },
+ [ANDROID_EDGE] = { ANDROID_EDGE_START,
+ ANDROID_EDGE_END },
+ [ANDROID_FLASH] = { ANDROID_FLASH_START,
+ ANDROID_FLASH_END },
+ [ANDROID_FLASH_INFO] = { ANDROID_FLASH_INFO_START,
+ ANDROID_FLASH_INFO_END },
+ [ANDROID_GEOMETRIC] = { ANDROID_GEOMETRIC_START,
+ ANDROID_GEOMETRIC_END },
+ [ANDROID_HOT_PIXEL] = { ANDROID_HOT_PIXEL_START,
+ ANDROID_HOT_PIXEL_END },
+ [ANDROID_HOT_PIXEL_INFO] = { ANDROID_HOT_PIXEL_INFO_START,
+ ANDROID_HOT_PIXEL_INFO_END },
+ [ANDROID_JPEG] = { ANDROID_JPEG_START,
+ ANDROID_JPEG_END },
+ [ANDROID_LENS] = { ANDROID_LENS_START,
+ ANDROID_LENS_END },
+ [ANDROID_LENS_INFO] = { ANDROID_LENS_INFO_START,
+ ANDROID_LENS_INFO_END },
+ [ANDROID_NOISE_REDUCTION] = { ANDROID_NOISE_REDUCTION_START,
+ ANDROID_NOISE_REDUCTION_END },
+ [ANDROID_QUIRKS] = { ANDROID_QUIRKS_START,
+ ANDROID_QUIRKS_END },
+ [ANDROID_REQUEST] = { ANDROID_REQUEST_START,
+ ANDROID_REQUEST_END },
+ [ANDROID_SCALER] = { ANDROID_SCALER_START,
+ ANDROID_SCALER_END },
+ [ANDROID_SENSOR] = { ANDROID_SENSOR_START,
+ ANDROID_SENSOR_END },
+ [ANDROID_SENSOR_INFO] = { ANDROID_SENSOR_INFO_START,
+ ANDROID_SENSOR_INFO_END },
+ [ANDROID_SHADING] = { ANDROID_SHADING_START,
+ ANDROID_SHADING_END },
+ [ANDROID_STATISTICS] = { ANDROID_STATISTICS_START,
+ ANDROID_STATISTICS_END },
+ [ANDROID_STATISTICS_INFO] = { ANDROID_STATISTICS_INFO_START,
+ ANDROID_STATISTICS_INFO_END },
+ [ANDROID_TONEMAP] = { ANDROID_TONEMAP_START,
+ ANDROID_TONEMAP_END },
};
-// Shortcut defines to make succint names for field definitions
-#define TIDX(section, tag) \
- [ ANDROID_ ## section ## _ ## tag - ANDROID_ ## section ## _START ]
-
-#define TIIDX(section, tag) \
- [ ANDROID_ ## section ## _ ## tag - ANDROID_ ## section ## _INFO_START ]
-
-tag_info_t android_request[ANDROID_REQUEST_END -
- ANDROID_REQUEST_START] = {
- TIDX(REQUEST, ID) =
- { "id", TYPE_INT32 },
- TIDX(REQUEST, TYPE) =
- { "type", TYPE_BYTE },
- TIDX(REQUEST, METADATA_MODE) =
- { "metadataMode", TYPE_BYTE },
- TIDX(REQUEST, OUTPUT_STREAMS) =
- { "outputStreams", TYPE_BYTE },
- TIDX(REQUEST, INPUT_STREAMS) =
- { "inputStreams", TYPE_BYTE },
- TIDX(REQUEST, FRAME_COUNT) =
- { "frameCount", TYPE_INT32 }
+static tag_info_t android_color_correction[ANDROID_COLOR_CORRECTION_END -
+ ANDROID_COLOR_CORRECTION_START] = {
+ [ ANDROID_COLOR_CORRECTION_MODE - ANDROID_COLOR_CORRECTION_START ] =
+ { "mode", TYPE_BYTE },
+ [ ANDROID_COLOR_CORRECTION_TRANSFORM - ANDROID_COLOR_CORRECTION_START ] =
+ { "transform", TYPE_FLOAT },
};
-tag_info_t android_lens[ANDROID_LENS_END -
- ANDROID_LENS_START] = {
- TIDX(LENS, FOCUS_DISTANCE) =
- { "focusDistance", TYPE_FLOAT },
- TIDX(LENS, APERTURE) =
- { "aperture", TYPE_FLOAT },
- TIDX(LENS, FOCAL_LENGTH) =
- { "focalLength", TYPE_FLOAT },
- TIDX(LENS, FILTER_DENSITY) =
- { "filterDensity", TYPE_FLOAT },
- TIDX(LENS, OPTICAL_STABILIZATION_MODE) =
- { "opticalStabilizationMode", TYPE_BYTE },
- TIDX(LENS, FOCUS_RANGE) =
- { "focusRange", TYPE_FLOAT }
-};
-
-tag_info_t android_lens_info[ANDROID_LENS_INFO_END -
- ANDROID_LENS_INFO_START] = {
- TIIDX(LENS, MINIMUM_FOCUS_DISTANCE) =
- { "minimumFocusDistance", TYPE_FLOAT },
- TIIDX(LENS, HYPERFOCAL_DISTANCE) =
- { "hyperfocalDistance", TYPE_FLOAT },
- TIIDX(LENS, AVAILABLE_FOCAL_LENGTHS) =
- { "availableFocalLengths", TYPE_FLOAT },
- TIIDX(LENS, AVAILABLE_APERTURES) =
- { "availableApertures", TYPE_FLOAT },
- TIIDX(LENS, AVAILABLE_FILTER_DENSITY) =
- { "availableFilterDensities", TYPE_FLOAT },
- TIIDX(LENS, AVAILABLE_OPTICAL_STABILIZATION) =
- { "availableOpticalStabilizationModes", TYPE_BYTE },
- TIIDX(LENS, SHADING_MAP_SIZE) =
- { "shadingMapSize", TYPE_INT32 },
- TIIDX(LENS, SHADING_MAP) =
- { "shadingMap", TYPE_FLOAT },
- TIIDX(LENS, GEOMETRIC_CORRECTION_MAP_SIZE) =
- { "geometricCorrectionMapSize", TYPE_INT32 },
- TIIDX(LENS, GEOMETRIC_CORRECTION_MAP) =
- { "geometricCorrectionMap", TYPE_FLOAT },
- TIIDX(LENS, FACING) =
- { "facing", TYPE_BYTE },
- TIIDX(LENS, POSITION) =
- { "position", TYPE_FLOAT }
-};
-
-tag_info_t android_sensor[ANDROID_SENSOR_END -
- ANDROID_SENSOR_START] = {
- TIDX(SENSOR, EXPOSURE_TIME) =
- { "exposureTime", TYPE_INT64 },
- TIDX(SENSOR, FRAME_DURATION) =
- { "frameDuration", TYPE_INT64 },
- TIDX(SENSOR, SENSITIVITY) =
- { "sensitivity", TYPE_INT32 },
- TIDX(SENSOR, TIMESTAMP) =
- { "timestamp", TYPE_INT64 }
-};
-
-tag_info_t android_sensor_info[ANDROID_SENSOR_INFO_END -
- ANDROID_SENSOR_INFO_START] = {
- TIIDX(SENSOR, EXPOSURE_TIME_RANGE) =
- { "exposureTimeRange", TYPE_INT64 },
- TIIDX(SENSOR, MAX_FRAME_DURATION) =
- { "maxFrameDuration", TYPE_INT64 },
- TIIDX(SENSOR, AVAILABLE_SENSITIVITIES) =
- { "availableSensitivities", TYPE_INT32 },
- TIIDX(SENSOR, COLOR_FILTER_ARRANGEMENT) =
- { "colorFilterArrangement", TYPE_BYTE },
- TIIDX(SENSOR, PHYSICAL_SIZE) =
- { "physicalSize", TYPE_FLOAT },
- TIIDX(SENSOR, PIXEL_ARRAY_SIZE) =
- { "pixelArraySize", TYPE_INT32 },
- TIIDX(SENSOR, ACTIVE_ARRAY_SIZE) =
- { "activeArraySize", TYPE_INT32 },
- TIIDX(SENSOR, WHITE_LEVEL) =
- { "whiteLevel", TYPE_INT32 },
- TIIDX(SENSOR, BLACK_LEVEL_PATTERN) =
- { "blackLevelPattern", TYPE_INT32 },
- TIIDX(SENSOR, COLOR_TRANSFORM_1) =
- { "colorTransform1", TYPE_RATIONAL },
- TIIDX(SENSOR, COLOR_TRANSFORM_2) =
- { "colorTransform2", TYPE_RATIONAL },
- TIIDX(SENSOR, REFERENCE_ILLUMINANT_1) =
- { "referenceIlluminant1", TYPE_BYTE },
- TIIDX(SENSOR, REFERENCE_ILLUMINANT_2) =
- { "referenceIlluminant2", TYPE_BYTE },
- TIIDX(SENSOR, FORWARD_MATRIX_1) =
- { "forwardMatrix1", TYPE_RATIONAL },
- TIIDX(SENSOR, FORWARD_MATRIX_2) =
- { "forwardMatrix2", TYPE_RATIONAL },
- TIIDX(SENSOR, CALIBRATION_TRANSFORM_1) =
- { "calibrationTransform1", TYPE_RATIONAL },
- TIIDX(SENSOR, CALIBRATION_TRANSFORM_2) =
- { "calibrationTransform2", TYPE_RATIONAL },
- TIIDX(SENSOR, BASE_GAIN_FACTOR) =
- { "baseGainFactor", TYPE_RATIONAL },
- TIIDX(SENSOR, MAX_ANALOG_SENSITIVITY) =
- { "maxAnalogSensitivity", TYPE_INT32 },
- TIIDX(SENSOR, NOISE_MODEL_COEFFICIENTS) =
- { "noiseModelCoefficients", TYPE_FLOAT },
- TIIDX(SENSOR, ORIENTATION) =
- { "orientation", TYPE_INT32 }
-};
-
-tag_info_t android_flash[ANDROID_FLASH_END -
- ANDROID_FLASH_START] = {
- TIDX(FLASH, MODE) =
- { "mode", TYPE_BYTE },
- TIDX(FLASH, FIRING_POWER) =
- { "firingPower", TYPE_BYTE },
- TIDX(FLASH, FIRING_TIME) =
- { "firingTime", TYPE_INT64 }
-};
-
-tag_info_t android_flash_info[ANDROID_FLASH_INFO_END -
- ANDROID_FLASH_INFO_START] = {
- TIIDX(FLASH, AVAILABLE) =
- { "available", TYPE_BYTE },
- TIIDX(FLASH, CHARGE_DURATION) =
- { "chargeDuration", TYPE_INT64 },
-};
-
-tag_info_t android_hot_pixel[ANDROID_HOT_PIXEL_END -
- ANDROID_HOT_PIXEL_START] = {
- TIDX(HOT_PIXEL, MODE) =
- { "mode", TYPE_BYTE }
-};
-
-tag_info_t android_hot_pixel_info[ANDROID_HOT_PIXEL_INFO_END -
- ANDROID_HOT_PIXEL_INFO_START];
-
-tag_info_t android_demosaic[ANDROID_DEMOSAIC_END -
- ANDROID_DEMOSAIC_START] = {
- TIDX(DEMOSAIC, MODE) =
- { "mode", TYPE_BYTE }
-};
-
-tag_info_t android_demosaic_info[ANDROID_DEMOSAIC_INFO_END -
- ANDROID_DEMOSAIC_INFO_START];
-
-tag_info_t android_noise[ANDROID_NOISE_END -
- ANDROID_NOISE_START] = {
- TIDX(NOISE, MODE) =
- { "mode", TYPE_BYTE },
- TIDX(NOISE, STRENGTH) =
- { "strength", TYPE_BYTE }
-};
-
-tag_info_t android_noise_info[ANDROID_NOISE_INFO_END -
- ANDROID_NOISE_INFO_START];
-
-tag_info_t android_shading[ANDROID_SHADING_END -
- ANDROID_SHADING_START] = {
- TIDX(SHADING, MODE) =
- { "mode", TYPE_BYTE }
-};
-
-tag_info_t android_shading_info[ANDROID_SHADING_INFO_END -
- ANDROID_SHADING_INFO_START];
-
-tag_info_t android_geometric[ANDROID_GEOMETRIC_END -
- ANDROID_GEOMETRIC_START] = {
- TIDX(GEOMETRIC, MODE) =
- { "mode", TYPE_BYTE }
-};
-
-tag_info_t android_geometric_info[ANDROID_GEOMETRIC_INFO_END -
- ANDROID_GEOMETRIC_INFO_START];
-
-tag_info_t android_color[ANDROID_COLOR_END -
- ANDROID_COLOR_START] = {
- TIDX(COLOR, MODE) =
- { "mode", TYPE_BYTE },
- TIDX(COLOR, TRANSFORM) =
- { "transform", TYPE_FLOAT }
-};
-
-tag_info_t android_color_info[ANDROID_COLOR_INFO_END -
- ANDROID_COLOR_INFO_START];
-
-tag_info_t android_tonemap[ANDROID_TONEMAP_END -
- ANDROID_TONEMAP_START] = {
- TIDX(TONEMAP, MODE) =
- { "mode", TYPE_BYTE },
- TIDX(TONEMAP, CURVE_RED) =
- { "curveRed", TYPE_FLOAT },
- TIDX(TONEMAP, CURVE_GREEN) =
- { "curveGreen", TYPE_FLOAT },
- TIDX(TONEMAP, CURVE_BLUE) =
- { "curveBlue", TYPE_FLOAT }
-};
-
-tag_info_t android_tonemap_info[ANDROID_TONEMAP_INFO_END -
- ANDROID_TONEMAP_INFO_START] = {
- TIIDX(TONEMAP, MAX_CURVE_POINTS) =
- { "maxCurvePoints", TYPE_INT32 }
-};
-
-tag_info_t android_edge[ANDROID_EDGE_END -
- ANDROID_EDGE_START] = {
- TIDX(EDGE, MODE) =
- { "mode", TYPE_BYTE },
- TIDX(EDGE, STRENGTH) =
- { "strength", TYPE_BYTE }
-};
-
-tag_info_t android_edge_info[ANDROID_EDGE_INFO_END -
- ANDROID_EDGE_INFO_START];
-
-tag_info_t android_scaler[ANDROID_SCALER_END -
- ANDROID_SCALER_START] = {
- TIDX(SCALER, CROP_REGION) =
- { "cropRegion", TYPE_INT32 }
-};
-
-tag_info_t android_scaler_info[ANDROID_SCALER_INFO_END -
- ANDROID_SCALER_INFO_START] = {
- TIIDX(SCALER, AVAILABLE_FORMATS) =
- { "availableFormats", TYPE_INT32 },
- TIIDX(SCALER, AVAILABLE_RAW_SIZES) =
- { "availableRawSizes", TYPE_INT32 },
- TIIDX(SCALER, AVAILABLE_RAW_MIN_DURATIONS) =
- { "availableRawMinDurations", TYPE_INT64 },
- TIIDX(SCALER, AVAILABLE_PROCESSED_SIZES) =
- { "availableProcessedSizes", TYPE_INT32 },
- TIIDX(SCALER, AVAILABLE_PROCESSED_MIN_DURATIONS) =
- { "availableProcessedMinDurations", TYPE_INT64 },
- TIIDX(SCALER, AVAILABLE_JPEG_SIZES) =
- { "availableJpegSizes", TYPE_INT32 },
- TIIDX(SCALER, AVAILABLE_JPEG_MIN_DURATIONS) =
- { "availableJpegMinDurations", TYPE_INT64 },
- TIIDX(SCALER, AVAILABLE_MAX_ZOOM) =
- { "availableMaxDigitalZoom", TYPE_INT32 }
-};
-
-tag_info_t android_jpeg[ANDROID_JPEG_END -
- ANDROID_JPEG_START] = {
- TIDX(JPEG, QUALITY) =
- { "quality", TYPE_INT32 },
- TIDX(JPEG, THUMBNAIL_SIZE) =
- { "thumbnailSize", TYPE_INT32 },
- TIDX(JPEG, THUMBNAIL_QUALITY) =
- { "thumbnailQuality", TYPE_INT32 },
- TIDX(JPEG, GPS_COORDINATES) =
- { "gpsCoordinates", TYPE_DOUBLE },
- TIDX(JPEG, GPS_PROCESSING_METHOD) =
- { "gpsProcessingMethod", TYPE_BYTE },
- TIDX(JPEG, GPS_TIMESTAMP) =
- { "gpsTimestamp", TYPE_INT64 },
- TIDX(JPEG, ORIENTATION) =
- { "orientation", TYPE_INT32 },
- TIDX(JPEG, SIZE) =
- { "size", TYPE_INT32 }
-};
-
-tag_info_t android_jpeg_info[ANDROID_JPEG_INFO_END -
- ANDROID_JPEG_INFO_START] = {
- TIIDX(JPEG, AVAILABLE_THUMBNAIL_SIZES) =
- { "availableThumbnailSizes", TYPE_INT32 },
- TIIDX(JPEG, MAX_SIZE) =
- { "maxSize", TYPE_INT32 }
-};
-
-tag_info_t android_stats[ANDROID_STATS_END -
- ANDROID_STATS_START] = {
- TIDX(STATS, FACE_DETECT_MODE) =
- { "faceDetectMode", TYPE_BYTE },
- TIDX(STATS, FACE_RECTANGLES) =
- { "faceRectangles", TYPE_INT32 },
- TIDX(STATS, FACE_SCORES) =
- { "faceScores", TYPE_BYTE },
- TIDX(STATS, FACE_LANDMARKS) =
- { "faceLandmarks", TYPE_INT32 },
- TIDX(STATS, FACE_IDS) =
- { "faceIds", TYPE_INT32 },
- TIDX(STATS, HISTOGRAM_MODE) =
- { "histogramMode", TYPE_BYTE },
- TIDX(STATS, HISTOGRAM) =
- { "histogram", TYPE_INT32 },
- TIDX(STATS, SHARPNESS_MAP_MODE) =
- { "sharpnessMapMode", TYPE_BYTE },
- TIDX(STATS, SHARPNESS_MAP) =
- { "sharpnessMap", TYPE_INT32 }
-};
-
-tag_info_t android_stats_info[ANDROID_STATS_INFO_END -
- ANDROID_STATS_INFO_START] = {
- TIIDX(STATS, AVAILABLE_FACE_DETECT_MODES) =
- { "availableFaceDetectModes", TYPE_BYTE },
- TIIDX(STATS, MAX_FACE_COUNT) =
- { "maxFaceCount", TYPE_INT32 },
- TIIDX(STATS, HISTOGRAM_BUCKET_COUNT) =
- { "histogramBucketCount", TYPE_INT32 },
- TIIDX(STATS, MAX_HISTOGRAM_COUNT) =
- { "maxHistogramCount", TYPE_INT32 },
- TIIDX(STATS, SHARPNESS_MAP_SIZE) =
- { "sharpnessMapSize", TYPE_INT32 },
- TIIDX(STATS, MAX_SHARPNESS_MAP_VALUE) =
- { "maxSharpnessMapValue", TYPE_INT32 }
-};
-
-
-tag_info_t android_control[ANDROID_CONTROL_END -
+static tag_info_t android_control[ANDROID_CONTROL_END -
ANDROID_CONTROL_START] = {
- TIDX(CONTROL, CAPTURE_INTENT) =
- { "captureIntent", TYPE_BYTE },
- TIDX(CONTROL, MODE) =
- { "mode", TYPE_BYTE },
- TIDX(CONTROL, EFFECT_MODE) =
- { "effectMode", TYPE_BYTE },
- TIDX(CONTROL, SCENE_MODE) =
- { "sceneMode", TYPE_BYTE },
- TIDX(CONTROL, VIDEO_STABILIZATION_MODE) =
- { "videoStabilizationMode", TYPE_BYTE },
- TIDX(CONTROL, AE_MODE) =
- { "aeMode", TYPE_BYTE },
- TIDX(CONTROL, AE_LOCK) =
- { "aeLock", TYPE_BYTE },
- TIDX(CONTROL, AE_REGIONS) =
- { "aeRegions", TYPE_INT32 },
- TIDX(CONTROL, AE_EXP_COMPENSATION) =
- { "aeExposureCompensation", TYPE_INT32 },
- TIDX(CONTROL, AE_TARGET_FPS_RANGE) =
- { "aeTargetFpsRange", TYPE_INT32 },
- TIDX(CONTROL, AE_ANTIBANDING_MODE) =
- { "aeAntibandingMode", TYPE_BYTE },
- TIDX(CONTROL, AE_STATE) =
- { "aeState", TYPE_BYTE },
- TIDX(CONTROL, AE_PRECAPTURE_ID) =
- { "aePrecaptureId", TYPE_INT32},
- TIDX(CONTROL, AWB_MODE) =
- { "awbMode", TYPE_BYTE },
- TIDX(CONTROL, AWB_LOCK) =
- { "awbLock", TYPE_BYTE },
- TIDX(CONTROL, AWB_REGIONS) =
- { "awbRegions", TYPE_INT32 },
- TIDX(CONTROL, AWB_STATE) =
- { "awbState", TYPE_BYTE },
- TIDX(CONTROL, AF_MODE) =
- { "afMode", TYPE_BYTE },
- TIDX(CONTROL, AF_REGIONS) =
- { "afRegions", TYPE_INT32 },
- TIDX(CONTROL, AF_STATE) =
- { "afState", TYPE_BYTE },
- TIDX(CONTROL, AF_TRIGGER_ID) =
- { "afTriggerId", TYPE_INT32 }
+ [ ANDROID_CONTROL_AE_ANTIBANDING_MODE - ANDROID_CONTROL_START ] =
+ { "aeAntibandingMode", TYPE_BYTE },
+ [ ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION - ANDROID_CONTROL_START ] =
+ { "aeExposureCompensation", TYPE_INT32 },
+ [ ANDROID_CONTROL_AE_LOCK - ANDROID_CONTROL_START ] =
+ { "aeLock", TYPE_BYTE },
+ [ ANDROID_CONTROL_AE_MODE - ANDROID_CONTROL_START ] =
+ { "aeMode", TYPE_BYTE },
+ [ ANDROID_CONTROL_AE_REGIONS - ANDROID_CONTROL_START ] =
+ { "aeRegions", TYPE_INT32 },
+ [ ANDROID_CONTROL_AE_TARGET_FPS_RANGE - ANDROID_CONTROL_START ] =
+ { "aeTargetFpsRange", TYPE_INT32 },
+ [ ANDROID_CONTROL_AF_MODE - ANDROID_CONTROL_START ] =
+ { "afMode", TYPE_BYTE },
+ [ ANDROID_CONTROL_AF_REGIONS - ANDROID_CONTROL_START ] =
+ { "afRegions", TYPE_INT32 },
+ [ ANDROID_CONTROL_AWB_LOCK - ANDROID_CONTROL_START ] =
+ { "awbLock", TYPE_BYTE },
+ [ ANDROID_CONTROL_AWB_MODE - ANDROID_CONTROL_START ] =
+ { "awbMode", TYPE_BYTE },
+ [ ANDROID_CONTROL_AWB_REGIONS - ANDROID_CONTROL_START ] =
+ { "awbRegions", TYPE_INT32 },
+ [ ANDROID_CONTROL_CAPTURE_INTENT - ANDROID_CONTROL_START ] =
+ { "captureIntent", TYPE_BYTE },
+ [ ANDROID_CONTROL_EFFECT_MODE - ANDROID_CONTROL_START ] =
+ { "effectMode", TYPE_BYTE },
+ [ ANDROID_CONTROL_MODE - ANDROID_CONTROL_START ] =
+ { "mode", TYPE_BYTE },
+ [ ANDROID_CONTROL_SCENE_MODE - ANDROID_CONTROL_START ] =
+ { "sceneMode", TYPE_BYTE },
+ [ ANDROID_CONTROL_VIDEO_STABILIZATION_MODE - ANDROID_CONTROL_START ] =
+ { "videoStabilizationMode", TYPE_BYTE },
+ [ ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES - ANDROID_CONTROL_START ] =
+ { "aeAvailableAntibandingModes", TYPE_BYTE },
+ [ ANDROID_CONTROL_AE_AVAILABLE_MODES - ANDROID_CONTROL_START ] =
+ { "aeAvailableModes", TYPE_BYTE },
+ [ ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES - ANDROID_CONTROL_START ] =
+ { "aeAvailableTargetFpsRanges", TYPE_INT32 },
+ [ ANDROID_CONTROL_AE_COMPENSATION_RANGE - ANDROID_CONTROL_START ] =
+ { "aeCompensationRange", TYPE_INT32 },
+ [ ANDROID_CONTROL_AE_COMPENSATION_STEP - ANDROID_CONTROL_START ] =
+ { "aeCompensationStep", TYPE_RATIONAL
+ },
+ [ ANDROID_CONTROL_AF_AVAILABLE_MODES - ANDROID_CONTROL_START ] =
+ { "afAvailableModes", TYPE_BYTE },
+ [ ANDROID_CONTROL_AVAILABLE_EFFECTS - ANDROID_CONTROL_START ] =
+ { "availableEffects", TYPE_BYTE },
+ [ ANDROID_CONTROL_AVAILABLE_SCENE_MODES - ANDROID_CONTROL_START ] =
+ { "availableSceneModes", TYPE_BYTE },
+ [ ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES - ANDROID_CONTROL_START ] =
+ { "availableVideoStabilizationModes",
+ TYPE_BYTE },
+ [ ANDROID_CONTROL_AWB_AVAILABLE_MODES - ANDROID_CONTROL_START ] =
+ { "awbAvailableModes", TYPE_BYTE },
+ [ ANDROID_CONTROL_MAX_REGIONS - ANDROID_CONTROL_START ] =
+ { "maxRegions", TYPE_INT32 },
+ [ ANDROID_CONTROL_SCENE_MODE_OVERRIDES - ANDROID_CONTROL_START ] =
+ { "sceneModeOverrides", TYPE_BYTE },
+ [ ANDROID_CONTROL_AE_PRECAPTURE_ID - ANDROID_CONTROL_START ] =
+ { "aePrecaptureId", TYPE_INT32 },
+ [ ANDROID_CONTROL_AE_STATE - ANDROID_CONTROL_START ] =
+ { "aeState", TYPE_BYTE },
+ [ ANDROID_CONTROL_AF_STATE - ANDROID_CONTROL_START ] =
+ { "afState", TYPE_BYTE },
+ [ ANDROID_CONTROL_AF_TRIGGER_ID - ANDROID_CONTROL_START ] =
+ { "afTriggerId", TYPE_INT32 },
+ [ ANDROID_CONTROL_AWB_STATE - ANDROID_CONTROL_START ] =
+ { "awbState", TYPE_BYTE },
};
-tag_info_t android_control_info[ANDROID_CONTROL_INFO_END -
- ANDROID_CONTROL_INFO_START] = {
- TIIDX(CONTROL, AVAILABLE_SCENE_MODES) =
- { "availableSceneModes", TYPE_BYTE },
- TIIDX(CONTROL, AVAILABLE_EFFECTS) =
- { "availableEffects", TYPE_BYTE },
- TIIDX(CONTROL, MAX_REGIONS) =
- { "maxRegions", TYPE_INT32 },
- TIIDX(CONTROL, AE_AVAILABLE_MODES) =
- { "aeAvailableModes", TYPE_BYTE },
- TIIDX(CONTROL, AE_EXP_COMPENSATION_STEP) =
- { "aeCompensationStep", TYPE_RATIONAL },
- TIIDX(CONTROL, AE_EXP_COMPENSATION_RANGE) =
- { "aeCompensationRange", TYPE_INT32 },
- TIIDX(CONTROL, AE_AVAILABLE_TARGET_FPS_RANGES) =
- { "aeAvailableTargetFpsRanges", TYPE_INT32 },
- TIIDX(CONTROL, AE_AVAILABLE_ANTIBANDING_MODES) =
- { "aeAvailableAntibandingModes", TYPE_BYTE },
- TIIDX(CONTROL, AWB_AVAILABLE_MODES) =
- { "awbAvailableModes", TYPE_BYTE },
- TIIDX(CONTROL, AF_AVAILABLE_MODES) =
- { "afAvailableModes", TYPE_BYTE },
- TIIDX(CONTROL, AVAILABLE_VIDEO_STABILIZATION_MODES) =
- { "availableVideoStabilizationModes", TYPE_BYTE },
- TIIDX(CONTROL, SCENE_MODE_OVERRIDES) =
- { "sceneModeOverrides", TYPE_BYTE }
+static tag_info_t android_demosaic[ANDROID_DEMOSAIC_END -
+ ANDROID_DEMOSAIC_START] = {
+ [ ANDROID_DEMOSAIC_MODE - ANDROID_DEMOSAIC_START ] =
+ { "mode", TYPE_BYTE },
};
-tag_info_t android_quirks_info[ANDROID_QUIRKS_INFO_END -
- ANDROID_QUIRKS_INFO_START] = {
- TIIDX(QUIRKS, TRIGGER_AF_WITH_AUTO) =
- { "triggerAfWithAuto", TYPE_BYTE },
- TIIDX(QUIRKS, USE_ZSL_FORMAT) =
- { "useZslFormat", TYPE_BYTE },
- TIIDX(QUIRKS, METERING_CROP_REGION) =
- { "meteringCropRegion", TYPE_BYTE },
+static tag_info_t android_edge[ANDROID_EDGE_END -
+ ANDROID_EDGE_START] = {
+ [ ANDROID_EDGE_MODE - ANDROID_EDGE_START ] =
+ { "mode", TYPE_BYTE },
+ [ ANDROID_EDGE_STRENGTH - ANDROID_EDGE_START ] =
+ { "strength", TYPE_BYTE },
};
-#undef TIDX
-#undef TIIDX
+static tag_info_t android_flash[ANDROID_FLASH_END -
+ ANDROID_FLASH_START] = {
+ [ ANDROID_FLASH_FIRING_POWER - ANDROID_FLASH_START ] =
+ { "firingPower", TYPE_BYTE },
+ [ ANDROID_FLASH_FIRING_TIME - ANDROID_FLASH_START ] =
+ { "firingTime", TYPE_INT64 },
+ [ ANDROID_FLASH_MODE - ANDROID_FLASH_START ] =
+ { "mode", TYPE_BYTE },
+ [ ANDROID_FLASH_COLOR_TEMPERATURE - ANDROID_FLASH_START ] =
+ { "colorTemperature", TYPE_BYTE },
+ [ ANDROID_FLASH_MAX_ENERGY - ANDROID_FLASH_START ] =
+ { "maxEnergy", TYPE_BYTE },
+ [ ANDROID_FLASH_STATE - ANDROID_FLASH_START ] =
+ { "state", TYPE_BYTE },
+};
+
+static tag_info_t android_flash_info[ANDROID_FLASH_INFO_END -
+ ANDROID_FLASH_INFO_START] = {
+ [ ANDROID_FLASH_INFO_AVAILABLE - ANDROID_FLASH_INFO_START ] =
+ { "available", TYPE_BYTE },
+ [ ANDROID_FLASH_INFO_CHARGE_DURATION - ANDROID_FLASH_INFO_START ] =
+ { "chargeDuration", TYPE_INT64 },
+};
+
+static tag_info_t android_geometric[ANDROID_GEOMETRIC_END -
+ ANDROID_GEOMETRIC_START] = {
+ [ ANDROID_GEOMETRIC_MODE - ANDROID_GEOMETRIC_START ] =
+ { "mode", TYPE_BYTE },
+ [ ANDROID_GEOMETRIC_STRENGTH - ANDROID_GEOMETRIC_START ] =
+ { "strength", TYPE_BYTE },
+};
+
+static tag_info_t android_hot_pixel[ANDROID_HOT_PIXEL_END -
+ ANDROID_HOT_PIXEL_START] = {
+ [ ANDROID_HOT_PIXEL_MODE - ANDROID_HOT_PIXEL_START ] =
+ { "mode", TYPE_BYTE },
+};
+
+static tag_info_t android_hot_pixel_info[ANDROID_HOT_PIXEL_INFO_END -
+ ANDROID_HOT_PIXEL_INFO_START] = {
+ [ ANDROID_HOT_PIXEL_INFO_MAP - ANDROID_HOT_PIXEL_INFO_START ] =
+ { "map", TYPE_INT32 },
+};
+
+static tag_info_t android_jpeg[ANDROID_JPEG_END -
+ ANDROID_JPEG_START] = {
+ [ ANDROID_JPEG_GPS_COORDINATES - ANDROID_JPEG_START ] =
+ { "gpsCoordinates", TYPE_DOUBLE },
+ [ ANDROID_JPEG_GPS_PROCESSING_METHOD - ANDROID_JPEG_START ] =
+ { "gpsProcessingMethod", TYPE_BYTE },
+ [ ANDROID_JPEG_GPS_TIMESTAMP - ANDROID_JPEG_START ] =
+ { "gpsTimestamp", TYPE_INT64 },
+ [ ANDROID_JPEG_ORIENTATION - ANDROID_JPEG_START ] =
+ { "orientation", TYPE_INT32 },
+ [ ANDROID_JPEG_QUALITY - ANDROID_JPEG_START ] =
+ { "quality", TYPE_BYTE },
+ [ ANDROID_JPEG_THUMBNAIL_QUALITY - ANDROID_JPEG_START ] =
+ { "thumbnailQuality", TYPE_BYTE },
+ [ ANDROID_JPEG_THUMBNAIL_SIZE - ANDROID_JPEG_START ] =
+ { "thumbnailSize", TYPE_INT32 },
+ [ ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES - ANDROID_JPEG_START ] =
+ { "availableThumbnailSizes", TYPE_INT32 },
+ [ ANDROID_JPEG_MAX_SIZE - ANDROID_JPEG_START ] =
+ { "maxSize", TYPE_INT32 },
+ [ ANDROID_JPEG_SIZE - ANDROID_JPEG_START ] =
+ { "size", TYPE_INT32 },
+};
+
+static tag_info_t android_lens[ANDROID_LENS_END -
+ ANDROID_LENS_START] = {
+ [ ANDROID_LENS_APERTURE - ANDROID_LENS_START ] =
+ { "aperture", TYPE_FLOAT },
+ [ ANDROID_LENS_FILTER_DENSITY - ANDROID_LENS_START ] =
+ { "filterDensity", TYPE_FLOAT },
+ [ ANDROID_LENS_FOCAL_LENGTH - ANDROID_LENS_START ] =
+ { "focalLength", TYPE_FLOAT },
+ [ ANDROID_LENS_FOCUS_DISTANCE - ANDROID_LENS_START ] =
+ { "focusDistance", TYPE_FLOAT },
+ [ ANDROID_LENS_OPTICAL_STABILIZATION_MODE - ANDROID_LENS_START ] =
+ { "opticalStabilizationMode", TYPE_BYTE },
+ [ ANDROID_LENS_FACING - ANDROID_LENS_START ] =
+ { "facing", TYPE_BYTE },
+ [ ANDROID_LENS_OPTICAL_AXIS_ANGLE - ANDROID_LENS_START ] =
+ { "opticalAxisAngle", TYPE_FLOAT },
+ [ ANDROID_LENS_POSITION - ANDROID_LENS_START ] =
+ { "position", TYPE_FLOAT },
+ [ ANDROID_LENS_FOCUS_RANGE - ANDROID_LENS_START ] =
+ { "focusRange", TYPE_FLOAT },
+ [ ANDROID_LENS_STATE - ANDROID_LENS_START ] =
+ { "state", TYPE_BYTE },
+};
+
+static tag_info_t android_lens_info[ANDROID_LENS_INFO_END -
+ ANDROID_LENS_INFO_START] = {
+ [ ANDROID_LENS_INFO_AVAILABLE_APERTURES - ANDROID_LENS_INFO_START ] =
+ { "availableApertures", TYPE_FLOAT },
+ [ ANDROID_LENS_INFO_AVAILABLE_FILTER_DENSITIES - ANDROID_LENS_INFO_START ] =
+ { "availableFilterDensities", TYPE_FLOAT },
+ [ ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS - ANDROID_LENS_INFO_START ] =
+ { "availableFocalLengths", TYPE_FLOAT },
+ [ ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION - ANDROID_LENS_INFO_START ] =
+ { "availableOpticalStabilization", TYPE_BYTE },
+ [ ANDROID_LENS_INFO_GEOMETRIC_CORRECTION_MAP - ANDROID_LENS_INFO_START ] =
+ { "geometricCorrectionMap", TYPE_FLOAT },
+ [ ANDROID_LENS_INFO_GEOMETRIC_CORRECTION_MAP_SIZE - ANDROID_LENS_INFO_START ] =
+ { "geometricCorrectionMapSize", TYPE_INT32 },
+ [ ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE - ANDROID_LENS_INFO_START ] =
+ { "hyperfocalDistance", TYPE_FLOAT },
+ [ ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE - ANDROID_LENS_INFO_START ] =
+ { "minimumFocusDistance", TYPE_FLOAT },
+ [ ANDROID_LENS_INFO_SHADING_MAP - ANDROID_LENS_INFO_START ] =
+ { "shadingMap", TYPE_FLOAT },
+ [ ANDROID_LENS_INFO_SHADING_MAP_SIZE - ANDROID_LENS_INFO_START ] =
+ { "shadingMapSize", TYPE_INT32 },
+};
+
+static tag_info_t android_noise_reduction[ANDROID_NOISE_REDUCTION_END -
+ ANDROID_NOISE_REDUCTION_START] = {
+ [ ANDROID_NOISE_REDUCTION_MODE - ANDROID_NOISE_REDUCTION_START ] =
+ { "mode", TYPE_BYTE },
+ [ ANDROID_NOISE_REDUCTION_STRENGTH - ANDROID_NOISE_REDUCTION_START ] =
+ { "strength", TYPE_BYTE },
+};
+
+static tag_info_t android_quirks[ANDROID_QUIRKS_END -
+ ANDROID_QUIRKS_START] = {
+ [ ANDROID_QUIRKS_METERING_CROP_REGION - ANDROID_QUIRKS_START ] =
+ { "meteringCropRegion", TYPE_BYTE },
+ [ ANDROID_QUIRKS_TRIGGER_AF_WITH_AUTO - ANDROID_QUIRKS_START ] =
+ { "triggerAfWithAuto", TYPE_BYTE },
+ [ ANDROID_QUIRKS_USE_ZSL_FORMAT - ANDROID_QUIRKS_START ] =
+ { "useZslFormat", TYPE_BYTE },
+};
+
+static tag_info_t android_request[ANDROID_REQUEST_END -
+ ANDROID_REQUEST_START] = {
+ [ ANDROID_REQUEST_FRAME_COUNT - ANDROID_REQUEST_START ] =
+ { "frameCount", TYPE_INT32 },
+ [ ANDROID_REQUEST_ID - ANDROID_REQUEST_START ] =
+ { "id", TYPE_INT32 },
+ [ ANDROID_REQUEST_INPUT_STREAMS - ANDROID_REQUEST_START ] =
+ { "inputStreams", TYPE_BYTE },
+ [ ANDROID_REQUEST_METADATA_MODE - ANDROID_REQUEST_START ] =
+ { "metadataMode", TYPE_BYTE },
+ [ ANDROID_REQUEST_OUTPUT_STREAMS - ANDROID_REQUEST_START ] =
+ { "outputStreams", TYPE_BYTE },
+ [ ANDROID_REQUEST_TYPE - ANDROID_REQUEST_START ] =
+ { "type", TYPE_BYTE },
+ [ ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS - ANDROID_REQUEST_START ] =
+ { "maxNumOutputStreams", TYPE_INT32 },
+ [ ANDROID_REQUEST_MAX_NUM_REPROCESS_STREAMS - ANDROID_REQUEST_START ] =
+ { "maxNumReprocessStreams", TYPE_INT32 },
+};
+
+static tag_info_t android_scaler[ANDROID_SCALER_END -
+ ANDROID_SCALER_START] = {
+ [ ANDROID_SCALER_CROP_REGION - ANDROID_SCALER_START ] =
+ { "cropRegion", TYPE_INT32 },
+ [ ANDROID_SCALER_AVAILABLE_FORMATS - ANDROID_SCALER_START ] =
+ { "availableFormats", TYPE_INT32 },
+ [ ANDROID_SCALER_AVAILABLE_JPEG_MIN_DURATIONS - ANDROID_SCALER_START ] =
+ { "availableJpegMinDurations", TYPE_INT64 },
+ [ ANDROID_SCALER_AVAILABLE_JPEG_SIZES - ANDROID_SCALER_START ] =
+ { "availableJpegSizes", TYPE_INT32 },
+ [ ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM - ANDROID_SCALER_START ] =
+ { "availableMaxDigitalZoom", TYPE_INT32 },
+ [ ANDROID_SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS - ANDROID_SCALER_START ] =
+ { "availableProcessedMinDurations",
+ TYPE_INT64 },
+ [ ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES - ANDROID_SCALER_START ] =
+ { "availableProcessedSizes", TYPE_INT32 },
+ [ ANDROID_SCALER_AVAILABLE_RAW_MIN_DURATIONS - ANDROID_SCALER_START ] =
+ { "availableRawMinDurations", TYPE_INT64 },
+ [ ANDROID_SCALER_AVAILABLE_RAW_SIZES - ANDROID_SCALER_START ] =
+ { "availableRawSizes", TYPE_INT32 },
+ [ ANDROID_SCALER_MAX_DIGITAL_ZOOM - ANDROID_SCALER_START ] =
+ { "maxDigitalZoom", TYPE_FLOAT },
+};
+
+static tag_info_t android_sensor[ANDROID_SENSOR_END -
+ ANDROID_SENSOR_START] = {
+ [ ANDROID_SENSOR_EXPOSURE_TIME - ANDROID_SENSOR_START ] =
+ { "exposureTime", TYPE_INT64 },
+ [ ANDROID_SENSOR_FRAME_DURATION - ANDROID_SENSOR_START ] =
+ { "frameDuration", TYPE_INT64 },
+ [ ANDROID_SENSOR_SENSITIVITY - ANDROID_SENSOR_START ] =
+ { "sensitivity", TYPE_INT32 },
+ [ ANDROID_SENSOR_BASE_GAIN_FACTOR - ANDROID_SENSOR_START ] =
+ { "baseGainFactor", TYPE_RATIONAL
+ },
+ [ ANDROID_SENSOR_BLACK_LEVEL_PATTERN - ANDROID_SENSOR_START ] =
+ { "blackLevelPattern", TYPE_INT32 },
+ [ ANDROID_SENSOR_CALIBRATION_TRANSFORM1 - ANDROID_SENSOR_START ] =
+ { "calibrationTransform1", TYPE_RATIONAL
+ },
+ [ ANDROID_SENSOR_CALIBRATION_TRANSFORM2 - ANDROID_SENSOR_START ] =
+ { "calibrationTransform2", TYPE_RATIONAL
+ },
+ [ ANDROID_SENSOR_COLOR_TRANSFORM1 - ANDROID_SENSOR_START ] =
+ { "colorTransform1", TYPE_RATIONAL
+ },
+ [ ANDROID_SENSOR_COLOR_TRANSFORM2 - ANDROID_SENSOR_START ] =
+ { "colorTransform2", TYPE_RATIONAL
+ },
+ [ ANDROID_SENSOR_FORWARD_MATRIX1 - ANDROID_SENSOR_START ] =
+ { "forwardMatrix1", TYPE_RATIONAL
+ },
+ [ ANDROID_SENSOR_FORWARD_MATRIX2 - ANDROID_SENSOR_START ] =
+ { "forwardMatrix2", TYPE_RATIONAL
+ },
+ [ ANDROID_SENSOR_MAX_ANALOG_SENSITIVITY - ANDROID_SENSOR_START ] =
+ { "maxAnalogSensitivity", TYPE_INT32 },
+ [ ANDROID_SENSOR_NOISE_MODEL_COEFFICIENTS - ANDROID_SENSOR_START ] =
+ { "noiseModelCoefficients", TYPE_FLOAT },
+ [ ANDROID_SENSOR_ORIENTATION - ANDROID_SENSOR_START ] =
+ { "orientation", TYPE_INT32 },
+ [ ANDROID_SENSOR_REFERENCE_ILLUMINANT1 - ANDROID_SENSOR_START ] =
+ { "referenceIlluminant1", TYPE_BYTE },
+ [ ANDROID_SENSOR_REFERENCE_ILLUMINANT2 - ANDROID_SENSOR_START ] =
+ { "referenceIlluminant2", TYPE_BYTE },
+ [ ANDROID_SENSOR_TIMESTAMP - ANDROID_SENSOR_START ] =
+ { "timestamp", TYPE_INT64 },
+};
+
+static tag_info_t android_sensor_info[ANDROID_SENSOR_INFO_END -
+ ANDROID_SENSOR_INFO_START] = {
+ [ ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE - ANDROID_SENSOR_INFO_START ] =
+ { "activeArraySize", TYPE_INT32 },
+ [ ANDROID_SENSOR_INFO_AVAILABLE_SENSITIVITIES - ANDROID_SENSOR_INFO_START ] =
+ { "availableSensitivities", TYPE_INT32 },
+ [ ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT - ANDROID_SENSOR_INFO_START ] =
+ { "colorFilterArrangement", TYPE_BYTE },
+ [ ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE - ANDROID_SENSOR_INFO_START ] =
+ { "exposureTimeRange", TYPE_INT64 },
+ [ ANDROID_SENSOR_INFO_MAX_FRAME_DURATION - ANDROID_SENSOR_INFO_START ] =
+ { "maxFrameDuration", TYPE_INT64 },
+ [ ANDROID_SENSOR_INFO_PHYSICAL_SIZE - ANDROID_SENSOR_INFO_START ] =
+ { "physicalSize", TYPE_FLOAT },
+ [ ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE - ANDROID_SENSOR_INFO_START ] =
+ { "pixelArraySize", TYPE_INT32 },
+ [ ANDROID_SENSOR_INFO_WHITE_LEVEL - ANDROID_SENSOR_INFO_START ] =
+ { "whiteLevel", TYPE_INT32 },
+};
+
+static tag_info_t android_shading[ANDROID_SHADING_END -
+ ANDROID_SHADING_START] = {
+ [ ANDROID_SHADING_MODE - ANDROID_SHADING_START ] =
+ { "mode", TYPE_BYTE },
+ [ ANDROID_SHADING_STRENGTH - ANDROID_SHADING_START ] =
+ { "strength", TYPE_BYTE },
+};
+
+static tag_info_t android_statistics[ANDROID_STATISTICS_END -
+ ANDROID_STATISTICS_START] = {
+ [ ANDROID_STATISTICS_FACE_DETECT_MODE - ANDROID_STATISTICS_START ] =
+ { "faceDetectMode", TYPE_BYTE },
+ [ ANDROID_STATISTICS_HISTOGRAM_MODE - ANDROID_STATISTICS_START ] =
+ { "histogramMode", TYPE_BYTE },
+ [ ANDROID_STATISTICS_SHARPNESS_MAP_MODE - ANDROID_STATISTICS_START ] =
+ { "sharpnessMapMode", TYPE_BYTE },
+ [ ANDROID_STATISTICS_FACE_IDS - ANDROID_STATISTICS_START ] =
+ { "faceIds", TYPE_INT32 },
+ [ ANDROID_STATISTICS_FACE_LANDMARKS - ANDROID_STATISTICS_START ] =
+ { "faceLandmarks", TYPE_INT32 },
+ [ ANDROID_STATISTICS_FACE_RECTANGLES - ANDROID_STATISTICS_START ] =
+ { "faceRectangles", TYPE_INT32 },
+ [ ANDROID_STATISTICS_FACE_SCORES - ANDROID_STATISTICS_START ] =
+ { "faceScores", TYPE_BYTE },
+ [ ANDROID_STATISTICS_HISTOGRAM - ANDROID_STATISTICS_START ] =
+ { "histogram", TYPE_INT32 },
+ [ ANDROID_STATISTICS_SHARPNESS_MAP - ANDROID_STATISTICS_START ] =
+ { "sharpnessMap", TYPE_INT32 },
+};
+
+static tag_info_t android_statistics_info[ANDROID_STATISTICS_INFO_END -
+ ANDROID_STATISTICS_INFO_START] = {
+ [ ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES - ANDROID_STATISTICS_INFO_START ] =
+ { "availableFaceDetectModes", TYPE_BYTE },
+ [ ANDROID_STATISTICS_INFO_HISTOGRAM_BUCKET_COUNT - ANDROID_STATISTICS_INFO_START ] =
+ { "histogramBucketCount", TYPE_INT32 },
+ [ ANDROID_STATISTICS_INFO_MAX_FACE_COUNT - ANDROID_STATISTICS_INFO_START ] =
+ { "maxFaceCount", TYPE_INT32 },
+ [ ANDROID_STATISTICS_INFO_MAX_HISTOGRAM_COUNT - ANDROID_STATISTICS_INFO_START ] =
+ { "maxHistogramCount", TYPE_INT32 },
+ [ ANDROID_STATISTICS_INFO_MAX_SHARPNESS_MAP_VALUE - ANDROID_STATISTICS_INFO_START ] =
+ { "maxSharpnessMapValue", TYPE_INT32 },
+ [ ANDROID_STATISTICS_INFO_SHARPNESS_MAP_SIZE - ANDROID_STATISTICS_INFO_START ] =
+ { "sharpnessMapSize", TYPE_INT32 },
+};
+
+static tag_info_t android_tonemap[ANDROID_TONEMAP_END -
+ ANDROID_TONEMAP_START] = {
+ [ ANDROID_TONEMAP_CURVE_BLUE - ANDROID_TONEMAP_START ] =
+ { "curveBlue", TYPE_BYTE },
+ [ ANDROID_TONEMAP_CURVE_GREEN - ANDROID_TONEMAP_START ] =
+ { "curveGreen", TYPE_BYTE },
+ [ ANDROID_TONEMAP_CURVE_RED - ANDROID_TONEMAP_START ] =
+ { "curveRed", TYPE_FLOAT },
+ [ ANDROID_TONEMAP_MODE - ANDROID_TONEMAP_START ] =
+ { "mode", TYPE_BYTE },
+ [ ANDROID_TONEMAP_MAX_CURVE_POINTS - ANDROID_TONEMAP_START ] =
+ { "maxCurvePoints", TYPE_INT32 },
+};
+
tag_info_t *tag_info[ANDROID_SECTION_COUNT] = {
- android_request,
- android_lens,
- android_lens_info,
- android_sensor,
- android_sensor_info,
+ android_color_correction,
+ android_control,
+ android_demosaic,
+ android_edge,
android_flash,
android_flash_info,
+ android_geometric,
android_hot_pixel,
android_hot_pixel_info,
- android_demosaic,
- android_demosaic_info,
- android_noise,
- android_noise_info,
- android_shading,
- android_shading_info,
- android_geometric,
- android_geometric_info,
- android_color,
- android_color_info,
- android_tonemap,
- android_tonemap_info,
- android_edge,
- android_edge_info,
- android_scaler,
- android_scaler_info,
android_jpeg,
- android_jpeg_info,
- android_stats,
- android_stats_info,
- android_control,
- android_control_info,
- android_quirks_info
+ android_lens,
+ android_lens_info,
+ android_noise_reduction,
+ android_quirks,
+ android_request,
+ android_scaler,
+ android_sensor,
+ android_sensor_info,
+ android_shading,
+ android_statistics,
+ android_statistics_info,
+ android_tonemap,
};
+
+int camera_metadata_enum_snprint(uint32_t tag,
+ uint32_t value,
+ char *dst,
+ size_t size) {
+ const char *msg = "error: not an enum";
+ int ret = -1;
+
+ switch(tag) {
+ case ANDROID_COLOR_CORRECTION_MODE: {
+ switch (value) {
+ case ANDROID_COLOR_CORRECTION_MODE_TRANSFORM_MATRIX:
+ msg = "TRANSFORM_MATRIX";
+ ret = 0;
+ break;
+ case ANDROID_COLOR_CORRECTION_MODE_FAST:
+ msg = "FAST";
+ ret = 0;
+ break;
+ case ANDROID_COLOR_CORRECTION_MODE_HIGH_QUALITY:
+ msg = "HIGH_QUALITY";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_COLOR_CORRECTION_TRANSFORM: {
+ break;
+ }
+
+ case ANDROID_CONTROL_AE_ANTIBANDING_MODE: {
+ switch (value) {
+ case ANDROID_CONTROL_AE_ANTIBANDING_MODE_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AE_ANTIBANDING_MODE_50HZ:
+ msg = "50HZ";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AE_ANTIBANDING_MODE_60HZ:
+ msg = "60HZ";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO:
+ msg = "AUTO";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION: {
+ break;
+ }
+ case ANDROID_CONTROL_AE_LOCK: {
+ switch (value) {
+ case ANDROID_CONTROL_AE_LOCK_ON:
+ msg = "ON";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AE_LOCK_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_CONTROL_AE_MODE: {
+ switch (value) {
+ case ANDROID_CONTROL_AE_MODE_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AE_MODE_ON:
+ msg = "ON";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AE_MODE_ON_AUTO_FLASH:
+ msg = "ON_AUTO_FLASH";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AE_MODE_ON_ALWAYS_FLASH:
+ msg = "ON_ALWAYS_FLASH";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE:
+ msg = "ON_AUTO_FLASH_REDEYE";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_CONTROL_AE_REGIONS: {
+ break;
+ }
+ case ANDROID_CONTROL_AE_TARGET_FPS_RANGE: {
+ break;
+ }
+ case ANDROID_CONTROL_AF_MODE: {
+ switch (value) {
+ case ANDROID_CONTROL_AF_MODE_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AF_MODE_AUTO:
+ msg = "AUTO";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AF_MODE_MACRO:
+ msg = "MACRO";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AF_MODE_CONTINUOUS_VIDEO:
+ msg = "CONTINUOUS_VIDEO";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AF_MODE_CONTINUOUS_PICTURE:
+ msg = "CONTINUOUS_PICTURE";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AF_MODE_EDOF:
+ msg = "EDOF";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_CONTROL_AF_REGIONS: {
+ break;
+ }
+ case ANDROID_CONTROL_AWB_LOCK: {
+ switch (value) {
+ case ANDROID_CONTROL_AWB_LOCK_ON:
+ msg = "ON";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AWB_LOCK_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_CONTROL_AWB_MODE: {
+ switch (value) {
+ case ANDROID_CONTROL_AWB_MODE_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AWB_MODE_AUTO:
+ msg = "AUTO";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AWB_MODE_INCANDESCENT:
+ msg = "INCANDESCENT";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AWB_MODE_FLUORESCENT:
+ msg = "FLUORESCENT";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AWB_MODE_WARM_FLUORESCENT:
+ msg = "WARM_FLUORESCENT";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AWB_MODE_DAYLIGHT:
+ msg = "DAYLIGHT";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AWB_MODE_CLOUDY_DAYLIGHT:
+ msg = "CLOUDY_DAYLIGHT";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AWB_MODE_TWILIGHT:
+ msg = "TWILIGHT";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AWB_MODE_SHADE:
+ msg = "SHADE";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_CONTROL_AWB_REGIONS: {
+ break;
+ }
+ case ANDROID_CONTROL_CAPTURE_INTENT: {
+ switch (value) {
+ case ANDROID_CONTROL_CAPTURE_INTENT_CUSTOM:
+ msg = "CUSTOM";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW:
+ msg = "PREVIEW";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE:
+ msg = "STILL_CAPTURE";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_RECORD:
+ msg = "VIDEO_RECORD";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT:
+ msg = "VIDEO_SNAPSHOT";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG:
+ msg = "ZERO_SHUTTER_LAG";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_CONTROL_EFFECT_MODE: {
+ switch (value) {
+ case ANDROID_CONTROL_EFFECT_MODE_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_EFFECT_MODE_MONO:
+ msg = "MONO";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_EFFECT_MODE_NEGATIVE:
+ msg = "NEGATIVE";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_EFFECT_MODE_SOLARIZE:
+ msg = "SOLARIZE";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_EFFECT_MODE_SEPIA:
+ msg = "SEPIA";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_EFFECT_MODE_POSTERIZE:
+ msg = "POSTERIZE";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_EFFECT_MODE_WHITEBOARD:
+ msg = "WHITEBOARD";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_EFFECT_MODE_BLACKBOARD:
+ msg = "BLACKBOARD";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_EFFECT_MODE_AQUA:
+ msg = "AQUA";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_CONTROL_MODE: {
+ switch (value) {
+ case ANDROID_CONTROL_MODE_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_MODE_AUTO:
+ msg = "AUTO";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_MODE_USE_SCENE_MODE:
+ msg = "USE_SCENE_MODE";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_CONTROL_SCENE_MODE: {
+ switch (value) {
+ case ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED:
+ msg = "UNSUPPORTED";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_SCENE_MODE_FACE_PRIORITY:
+ msg = "FACE_PRIORITY";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_SCENE_MODE_ACTION:
+ msg = "ACTION";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_SCENE_MODE_PORTRAIT:
+ msg = "PORTRAIT";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_SCENE_MODE_LANDSCAPE:
+ msg = "LANDSCAPE";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_SCENE_MODE_NIGHT:
+ msg = "NIGHT";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT:
+ msg = "NIGHT_PORTRAIT";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_SCENE_MODE_THEATRE:
+ msg = "THEATRE";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_SCENE_MODE_BEACH:
+ msg = "BEACH";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_SCENE_MODE_SNOW:
+ msg = "SNOW";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_SCENE_MODE_SUNSET:
+ msg = "SUNSET";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO:
+ msg = "STEADYPHOTO";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_SCENE_MODE_FIREWORKS:
+ msg = "FIREWORKS";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_SCENE_MODE_SPORTS:
+ msg = "SPORTS";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_SCENE_MODE_PARTY:
+ msg = "PARTY";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT:
+ msg = "CANDLELIGHT";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_SCENE_MODE_BARCODE:
+ msg = "BARCODE";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_CONTROL_VIDEO_STABILIZATION_MODE: {
+ switch (value) {
+ case ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_ON:
+ msg = "ON";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES: {
+ break;
+ }
+ case ANDROID_CONTROL_AE_AVAILABLE_MODES: {
+ break;
+ }
+ case ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES: {
+ break;
+ }
+ case ANDROID_CONTROL_AE_COMPENSATION_RANGE: {
+ break;
+ }
+ case ANDROID_CONTROL_AE_COMPENSATION_STEP: {
+ break;
+ }
+ case ANDROID_CONTROL_AF_AVAILABLE_MODES: {
+ break;
+ }
+ case ANDROID_CONTROL_AVAILABLE_EFFECTS: {
+ break;
+ }
+ case ANDROID_CONTROL_AVAILABLE_SCENE_MODES: {
+ break;
+ }
+ case ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES: {
+ break;
+ }
+ case ANDROID_CONTROL_AWB_AVAILABLE_MODES: {
+ break;
+ }
+ case ANDROID_CONTROL_MAX_REGIONS: {
+ break;
+ }
+ case ANDROID_CONTROL_SCENE_MODE_OVERRIDES: {
+ break;
+ }
+ case ANDROID_CONTROL_AE_PRECAPTURE_ID: {
+ break;
+ }
+ case ANDROID_CONTROL_AE_STATE: {
+ switch (value) {
+ case ANDROID_CONTROL_AE_STATE_INACTIVE:
+ msg = "INACTIVE";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AE_STATE_SEARCHING:
+ msg = "SEARCHING";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AE_STATE_CONVERGED:
+ msg = "CONVERGED";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AE_STATE_LOCKED:
+ msg = "LOCKED";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AE_STATE_FLASH_REQUIRED:
+ msg = "FLASH_REQUIRED";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AE_STATE_PRECAPTURE:
+ msg = "PRECAPTURE";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_CONTROL_AF_STATE: {
+ switch (value) {
+ case ANDROID_CONTROL_AF_STATE_INACTIVE:
+ msg = "INACTIVE";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AF_STATE_PASSIVE_SCAN:
+ msg = "PASSIVE_SCAN";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AF_STATE_PASSIVE_FOCUSED:
+ msg = "PASSIVE_FOCUSED";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AF_STATE_ACTIVE_SCAN:
+ msg = "ACTIVE_SCAN";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AF_STATE_FOCUSED_LOCKED:
+ msg = "FOCUSED_LOCKED";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AF_STATE_NOT_FOCUSED_LOCKED:
+ msg = "NOT_FOCUSED_LOCKED";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_CONTROL_AF_TRIGGER_ID: {
+ break;
+ }
+ case ANDROID_CONTROL_AWB_STATE: {
+ switch (value) {
+ case ANDROID_CONTROL_AWB_STATE_INACTIVE:
+ msg = "INACTIVE";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AWB_STATE_SEARCHING:
+ msg = "SEARCHING";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AWB_STATE_CONVERGED:
+ msg = "CONVERGED";
+ ret = 0;
+ break;
+ case ANDROID_CONTROL_AWB_STATE_LOCKED:
+ msg = "LOCKED";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+
+ case ANDROID_DEMOSAIC_MODE: {
+ switch (value) {
+ case ANDROID_DEMOSAIC_MODE_FAST:
+ msg = "FAST";
+ ret = 0;
+ break;
+ case ANDROID_DEMOSAIC_MODE_HIGH_QUALITY:
+ msg = "HIGH_QUALITY";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+
+ case ANDROID_EDGE_MODE: {
+ switch (value) {
+ case ANDROID_EDGE_MODE_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ case ANDROID_EDGE_MODE_FAST:
+ msg = "FAST";
+ ret = 0;
+ break;
+ case ANDROID_EDGE_MODE_HIGH_QUALITY:
+ msg = "HIGH_QUALITY";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_EDGE_STRENGTH: {
+ break;
+ }
+
+ case ANDROID_FLASH_FIRING_POWER: {
+ break;
+ }
+ case ANDROID_FLASH_FIRING_TIME: {
+ break;
+ }
+ case ANDROID_FLASH_MODE: {
+ switch (value) {
+ case ANDROID_FLASH_MODE_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ case ANDROID_FLASH_MODE_SINGLE:
+ msg = "SINGLE";
+ ret = 0;
+ break;
+ case ANDROID_FLASH_MODE_TORCH:
+ msg = "TORCH";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_FLASH_COLOR_TEMPERATURE: {
+ break;
+ }
+ case ANDROID_FLASH_MAX_ENERGY: {
+ break;
+ }
+ case ANDROID_FLASH_STATE: {
+ switch (value) {
+ case ANDROID_FLASH_STATE_UNAVAILABLE:
+ msg = "UNAVAILABLE";
+ ret = 0;
+ break;
+ case ANDROID_FLASH_STATE_CHARGING:
+ msg = "CHARGING";
+ ret = 0;
+ break;
+ case ANDROID_FLASH_STATE_READY:
+ msg = "READY";
+ ret = 0;
+ break;
+ case ANDROID_FLASH_STATE_FIRED:
+ msg = "FIRED";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+
+ case ANDROID_FLASH_INFO_AVAILABLE: {
+ break;
+ }
+ case ANDROID_FLASH_INFO_CHARGE_DURATION: {
+ break;
+ }
+
+ case ANDROID_GEOMETRIC_MODE: {
+ switch (value) {
+ case ANDROID_GEOMETRIC_MODE_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ case ANDROID_GEOMETRIC_MODE_FAST:
+ msg = "FAST";
+ ret = 0;
+ break;
+ case ANDROID_GEOMETRIC_MODE_HIGH_QUALITY:
+ msg = "HIGH_QUALITY";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_GEOMETRIC_STRENGTH: {
+ break;
+ }
+
+ case ANDROID_HOT_PIXEL_MODE: {
+ switch (value) {
+ case ANDROID_HOT_PIXEL_MODE_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ case ANDROID_HOT_PIXEL_MODE_FAST:
+ msg = "FAST";
+ ret = 0;
+ break;
+ case ANDROID_HOT_PIXEL_MODE_HIGH_QUALITY:
+ msg = "HIGH_QUALITY";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+
+ case ANDROID_HOT_PIXEL_INFO_MAP: {
+ break;
+ }
+
+ case ANDROID_JPEG_GPS_COORDINATES: {
+ break;
+ }
+ case ANDROID_JPEG_GPS_PROCESSING_METHOD: {
+ break;
+ }
+ case ANDROID_JPEG_GPS_TIMESTAMP: {
+ break;
+ }
+ case ANDROID_JPEG_ORIENTATION: {
+ break;
+ }
+ case ANDROID_JPEG_QUALITY: {
+ break;
+ }
+ case ANDROID_JPEG_THUMBNAIL_QUALITY: {
+ break;
+ }
+ case ANDROID_JPEG_THUMBNAIL_SIZE: {
+ break;
+ }
+ case ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES: {
+ break;
+ }
+ case ANDROID_JPEG_MAX_SIZE: {
+ break;
+ }
+ case ANDROID_JPEG_SIZE: {
+ break;
+ }
+
+ case ANDROID_LENS_APERTURE: {
+ break;
+ }
+ case ANDROID_LENS_FILTER_DENSITY: {
+ break;
+ }
+ case ANDROID_LENS_FOCAL_LENGTH: {
+ break;
+ }
+ case ANDROID_LENS_FOCUS_DISTANCE: {
+ break;
+ }
+ case ANDROID_LENS_OPTICAL_STABILIZATION_MODE: {
+ switch (value) {
+ case ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ case ANDROID_LENS_OPTICAL_STABILIZATION_MODE_ON:
+ msg = "ON";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_LENS_FACING: {
+ switch (value) {
+ case ANDROID_LENS_FACING_FRONT:
+ msg = "FRONT";
+ ret = 0;
+ break;
+ case ANDROID_LENS_FACING_BACK:
+ msg = "BACK";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_LENS_OPTICAL_AXIS_ANGLE: {
+ break;
+ }
+ case ANDROID_LENS_POSITION: {
+ break;
+ }
+ case ANDROID_LENS_FOCUS_RANGE: {
+ break;
+ }
+ case ANDROID_LENS_STATE: {
+ switch (value) {
+ case ANDROID_LENS_STATE_STATIONARY:
+ msg = "STATIONARY";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+
+ case ANDROID_LENS_INFO_AVAILABLE_APERTURES: {
+ break;
+ }
+ case ANDROID_LENS_INFO_AVAILABLE_FILTER_DENSITIES: {
+ break;
+ }
+ case ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS: {
+ break;
+ }
+ case ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION: {
+ break;
+ }
+ case ANDROID_LENS_INFO_GEOMETRIC_CORRECTION_MAP: {
+ break;
+ }
+ case ANDROID_LENS_INFO_GEOMETRIC_CORRECTION_MAP_SIZE: {
+ break;
+ }
+ case ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE: {
+ break;
+ }
+ case ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE: {
+ break;
+ }
+ case ANDROID_LENS_INFO_SHADING_MAP: {
+ break;
+ }
+ case ANDROID_LENS_INFO_SHADING_MAP_SIZE: {
+ break;
+ }
+
+ case ANDROID_NOISE_REDUCTION_MODE: {
+ switch (value) {
+ case ANDROID_NOISE_REDUCTION_MODE_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ case ANDROID_NOISE_REDUCTION_MODE_FAST:
+ msg = "FAST";
+ ret = 0;
+ break;
+ case ANDROID_NOISE_REDUCTION_MODE_HIGH_QUALITY:
+ msg = "HIGH_QUALITY";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_NOISE_REDUCTION_STRENGTH: {
+ break;
+ }
+
+ case ANDROID_QUIRKS_METERING_CROP_REGION: {
+ break;
+ }
+ case ANDROID_QUIRKS_TRIGGER_AF_WITH_AUTO: {
+ break;
+ }
+ case ANDROID_QUIRKS_USE_ZSL_FORMAT: {
+ break;
+ }
+
+ case ANDROID_REQUEST_FRAME_COUNT: {
+ break;
+ }
+ case ANDROID_REQUEST_ID: {
+ break;
+ }
+ case ANDROID_REQUEST_INPUT_STREAMS: {
+ break;
+ }
+ case ANDROID_REQUEST_METADATA_MODE: {
+ switch (value) {
+ case ANDROID_REQUEST_METADATA_MODE_NONE:
+ msg = "NONE";
+ ret = 0;
+ break;
+ case ANDROID_REQUEST_METADATA_MODE_FULL:
+ msg = "FULL";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_REQUEST_OUTPUT_STREAMS: {
+ break;
+ }
+ case ANDROID_REQUEST_TYPE: {
+ switch (value) {
+ case ANDROID_REQUEST_TYPE_CAPTURE:
+ msg = "CAPTURE";
+ ret = 0;
+ break;
+ case ANDROID_REQUEST_TYPE_REPROCESS:
+ msg = "REPROCESS";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS: {
+ break;
+ }
+ case ANDROID_REQUEST_MAX_NUM_REPROCESS_STREAMS: {
+ break;
+ }
+
+ case ANDROID_SCALER_CROP_REGION: {
+ break;
+ }
+ case ANDROID_SCALER_AVAILABLE_FORMATS: {
+ switch (value) {
+ case ANDROID_SCALER_AVAILABLE_FORMATS_RAW_SENSOR:
+ msg = "RAW_SENSOR";
+ ret = 0;
+ break;
+ case ANDROID_SCALER_AVAILABLE_FORMATS_YV12:
+ msg = "YV12";
+ ret = 0;
+ break;
+ case ANDROID_SCALER_AVAILABLE_FORMATS_YCbCr_420_SP:
+ msg = "YCbCr_420_SP";
+ ret = 0;
+ break;
+ case ANDROID_SCALER_AVAILABLE_FORMATS_JPEG:
+ msg = "JPEG";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_SCALER_AVAILABLE_JPEG_MIN_DURATIONS: {
+ break;
+ }
+ case ANDROID_SCALER_AVAILABLE_JPEG_SIZES: {
+ break;
+ }
+ case ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM: {
+ break;
+ }
+ case ANDROID_SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS: {
+ break;
+ }
+ case ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES: {
+ break;
+ }
+ case ANDROID_SCALER_AVAILABLE_RAW_MIN_DURATIONS: {
+ break;
+ }
+ case ANDROID_SCALER_AVAILABLE_RAW_SIZES: {
+ break;
+ }
+ case ANDROID_SCALER_MAX_DIGITAL_ZOOM: {
+ break;
+ }
+
+ case ANDROID_SENSOR_EXPOSURE_TIME: {
+ break;
+ }
+ case ANDROID_SENSOR_FRAME_DURATION: {
+ break;
+ }
+ case ANDROID_SENSOR_SENSITIVITY: {
+ break;
+ }
+ case ANDROID_SENSOR_BASE_GAIN_FACTOR: {
+ break;
+ }
+ case ANDROID_SENSOR_BLACK_LEVEL_PATTERN: {
+ break;
+ }
+ case ANDROID_SENSOR_CALIBRATION_TRANSFORM1: {
+ break;
+ }
+ case ANDROID_SENSOR_CALIBRATION_TRANSFORM2: {
+ break;
+ }
+ case ANDROID_SENSOR_COLOR_TRANSFORM1: {
+ break;
+ }
+ case ANDROID_SENSOR_COLOR_TRANSFORM2: {
+ break;
+ }
+ case ANDROID_SENSOR_FORWARD_MATRIX1: {
+ break;
+ }
+ case ANDROID_SENSOR_FORWARD_MATRIX2: {
+ break;
+ }
+ case ANDROID_SENSOR_MAX_ANALOG_SENSITIVITY: {
+ break;
+ }
+ case ANDROID_SENSOR_NOISE_MODEL_COEFFICIENTS: {
+ break;
+ }
+ case ANDROID_SENSOR_ORIENTATION: {
+ break;
+ }
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1: {
+ switch (value) {
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT:
+ msg = "DAYLIGHT";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_FLUORESCENT:
+ msg = "FLUORESCENT";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_TUNGSTEN:
+ msg = "TUNGSTEN";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_FLASH:
+ msg = "FLASH";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_FINE_WEATHER:
+ msg = "FINE_WEATHER";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_CLOUDY_WEATHER:
+ msg = "CLOUDY_WEATHER";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_SHADE:
+ msg = "SHADE";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT_FLUORESCENT:
+ msg = "DAYLIGHT_FLUORESCENT";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_DAY_WHITE_FLUORESCENT:
+ msg = "DAY_WHITE_FLUORESCENT";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_COOL_WHITE_FLUORESCENT:
+ msg = "COOL_WHITE_FLUORESCENT";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_WHITE_FLUORESCENT:
+ msg = "WHITE_FLUORESCENT";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_STANDARD_A:
+ msg = "STANDARD_A";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_STANDARD_B:
+ msg = "STANDARD_B";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_STANDARD_C:
+ msg = "STANDARD_C";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_D55:
+ msg = "D55";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_D65:
+ msg = "D65";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_D75:
+ msg = "D75";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_D50:
+ msg = "D50";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN:
+ msg = "ISO_STUDIO_TUNGSTEN";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_SENSOR_REFERENCE_ILLUMINANT2: {
+ break;
+ }
+ case ANDROID_SENSOR_TIMESTAMP: {
+ break;
+ }
+
+ case ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE: {
+ break;
+ }
+ case ANDROID_SENSOR_INFO_AVAILABLE_SENSITIVITIES: {
+ break;
+ }
+ case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT: {
+ switch (value) {
+ case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB:
+ msg = "RGGB";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG:
+ msg = "GRBG";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GBRG:
+ msg = "GBRG";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR:
+ msg = "BGGR";
+ ret = 0;
+ break;
+ case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB:
+ msg = "RGB";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE: {
+ break;
+ }
+ case ANDROID_SENSOR_INFO_MAX_FRAME_DURATION: {
+ break;
+ }
+ case ANDROID_SENSOR_INFO_PHYSICAL_SIZE: {
+ break;
+ }
+ case ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE: {
+ break;
+ }
+ case ANDROID_SENSOR_INFO_WHITE_LEVEL: {
+ break;
+ }
+
+ case ANDROID_SHADING_MODE: {
+ switch (value) {
+ case ANDROID_SHADING_MODE_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ case ANDROID_SHADING_MODE_FAST:
+ msg = "FAST";
+ ret = 0;
+ break;
+ case ANDROID_SHADING_MODE_HIGH_QUALITY:
+ msg = "HIGH_QUALITY";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_SHADING_STRENGTH: {
+ break;
+ }
+
+ case ANDROID_STATISTICS_FACE_DETECT_MODE: {
+ switch (value) {
+ case ANDROID_STATISTICS_FACE_DETECT_MODE_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ case ANDROID_STATISTICS_FACE_DETECT_MODE_SIMPLE:
+ msg = "SIMPLE";
+ ret = 0;
+ break;
+ case ANDROID_STATISTICS_FACE_DETECT_MODE_FULL:
+ msg = "FULL";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_STATISTICS_HISTOGRAM_MODE: {
+ switch (value) {
+ case ANDROID_STATISTICS_HISTOGRAM_MODE_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ case ANDROID_STATISTICS_HISTOGRAM_MODE_ON:
+ msg = "ON";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_STATISTICS_SHARPNESS_MAP_MODE: {
+ switch (value) {
+ case ANDROID_STATISTICS_SHARPNESS_MAP_MODE_OFF:
+ msg = "OFF";
+ ret = 0;
+ break;
+ case ANDROID_STATISTICS_SHARPNESS_MAP_MODE_ON:
+ msg = "ON";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_STATISTICS_FACE_IDS: {
+ break;
+ }
+ case ANDROID_STATISTICS_FACE_LANDMARKS: {
+ break;
+ }
+ case ANDROID_STATISTICS_FACE_RECTANGLES: {
+ break;
+ }
+ case ANDROID_STATISTICS_FACE_SCORES: {
+ break;
+ }
+ case ANDROID_STATISTICS_HISTOGRAM: {
+ break;
+ }
+ case ANDROID_STATISTICS_SHARPNESS_MAP: {
+ break;
+ }
+
+ case ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES: {
+ break;
+ }
+ case ANDROID_STATISTICS_INFO_HISTOGRAM_BUCKET_COUNT: {
+ break;
+ }
+ case ANDROID_STATISTICS_INFO_MAX_FACE_COUNT: {
+ break;
+ }
+ case ANDROID_STATISTICS_INFO_MAX_HISTOGRAM_COUNT: {
+ break;
+ }
+ case ANDROID_STATISTICS_INFO_MAX_SHARPNESS_MAP_VALUE: {
+ break;
+ }
+ case ANDROID_STATISTICS_INFO_SHARPNESS_MAP_SIZE: {
+ break;
+ }
+
+ case ANDROID_TONEMAP_CURVE_BLUE: {
+ break;
+ }
+ case ANDROID_TONEMAP_CURVE_GREEN: {
+ break;
+ }
+ case ANDROID_TONEMAP_CURVE_RED: {
+ break;
+ }
+ case ANDROID_TONEMAP_MODE: {
+ switch (value) {
+ case ANDROID_TONEMAP_MODE_CONTRAST_CURVE:
+ msg = "CONTRAST_CURVE";
+ ret = 0;
+ break;
+ case ANDROID_TONEMAP_MODE_FAST:
+ msg = "FAST";
+ ret = 0;
+ break;
+ case ANDROID_TONEMAP_MODE_HIGH_QUALITY:
+ msg = "HIGH_QUALITY";
+ ret = 0;
+ break;
+ default:
+ msg = "error: enum value out of range";
+ }
+ break;
+ }
+ case ANDROID_TONEMAP_MAX_CURVE_POINTS: {
+ break;
+ }
+
+ }
+
+ strncpy(dst, msg, size - 1);
+ dst[size - 1] = '\0';
+
+ return ret;
+}
+
+
diff --git a/camera/tests/camera_metadata_tests.cpp b/camera/tests/camera_metadata_tests.cpp
index 47faf42..47e9d8a 100644
--- a/camera/tests/camera_metadata_tests.cpp
+++ b/camera/tests/camera_metadata_tests.cpp
@@ -20,6 +20,8 @@
#include <errno.h>
+#include <vector>
+#include <algorithm>
#include "gtest/gtest.h"
#include "system/camera_metadata.h"
@@ -226,11 +228,11 @@
0.0f, 0.1f, 0.7f
};
result = add_camera_metadata_entry(m,
- ANDROID_COLOR_TRANSFORM,
+ ANDROID_COLOR_CORRECTION_TRANSFORM,
colorTransform, 9);
EXPECT_EQ(OK, result);
data_used += calculate_camera_metadata_entry_data_size(
- get_camera_metadata_tag_type(ANDROID_COLOR_TRANSFORM), 9);
+ get_camera_metadata_tag_type(ANDROID_COLOR_CORRECTION_TRANSFORM), 9);
entries_used++;
// Check added entries
@@ -267,7 +269,7 @@
3, &entry);
EXPECT_EQ(OK, result);
EXPECT_EQ((size_t)3, entry.index);
- EXPECT_EQ(ANDROID_COLOR_TRANSFORM, entry.tag);
+ EXPECT_EQ(ANDROID_COLOR_CORRECTION_TRANSFORM, entry.tag);
EXPECT_EQ(TYPE_FLOAT, entry.type);
EXPECT_EQ((size_t)9, entry.count);
for (unsigned int i=0; i < entry.count; i++) {
@@ -881,7 +883,7 @@
0.0f, 0.1f, 0.7f
};
result = add_camera_metadata_entry(m,
- ANDROID_COLOR_TRANSFORM,
+ ANDROID_COLOR_CORRECTION_TRANSFORM,
colorTransform, 9);
EXPECT_EQ(OK, result);
@@ -916,7 +918,7 @@
EXPECT_EQ(focus_distance, *entry.data.f);
result = find_camera_metadata_entry(m,
- ANDROID_NOISE_STRENGTH,
+ ANDROID_NOISE_REDUCTION_STRENGTH,
&entry);
EXPECT_EQ(NOT_FOUND, result);
EXPECT_EQ((size_t)1, entry.index);
@@ -940,22 +942,35 @@
}
// Test sorted find
+ size_t lensFocusIndex = -1;
+ {
+ std::vector<uint32_t> tags;
+ tags.push_back(ANDROID_COLOR_CORRECTION_TRANSFORM);
+ tags.push_back(ANDROID_LENS_FOCUS_DISTANCE);
+ tags.push_back(ANDROID_SENSOR_EXPOSURE_TIME);
+ tags.push_back(ANDROID_SENSOR_SENSITIVITY);
+ std::sort(tags.begin(), tags.end());
+
+ lensFocusIndex =
+ std::find(tags.begin(), tags.end(), ANDROID_LENS_FOCUS_DISTANCE)
+ - tags.begin();
+ }
result = find_camera_metadata_entry(m,
ANDROID_LENS_FOCUS_DISTANCE,
&entry);
EXPECT_EQ(OK, result);
- EXPECT_EQ((size_t)0, entry.index);
+ EXPECT_EQ(lensFocusIndex, entry.index);
EXPECT_EQ(ANDROID_LENS_FOCUS_DISTANCE, entry.tag);
EXPECT_EQ(TYPE_FLOAT, entry.type);
EXPECT_EQ((size_t)1, (size_t)entry.count);
EXPECT_EQ(focus_distance, *entry.data.f);
result = find_camera_metadata_entry(m,
- ANDROID_NOISE_STRENGTH,
+ ANDROID_NOISE_REDUCTION_STRENGTH,
&entry);
EXPECT_EQ(NOT_FOUND, result);
- EXPECT_EQ((size_t)0, entry.index);
+ EXPECT_EQ(lensFocusIndex, entry.index);
EXPECT_EQ(ANDROID_LENS_FOCUS_DISTANCE, entry.tag);
EXPECT_EQ(TYPE_FLOAT, entry.type);
EXPECT_EQ((size_t)1, entry.count);