blob: 4d45e20718beaf6464e41ed2402306efead1e076 [file] [log] [blame] [edit]
<!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 HAL3.4 Properties</title>
<style type="text/css">
body { background-color: #f7f7f7; font-family: Roboto, sans-serif;}
h1 { color: #333333; }
h2 { color: #333333; }
a:link { color: #258aaf; text-decoration: none}
a:hover { color: #459aaf; text-decoration: underline }
a:visited { color: #154a5f; text-decoration: none}
.section { color: #eeeeee; font-size: 1.5em; font-weight: bold; background-color: #888888; padding: 0.5em 0em 0.5em 0.5em; border-width: thick thin thin thin; border-color: #111111 #777777 #777777 #777777}
.kind { color: #eeeeee; font-size: 1.2em; font-weight: bold; padding-left: 1.5em; background-color: #aaaaaa }
.entry { background-color: #f0f0f0 }
.entry_cont { background-color: #f0f0f0 }
.entries_header { background-color: #dddddd; text-align: center}
/* toc style */
.toc_section_header { font-size:1.3em; }
.toc_kind_header { font-size:1.2em; }
.toc_deprecated { text-decoration:line-through; }
/* table column sizes */
table { border-collapse:collapse; table-layout: fixed; width: 100%; word-wrap: break-word }
td,th { border: 1px solid; border-color: #aaaaaa; padding-left: 0.5em; padding-right: 0.5em }
.th_name { width: 20% }
.th_units { width: 10% }
.th_tags { width: 5% }
.th_details { width: 25% }
.th_type { width: 17% }
.th_description { width: 20% }
.th_range { width: 8% }
.th_hal_version { width: 5% }
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 { color: #333333; padding-left:1.0em; font-size:1.1em; font-family: monospace; vertical-align:top; }
.entry_name_deprecated { text-decoration:line-through; }
/* Entry type flair */
.entry_type_name { font-size:1.1em; color: #669900; font-weight: bold;}
.entry_type_name_enum:after { color: #669900; font-weight: bold; content:" (enum)" }
.entry_type_visibility { font-weight: bolder; padding-left:1em}
.entry_type_synthetic { font-weight: bolder; color: #996600; }
.entry_type_hwlevel { font-weight: bolder; color: #000066; }
.entry_type_deprecated { font-weight: bolder; color: #4D4D4D; }
.entry_type_enum_name { font-family: monospace; font-weight: bolder; }
.entry_type_enum_notes:before { content:" - " }
.entry_type_enum_notes>p:first-child { display:inline; }
.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_range_deprecated { font-weight: bolder; }
/* Entry tags flair */
.entry_tags ul { list-style-type: none; }
/* Entry details (full docs) flair */
.entry_details_header { font-weight: bold; background-color: #dddddd;
text-align: center; font-size: 1.1em; margin-left: 0em; margin-right: 0em; }
/* Entry spacer flair */
.entry_spacer { background-color: transparent; border-style: none; height: 0.5em; }
/* 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 HAL3.2 Properties</h1>
<h2>Table of Contents</h2>
<ul class="toc">
<li><a href="#tag_index" class="toc_section_header">Tags</a></li>
<li>
<span class="toc_section_header"><a href="#section_colorCorrection">colorCorrection</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.colorCorrection.mode">android.colorCorrection.mode</a></li>
<li
><a href="#controls_android.colorCorrection.transform">android.colorCorrection.transform</a></li>
<li
><a href="#controls_android.colorCorrection.gains">android.colorCorrection.gains</a></li>
<li
><a href="#controls_android.colorCorrection.aberrationMode">android.colorCorrection.aberrationMode</a></li>
<li
><a href="#controls_android.colorCorrection.colorTemperature">android.colorCorrection.colorTemperature</a></li>
<li
><a href="#controls_android.colorCorrection.colorTint">android.colorCorrection.colorTint</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.colorCorrection.mode">android.colorCorrection.mode</a></li>
<li
><a href="#dynamic_android.colorCorrection.transform">android.colorCorrection.transform</a></li>
<li
><a href="#dynamic_android.colorCorrection.gains">android.colorCorrection.gains</a></li>
<li
><a href="#dynamic_android.colorCorrection.aberrationMode">android.colorCorrection.aberrationMode</a></li>
<li
><a href="#dynamic_android.colorCorrection.colorTemperature">android.colorCorrection.colorTemperature</a></li>
<li
><a href="#dynamic_android.colorCorrection.colorTint">android.colorCorrection.colorTint</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.colorCorrection.availableAberrationModes">android.colorCorrection.availableAberrationModes</a></li>
<li
><a href="#static_android.colorCorrection.colorTemperatureRange">android.colorCorrection.colorTemperatureRange</a></li>
<li
><a href="#static_android.colorCorrection.availableModes">android.colorCorrection.availableModes</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_control">control</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.control.aeAntibandingMode">android.control.aeAntibandingMode</a></li>
<li
><a href="#controls_android.control.aeExposureCompensation">android.control.aeExposureCompensation</a></li>
<li
><a href="#controls_android.control.aeLock">android.control.aeLock</a></li>
<li
><a href="#controls_android.control.aeMode">android.control.aeMode</a></li>
<li
><a href="#controls_android.control.aeRegions">android.control.aeRegions</a></li>
<li
><a href="#controls_android.control.aeTargetFpsRange">android.control.aeTargetFpsRange</a></li>
<li
><a href="#controls_android.control.aePrecaptureTrigger">android.control.aePrecaptureTrigger</a></li>
<li
><a href="#controls_android.control.afMode">android.control.afMode</a></li>
<li
><a href="#controls_android.control.afRegions">android.control.afRegions</a></li>
<li
><a href="#controls_android.control.afTrigger">android.control.afTrigger</a></li>
<li
><a href="#controls_android.control.awbLock">android.control.awbLock</a></li>
<li
><a href="#controls_android.control.awbMode">android.control.awbMode</a></li>
<li
><a href="#controls_android.control.awbRegions">android.control.awbRegions</a></li>
<li
><a href="#controls_android.control.captureIntent">android.control.captureIntent</a></li>
<li
><a href="#controls_android.control.effectMode">android.control.effectMode</a></li>
<li
><a href="#controls_android.control.mode">android.control.mode</a></li>
<li
><a href="#controls_android.control.sceneMode">android.control.sceneMode</a></li>
<li
><a href="#controls_android.control.videoStabilizationMode">android.control.videoStabilizationMode</a></li>
<li
><a href="#controls_android.control.postRawSensitivityBoost">android.control.postRawSensitivityBoost</a></li>
<li
><a href="#controls_android.control.enableZsl">android.control.enableZsl</a></li>
<li
><a href="#controls_android.control.extendedSceneMode">android.control.extendedSceneMode</a></li>
<li
><a href="#controls_android.control.zoomRatio">android.control.zoomRatio</a></li>
<li
><a href="#controls_android.control.afRegionsSet">android.control.afRegionsSet</a></li>
<li
><a href="#controls_android.control.aeRegionsSet">android.control.aeRegionsSet</a></li>
<li
><a href="#controls_android.control.awbRegionsSet">android.control.awbRegionsSet</a></li>
<li
><a href="#controls_android.control.settingsOverride">android.control.settingsOverride</a></li>
<li
><a href="#controls_android.control.autoframing">android.control.autoframing</a></li>
<li
><a href="#controls_android.control.zoomMethod">android.control.zoomMethod</a></li>
<li
><a href="#controls_android.control.aePriorityMode">android.control.aePriorityMode</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.control.aeAvailableAntibandingModes">android.control.aeAvailableAntibandingModes</a></li>
<li
><a href="#static_android.control.aeAvailableModes">android.control.aeAvailableModes</a></li>
<li
><a href="#static_android.control.aeAvailableTargetFpsRanges">android.control.aeAvailableTargetFpsRanges</a></li>
<li
><a href="#static_android.control.aeCompensationRange">android.control.aeCompensationRange</a></li>
<li
><a href="#static_android.control.aeCompensationStep">android.control.aeCompensationStep</a></li>
<li
><a href="#static_android.control.afAvailableModes">android.control.afAvailableModes</a></li>
<li
><a href="#static_android.control.availableEffects">android.control.availableEffects</a></li>
<li
><a href="#static_android.control.availableSceneModes">android.control.availableSceneModes</a></li>
<li
><a href="#static_android.control.availableVideoStabilizationModes">android.control.availableVideoStabilizationModes</a></li>
<li
><a href="#static_android.control.awbAvailableModes">android.control.awbAvailableModes</a></li>
<li
><a href="#static_android.control.maxRegions">android.control.maxRegions</a></li>
<li
><a href="#static_android.control.maxRegionsAe">android.control.maxRegionsAe</a></li>
<li
><a href="#static_android.control.maxRegionsAwb">android.control.maxRegionsAwb</a></li>
<li
><a href="#static_android.control.maxRegionsAf">android.control.maxRegionsAf</a></li>
<li
><a href="#static_android.control.sceneModeOverrides">android.control.sceneModeOverrides</a></li>
<li
><a href="#static_android.control.availableHighSpeedVideoConfigurations">android.control.availableHighSpeedVideoConfigurations</a></li>
<li
><a href="#static_android.control.aeLockAvailable">android.control.aeLockAvailable</a></li>
<li
><a href="#static_android.control.awbLockAvailable">android.control.awbLockAvailable</a></li>
<li
><a href="#static_android.control.availableModes">android.control.availableModes</a></li>
<li
><a href="#static_android.control.postRawSensitivityBoostRange">android.control.postRawSensitivityBoostRange</a></li>
<li
><a href="#static_android.control.availableExtendedSceneModeMaxSizes">android.control.availableExtendedSceneModeMaxSizes</a></li>
<li
><a href="#static_android.control.availableExtendedSceneModeZoomRatioRanges">android.control.availableExtendedSceneModeZoomRatioRanges</a></li>
<li
><a href="#static_android.control.availableExtendedSceneModeCapabilities">android.control.availableExtendedSceneModeCapabilities</a></li>
<li
><a href="#static_android.control.zoomRatioRange">android.control.zoomRatioRange</a></li>
<li
><a href="#static_android.control.availableHighSpeedVideoConfigurationsMaximumResolution">android.control.availableHighSpeedVideoConfigurationsMaximumResolution</a></li>
<li
><a href="#static_android.control.availableSettingsOverrides">android.control.availableSettingsOverrides</a></li>
<li
><a href="#static_android.control.autoframingAvailable">android.control.autoframingAvailable</a></li>
<li
><a href="#static_android.control.lowLightBoostInfoLuminanceRange">android.control.lowLightBoostInfoLuminanceRange</a></li>
<li
><a href="#static_android.control.aeAvailablePriorityModes">android.control.aeAvailablePriorityModes</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
class="toc_deprecated"
><a href="#dynamic_android.control.aePrecaptureId">android.control.aePrecaptureId</a></li>
<li
><a href="#dynamic_android.control.aeAntibandingMode">android.control.aeAntibandingMode</a></li>
<li
><a href="#dynamic_android.control.aeExposureCompensation">android.control.aeExposureCompensation</a></li>
<li
><a href="#dynamic_android.control.aeLock">android.control.aeLock</a></li>
<li
><a href="#dynamic_android.control.aeMode">android.control.aeMode</a></li>
<li
><a href="#dynamic_android.control.aeRegions">android.control.aeRegions</a></li>
<li
><a href="#dynamic_android.control.aeTargetFpsRange">android.control.aeTargetFpsRange</a></li>
<li
><a href="#dynamic_android.control.aePrecaptureTrigger">android.control.aePrecaptureTrigger</a></li>
<li
><a href="#dynamic_android.control.aeState">android.control.aeState</a></li>
<li
><a href="#dynamic_android.control.afMode">android.control.afMode</a></li>
<li
><a href="#dynamic_android.control.afRegions">android.control.afRegions</a></li>
<li
><a href="#dynamic_android.control.afTrigger">android.control.afTrigger</a></li>
<li
><a href="#dynamic_android.control.afState">android.control.afState</a></li>
<li
class="toc_deprecated"
><a href="#dynamic_android.control.afTriggerId">android.control.afTriggerId</a></li>
<li
><a href="#dynamic_android.control.awbLock">android.control.awbLock</a></li>
<li
><a href="#dynamic_android.control.awbMode">android.control.awbMode</a></li>
<li
><a href="#dynamic_android.control.awbRegions">android.control.awbRegions</a></li>
<li
><a href="#dynamic_android.control.captureIntent">android.control.captureIntent</a></li>
<li
><a href="#dynamic_android.control.awbState">android.control.awbState</a></li>
<li
><a href="#dynamic_android.control.effectMode">android.control.effectMode</a></li>
<li
><a href="#dynamic_android.control.mode">android.control.mode</a></li>
<li
><a href="#dynamic_android.control.sceneMode">android.control.sceneMode</a></li>
<li
><a href="#dynamic_android.control.videoStabilizationMode">android.control.videoStabilizationMode</a></li>
<li
><a href="#dynamic_android.control.postRawSensitivityBoost">android.control.postRawSensitivityBoost</a></li>
<li
><a href="#dynamic_android.control.enableZsl">android.control.enableZsl</a></li>
<li
><a href="#dynamic_android.control.afSceneChange">android.control.afSceneChange</a></li>
<li
><a href="#dynamic_android.control.extendedSceneMode">android.control.extendedSceneMode</a></li>
<li
><a href="#dynamic_android.control.zoomRatio">android.control.zoomRatio</a></li>
<li
><a href="#dynamic_android.control.settingsOverride">android.control.settingsOverride</a></li>
<li
><a href="#dynamic_android.control.settingsOverridingFrameNumber">android.control.settingsOverridingFrameNumber</a></li>
<li
><a href="#dynamic_android.control.autoframing">android.control.autoframing</a></li>
<li
><a href="#dynamic_android.control.autoframingState">android.control.autoframingState</a></li>
<li
><a href="#dynamic_android.control.lowLightBoostState">android.control.lowLightBoostState</a></li>
<li
><a href="#dynamic_android.control.zoomMethod">android.control.zoomMethod</a></li>
<li
><a href="#dynamic_android.control.aePriorityMode">android.control.aePriorityMode</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_demosaic">demosaic</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.demosaic.mode">android.demosaic.mode</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_edge">edge</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.edge.mode">android.edge.mode</a></li>
<li
><a href="#controls_android.edge.strength">android.edge.strength</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.edge.availableEdgeModes">android.edge.availableEdgeModes</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.edge.mode">android.edge.mode</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_flash">flash</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.flash.firingPower">android.flash.firingPower</a></li>
<li
><a href="#controls_android.flash.firingTime">android.flash.firingTime</a></li>
<li
><a href="#controls_android.flash.mode">android.flash.mode</a></li>
<li
><a href="#controls_android.flash.strengthLevel">android.flash.strengthLevel</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.flash.info.available">android.flash.info.available</a></li>
<li
><a href="#static_android.flash.info.chargeDuration">android.flash.info.chargeDuration</a></li>
<li
><a href="#static_android.flash.info.strengthMaximumLevel">android.flash.info.strengthMaximumLevel</a></li>
<li
><a href="#static_android.flash.info.strengthDefaultLevel">android.flash.info.strengthDefaultLevel</a></li>
<li
><a href="#static_android.flash.colorTemperature">android.flash.colorTemperature</a></li>
<li
><a href="#static_android.flash.maxEnergy">android.flash.maxEnergy</a></li>
<li
><a href="#static_android.flash.singleStrengthMaxLevel">android.flash.singleStrengthMaxLevel</a></li>
<li
><a href="#static_android.flash.singleStrengthDefaultLevel">android.flash.singleStrengthDefaultLevel</a></li>
<li
><a href="#static_android.flash.torchStrengthMaxLevel">android.flash.torchStrengthMaxLevel</a></li>
<li
><a href="#static_android.flash.torchStrengthDefaultLevel">android.flash.torchStrengthDefaultLevel</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.flash.firingPower">android.flash.firingPower</a></li>
<li
><a href="#dynamic_android.flash.firingTime">android.flash.firingTime</a></li>
<li
><a href="#dynamic_android.flash.mode">android.flash.mode</a></li>
<li
><a href="#dynamic_android.flash.state">android.flash.state</a></li>
<li
><a href="#dynamic_android.flash.strengthLevel">android.flash.strengthLevel</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_hotPixel">hotPixel</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.hotPixel.mode">android.hotPixel.mode</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.hotPixel.availableHotPixelModes">android.hotPixel.availableHotPixelModes</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.hotPixel.mode">android.hotPixel.mode</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_jpeg">jpeg</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.jpeg.gpsLocation">android.jpeg.gpsLocation</a></li>
<li
><a href="#controls_android.jpeg.gpsCoordinates">android.jpeg.gpsCoordinates</a></li>
<li
><a href="#controls_android.jpeg.gpsProcessingMethod">android.jpeg.gpsProcessingMethod</a></li>
<li
><a href="#controls_android.jpeg.gpsTimestamp">android.jpeg.gpsTimestamp</a></li>
<li
><a href="#controls_android.jpeg.orientation">android.jpeg.orientation</a></li>
<li
><a href="#controls_android.jpeg.quality">android.jpeg.quality</a></li>
<li
><a href="#controls_android.jpeg.thumbnailQuality">android.jpeg.thumbnailQuality</a></li>
<li
><a href="#controls_android.jpeg.thumbnailSize">android.jpeg.thumbnailSize</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.jpeg.availableThumbnailSizes">android.jpeg.availableThumbnailSizes</a></li>
<li
><a href="#static_android.jpeg.maxSize">android.jpeg.maxSize</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.jpeg.gpsLocation">android.jpeg.gpsLocation</a></li>
<li
><a href="#dynamic_android.jpeg.gpsCoordinates">android.jpeg.gpsCoordinates</a></li>
<li
><a href="#dynamic_android.jpeg.gpsProcessingMethod">android.jpeg.gpsProcessingMethod</a></li>
<li
><a href="#dynamic_android.jpeg.gpsTimestamp">android.jpeg.gpsTimestamp</a></li>
<li
><a href="#dynamic_android.jpeg.orientation">android.jpeg.orientation</a></li>
<li
><a href="#dynamic_android.jpeg.quality">android.jpeg.quality</a></li>
<li
><a href="#dynamic_android.jpeg.size">android.jpeg.size</a></li>
<li
><a href="#dynamic_android.jpeg.thumbnailQuality">android.jpeg.thumbnailQuality</a></li>
<li
><a href="#dynamic_android.jpeg.thumbnailSize">android.jpeg.thumbnailSize</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_lens">lens</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.lens.aperture">android.lens.aperture</a></li>
<li
><a href="#controls_android.lens.filterDensity">android.lens.filterDensity</a></li>
<li
><a href="#controls_android.lens.focalLength">android.lens.focalLength</a></li>
<li
><a href="#controls_android.lens.focusDistance">android.lens.focusDistance</a></li>
<li
><a href="#controls_android.lens.opticalStabilizationMode">android.lens.opticalStabilizationMode</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.lens.info.availableApertures">android.lens.info.availableApertures</a></li>
<li
><a href="#static_android.lens.info.availableFilterDensities">android.lens.info.availableFilterDensities</a></li>
<li
><a href="#static_android.lens.info.availableFocalLengths">android.lens.info.availableFocalLengths</a></li>
<li
><a href="#static_android.lens.info.availableOpticalStabilization">android.lens.info.availableOpticalStabilization</a></li>
<li
><a href="#static_android.lens.info.hyperfocalDistance">android.lens.info.hyperfocalDistance</a></li>
<li
><a href="#static_android.lens.info.minimumFocusDistance">android.lens.info.minimumFocusDistance</a></li>
<li
><a href="#static_android.lens.info.shadingMapSize">android.lens.info.shadingMapSize</a></li>
<li
><a href="#static_android.lens.info.focusDistanceCalibration">android.lens.info.focusDistanceCalibration</a></li>
<li
><a href="#static_android.lens.facing">android.lens.facing</a></li>
<li
><a href="#static_android.lens.poseRotation">android.lens.poseRotation</a></li>
<li
><a href="#static_android.lens.poseTranslation">android.lens.poseTranslation</a></li>
<li
><a href="#static_android.lens.intrinsicCalibration">android.lens.intrinsicCalibration</a></li>
<li
class="toc_deprecated"
><a href="#static_android.lens.radialDistortion">android.lens.radialDistortion</a></li>
<li
><a href="#static_android.lens.poseReference">android.lens.poseReference</a></li>
<li
><a href="#static_android.lens.distortion">android.lens.distortion</a></li>
<li
><a href="#static_android.lens.distortionMaximumResolution">android.lens.distortionMaximumResolution</a></li>
<li
><a href="#static_android.lens.intrinsicCalibrationMaximumResolution">android.lens.intrinsicCalibrationMaximumResolution</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.lens.aperture">android.lens.aperture</a></li>
<li
><a href="#dynamic_android.lens.filterDensity">android.lens.filterDensity</a></li>
<li
><a href="#dynamic_android.lens.focalLength">android.lens.focalLength</a></li>
<li
><a href="#dynamic_android.lens.focusDistance">android.lens.focusDistance</a></li>
<li
><a href="#dynamic_android.lens.focusRange">android.lens.focusRange</a></li>
<li
><a href="#dynamic_android.lens.opticalStabilizationMode">android.lens.opticalStabilizationMode</a></li>
<li
><a href="#dynamic_android.lens.state">android.lens.state</a></li>
<li
><a href="#dynamic_android.lens.poseRotation">android.lens.poseRotation</a></li>
<li
><a href="#dynamic_android.lens.poseTranslation">android.lens.poseTranslation</a></li>
<li
><a href="#dynamic_android.lens.intrinsicCalibration">android.lens.intrinsicCalibration</a></li>
<li
class="toc_deprecated"
><a href="#dynamic_android.lens.radialDistortion">android.lens.radialDistortion</a></li>
<li
><a href="#dynamic_android.lens.distortion">android.lens.distortion</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_noiseReduction">noiseReduction</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.noiseReduction.mode">android.noiseReduction.mode</a></li>
<li
><a href="#controls_android.noiseReduction.strength">android.noiseReduction.strength</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.noiseReduction.availableNoiseReductionModes">android.noiseReduction.availableNoiseReductionModes</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.noiseReduction.mode">android.noiseReduction.mode</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_quirks">quirks</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
class="toc_deprecated"
><a href="#static_android.quirks.meteringCropRegion">android.quirks.meteringCropRegion</a></li>
<li
class="toc_deprecated"
><a href="#static_android.quirks.triggerAfWithAuto">android.quirks.triggerAfWithAuto</a></li>
<li
class="toc_deprecated"
><a href="#static_android.quirks.useZslFormat">android.quirks.useZslFormat</a></li>
<li
class="toc_deprecated"
><a href="#static_android.quirks.usePartialResult">android.quirks.usePartialResult</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
class="toc_deprecated"
><a href="#dynamic_android.quirks.partialResult">android.quirks.partialResult</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_request">request</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
class="toc_deprecated"
><a href="#controls_android.request.frameCount">android.request.frameCount</a></li>
<li
><a href="#controls_android.request.id">android.request.id</a></li>
<li
class="toc_deprecated"
><a href="#controls_android.request.inputStreams">android.request.inputStreams</a></li>
<li
><a href="#controls_android.request.metadataMode">android.request.metadataMode</a></li>
<li
class="toc_deprecated"
><a href="#controls_android.request.outputStreams">android.request.outputStreams</a></li>
<li
class="toc_deprecated"
><a href="#controls_android.request.type">android.request.type</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.request.maxNumOutputStreams">android.request.maxNumOutputStreams</a></li>
<li
><a href="#static_android.request.maxNumOutputRaw">android.request.maxNumOutputRaw</a></li>
<li
><a href="#static_android.request.maxNumOutputProc">android.request.maxNumOutputProc</a></li>
<li
><a href="#static_android.request.maxNumOutputProcStalling">android.request.maxNumOutputProcStalling</a></li>
<li
class="toc_deprecated"
><a href="#static_android.request.maxNumReprocessStreams">android.request.maxNumReprocessStreams</a></li>
<li
><a href="#static_android.request.maxNumInputStreams">android.request.maxNumInputStreams</a></li>
<li
><a href="#static_android.request.pipelineMaxDepth">android.request.pipelineMaxDepth</a></li>
<li
><a href="#static_android.request.partialResultCount">android.request.partialResultCount</a></li>
<li
><a href="#static_android.request.availableCapabilities">android.request.availableCapabilities</a></li>
<li
><a href="#static_android.request.availableRequestKeys">android.request.availableRequestKeys</a></li>
<li
><a href="#static_android.request.availableResultKeys">android.request.availableResultKeys</a></li>
<li
><a href="#static_android.request.availableCharacteristicsKeys">android.request.availableCharacteristicsKeys</a></li>
<li
><a href="#static_android.request.availableSessionKeys">android.request.availableSessionKeys</a></li>
<li
><a href="#static_android.request.availablePhysicalCameraRequestKeys">android.request.availablePhysicalCameraRequestKeys</a></li>
<li
><a href="#static_android.request.characteristicKeysNeedingPermission">android.request.characteristicKeysNeedingPermission</a></li>
<li
><a href="#static_android.request.availableDynamicRangeProfiles">android.request.availableDynamicRangeProfiles</a></li>
<li
><a href="#static_android.request.availableDynamicRangeProfilesMap">android.request.availableDynamicRangeProfilesMap</a></li>
<li
><a href="#static_android.request.recommendedTenBitDynamicRangeProfile">android.request.recommendedTenBitDynamicRangeProfile</a></li>
<li
><a href="#static_android.request.availableColorSpaceProfiles">android.request.availableColorSpaceProfiles</a></li>
<li
><a href="#static_android.request.availableColorSpaceProfilesMap">android.request.availableColorSpaceProfilesMap</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
class="toc_deprecated"
><a href="#dynamic_android.request.frameCount">android.request.frameCount</a></li>
<li
><a href="#dynamic_android.request.id">android.request.id</a></li>
<li
><a href="#dynamic_android.request.metadataMode">android.request.metadataMode</a></li>
<li
class="toc_deprecated"
><a href="#dynamic_android.request.outputStreams">android.request.outputStreams</a></li>
<li
><a href="#dynamic_android.request.pipelineDepth">android.request.pipelineDepth</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_scaler">scaler</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.scaler.cropRegion">android.scaler.cropRegion</a></li>
<li
><a href="#controls_android.scaler.rotateAndCrop">android.scaler.rotateAndCrop</a></li>
<li
><a href="#controls_android.scaler.cropRegionSet">android.scaler.cropRegionSet</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
class="toc_deprecated"
><a href="#static_android.scaler.availableFormats">android.scaler.availableFormats</a></li>
<li
class="toc_deprecated"
><a href="#static_android.scaler.availableJpegMinDurations">android.scaler.availableJpegMinDurations</a></li>
<li
class="toc_deprecated"
><a href="#static_android.scaler.availableJpegSizes">android.scaler.availableJpegSizes</a></li>
<li
><a href="#static_android.scaler.availableMaxDigitalZoom">android.scaler.availableMaxDigitalZoom</a></li>
<li
class="toc_deprecated"
><a href="#static_android.scaler.availableProcessedMinDurations">android.scaler.availableProcessedMinDurations</a></li>
<li
class="toc_deprecated"
><a href="#static_android.scaler.availableProcessedSizes">android.scaler.availableProcessedSizes</a></li>
<li
class="toc_deprecated"
><a href="#static_android.scaler.availableRawMinDurations">android.scaler.availableRawMinDurations</a></li>
<li
class="toc_deprecated"
><a href="#static_android.scaler.availableRawSizes">android.scaler.availableRawSizes</a></li>
<li
><a href="#static_android.scaler.availableInputOutputFormatsMap">android.scaler.availableInputOutputFormatsMap</a></li>
<li
><a href="#static_android.scaler.availableStreamConfigurations">android.scaler.availableStreamConfigurations</a></li>
<li
><a href="#static_android.scaler.availableMinFrameDurations">android.scaler.availableMinFrameDurations</a></li>
<li
><a href="#static_android.scaler.availableStallDurations">android.scaler.availableStallDurations</a></li>
<li
><a href="#static_android.scaler.streamConfigurationMap">android.scaler.streamConfigurationMap</a></li>
<li
><a href="#static_android.scaler.croppingType">android.scaler.croppingType</a></li>
<li
><a href="#static_android.scaler.availableRecommendedStreamConfigurations">android.scaler.availableRecommendedStreamConfigurations</a></li>
<li
><a href="#static_android.scaler.availableRecommendedInputOutputFormatsMap">android.scaler.availableRecommendedInputOutputFormatsMap</a></li>
<li
><a href="#static_android.scaler.mandatoryStreamCombinations">android.scaler.mandatoryStreamCombinations</a></li>
<li
><a href="#static_android.scaler.mandatoryConcurrentStreamCombinations">android.scaler.mandatoryConcurrentStreamCombinations</a></li>
<li
><a href="#static_android.scaler.availableRotateAndCropModes">android.scaler.availableRotateAndCropModes</a></li>
<li
><a href="#static_android.scaler.defaultSecureImageSize">android.scaler.defaultSecureImageSize</a></li>
<li
><a href="#static_android.scaler.physicalCameraMultiResolutionStreamConfigurations">android.scaler.physicalCameraMultiResolutionStreamConfigurations</a></li>
<li
><a href="#static_android.scaler.multiResolutionStreamConfigurationMap">android.scaler.multiResolutionStreamConfigurationMap</a></li>
<li
><a href="#static_android.scaler.availableStreamConfigurationsMaximumResolution">android.scaler.availableStreamConfigurationsMaximumResolution</a></li>
<li
><a href="#static_android.scaler.availableMinFrameDurationsMaximumResolution">android.scaler.availableMinFrameDurationsMaximumResolution</a></li>
<li
><a href="#static_android.scaler.availableStallDurationsMaximumResolution">android.scaler.availableStallDurationsMaximumResolution</a></li>
<li
><a href="#static_android.scaler.streamConfigurationMapMaximumResolution">android.scaler.streamConfigurationMapMaximumResolution</a></li>
<li
><a href="#static_android.scaler.availableInputOutputFormatsMapMaximumResolution">android.scaler.availableInputOutputFormatsMapMaximumResolution</a></li>
<li
><a href="#static_android.scaler.mandatoryMaximumResolutionStreamCombinations">android.scaler.mandatoryMaximumResolutionStreamCombinations</a></li>
<li
><a href="#static_android.scaler.mandatoryTenBitOutputStreamCombinations">android.scaler.mandatoryTenBitOutputStreamCombinations</a></li>
<li
><a href="#static_android.scaler.mandatoryPreviewStabilizationOutputStreamCombinations">android.scaler.mandatoryPreviewStabilizationOutputStreamCombinations</a></li>
<li
><a href="#static_android.scaler.multiResolutionStreamSupported">android.scaler.multiResolutionStreamSupported</a></li>
<li
><a href="#static_android.scaler.availableStreamUseCases">android.scaler.availableStreamUseCases</a></li>
<li
><a href="#static_android.scaler.mandatoryUseCaseStreamCombinations">android.scaler.mandatoryUseCaseStreamCombinations</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.scaler.cropRegion">android.scaler.cropRegion</a></li>
<li
><a href="#dynamic_android.scaler.rotateAndCrop">android.scaler.rotateAndCrop</a></li>
<li
><a href="#dynamic_android.scaler.rawCropRegion">android.scaler.rawCropRegion</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_sensor">sensor</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.sensor.exposureTime">android.sensor.exposureTime</a></li>
<li
><a href="#controls_android.sensor.frameDuration">android.sensor.frameDuration</a></li>
<li
><a href="#controls_android.sensor.sensitivity">android.sensor.sensitivity</a></li>
<li
><a href="#controls_android.sensor.testPatternData">android.sensor.testPatternData</a></li>
<li
><a href="#controls_android.sensor.testPatternMode">android.sensor.testPatternMode</a></li>
<li
><a href="#controls_android.sensor.pixelMode">android.sensor.pixelMode</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.sensor.info.activeArraySize">android.sensor.info.activeArraySize</a></li>
<li
><a href="#static_android.sensor.info.sensitivityRange">android.sensor.info.sensitivityRange</a></li>
<li
><a href="#static_android.sensor.info.colorFilterArrangement">android.sensor.info.colorFilterArrangement</a></li>
<li
><a href="#static_android.sensor.info.exposureTimeRange">android.sensor.info.exposureTimeRange</a></li>
<li
><a href="#static_android.sensor.info.maxFrameDuration">android.sensor.info.maxFrameDuration</a></li>
<li
><a href="#static_android.sensor.info.physicalSize">android.sensor.info.physicalSize</a></li>
<li
><a href="#static_android.sensor.info.pixelArraySize">android.sensor.info.pixelArraySize</a></li>
<li
><a href="#static_android.sensor.info.whiteLevel">android.sensor.info.whiteLevel</a></li>
<li
><a href="#static_android.sensor.info.timestampSource">android.sensor.info.timestampSource</a></li>
<li
><a href="#static_android.sensor.info.lensShadingApplied">android.sensor.info.lensShadingApplied</a></li>
<li
><a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.sensor.info.preCorrectionActiveArraySize</a></li>
<li
><a href="#static_android.sensor.info.activeArraySizeMaximumResolution">android.sensor.info.activeArraySizeMaximumResolution</a></li>
<li
><a href="#static_android.sensor.info.pixelArraySizeMaximumResolution">android.sensor.info.pixelArraySizeMaximumResolution</a></li>
<li
><a href="#static_android.sensor.info.preCorrectionActiveArraySizeMaximumResolution">android.sensor.info.preCorrectionActiveArraySizeMaximumResolution</a></li>
<li
><a href="#static_android.sensor.info.binningFactor">android.sensor.info.binningFactor</a></li>
<li
><a href="#static_android.sensor.referenceIlluminant1">android.sensor.referenceIlluminant1</a></li>
<li
><a href="#static_android.sensor.referenceIlluminant2">android.sensor.referenceIlluminant2</a></li>
<li
><a href="#static_android.sensor.calibrationTransform1">android.sensor.calibrationTransform1</a></li>
<li
><a href="#static_android.sensor.calibrationTransform2">android.sensor.calibrationTransform2</a></li>
<li
><a href="#static_android.sensor.colorTransform1">android.sensor.colorTransform1</a></li>
<li
><a href="#static_android.sensor.colorTransform2">android.sensor.colorTransform2</a></li>
<li
><a href="#static_android.sensor.forwardMatrix1">android.sensor.forwardMatrix1</a></li>
<li
><a href="#static_android.sensor.forwardMatrix2">android.sensor.forwardMatrix2</a></li>
<li
><a href="#static_android.sensor.baseGainFactor">android.sensor.baseGainFactor</a></li>
<li
><a href="#static_android.sensor.blackLevelPattern">android.sensor.blackLevelPattern</a></li>
<li
><a href="#static_android.sensor.maxAnalogSensitivity">android.sensor.maxAnalogSensitivity</a></li>
<li
><a href="#static_android.sensor.orientation">android.sensor.orientation</a></li>
<li
><a href="#static_android.sensor.profileHueSatMapDimensions">android.sensor.profileHueSatMapDimensions</a></li>
<li
><a href="#static_android.sensor.availableTestPatternModes">android.sensor.availableTestPatternModes</a></li>
<li
><a href="#static_android.sensor.opticalBlackRegions">android.sensor.opticalBlackRegions</a></li>
<li
><a href="#static_android.sensor.opaqueRawSize">android.sensor.opaqueRawSize</a></li>
<li
><a href="#static_android.sensor.opaqueRawSizeMaximumResolution">android.sensor.opaqueRawSizeMaximumResolution</a></li>
<li
><a href="#static_android.sensor.readoutTimestamp">android.sensor.readoutTimestamp</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.sensor.exposureTime">android.sensor.exposureTime</a></li>
<li
><a href="#dynamic_android.sensor.frameDuration">android.sensor.frameDuration</a></li>
<li
><a href="#dynamic_android.sensor.sensitivity">android.sensor.sensitivity</a></li>
<li
><a href="#dynamic_android.sensor.timestamp">android.sensor.timestamp</a></li>
<li
><a href="#dynamic_android.sensor.temperature">android.sensor.temperature</a></li>
<li
><a href="#dynamic_android.sensor.neutralColorPoint">android.sensor.neutralColorPoint</a></li>
<li
><a href="#dynamic_android.sensor.noiseProfile">android.sensor.noiseProfile</a></li>
<li
><a href="#dynamic_android.sensor.profileHueSatMap">android.sensor.profileHueSatMap</a></li>
<li
><a href="#dynamic_android.sensor.profileToneCurve">android.sensor.profileToneCurve</a></li>
<li
><a href="#dynamic_android.sensor.greenSplit">android.sensor.greenSplit</a></li>
<li
><a href="#dynamic_android.sensor.testPatternData">android.sensor.testPatternData</a></li>
<li
><a href="#dynamic_android.sensor.testPatternMode">android.sensor.testPatternMode</a></li>
<li
><a href="#dynamic_android.sensor.rollingShutterSkew">android.sensor.rollingShutterSkew</a></li>
<li
><a href="#dynamic_android.sensor.dynamicBlackLevel">android.sensor.dynamicBlackLevel</a></li>
<li
><a href="#dynamic_android.sensor.dynamicWhiteLevel">android.sensor.dynamicWhiteLevel</a></li>
<li
><a href="#dynamic_android.sensor.pixelMode">android.sensor.pixelMode</a></li>
<li
><a href="#dynamic_android.sensor.rawBinningFactorUsed">android.sensor.rawBinningFactorUsed</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_shading">shading</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.shading.mode">android.shading.mode</a></li>
<li
><a href="#controls_android.shading.strength">android.shading.strength</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.shading.mode">android.shading.mode</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.shading.availableModes">android.shading.availableModes</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_statistics">statistics</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.statistics.faceDetectMode">android.statistics.faceDetectMode</a></li>
<li
><a href="#controls_android.statistics.histogramMode">android.statistics.histogramMode</a></li>
<li
><a href="#controls_android.statistics.sharpnessMapMode">android.statistics.sharpnessMapMode</a></li>
<li
><a href="#controls_android.statistics.hotPixelMapMode">android.statistics.hotPixelMapMode</a></li>
<li
><a href="#controls_android.statistics.lensShadingMapMode">android.statistics.lensShadingMapMode</a></li>
<li
><a href="#controls_android.statistics.oisDataMode">android.statistics.oisDataMode</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.statistics.info.availableFaceDetectModes">android.statistics.info.availableFaceDetectModes</a></li>
<li
><a href="#static_android.statistics.info.histogramBucketCount">android.statistics.info.histogramBucketCount</a></li>
<li
><a href="#static_android.statistics.info.maxFaceCount">android.statistics.info.maxFaceCount</a></li>
<li
><a href="#static_android.statistics.info.maxHistogramCount">android.statistics.info.maxHistogramCount</a></li>
<li
><a href="#static_android.statistics.info.maxSharpnessMapValue">android.statistics.info.maxSharpnessMapValue</a></li>
<li
><a href="#static_android.statistics.info.sharpnessMapSize">android.statistics.info.sharpnessMapSize</a></li>
<li
><a href="#static_android.statistics.info.availableHotPixelMapModes">android.statistics.info.availableHotPixelMapModes</a></li>
<li
><a href="#static_android.statistics.info.availableLensShadingMapModes">android.statistics.info.availableLensShadingMapModes</a></li>
<li
><a href="#static_android.statistics.info.availableOisDataModes">android.statistics.info.availableOisDataModes</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.statistics.faceDetectMode">android.statistics.faceDetectMode</a></li>
<li
><a href="#dynamic_android.statistics.faceIds">android.statistics.faceIds</a></li>
<li
><a href="#dynamic_android.statistics.faceLandmarks">android.statistics.faceLandmarks</a></li>
<li
><a href="#dynamic_android.statistics.faceRectangles">android.statistics.faceRectangles</a></li>
<li
><a href="#dynamic_android.statistics.faceScores">android.statistics.faceScores</a></li>
<li
><a href="#dynamic_android.statistics.faces">android.statistics.faces</a></li>
<li
><a href="#dynamic_android.statistics.histogram">android.statistics.histogram</a></li>
<li
><a href="#dynamic_android.statistics.histogramMode">android.statistics.histogramMode</a></li>
<li
><a href="#dynamic_android.statistics.sharpnessMap">android.statistics.sharpnessMap</a></li>
<li
><a href="#dynamic_android.statistics.sharpnessMapMode">android.statistics.sharpnessMapMode</a></li>
<li
><a href="#dynamic_android.statistics.lensShadingCorrectionMap">android.statistics.lensShadingCorrectionMap</a></li>
<li
><a href="#dynamic_android.statistics.lensShadingMap">android.statistics.lensShadingMap</a></li>
<li
class="toc_deprecated"
><a href="#dynamic_android.statistics.predictedColorGains">android.statistics.predictedColorGains</a></li>
<li
class="toc_deprecated"
><a href="#dynamic_android.statistics.predictedColorTransform">android.statistics.predictedColorTransform</a></li>
<li
><a href="#dynamic_android.statistics.sceneFlicker">android.statistics.sceneFlicker</a></li>
<li
><a href="#dynamic_android.statistics.hotPixelMapMode">android.statistics.hotPixelMapMode</a></li>
<li
><a href="#dynamic_android.statistics.hotPixelMap">android.statistics.hotPixelMap</a></li>
<li
><a href="#dynamic_android.statistics.lensShadingMapMode">android.statistics.lensShadingMapMode</a></li>
<li
><a href="#dynamic_android.statistics.oisDataMode">android.statistics.oisDataMode</a></li>
<li
><a href="#dynamic_android.statistics.oisTimestamps">android.statistics.oisTimestamps</a></li>
<li
><a href="#dynamic_android.statistics.oisXShifts">android.statistics.oisXShifts</a></li>
<li
><a href="#dynamic_android.statistics.oisYShifts">android.statistics.oisYShifts</a></li>
<li
><a href="#dynamic_android.statistics.oisSamples">android.statistics.oisSamples</a></li>
<li
><a href="#dynamic_android.statistics.lensIntrinsicsSamples">android.statistics.lensIntrinsicsSamples</a></li>
<li
><a href="#dynamic_android.statistics.lensIntrinsicTimestamps">android.statistics.lensIntrinsicTimestamps</a></li>
<li
><a href="#dynamic_android.statistics.lensIntrinsicSamples">android.statistics.lensIntrinsicSamples</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_tonemap">tonemap</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.tonemap.curveBlue">android.tonemap.curveBlue</a></li>
<li
><a href="#controls_android.tonemap.curveGreen">android.tonemap.curveGreen</a></li>
<li
><a href="#controls_android.tonemap.curveRed">android.tonemap.curveRed</a></li>
<li
><a href="#controls_android.tonemap.curve">android.tonemap.curve</a></li>
<li
><a href="#controls_android.tonemap.mode">android.tonemap.mode</a></li>
<li
><a href="#controls_android.tonemap.gamma">android.tonemap.gamma</a></li>
<li
><a href="#controls_android.tonemap.presetCurve">android.tonemap.presetCurve</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.tonemap.maxCurvePoints">android.tonemap.maxCurvePoints</a></li>
<li
><a href="#static_android.tonemap.availableToneMapModes">android.tonemap.availableToneMapModes</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.tonemap.curveBlue">android.tonemap.curveBlue</a></li>
<li
><a href="#dynamic_android.tonemap.curveGreen">android.tonemap.curveGreen</a></li>
<li
><a href="#dynamic_android.tonemap.curveRed">android.tonemap.curveRed</a></li>
<li
><a href="#dynamic_android.tonemap.curve">android.tonemap.curve</a></li>
<li
><a href="#dynamic_android.tonemap.mode">android.tonemap.mode</a></li>
<li
><a href="#dynamic_android.tonemap.gamma">android.tonemap.gamma</a></li>
<li
><a href="#dynamic_android.tonemap.presetCurve">android.tonemap.presetCurve</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_led">led</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.led.transmit">android.led.transmit</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.led.transmit">android.led.transmit</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.led.availableLeds">android.led.availableLeds</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_info">info</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.info.supportedHardwareLevel">android.info.supportedHardwareLevel</a></li>
<li
><a href="#static_android.info.version">android.info.version</a></li>
<li
><a href="#static_android.info.supportedBufferManagementVersion">android.info.supportedBufferManagementVersion</a></li>
<li
><a href="#static_android.info.deviceStateSensorOrientationMap">android.info.deviceStateSensorOrientationMap</a></li>
<li
><a href="#static_android.info.deviceStateOrientations">android.info.deviceStateOrientations</a></li>
<li
><a href="#static_android.info.sessionConfigurationQueryVersion">android.info.sessionConfigurationQueryVersion</a></li>
<li
><a href="#static_android.info.deviceId">android.info.deviceId</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_blackLevel">blackLevel</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.blackLevel.lock">android.blackLevel.lock</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.blackLevel.lock">android.blackLevel.lock</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_sync">sync</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.sync.frameNumber">android.sync.frameNumber</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.sync.maxLatency">android.sync.maxLatency</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_reprocess">reprocess</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.reprocess.effectiveExposureFactor">android.reprocess.effectiveExposureFactor</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.reprocess.effectiveExposureFactor">android.reprocess.effectiveExposureFactor</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.reprocess.maxCaptureStall">android.reprocess.maxCaptureStall</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_depth">depth</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.depth.maxDepthSamples">android.depth.maxDepthSamples</a></li>
<li
><a href="#static_android.depth.availableDepthStreamConfigurations">android.depth.availableDepthStreamConfigurations</a></li>
<li
><a href="#static_android.depth.availableDepthMinFrameDurations">android.depth.availableDepthMinFrameDurations</a></li>
<li
><a href="#static_android.depth.availableDepthStallDurations">android.depth.availableDepthStallDurations</a></li>
<li
><a href="#static_android.depth.depthIsExclusive">android.depth.depthIsExclusive</a></li>
<li
><a href="#static_android.depth.availableRecommendedDepthStreamConfigurations">android.depth.availableRecommendedDepthStreamConfigurations</a></li>
<li
><a href="#static_android.depth.availableDynamicDepthStreamConfigurations">android.depth.availableDynamicDepthStreamConfigurations</a></li>
<li
><a href="#static_android.depth.availableDynamicDepthMinFrameDurations">android.depth.availableDynamicDepthMinFrameDurations</a></li>
<li
><a href="#static_android.depth.availableDynamicDepthStallDurations">android.depth.availableDynamicDepthStallDurations</a></li>
<li
><a href="#static_android.depth.availableDepthStreamConfigurationsMaximumResolution">android.depth.availableDepthStreamConfigurationsMaximumResolution</a></li>
<li
><a href="#static_android.depth.availableDepthMinFrameDurationsMaximumResolution">android.depth.availableDepthMinFrameDurationsMaximumResolution</a></li>
<li
><a href="#static_android.depth.availableDepthStallDurationsMaximumResolution">android.depth.availableDepthStallDurationsMaximumResolution</a></li>
<li
><a href="#static_android.depth.availableDynamicDepthStreamConfigurationsMaximumResolution">android.depth.availableDynamicDepthStreamConfigurationsMaximumResolution</a></li>
<li
><a href="#static_android.depth.availableDynamicDepthMinFrameDurationsMaximumResolution">android.depth.availableDynamicDepthMinFrameDurationsMaximumResolution</a></li>
<li
><a href="#static_android.depth.availableDynamicDepthStallDurationsMaximumResolution">android.depth.availableDynamicDepthStallDurationsMaximumResolution</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_logicalMultiCamera">logicalMultiCamera</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.logicalMultiCamera.physicalIds">android.logicalMultiCamera.physicalIds</a></li>
<li
><a href="#static_android.logicalMultiCamera.sensorSyncType">android.logicalMultiCamera.sensorSyncType</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.logicalMultiCamera.activePhysicalId">android.logicalMultiCamera.activePhysicalId</a></li>
<li
><a href="#dynamic_android.logicalMultiCamera.activePhysicalSensorCropRegion">android.logicalMultiCamera.activePhysicalSensorCropRegion</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_distortionCorrection">distortionCorrection</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.distortionCorrection.mode">android.distortionCorrection.mode</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.distortionCorrection.availableModes">android.distortionCorrection.availableModes</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.distortionCorrection.mode">android.distortionCorrection.mode</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_heic">heic</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.heic.info.supported">android.heic.info.supported</a></li>
<li
><a href="#static_android.heic.info.maxJpegAppSegmentsCount">android.heic.info.maxJpegAppSegmentsCount</a></li>
<li
><a href="#static_android.heic.availableHeicStreamConfigurations">android.heic.availableHeicStreamConfigurations</a></li>
<li
><a href="#static_android.heic.availableHeicMinFrameDurations">android.heic.availableHeicMinFrameDurations</a></li>
<li
><a href="#static_android.heic.availableHeicStallDurations">android.heic.availableHeicStallDurations</a></li>
<li
><a href="#static_android.heic.availableHeicStreamConfigurationsMaximumResolution">android.heic.availableHeicStreamConfigurationsMaximumResolution</a></li>
<li
><a href="#static_android.heic.availableHeicMinFrameDurationsMaximumResolution">android.heic.availableHeicMinFrameDurationsMaximumResolution</a></li>
<li
><a href="#static_android.heic.availableHeicStallDurationsMaximumResolution">android.heic.availableHeicStallDurationsMaximumResolution</a></li>
<li
><a href="#static_android.heic.availableHeicUltraHdrStreamConfigurations">android.heic.availableHeicUltraHdrStreamConfigurations</a></li>
<li
><a href="#static_android.heic.availableHeicUltraHdrMinFrameDurations">android.heic.availableHeicUltraHdrMinFrameDurations</a></li>
<li
><a href="#static_android.heic.availableHeicUltraHdrStallDurations">android.heic.availableHeicUltraHdrStallDurations</a></li>
<li
><a href="#static_android.heic.availableHeicUltraHdrStreamConfigurationsMaximumResolution">android.heic.availableHeicUltraHdrStreamConfigurationsMaximumResolution</a></li>
<li
><a href="#static_android.heic.availableHeicUltraHdrMinFrameDurationsMaximumResolution">android.heic.availableHeicUltraHdrMinFrameDurationsMaximumResolution</a></li>
<li
><a href="#static_android.heic.availableHeicUltraHdrStallDurationsMaximumResolution">android.heic.availableHeicUltraHdrStallDurationsMaximumResolution</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_automotive">automotive</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.automotive.lens.facing">android.automotive.lens.facing</a></li>
<li
><a href="#static_android.automotive.location">android.automotive.location</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_extension">extension</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.extension.strength">android.extension.strength</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">dynamic</span>
<ul class="toc_section">
<li
><a href="#dynamic_android.extension.currentType">android.extension.currentType</a></li>
<li
><a href="#dynamic_android.extension.strength">android.extension.strength</a></li>
<li
><a href="#dynamic_android.extension.nightModeIndicator">android.extension.nightModeIndicator</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_jpegr">jpegr</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.jpegr.availableJpegRStreamConfigurations">android.jpegr.availableJpegRStreamConfigurations</a></li>
<li
><a href="#static_android.jpegr.availableJpegRMinFrameDurations">android.jpegr.availableJpegRMinFrameDurations</a></li>
<li
><a href="#static_android.jpegr.availableJpegRStallDurations">android.jpegr.availableJpegRStallDurations</a></li>
<li
><a href="#static_android.jpegr.availableJpegRStreamConfigurationsMaximumResolution">android.jpegr.availableJpegRStreamConfigurationsMaximumResolution</a></li>
<li
><a href="#static_android.jpegr.availableJpegRMinFrameDurationsMaximumResolution">android.jpegr.availableJpegRMinFrameDurationsMaximumResolution</a></li>
<li
><a href="#static_android.jpegr.availableJpegRStallDurationsMaximumResolution">android.jpegr.availableJpegRStallDurationsMaximumResolution</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_sharedSession">sharedSession</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.sharedSession.colorSpace">android.sharedSession.colorSpace</a></li>
<li
><a href="#static_android.sharedSession.outputConfigurations">android.sharedSession.outputConfigurations</a></li>
<li
><a href="#static_android.sharedSession.configuration">android.sharedSession.configuration</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
<li>
<span class="toc_section_header"><a href="#section_desktopEffects">desktopEffects</a></span>
<ul class="toc_section">
<li>
<span class="toc_kind_header">static</span>
<ul class="toc_section">
<li
><a href="#static_android.desktopEffects.capabilities">android.desktopEffects.capabilities</a></li>
<li
><a href="#static_android.desktopEffects.backgroundBlurModes">android.desktopEffects.backgroundBlurModes</a></li>
</ul>
</li>
<li>
<span class="toc_kind_header">controls</span>
<ul class="toc_section">
<li
><a href="#controls_android.desktopEffects.backgroundBlurMode">android.desktopEffects.backgroundBlurMode</a></li>
<li
><a href="#controls_android.desktopEffects.faceRetouchMode">android.desktopEffects.faceRetouchMode</a></li>
<li
><a href="#controls_android.desktopEffects.faceRetouchStrength">android.desktopEffects.faceRetouchStrength</a></li>
<li
><a href="#controls_android.desktopEffects.portraitRelightMode">android.desktopEffects.portraitRelightMode</a></li>
</ul>
</li>
</ul> <!-- toc_section -->
</li>
</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_hal_version">HIDL HAL version</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 class="entries_header">
<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_hal_version">Initial HIDL HAL version</th>
<th class="th_tags">Tags</th>
</tr>
</thead>
<tbody>
<tr class="entry" id="controls_android.colorCorrection.mode">
<td class="entry_name
" rowspan="5">
android.<wbr/>color<wbr/>Correction.<wbr/>mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[full] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">TRANSFORM_MATRIX (v3.2)</span>
<span class="entry_type_enum_notes"><p>Use the <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a> matrix
and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> to do color conversion.<wbr/></p>
<p>All advanced white balance adjustments (not specified
by our white balance pipeline) must be disabled.<wbr/></p>
<p>If AWB is enabled with <code><a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a> != OFF</code>,<wbr/> then
TRANSFORM_<wbr/>MATRIX is ignored.<wbr/> The camera device will override
this value to either FAST or HIGH_<wbr/>QUALITY.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">FAST (v3.2)</span>
<span class="entry_type_enum_notes"><p>Color correction processing must not slow down
capture rate relative to sensor raw output.<wbr/></p>
<p>Advanced white balance adjustments above and beyond
the specified white balance pipeline may be applied.<wbr/></p>
<p>If AWB is enabled with <code><a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a> != OFF</code>,<wbr/> then
the camera device uses the last frame's AWB values
(or defaults if AWB has never been run).<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">HIGH_QUALITY (v3.2)</span>
<span class="entry_type_enum_notes"><p>Color correction processing operates at improved
quality but the capture rate might be reduced (relative to sensor
raw output rate)</p>
<p>Advanced white balance adjustments above and beyond
the specified white balance pipeline may be applied.<wbr/></p>
<p>If AWB is enabled with <code><a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a> != OFF</code>,<wbr/> then
the camera device uses the last frame's AWB values
(or defaults if AWB has never been run).<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CCT (v3.11)</span>
<span class="entry_type_enum_notes"><p>Use
<a href="#controls_android.colorCorrection.colorTemperature">android.<wbr/>color<wbr/>Correction.<wbr/>color<wbr/>Temperature</a> and
<a href="#controls_android.colorCorrection.colorTint">android.<wbr/>color<wbr/>Correction.<wbr/>color<wbr/>Tint</a> to adjust the white balance based
on correlated color temperature.<wbr/></p>
<p>If AWB is enabled with <code><a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a> != OFF</code>,<wbr/> then
CCT is ignored.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The mode control selects how the image data is converted from the
sensor's native color into linear sRGB color.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Starting from API level 36,<wbr/> <a href="#static_android.colorCorrection.availableModes">android.<wbr/>color<wbr/>Correction.<wbr/>available<wbr/>Modes</a>
can be used to check the list of supported values.<wbr/> Prior to API level 36,<wbr/>
TRANSFORM_<wbr/>MATRIX,<wbr/> HIGH_<wbr/>QUALITY,<wbr/> and FAST are guaranteed to be available
as valid modes on devices that support this key.<wbr/></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When auto-white balance (AWB) is enabled with <a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a>,<wbr/> this
control is overridden by the AWB routine.<wbr/> When AWB is disabled,<wbr/> the
application controls how the color mapping is performed.<wbr/></p>
<p>We define the expected processing pipeline below.<wbr/> For consistency
across devices,<wbr/> this is always the case with TRANSFORM_<wbr/>MATRIX.<wbr/></p>
<p>When either FAST or HIGH_<wbr/>QUALITY is used,<wbr/> the camera device may
do additional processing but <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> and
<a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a> will still be provided by the
camera device (in the results) and be roughly correct.<wbr/></p>
<p>Switching to TRANSFORM_<wbr/>MATRIX and using the data provided from
FAST or HIGH_<wbr/>QUALITY will yield a picture with the same white point
as what was produced by the camera device in the earlier frame.<wbr/></p>
<p>The expected processing pipeline is as follows:</p>
<p><img alt="White balance processing pipeline" src="images/camera2/metadata/android.colorCorrection.mode/processing_pipeline.png"/></p>
<p>The white balance is encoded by two values,<wbr/> a 4-channel white-balance
gain vector (applied in the Bayer domain),<wbr/> and a 3x3 color transform
matrix (applied after demosaic).<wbr/></p>
<p>The 4-channel white-balance gains are defined as:</p>
<pre><code><a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> = [ R G_<wbr/>even G_<wbr/>odd B ]
</code></pre>
<p>where <code>G_<wbr/>even</code> is the gain for green pixels on even rows of the
output,<wbr/> and <code>G_<wbr/>odd</code> is the gain for green pixels on the odd rows.<wbr/>
These may be identical for a given camera device implementation; if
the camera device does not support a separate gain for even/<wbr/>odd green
channels,<wbr/> it will use the <code>G_<wbr/>even</code> value,<wbr/> and write <code>G_<wbr/>odd</code> equal to
<code>G_<wbr/>even</code> in the output result metadata.<wbr/></p>
<p>The matrices for color transforms are defined as a 9-entry vector:</p>
<pre><code><a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a> = [ I0 I1 I2 I3 I4 I5 I6 I7 I8 ]
</code></pre>
<p>which define a transform from input sensor colors,<wbr/> <code>P_<wbr/>in = [ r g b ]</code>,<wbr/>
to output linear sRGB,<wbr/> <code>P_<wbr/>out = [ r' g' b' ]</code>,<wbr/></p>
<p>with colors as follows:</p>
<pre><code>r' = I0r + I1g + I2b
g' = I3r + I4g + I5b
b' = I6r + I7g + I8b
</code></pre>
<p>Both the input and output value ranges must match.<wbr/> Overflow/<wbr/>underflow
values are clipped to fit within the range.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>HAL must support both FAST and HIGH_<wbr/>QUALITY if color correction control is available
on the camera device,<wbr/> but the underlying implementation can be the same for both modes.<wbr/>
That is,<wbr/> if the highest quality implementation on the camera device does not slow down
capture rate,<wbr/> then FAST and HIGH_<wbr/>QUALITY should generate the same output.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.colorCorrection.transform">
<td class="entry_name
" rowspan="3">
android.<wbr/>color<wbr/>Correction.<wbr/>transform
</td>
<td class="entry_type">
<span class="entry_type_name">rational</span>
<span class="entry_type_container">x</span>
<span class="entry_type_array">
3 x 3
</span>
<span class="entry_type_visibility"> [public as colorSpaceTransform]</span>
<span class="entry_type_hwlevel">[full] </span>
<div class="entry_type_notes">3x3 rational matrix in row-major order</div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>A color transform matrix to use to transform
from sensor RGB color space to output linear sRGB color space.<wbr/></p>
</td>
<td class="entry_units">
Unitless scale factors
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This matrix is either set by the camera device when the request
<a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a> is not TRANSFORM_<wbr/>MATRIX,<wbr/> or
directly by the application in the request when the
<a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a> is TRANSFORM_<wbr/>MATRIX.<wbr/></p>
<p>In the latter case,<wbr/> the camera device may round the matrix to account
for precision issues; the final rounded matrix should be reported back
in this matrix result metadata.<wbr/> The transform should keep the magnitude
of the output color values within <code>[0,<wbr/> 1.<wbr/>0]</code> (assuming input color
values is within the normalized range <code>[0,<wbr/> 1.<wbr/>0]</code>),<wbr/> or clipping may occur.<wbr/></p>
<p>The valid range of each matrix element varies on different devices,<wbr/> but
values within [-1.<wbr/>5,<wbr/> 3.<wbr/>0] are guaranteed not to be clipped.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.colorCorrection.gains">
<td class="entry_name
" rowspan="5">
android.<wbr/>color<wbr/>Correction.<wbr/>gains
</td>
<td class="entry_type">
<span class="entry_type_name">float</span>
<span class="entry_type_container">x</span>
<span class="entry_type_array">
4
</span>
<span class="entry_type_visibility"> [public as rggbChannelVector]</span>
<span class="entry_type_hwlevel">[full] </span>
<div class="entry_type_notes">A 1D array of floats for 4 color channel gains</div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Gains applying to Bayer raw color channels for
white-balance.<wbr/></p>
</td>
<td class="entry_units">
Unitless gain factors
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>These per-channel gains are either set by the camera device
when the request <a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a> is not
TRANSFORM_<wbr/>MATRIX,<wbr/> or directly by the application in the
request when the <a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a> is
TRANSFORM_<wbr/>MATRIX.<wbr/></p>
<p>The gains in the result metadata are the gains actually
applied by the camera device to the current frame.<wbr/></p>
<p>The valid range of gains varies on different devices,<wbr/> but gains
between [1.<wbr/>0,<wbr/> 3.<wbr/>0] are guaranteed not to be clipped.<wbr/> Even if a given
device allows gains below 1.<wbr/>0,<wbr/> this is usually not recommended because
this can create color artifacts.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>The 4-channel white-balance gains are defined in
the order of <code>[R G_<wbr/>even G_<wbr/>odd B]</code>,<wbr/> where <code>G_<wbr/>even</code> is the gain
for green pixels on even rows of the output,<wbr/> and <code>G_<wbr/>odd</code>
is the gain for green pixels on the odd rows.<wbr/></p>
<p>If a HAL does not support a separate gain for even/<wbr/>odd green
channels,<wbr/> it must use the <code>G_<wbr/>even</code> value,<wbr/> and write
<code>G_<wbr/>odd</code> equal to <code>G_<wbr/>even</code> in the output result metadata.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.colorCorrection.aberrationMode">
<td class="entry_name
" rowspan="3">
android.<wbr/>color<wbr/>Correction.<wbr/>aberration<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>No aberration correction is applied.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">FAST (v3.2)</span>
<span class="entry_type_enum_notes"><p>Aberration correction will not slow down capture rate
relative to sensor raw output.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">HIGH_QUALITY (v3.2)</span>
<span class="entry_type_enum_notes"><p>Aberration correction operates at improved quality but the capture rate might be
reduced (relative to sensor raw output rate)</p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Mode of operation for the chromatic aberration correction algorithm.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.colorCorrection.availableAberrationModes">android.<wbr/>color<wbr/>Correction.<wbr/>available<wbr/>Aberration<wbr/>Modes</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Chromatic (color) aberration is caused by the fact that different wavelengths of light
can not focus on the same point after exiting from the lens.<wbr/> This metadata defines
the high level control of chromatic aberration correction algorithm,<wbr/> which aims to
minimize the chromatic artifacts that may occur along the object boundaries in an
image.<wbr/></p>
<p>FAST/<wbr/>HIGH_<wbr/>QUALITY both mean that camera device determined aberration
correction will be applied.<wbr/> HIGH_<wbr/>QUALITY mode indicates that the camera device will
use the highest-quality aberration correction algorithms,<wbr/> even if it slows down
capture rate.<wbr/> FAST means the camera device will not slow down capture rate when
applying aberration correction.<wbr/></p>
<p>LEGACY devices will always be in FAST mode.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.colorCorrection.colorTemperature">
<td class="entry_name
" rowspan="3">
android.<wbr/>color<wbr/>Correction.<wbr/>color<wbr/>Temperature
</td>
<td class="entry_type">
<span class="entry_type_name">int32</span>
<span class="entry_type_visibility"> [public]</span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Specifies the color temperature for CCT mode in Kelvin
to adjust the white balance of the image.<wbr/></p>
</td>
<td class="entry_units">
Kelvin
</td>
<td class="entry_range">
<p><a href="#static_android.colorCorrection.colorTemperatureRange">android.<wbr/>color<wbr/>Correction.<wbr/>color<wbr/>Temperature<wbr/>Range</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>11</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Sets the color temperature in Kelvin units for when
<a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a> is CCT to adjust the
white balance of the image.<wbr/></p>
<p>If CCT mode is enabled without a requested color temperature,<wbr/>
a default value will be set by the camera device.<wbr/> The default value can be
retrieved by checking the corresponding capture result.<wbr/> Color temperatures
requested outside the advertised <a href="#static_android.colorCorrection.colorTemperatureRange">android.<wbr/>color<wbr/>Correction.<wbr/>color<wbr/>Temperature<wbr/>Range</a>
will be clamped.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.colorCorrection.colorTint">
<td class="entry_name
" rowspan="3">
android.<wbr/>color<wbr/>Correction.<wbr/>color<wbr/>Tint
</td>
<td class="entry_type">
<span class="entry_type_name">int32</span>
<span class="entry_type_visibility"> [public]</span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Specifies the color tint for CCT mode to adjust the white
balance of the image.<wbr/></p>
</td>
<td class="entry_units">
D_<wbr/>uv defined as the distance from the Planckian locus on the CIE 1931 xy
chromaticity diagram,<wbr/> with the range ±50 mapping to ±0.<wbr/>01 D_<wbr/>uv
</td>
<td class="entry_range">
<p>The supported range,<wbr/> -50 to +50,<wbr/> corresponds to a D_<wbr/>uv distance
of ±0.<wbr/>01 below and above the Planckian locus.<wbr/> Some camera devices may have
limitations to achieving the full ±0.<wbr/>01 D_<wbr/>uv range at some color temperatures
(e.<wbr/>g.,<wbr/> below 1500K).<wbr/> In these cases,<wbr/> the applied D_<wbr/>uv value may be clamped and
the actual color tint will be reported in the <a href="#controls_android.colorCorrection.colorTint">android.<wbr/>color<wbr/>Correction.<wbr/>color<wbr/>Tint</a>
result.<wbr/></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>11</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Sets the color tint for when <a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a>
is CCT to adjust the white balance of the image.<wbr/></p>
<p>If CCT mode is enabled without a requested color tint,<wbr/>
a default value will be set by the camera device.<wbr/> The default value can be
retrieved by checking the corresponding capture result.<wbr/> Color tints requested
outside the supported range will be clamped to the nearest limit (-50 or +50).<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<!-- end of kind -->
</tbody>
<tr><td colspan="7" class="kind">dynamic</td></tr>
<thead class="entries_header">
<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_hal_version">Initial HIDL HAL version</th>
<th class="th_tags">Tags</th>
</tr>
</thead>
<tbody>
<tr class="entry" id="dynamic_android.colorCorrection.mode">
<td class="entry_name
" rowspan="5">
android.<wbr/>color<wbr/>Correction.<wbr/>mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[full] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">TRANSFORM_MATRIX (v3.2)</span>
<span class="entry_type_enum_notes"><p>Use the <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a> matrix
and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> to do color conversion.<wbr/></p>
<p>All advanced white balance adjustments (not specified
by our white balance pipeline) must be disabled.<wbr/></p>
<p>If AWB is enabled with <code><a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a> != OFF</code>,<wbr/> then
TRANSFORM_<wbr/>MATRIX is ignored.<wbr/> The camera device will override
this value to either FAST or HIGH_<wbr/>QUALITY.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">FAST (v3.2)</span>
<span class="entry_type_enum_notes"><p>Color correction processing must not slow down
capture rate relative to sensor raw output.<wbr/></p>
<p>Advanced white balance adjustments above and beyond
the specified white balance pipeline may be applied.<wbr/></p>
<p>If AWB is enabled with <code><a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a> != OFF</code>,<wbr/> then
the camera device uses the last frame's AWB values
(or defaults if AWB has never been run).<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">HIGH_QUALITY (v3.2)</span>
<span class="entry_type_enum_notes"><p>Color correction processing operates at improved
quality but the capture rate might be reduced (relative to sensor
raw output rate)</p>
<p>Advanced white balance adjustments above and beyond
the specified white balance pipeline may be applied.<wbr/></p>
<p>If AWB is enabled with <code><a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a> != OFF</code>,<wbr/> then
the camera device uses the last frame's AWB values
(or defaults if AWB has never been run).<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CCT (v3.11)</span>
<span class="entry_type_enum_notes"><p>Use
<a href="#controls_android.colorCorrection.colorTemperature">android.<wbr/>color<wbr/>Correction.<wbr/>color<wbr/>Temperature</a> and
<a href="#controls_android.colorCorrection.colorTint">android.<wbr/>color<wbr/>Correction.<wbr/>color<wbr/>Tint</a> to adjust the white balance based
on correlated color temperature.<wbr/></p>
<p>If AWB is enabled with <code><a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a> != OFF</code>,<wbr/> then
CCT is ignored.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The mode control selects how the image data is converted from the
sensor's native color into linear sRGB color.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Starting from API level 36,<wbr/> <a href="#static_android.colorCorrection.availableModes">android.<wbr/>color<wbr/>Correction.<wbr/>available<wbr/>Modes</a>
can be used to check the list of supported values.<wbr/> Prior to API level 36,<wbr/>
TRANSFORM_<wbr/>MATRIX,<wbr/> HIGH_<wbr/>QUALITY,<wbr/> and FAST are guaranteed to be available
as valid modes on devices that support this key.<wbr/></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When auto-white balance (AWB) is enabled with <a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a>,<wbr/> this
control is overridden by the AWB routine.<wbr/> When AWB is disabled,<wbr/> the
application controls how the color mapping is performed.<wbr/></p>
<p>We define the expected processing pipeline below.<wbr/> For consistency
across devices,<wbr/> this is always the case with TRANSFORM_<wbr/>MATRIX.<wbr/></p>
<p>When either FAST or HIGH_<wbr/>QUALITY is used,<wbr/> the camera device may
do additional processing but <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> and
<a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a> will still be provided by the
camera device (in the results) and be roughly correct.<wbr/></p>
<p>Switching to TRANSFORM_<wbr/>MATRIX and using the data provided from
FAST or HIGH_<wbr/>QUALITY will yield a picture with the same white point
as what was produced by the camera device in the earlier frame.<wbr/></p>
<p>The expected processing pipeline is as follows:</p>
<p><img alt="White balance processing pipeline" src="images/camera2/metadata/android.colorCorrection.mode/processing_pipeline.png"/></p>
<p>The white balance is encoded by two values,<wbr/> a 4-channel white-balance
gain vector (applied in the Bayer domain),<wbr/> and a 3x3 color transform
matrix (applied after demosaic).<wbr/></p>
<p>The 4-channel white-balance gains are defined as:</p>
<pre><code><a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> = [ R G_<wbr/>even G_<wbr/>odd B ]
</code></pre>
<p>where <code>G_<wbr/>even</code> is the gain for green pixels on even rows of the
output,<wbr/> and <code>G_<wbr/>odd</code> is the gain for green pixels on the odd rows.<wbr/>
These may be identical for a given camera device implementation; if
the camera device does not support a separate gain for even/<wbr/>odd green
channels,<wbr/> it will use the <code>G_<wbr/>even</code> value,<wbr/> and write <code>G_<wbr/>odd</code> equal to
<code>G_<wbr/>even</code> in the output result metadata.<wbr/></p>
<p>The matrices for color transforms are defined as a 9-entry vector:</p>
<pre><code><a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a> = [ I0 I1 I2 I3 I4 I5 I6 I7 I8 ]
</code></pre>
<p>which define a transform from input sensor colors,<wbr/> <code>P_<wbr/>in = [ r g b ]</code>,<wbr/>
to output linear sRGB,<wbr/> <code>P_<wbr/>out = [ r' g' b' ]</code>,<wbr/></p>
<p>with colors as follows:</p>
<pre><code>r' = I0r + I1g + I2b
g' = I3r + I4g + I5b
b' = I6r + I7g + I8b
</code></pre>
<p>Both the input and output value ranges must match.<wbr/> Overflow/<wbr/>underflow
values are clipped to fit within the range.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>HAL must support both FAST and HIGH_<wbr/>QUALITY if color correction control is available
on the camera device,<wbr/> but the underlying implementation can be the same for both modes.<wbr/>
That is,<wbr/> if the highest quality implementation on the camera device does not slow down
capture rate,<wbr/> then FAST and HIGH_<wbr/>QUALITY should generate the same output.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.colorCorrection.transform">
<td class="entry_name
" rowspan="3">
android.<wbr/>color<wbr/>Correction.<wbr/>transform
</td>
<td class="entry_type">
<span class="entry_type_name">rational</span>
<span class="entry_type_container">x</span>
<span class="entry_type_array">
3 x 3
</span>
<span class="entry_type_visibility"> [public as colorSpaceTransform]</span>
<span class="entry_type_hwlevel">[full] </span>
<div class="entry_type_notes">3x3 rational matrix in row-major order</div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>A color transform matrix to use to transform
from sensor RGB color space to output linear sRGB color space.<wbr/></p>
</td>
<td class="entry_units">
Unitless scale factors
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This matrix is either set by the camera device when the request
<a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a> is not TRANSFORM_<wbr/>MATRIX,<wbr/> or
directly by the application in the request when the
<a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a> is TRANSFORM_<wbr/>MATRIX.<wbr/></p>
<p>In the latter case,<wbr/> the camera device may round the matrix to account
for precision issues; the final rounded matrix should be reported back
in this matrix result metadata.<wbr/> The transform should keep the magnitude
of the output color values within <code>[0,<wbr/> 1.<wbr/>0]</code> (assuming input color
values is within the normalized range <code>[0,<wbr/> 1.<wbr/>0]</code>),<wbr/> or clipping may occur.<wbr/></p>
<p>The valid range of each matrix element varies on different devices,<wbr/> but
values within [-1.<wbr/>5,<wbr/> 3.<wbr/>0] are guaranteed not to be clipped.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.colorCorrection.gains">
<td class="entry_name
" rowspan="5">
android.<wbr/>color<wbr/>Correction.<wbr/>gains
</td>
<td class="entry_type">
<span class="entry_type_name">float</span>
<span class="entry_type_container">x</span>
<span class="entry_type_array">
4
</span>
<span class="entry_type_visibility"> [public as rggbChannelVector]</span>
<span class="entry_type_hwlevel">[full] </span>
<div class="entry_type_notes">A 1D array of floats for 4 color channel gains</div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Gains applying to Bayer raw color channels for
white-balance.<wbr/></p>
</td>
<td class="entry_units">
Unitless gain factors
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>These per-channel gains are either set by the camera device
when the request <a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a> is not
TRANSFORM_<wbr/>MATRIX,<wbr/> or directly by the application in the
request when the <a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a> is
TRANSFORM_<wbr/>MATRIX.<wbr/></p>
<p>The gains in the result metadata are the gains actually
applied by the camera device to the current frame.<wbr/></p>
<p>The valid range of gains varies on different devices,<wbr/> but gains
between [1.<wbr/>0,<wbr/> 3.<wbr/>0] are guaranteed not to be clipped.<wbr/> Even if a given
device allows gains below 1.<wbr/>0,<wbr/> this is usually not recommended because
this can create color artifacts.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>The 4-channel white-balance gains are defined in
the order of <code>[R G_<wbr/>even G_<wbr/>odd B]</code>,<wbr/> where <code>G_<wbr/>even</code> is the gain
for green pixels on even rows of the output,<wbr/> and <code>G_<wbr/>odd</code>
is the gain for green pixels on the odd rows.<wbr/></p>
<p>If a HAL does not support a separate gain for even/<wbr/>odd green
channels,<wbr/> it must use the <code>G_<wbr/>even</code> value,<wbr/> and write
<code>G_<wbr/>odd</code> equal to <code>G_<wbr/>even</code> in the output result metadata.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.colorCorrection.aberrationMode">
<td class="entry_name
" rowspan="3">
android.<wbr/>color<wbr/>Correction.<wbr/>aberration<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>No aberration correction is applied.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">FAST (v3.2)</span>
<span class="entry_type_enum_notes"><p>Aberration correction will not slow down capture rate
relative to sensor raw output.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">HIGH_QUALITY (v3.2)</span>
<span class="entry_type_enum_notes"><p>Aberration correction operates at improved quality but the capture rate might be
reduced (relative to sensor raw output rate)</p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Mode of operation for the chromatic aberration correction algorithm.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.colorCorrection.availableAberrationModes">android.<wbr/>color<wbr/>Correction.<wbr/>available<wbr/>Aberration<wbr/>Modes</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Chromatic (color) aberration is caused by the fact that different wavelengths of light
can not focus on the same point after exiting from the lens.<wbr/> This metadata defines
the high level control of chromatic aberration correction algorithm,<wbr/> which aims to
minimize the chromatic artifacts that may occur along the object boundaries in an
image.<wbr/></p>
<p>FAST/<wbr/>HIGH_<wbr/>QUALITY both mean that camera device determined aberration
correction will be applied.<wbr/> HIGH_<wbr/>QUALITY mode indicates that the camera device will
use the highest-quality aberration correction algorithms,<wbr/> even if it slows down
capture rate.<wbr/> FAST means the camera device will not slow down capture rate when
applying aberration correction.<wbr/></p>
<p>LEGACY devices will always be in FAST mode.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.colorCorrection.colorTemperature">
<td class="entry_name
" rowspan="3">
android.<wbr/>color<wbr/>Correction.<wbr/>color<wbr/>Temperature
</td>
<td class="entry_type">
<span class="entry_type_name">int32</span>
<span class="entry_type_visibility"> [public]</span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Specifies the color temperature for CCT mode in Kelvin
to adjust the white balance of the image.<wbr/></p>
</td>
<td class="entry_units">
Kelvin
</td>
<td class="entry_range">
<p><a href="#static_android.colorCorrection.colorTemperatureRange">android.<wbr/>color<wbr/>Correction.<wbr/>color<wbr/>Temperature<wbr/>Range</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>11</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Sets the color temperature in Kelvin units for when
<a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a> is CCT to adjust the
white balance of the image.<wbr/></p>
<p>If CCT mode is enabled without a requested color temperature,<wbr/>
a default value will be set by the camera device.<wbr/> The default value can be
retrieved by checking the corresponding capture result.<wbr/> Color temperatures
requested outside the advertised <a href="#static_android.colorCorrection.colorTemperatureRange">android.<wbr/>color<wbr/>Correction.<wbr/>color<wbr/>Temperature<wbr/>Range</a>
will be clamped.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.colorCorrection.colorTint">
<td class="entry_name
" rowspan="3">
android.<wbr/>color<wbr/>Correction.<wbr/>color<wbr/>Tint
</td>
<td class="entry_type">
<span class="entry_type_name">int32</span>
<span class="entry_type_visibility"> [public]</span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Specifies the color tint for CCT mode to adjust the white
balance of the image.<wbr/></p>
</td>
<td class="entry_units">
D_<wbr/>uv defined as the distance from the Planckian locus on the CIE 1931 xy
chromaticity diagram,<wbr/> with the range ±50 mapping to ±0.<wbr/>01 D_<wbr/>uv
</td>
<td class="entry_range">
<p>The supported range,<wbr/> -50 to +50,<wbr/> corresponds to a D_<wbr/>uv distance
of ±0.<wbr/>01 below and above the Planckian locus.<wbr/> Some camera devices may have
limitations to achieving the full ±0.<wbr/>01 D_<wbr/>uv range at some color temperatures
(e.<wbr/>g.,<wbr/> below 1500K).<wbr/> In these cases,<wbr/> the applied D_<wbr/>uv value may be clamped and
the actual color tint will be reported in the <a href="#controls_android.colorCorrection.colorTint">android.<wbr/>color<wbr/>Correction.<wbr/>color<wbr/>Tint</a>
result.<wbr/></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>11</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Sets the color tint for when <a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a>
is CCT to adjust the white balance of the image.<wbr/></p>
<p>If CCT mode is enabled without a requested color tint,<wbr/>
a default value will be set by the camera device.<wbr/> The default value can be
retrieved by checking the corresponding capture result.<wbr/> Color tints requested
outside the supported range will be clamped to the nearest limit (-50 or +50).<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<!-- end of kind -->
</tbody>
<tr><td colspan="7" class="kind">static</td></tr>
<thead class="entries_header">
<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_hal_version">Initial HIDL HAL version</th>
<th class="th_tags">Tags</th>
</tr>
</thead>
<tbody>
<tr class="entry" id="static_android.colorCorrection.availableAberrationModes">
<td class="entry_name
" rowspan="5">
android.<wbr/>color<wbr/>Correction.<wbr/>available<wbr/>Aberration<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>
<span class="entry_type_visibility"> [public as enumList]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<div class="entry_type_notes">list of enums</div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of aberration correction modes for <a href="#controls_android.colorCorrection.aberrationMode">android.<wbr/>color<wbr/>Correction.<wbr/>aberration<wbr/>Mode</a> that are
supported by this camera device.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Any value listed in <a href="#controls_android.colorCorrection.aberrationMode">android.<wbr/>color<wbr/>Correction.<wbr/>aberration<wbr/>Mode</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_V1">V1</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This key lists the valid modes for <a href="#controls_android.colorCorrection.aberrationMode">android.<wbr/>color<wbr/>Correction.<wbr/>aberration<wbr/>Mode</a>.<wbr/> If no
aberration correction modes are available for a device,<wbr/> this list will solely include
OFF mode.<wbr/> All camera devices will support either OFF or FAST mode.<wbr/></p>
<p>Camera devices that support the MANUAL_<wbr/>POST_<wbr/>PROCESSING capability will always list
OFF mode.<wbr/> This includes all FULL level devices.<wbr/></p>
<p>LEGACY devices will always only support FAST mode.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>HAL must support both FAST and HIGH_<wbr/>QUALITY if chromatic aberration control is available
on the camera device,<wbr/> but the underlying implementation can be the same for both modes.<wbr/>
That is,<wbr/> if the highest quality implementation on the camera device does not slow down
capture rate,<wbr/> then FAST and HIGH_<wbr/>QUALITY will generate the same output.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.colorCorrection.colorTemperatureRange">
<td class="entry_name
" rowspan="3">
android.<wbr/>color<wbr/>Correction.<wbr/>color<wbr/>Temperature<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>
<span class="entry_type_visibility"> [public as rangeInt]</span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The range of supported color temperature values for
<a href="#controls_android.colorCorrection.colorTemperature">android.<wbr/>color<wbr/>Correction.<wbr/>color<wbr/>Temperature</a>.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>The minimum supported range will be [2856K,<wbr/>6500K].<wbr/> The maximum supported
range will be [1000K,<wbr/>40000K].<wbr/></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>11</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This key lists the valid range of color temperature values for
<a href="#controls_android.colorCorrection.colorTemperature">android.<wbr/>color<wbr/>Correction.<wbr/>color<wbr/>Temperature</a> supported by this camera device.<wbr/></p>
<p>This key will be null on devices that do not support CCT mode for
<a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a>.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.colorCorrection.availableModes">
<td class="entry_name
" rowspan="3">
android.<wbr/>color<wbr/>Correction.<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>
<span class="entry_type_visibility"> [public as enumList]</span>
<div class="entry_type_notes">list of enums</div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of color correction modes for <a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a> that are
supported by this camera device.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Any value listed in <a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>11</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This key lists the valid modes for <a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a>.<wbr/> If no
color correction modes are available for a device,<wbr/> this key will be null.<wbr/></p>
<p>Camera devices that have a FULL hardware level will always include at least
FAST,<wbr/> HIGH_<wbr/>QUALITY,<wbr/> and TRANSFORM_<wbr/>MATRIX modes.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></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 class="entries_header">
<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_hal_version">Initial HIDL HAL version</th>
<th class="th_tags">Tags</th>
</tr>
</thead>
<tbody>
<tr class="entry" id="controls_android.control.aeAntibandingMode">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>ae<wbr/>Antibanding<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device will not adjust exposure duration to
avoid banding problems.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">50HZ (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device will adjust exposure duration to
avoid banding problems with 50Hz illumination sources.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">60HZ (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device will adjust exposure duration to
avoid banding problems with 60Hz illumination
sources.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">AUTO (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device will automatically adapt its
antibanding routine to the current illumination
condition.<wbr/> This is the default mode if AUTO is
available on given camera device.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The desired setting for the camera device's auto-exposure
algorithm's antibanding compensation.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.control.aeAvailableAntibandingModes">android.<wbr/>control.<wbr/>ae<wbr/>Available<wbr/>Antibanding<wbr/>Modes</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Some kinds of lighting fixtures,<wbr/> such as some fluorescent
lights,<wbr/> flicker at the rate of the power supply frequency
(60Hz or 50Hz,<wbr/> depending on country).<wbr/> While this is
typically not noticeable to a person,<wbr/> it can be visible to
a camera device.<wbr/> If a camera sets its exposure time to the
wrong value,<wbr/> the flicker may become visible in the
viewfinder as flicker or in a final captured image,<wbr/> as a
set of variable-brightness bands across the image.<wbr/></p>
<p>Therefore,<wbr/> the auto-exposure routines of camera devices
include antibanding routines that ensure that the chosen
exposure value will not cause such banding.<wbr/> The choice of
exposure time depends on the rate of flicker,<wbr/> which the
camera device can detect automatically,<wbr/> or the expected
rate can be selected by the application using this
control.<wbr/></p>
<p>A given camera device may not support all of the possible
options for the antibanding mode.<wbr/> The
<a href="#static_android.control.aeAvailableAntibandingModes">android.<wbr/>control.<wbr/>ae<wbr/>Available<wbr/>Antibanding<wbr/>Modes</a> key contains
the available modes for a given camera device.<wbr/></p>
<p>AUTO mode is the default if it is available on given
camera device.<wbr/> When AUTO mode is not available,<wbr/> the
default will be either 50HZ or 60HZ,<wbr/> and both 50HZ
and 60HZ will be available.<wbr/></p>
<p>If manual exposure control is enabled (by setting
<a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> or <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> to OFF),<wbr/>
then this setting has no effect,<wbr/> and the application must
ensure it selects exposure times that do not cause banding
issues.<wbr/> The <a href="#dynamic_android.statistics.sceneFlicker">android.<wbr/>statistics.<wbr/>scene<wbr/>Flicker</a> key can assist
the application in this.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>For all capture request templates,<wbr/> this field must be set
to AUTO if AUTO mode is available.<wbr/> If AUTO is not available,<wbr/>
the default must be either 50HZ or 60HZ,<wbr/> and both 50HZ and
60HZ must be available.<wbr/></p>
<p>If manual exposure control is enabled (by setting
<a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> or <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> to OFF),<wbr/>
then the exposure values provided by the application must not be
adjusted for antibanding.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.aeExposureCompensation">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>ae<wbr/>Exposure<wbr/>Compensation
</td>
<td class="entry_type">
<span class="entry_type_name">int32</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Adjustment to auto-exposure (AE) target image
brightness.<wbr/></p>
</td>
<td class="entry_units">
Compensation steps
</td>
<td class="entry_range">
<p><a href="#static_android.control.aeCompensationRange">android.<wbr/>control.<wbr/>ae<wbr/>Compensation<wbr/>Range</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>The adjustment is measured as a count of steps,<wbr/> with the
step size defined by <a href="#static_android.control.aeCompensationStep">android.<wbr/>control.<wbr/>ae<wbr/>Compensation<wbr/>Step</a> and the
allowed range by <a href="#static_android.control.aeCompensationRange">android.<wbr/>control.<wbr/>ae<wbr/>Compensation<wbr/>Range</a>.<wbr/></p>
<p>For example,<wbr/> if the exposure value (EV) step is 0.<wbr/>333,<wbr/> '6'
will mean an exposure compensation of +2 EV; -3 will mean an
exposure compensation of -1 EV.<wbr/> One EV represents a doubling
of image brightness.<wbr/> Note that this control will only be
effective if <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> <code>!=</code> OFF.<wbr/> This control
will take effect even when <a href="#controls_android.control.aeLock">android.<wbr/>control.<wbr/>ae<wbr/>Lock</a> <code>== true</code>.<wbr/></p>
<p>In the event of exposure compensation value being changed,<wbr/> camera device
may take several frames to reach the newly requested exposure target.<wbr/>
During that time,<wbr/> <a href="#dynamic_android.control.aeState">android.<wbr/>control.<wbr/>ae<wbr/>State</a> field will be in the SEARCHING
state.<wbr/> Once the new exposure target is reached,<wbr/> <a href="#dynamic_android.control.aeState">android.<wbr/>control.<wbr/>ae<wbr/>State</a> will
change from SEARCHING to either CONVERGED,<wbr/> LOCKED (if AE lock is enabled),<wbr/> or
FLASH_<wbr/>REQUIRED (if the scene is too dark for still capture).<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.aeLock">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>ae<wbr/>Lock
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public as boolean]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>Auto-exposure lock is disabled; the AE algorithm
is free to update its parameters.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ON (v3.2)</span>
<span class="entry_type_enum_notes"><p>Auto-exposure lock is enabled; the AE algorithm
must not update the exposure and sensitivity parameters
while the lock is active.<wbr/></p>
<p><a href="#controls_android.control.aeExposureCompensation">android.<wbr/>control.<wbr/>ae<wbr/>Exposure<wbr/>Compensation</a> setting changes
will still take effect while auto-exposure is locked.<wbr/></p>
<p>Some rare LEGACY devices may not support
this,<wbr/> in which case the value will always be overridden to OFF.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether auto-exposure (AE) is currently locked to its latest
calculated values.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When set to <code>true</code> (ON),<wbr/> the AE algorithm is locked to its latest parameters,<wbr/>
and will not change exposure settings until the lock is set to <code>false</code> (OFF).<wbr/></p>
<p>Note that even when AE is locked,<wbr/> the flash may be fired if
the <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> is ON_<wbr/>AUTO_<wbr/>FLASH /<wbr/>
ON_<wbr/>ALWAYS_<wbr/>FLASH /<wbr/> ON_<wbr/>AUTO_<wbr/>FLASH_<wbr/>REDEYE.<wbr/></p>
<p>When <a href="#controls_android.control.aeExposureCompensation">android.<wbr/>control.<wbr/>ae<wbr/>Exposure<wbr/>Compensation</a> is changed,<wbr/> even if the AE lock
is ON,<wbr/> the camera device will still adjust its exposure value.<wbr/></p>
<p>If AE precapture is triggered (see <a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a>)
when AE is already locked,<wbr/> the camera device will not change the exposure time
(<a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a>) and sensitivity (<a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a>)
parameters.<wbr/> The flash may be fired if the <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a>
is ON_<wbr/>AUTO_<wbr/>FLASH/<wbr/>ON_<wbr/>AUTO_<wbr/>FLASH_<wbr/>REDEYE and the scene is too dark.<wbr/> If the
<a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> is ON_<wbr/>ALWAYS_<wbr/>FLASH,<wbr/> the scene may become overexposed.<wbr/>
Similarly,<wbr/> AE precapture trigger CANCEL has no effect when AE is already locked.<wbr/></p>
<p>When an AE precapture sequence is triggered,<wbr/> AE unlock will not be able to unlock
the AE if AE is locked by the camera device internally during precapture metering
sequence In other words,<wbr/> submitting requests with AE unlock has no effect for an
ongoing precapture metering sequence.<wbr/> Otherwise,<wbr/> the precapture metering sequence
will never succeed in a sequence of preview requests where AE lock is always set
to <code>false</code>.<wbr/></p>
<p>Since the camera device has a pipeline of in-flight requests,<wbr/> the settings that
get locked do not necessarily correspond to the settings that were present in the
latest capture result received from the camera device,<wbr/> since additional captures
and AE updates may have occurred even before the result was sent out.<wbr/> If an
application is switching between automatic and manual control and wishes to eliminate
any flicker during the switch,<wbr/> the following procedure is recommended:</p>
<ol>
<li>Starting in auto-AE mode:</li>
<li>Lock AE</li>
<li>Wait for the first result to be output that has the AE locked</li>
<li>Copy exposure settings from that result into a request,<wbr/> set the request to manual AE</li>
<li>Submit the capture request,<wbr/> proceed to run manual AE as desired.<wbr/></li>
</ol>
<p>See <a href="#dynamic_android.control.aeState">android.<wbr/>control.<wbr/>ae<wbr/>State</a> for AE lock related state transition details.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.aeMode">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>ae<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's autoexposure routine is disabled.<wbr/></p>
<p>The application-selected <a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a>,<wbr/>
<a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a> and
<a href="#controls_android.sensor.frameDuration">android.<wbr/>sensor.<wbr/>frame<wbr/>Duration</a> are used by the camera
device,<wbr/> along with android.<wbr/>flash.<wbr/>* fields,<wbr/> if there's
a flash unit for this camera device.<wbr/></p>
<p>Note that auto-white balance (AWB) and auto-focus (AF)
behavior is device dependent when AE is in OFF mode.<wbr/>
To have consistent behavior across different devices,<wbr/>
it is recommended to either set AWB and AF to OFF mode
or lock AWB and AF before setting AE to OFF.<wbr/>
See <a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a>,<wbr/> <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a>,<wbr/>
<a href="#controls_android.control.awbLock">android.<wbr/>control.<wbr/>awb<wbr/>Lock</a>,<wbr/> and <a href="#controls_android.control.afTrigger">android.<wbr/>control.<wbr/>af<wbr/>Trigger</a>
for more details.<wbr/></p>
<p>LEGACY devices do not support the OFF mode and will
override attempts to use this value to ON.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ON (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's autoexposure routine is active,<wbr/>
with no flash control.<wbr/></p>
<p>The application's values for
<a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a>,<wbr/>
<a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a>,<wbr/> and
<a href="#controls_android.sensor.frameDuration">android.<wbr/>sensor.<wbr/>frame<wbr/>Duration</a> are ignored.<wbr/> The
application has control over the various
android.<wbr/>flash.<wbr/>* fields.<wbr/></p>
<p>If the device supports manual flash strength control,<wbr/> i.<wbr/>e.,<wbr/>
if <a href="#static_android.flash.singleStrengthMaxLevel">android.<wbr/>flash.<wbr/>single<wbr/>Strength<wbr/>Max<wbr/>Level</a> and
<a href="#static_android.flash.torchStrengthMaxLevel">android.<wbr/>flash.<wbr/>torch<wbr/>Strength<wbr/>Max<wbr/>Level</a> are greater than 1,<wbr/> then
the auto-exposure (AE) precapture metering sequence should be
triggered for the configured flash mode and strength to avoid
the image being incorrectly exposed at different
<a href="#controls_android.flash.strengthLevel">android.<wbr/>flash.<wbr/>strength<wbr/>Level</a>.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ON_AUTO_FLASH (v3.2)</span>
<span class="entry_type_enum_notes"><p>Like ON,<wbr/> except that the camera device also controls
the camera's flash unit,<wbr/> firing it in low-light
conditions.<wbr/></p>
<p>The flash may be fired during a precapture sequence
(triggered by <a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a>) and
may be fired for captures for which the
<a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> field is set to
STILL_<wbr/>CAPTURE</p></span>
</li>
<li>
<span class="entry_type_enum_name">ON_ALWAYS_FLASH (v3.2)</span>
<span class="entry_type_enum_notes"><p>Like ON,<wbr/> except that the camera device also controls
the camera's flash unit,<wbr/> always firing it for still
captures.<wbr/></p>
<p>The flash may be fired during a precapture sequence
(triggered by <a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a>) and
will always be fired for captures for which the
<a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> field is set to
STILL_<wbr/>CAPTURE</p></span>
</li>
<li>
<span class="entry_type_enum_name">ON_AUTO_FLASH_REDEYE (v3.2)</span>
<span class="entry_type_enum_notes"><p>Like ON_<wbr/>AUTO_<wbr/>FLASH,<wbr/> but with automatic red eye
reduction.<wbr/></p>
<p>If deemed necessary by the camera device,<wbr/> a red eye
reduction flash will fire during the precapture
sequence.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ON_EXTERNAL_FLASH (v3.3)</span>
<span class="entry_type_enum_notes"><p>An external flash has been turned on.<wbr/></p>
<p>It informs the camera device that an external flash has been turned on,<wbr/> and that
metering (and continuous focus if active) should be quickly recalculated to account
for the external flash.<wbr/> Otherwise,<wbr/> this mode acts like ON.<wbr/></p>
<p>When the external flash is turned off,<wbr/> AE mode should be changed to one of the
other available AE modes.<wbr/></p>
<p>If the camera device supports AE external flash mode,<wbr/> <a href="#dynamic_android.control.aeState">android.<wbr/>control.<wbr/>ae<wbr/>State</a> must
be FLASH_<wbr/>REQUIRED after the camera device finishes AE scan and it's too dark without
flash.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY (v3.10)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Like 'ON' but applies additional brightness boost in low light scenes.<wbr/></p>
<p>When the scene lighting conditions are within the range defined by
<a href="#static_android.control.lowLightBoostInfoLuminanceRange">android.<wbr/>control.<wbr/>low<wbr/>Light<wbr/>Boost<wbr/>Info<wbr/>Luminance<wbr/>Range</a> this mode will apply additional
brightness boost.<wbr/></p>
<p>This mode will automatically adjust the intensity of low light boost applied
according to the scene lighting conditions.<wbr/> A darker scene will receive more boost
while a brighter scene will receive less boost.<wbr/></p>
<p>This mode can ignore the set target frame rate to allow more light to be captured
which can result in choppier motion.<wbr/> The frame rate can extend to lower than the
<a href="#static_android.control.aeAvailableTargetFpsRanges">android.<wbr/>control.<wbr/>ae<wbr/>Available<wbr/>Target<wbr/>Fps<wbr/>Ranges</a> but will not go below 10 FPS.<wbr/> This mode
can also increase the sensor sensitivity gain which can result in increased luma
and chroma noise.<wbr/> The sensor sensitivity gain can extend to higher values beyond
<a href="#static_android.sensor.info.sensitivityRange">android.<wbr/>sensor.<wbr/>info.<wbr/>sensitivity<wbr/>Range</a>.<wbr/> This mode may also apply additional
processing to recover details in dark and bright areas of the image,<wbr/>and noise
reduction at high sensitivity gain settings to manage the trade-off between light
sensitivity and capture noise.<wbr/></p>
<p>This mode is restricted to two output surfaces.<wbr/> One output surface type can either
be SurfaceView or TextureView.<wbr/> Another output surface type can either be MediaCodec
or MediaRecorder.<wbr/> This mode cannot be used with a target FPS range higher than 30
FPS.<wbr/></p>
<p>If the session configuration is not supported,<wbr/> the AE mode reported in the
CaptureResult will be 'ON' instead of 'ON_<wbr/>LOW_<wbr/>LIGHT_<wbr/>BOOST_<wbr/>BRIGHTNESS_<wbr/>PRIORITY'.<wbr/></p>
<p>When this AE mode is enabled,<wbr/> the CaptureResult field
<a href="#dynamic_android.control.lowLightBoostState">android.<wbr/>control.<wbr/>low<wbr/>Light<wbr/>Boost<wbr/>State</a> will indicate when low light boost is 'ACTIVE'
or 'INACTIVE'.<wbr/> By default <a href="#dynamic_android.control.lowLightBoostState">android.<wbr/>control.<wbr/>low<wbr/>Light<wbr/>Boost<wbr/>State</a> will be 'INACTIVE'.<wbr/></p>
<p>The low light boost is 'ACTIVE' once the scene lighting condition is less than the
upper bound lux value defined by <a href="#static_android.control.lowLightBoostInfoLuminanceRange">android.<wbr/>control.<wbr/>low<wbr/>Light<wbr/>Boost<wbr/>Info<wbr/>Luminance<wbr/>Range</a>.<wbr/>
This mode will be 'INACTIVE' once the scene lighting condition is greater than the
upper bound lux value defined by <a href="#static_android.control.lowLightBoostInfoLuminanceRange">android.<wbr/>control.<wbr/>low<wbr/>Light<wbr/>Boost<wbr/>Info<wbr/>Luminance<wbr/>Range</a>.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The desired mode for the camera device's
auto-exposure routine.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.control.aeAvailableModes">android.<wbr/>control.<wbr/>ae<wbr/>Available<wbr/>Modes</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This control is only effective if <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> is
AUTO.<wbr/></p>
<p>When set to any of the ON modes,<wbr/> the camera device's
auto-exposure routine is enabled,<wbr/> overriding the
application's selected exposure time,<wbr/> sensor sensitivity,<wbr/>
and frame duration (<a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a>,<wbr/>
<a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a>,<wbr/> and
<a href="#controls_android.sensor.frameDuration">android.<wbr/>sensor.<wbr/>frame<wbr/>Duration</a>).<wbr/> If <a href="#controls_android.control.aePriorityMode">android.<wbr/>control.<wbr/>ae<wbr/>Priority<wbr/>Mode</a> is
enabled,<wbr/> the relevant priority CaptureRequest settings will not be overridden.<wbr/>
See <a href="#controls_android.control.aePriorityMode">android.<wbr/>control.<wbr/>ae<wbr/>Priority<wbr/>Mode</a> for more details.<wbr/> If one of the FLASH modes
is selected,<wbr/> the camera device's flash unit controls are
also overridden.<wbr/></p>
<p>The FLASH modes are only available if the camera device
has a flash unit (<a href="#static_android.flash.info.available">android.<wbr/>flash.<wbr/>info.<wbr/>available</a> is <code>true</code>).<wbr/></p>
<p>If flash TORCH mode is desired,<wbr/> this field must be set to
ON or OFF,<wbr/> and <a href="#controls_android.flash.mode">android.<wbr/>flash.<wbr/>mode</a> set to TORCH.<wbr/></p>
<p>When set to any of the ON modes,<wbr/> the values chosen by the
camera device auto-exposure routine for the overridden
fields for a given capture will be available in its
CaptureResult.<wbr/></p>
<p>When <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> is AE_<wbr/>MODE_<wbr/>ON and if the device
supports manual flash strength control,<wbr/> i.<wbr/>e.,<wbr/>
if <a href="#static_android.flash.singleStrengthMaxLevel">android.<wbr/>flash.<wbr/>single<wbr/>Strength<wbr/>Max<wbr/>Level</a> and
<a href="#static_android.flash.torchStrengthMaxLevel">android.<wbr/>flash.<wbr/>torch<wbr/>Strength<wbr/>Max<wbr/>Level</a> are greater than 1,<wbr/> then
the auto-exposure (AE) precapture metering sequence should be
triggered to avoid the image being incorrectly exposed at
different <a href="#controls_android.flash.strengthLevel">android.<wbr/>flash.<wbr/>strength<wbr/>Level</a>.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.aeRegions">
<td class="entry_name
" rowspan="5">
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>
<span class="entry_type_visibility"> [public as meteringRectangle]</span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of metering areas to use for auto-exposure adjustment.<wbr/></p>
</td>
<td class="entry_units">
Pixel coordinates within android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size or
android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size depending on
distortion correction capability and mode
</td>
<td class="entry_range">
<p>Coordinates must be between <code>[(0,<wbr/>0),<wbr/> (width,<wbr/> height))</code> of
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a> or <a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>
depending on distortion correction capability and mode</p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Not available if <a href="#static_android.control.maxRegionsAe">android.<wbr/>control.<wbr/>max<wbr/>Regions<wbr/>Ae</a> is 0.<wbr/>
Otherwise will always be present.<wbr/></p>
<p>The maximum number of regions supported by the device is determined by the value
of <a href="#static_android.control.maxRegionsAe">android.<wbr/>control.<wbr/>max<wbr/>Regions<wbr/>Ae</a>.<wbr/></p>
<p>For devices not supporting <a href="#controls_android.distortionCorrection.mode">android.<wbr/>distortion<wbr/>Correction.<wbr/>mode</a> control,<wbr/> the coordinate
system always follows that of <a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>,<wbr/> with (0,<wbr/>0) being
the top-left pixel in the active pixel array,<wbr/> and
(<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>width - 1,<wbr/>
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>height - 1) being the bottom-right pixel in the
active pixel array.<wbr/></p>
<p>For devices supporting <a href="#controls_android.distortionCorrection.mode">android.<wbr/>distortion<wbr/>Correction.<wbr/>mode</a> control,<wbr/> the coordinate
system depends on the mode being set.<wbr/>
When the distortion correction mode is OFF,<wbr/> the coordinate system follows
<a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>,<wbr/> with
<code>(0,<wbr/> 0)</code> being the top-left pixel of the pre-correction active array,<wbr/> and
(<a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>.<wbr/>width - 1,<wbr/>
<a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>.<wbr/>height - 1) being the bottom-right
pixel in the pre-correction active pixel array.<wbr/>
When the distortion correction mode is not OFF,<wbr/> the coordinate system follows
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>,<wbr/> with
<code>(0,<wbr/> 0)</code> being the top-left pixel of the active array,<wbr/> and
(<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>width - 1,<wbr/>
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>height - 1) being the bottom-right pixel in the
active pixel array.<wbr/></p>
<p>The weight must be within <code>[0,<wbr/> 1000]</code>,<wbr/> and represents a weight
for every pixel in the area.<wbr/> This means that a large metering area
with the same weight as a smaller area will have more effect in
the metering result.<wbr/> Metering areas can partially overlap and the
camera device will add the weights in the overlap region.<wbr/></p>
<p>The weights are relative to weights of other exposure metering regions,<wbr/> so if only one
region is used,<wbr/> all non-zero weights will have the same effect.<wbr/> A region with 0
weight is ignored.<wbr/></p>
<p>If all regions have 0 weight,<wbr/> then no specific metering area needs to be used by the
camera device.<wbr/></p>
<p>If the metering region is outside the used <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> returned in
capture result metadata,<wbr/> the camera device will ignore the sections outside the crop
region and output only the intersection rectangle as the metering region in the result
metadata.<wbr/> If the region is entirely outside the crop region,<wbr/> it will be ignored and
not reported in the result metadata.<wbr/></p>
<p>When setting the AE metering regions,<wbr/> the application must consider the additional
crop resulted from the aspect ratio differences between the preview stream and
<a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a>.<wbr/> For example,<wbr/> if the <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> is the full
active array size with 4:3 aspect ratio,<wbr/> and the preview stream is 16:9,<wbr/>
the boundary of AE regions will be [0,<wbr/> y_<wbr/>crop] and
[active_<wbr/>width,<wbr/> active_<wbr/>height - 2 * y_<wbr/>crop] rather than [0,<wbr/> 0] and
[active_<wbr/>width,<wbr/> active_<wbr/>height],<wbr/> where y_<wbr/>crop is the additional crop due to aspect ratio
mismatch.<wbr/></p>
<p>Starting from API level 30,<wbr/> the coordinate system of activeArraySize or
preCorrectionActiveArraySize is used to represent post-zoomRatio field of view,<wbr/> not
pre-zoom field of view.<wbr/> This means that the same aeRegions values at different
<a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> represent different parts of the scene.<wbr/> The aeRegions
coordinates are relative to the activeArray/<wbr/>preCorrectionActiveArray representing the
zoomed field of view.<wbr/> If <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> is set to 1.<wbr/>0 (default),<wbr/> the same
aeRegions at different <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> still represent the same parts of the
scene as they do before.<wbr/> See <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> for details.<wbr/> Whether to use
activeArraySize or preCorrectionActiveArraySize still depends on distortion correction
mode.<wbr/></p>
<p>For camera devices with the
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR">Camera<wbr/>Metadata#REQUEST_<wbr/>AVAILABLE_<wbr/>CAPABILITIES_<wbr/>ULTRA_<wbr/>HIGH_<wbr/>RESOLUTION_<wbr/>SENSOR</a>
capability or devices where
<a href="https://developer.android.com/reference/CameraCharacteristics.html#getAvailableCaptureRequestKeys">CameraCharacteristics#getAvailableCaptureRequestKeys</a>
lists <a href="#controls_android.sensor.pixelMode">android.<wbr/>sensor.<wbr/>pixel<wbr/>Mode</a>,<wbr/>
<a href="#static_android.sensor.info.activeArraySizeMaximumResolution">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size<wbr/>Maximum<wbr/>Resolution</a> /<wbr/>
<a href="#static_android.sensor.info.preCorrectionActiveArraySizeMaximumResolution">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size<wbr/>Maximum<wbr/>Resolution</a> must be used as the
coordinate system for requests where <a href="#controls_android.sensor.pixelMode">android.<wbr/>sensor.<wbr/>pixel<wbr/>Mode</a> is set to
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION">Camera<wbr/>Metadata#SENSOR_<wbr/>PIXEL_<wbr/>MODE_<wbr/>MAXIMUM_<wbr/>RESOLUTION</a>.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>The HAL level representation of MeteringRectangle[] is a
int[5 * area_<wbr/>count].<wbr/>
Every five elements represent a metering region of
(xmin,<wbr/> ymin,<wbr/> xmax,<wbr/> ymax,<wbr/> weight).<wbr/>
The rectangle is defined to be inclusive on xmin and ymin,<wbr/> but
exclusive on xmax and ymax.<wbr/>
HAL must always report metering regions in the coordinate system of pre-correction
active array.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.aeTargetFpsRange">
<td class="entry_name
" rowspan="3">
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>
<span class="entry_type_visibility"> [public as rangeInt]</span>
<span class="entry_type_hwlevel">[legacy] </span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Range over which the auto-exposure routine can
adjust the capture frame rate to maintain good
exposure.<wbr/></p>
</td>
<td class="entry_units">
Frames per second (FPS)
</td>
<td class="entry_range">
<p>Any of the entries in <a href="#static_android.control.aeAvailableTargetFpsRanges">android.<wbr/>control.<wbr/>ae<wbr/>Available<wbr/>Target<wbr/>Fps<wbr/>Ranges</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Only constrains auto-exposure (AE) algorithm,<wbr/> not
manual control of <a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a> and
<a href="#controls_android.sensor.frameDuration">android.<wbr/>sensor.<wbr/>frame<wbr/>Duration</a>.<wbr/></p>
<p>Note that the actual achievable max framerate also depends on the minimum frame
duration of the output streams.<wbr/> The max frame rate will be
<code>min(aeTargetFpsRange.<wbr/>maxFps,<wbr/> 1 /<wbr/> max(individual stream min durations))</code>.<wbr/> For example,<wbr/>
if the application sets this key to <code>{60,<wbr/> 60}</code>,<wbr/> but the maximum minFrameDuration among
all configured streams is 33ms,<wbr/> the maximum framerate won't be 60fps,<wbr/> but will be
30fps.<wbr/></p>
<p>To start a CaptureSession with a target FPS range different from the
capture request template's default value,<wbr/> the application
is strongly recommended to call
<a href="https://developer.android.com/reference/android/hardware/camera2/params/SessionConfiguration.html#setSessionParameters">SessionConfiguration#setSessionParameters</a>
with the target fps range before creating the capture session.<wbr/> The aeTargetFpsRange is
typically a session parameter.<wbr/> Specifying it at session creation time helps avoid
session reconfiguration delays in cases like 60fps or high speed recording.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.aePrecaptureTrigger">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[limited] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">IDLE (v3.2)</span>
<span class="entry_type_enum_notes"><p>The trigger is idle.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">START (v3.2)</span>
<span class="entry_type_enum_notes"><p>The precapture metering sequence will be started
by the camera device.<wbr/></p>
<p>The exact effect of the precapture trigger depends on
the current AE mode and state.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CANCEL (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device will cancel any currently active or completed
precapture metering sequence,<wbr/> the auto-exposure routine will return to its
initial state.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether the camera device will trigger a precapture
metering sequence when it processes this request.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This entry is normally set to IDLE,<wbr/> or is not
included at all in the request settings.<wbr/> When included and
set to START,<wbr/> the camera device will trigger the auto-exposure (AE)
precapture metering sequence.<wbr/></p>
<p>When set to CANCEL,<wbr/> the camera device will cancel any active
precapture metering trigger,<wbr/> and return to its initial AE state.<wbr/>
If a precapture metering sequence is already completed,<wbr/> and the camera
device has implicitly locked the AE for subsequent still capture,<wbr/> the
CANCEL trigger will unlock the AE and return to its initial AE state.<wbr/></p>
<p>The precapture sequence should be triggered before starting a
high-quality still capture for final metering decisions to
be made,<wbr/> and for firing pre-capture flash pulses to estimate
scene brightness and required final capture flash power,<wbr/> when
the flash is enabled.<wbr/></p>
<p>Flash is enabled during precapture sequence when:</p>
<ul>
<li>AE mode is ON_<wbr/>ALWAYS_<wbr/>FLASH</li>
<li>AE mode is ON_<wbr/>AUTO_<wbr/>FLASH and the scene is deemed too dark without flash,<wbr/> or</li>
<li>AE mode is ON and flash mode is TORCH or SINGLE</li>
</ul>
<p>Normally,<wbr/> this entry should be set to START for only single request,<wbr/> and the
application should wait until the sequence completes before starting a new one.<wbr/></p>
<p>When a precapture metering sequence is finished,<wbr/> the camera device
may lock the auto-exposure routine internally to be able to accurately expose the
subsequent still capture image (<code><a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> == STILL_<wbr/>CAPTURE</code>).<wbr/>
For this case,<wbr/> the AE may not resume normal scan if no subsequent still capture is
submitted.<wbr/> To ensure that the AE routine restarts normal scan,<wbr/> the application should
submit a request with <code><a href="#controls_android.control.aeLock">android.<wbr/>control.<wbr/>ae<wbr/>Lock</a> == true</code>,<wbr/> followed by a request
with <code><a href="#controls_android.control.aeLock">android.<wbr/>control.<wbr/>ae<wbr/>Lock</a> == false</code>,<wbr/> if the application decides not to submit a
still capture request after the precapture sequence completes.<wbr/> Alternatively,<wbr/> for
API level 23 or newer devices,<wbr/> the CANCEL can be used to unlock the camera device
internally locked AE if the application doesn't submit a still capture request after
the AE precapture trigger.<wbr/> Note that,<wbr/> the CANCEL was added in API level 23,<wbr/> and must not
be used in devices that have earlier API levels.<wbr/></p>
<p>The exact effect of auto-exposure (AE) precapture trigger
depends on the current AE mode and state; see
<a href="#dynamic_android.control.aeState">android.<wbr/>control.<wbr/>ae<wbr/>State</a> for AE precapture state transition
details.<wbr/></p>
<p>On LEGACY-level devices,<wbr/> the precapture trigger is not supported;
capturing a high-resolution JPEG image will automatically trigger a
precapture sequence before the high-resolution capture,<wbr/> including
potentially firing a pre-capture flash.<wbr/></p>
<p>Using the precapture trigger and the auto-focus trigger <a href="#controls_android.control.afTrigger">android.<wbr/>control.<wbr/>af<wbr/>Trigger</a>
simultaneously is allowed.<wbr/> However,<wbr/> since these triggers often require cooperation between
the auto-focus and auto-exposure routines (for example,<wbr/> the may need to be enabled for a
focus sweep),<wbr/> the camera device may delay acting on a later trigger until the previous
trigger has been fully handled.<wbr/> This may lead to longer intervals between the trigger and
changes to <a href="#dynamic_android.control.aeState">android.<wbr/>control.<wbr/>ae<wbr/>State</a> indicating the start of the precapture sequence,<wbr/> for
example.<wbr/></p>
<p>If both the precapture and the auto-focus trigger are activated on the same request,<wbr/> then
the camera device will complete them in the optimal order for that device.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>The HAL must support triggering the AE precapture trigger while an AF trigger is active
(and vice versa),<wbr/> or at the same time as the AF trigger.<wbr/> It is acceptable for the HAL to
treat these as two consecutive triggers,<wbr/> for example handling the AF trigger and then the
AE trigger.<wbr/> Or the HAL may choose to optimize the case with both triggers fired at once,<wbr/>
to minimize the latency for converging both focus and exposure/<wbr/>flash usage.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.afMode">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>af<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>The auto-focus routine does not control the lens;
<a href="#controls_android.lens.focusDistance">android.<wbr/>lens.<wbr/>focus<wbr/>Distance</a> is controlled by the
application.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">AUTO (v3.2)</span>
<span class="entry_type_enum_notes"><p>Basic automatic focus mode.<wbr/></p>
<p>In this mode,<wbr/> the lens does not move unless
the autofocus trigger action is called.<wbr/> When that trigger
is activated,<wbr/> AF will transition to ACTIVE_<wbr/>SCAN,<wbr/> then to
the outcome of the scan (FOCUSED or NOT_<wbr/>FOCUSED).<wbr/></p>
<p>Always supported if lens is not fixed focus.<wbr/></p>
<p>Use <a href="#static_android.lens.info.minimumFocusDistance">android.<wbr/>lens.<wbr/>info.<wbr/>minimum<wbr/>Focus<wbr/>Distance</a> to determine if lens
is fixed-focus.<wbr/></p>
<p>Triggering AF_<wbr/>CANCEL resets the lens position to default,<wbr/>
and sets the AF state to INACTIVE.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">MACRO (v3.2)</span>
<span class="entry_type_enum_notes"><p>Close-up focusing mode.<wbr/></p>
<p>In this mode,<wbr/> the lens does not move unless the
autofocus trigger action is called.<wbr/> When that trigger is
activated,<wbr/> AF will transition to ACTIVE_<wbr/>SCAN,<wbr/> then to
the outcome of the scan (FOCUSED or NOT_<wbr/>FOCUSED).<wbr/> This
mode is optimized for focusing on objects very close to
the camera.<wbr/></p>
<p>When that trigger is activated,<wbr/> AF will 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/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CONTINUOUS_VIDEO (v3.2)</span>
<span class="entry_type_enum_notes"><p>In this mode,<wbr/> the AF algorithm modifies the lens
position continually to attempt to provide a
constantly-in-focus image stream.<wbr/></p>
<p>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/></p>
<p>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/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CONTINUOUS_PICTURE (v3.2)</span>
<span class="entry_type_enum_notes"><p>In this mode,<wbr/> the AF algorithm modifies the lens
position continually to attempt to provide a
constantly-in-focus image stream.<wbr/></p>
<p>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/></p>
<p>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/></p></span>
</li>
<li>
<span class="entry_type_enum_name">EDOF (v3.2)</span>
<span class="entry_type_enum_notes"><p>Extended depth of field (digital focus) mode.<wbr/></p>
<p>The camera device will produce images with an extended
depth of field automatically; no special focusing
operations need to be done before taking a picture.<wbr/></p>
<p>AF triggers are ignored,<wbr/> and the AF state will always be
INACTIVE.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether auto-focus (AF) is currently enabled,<wbr/> and what
mode it is set to.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.control.afAvailableModes">android.<wbr/>control.<wbr/>af<wbr/>Available<wbr/>Modes</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Only effective if <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> = AUTO and the lens is not fixed focus
(i.<wbr/>e.<wbr/> <code><a href="#static_android.lens.info.minimumFocusDistance">android.<wbr/>lens.<wbr/>info.<wbr/>minimum<wbr/>Focus<wbr/>Distance</a> &gt; 0</code>).<wbr/> Also note that
when <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> is OFF,<wbr/> the behavior of AF is device
dependent.<wbr/> It is recommended to lock AF by using <a href="#controls_android.control.afTrigger">android.<wbr/>control.<wbr/>af<wbr/>Trigger</a> before
setting <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> to OFF,<wbr/> or set AF mode to OFF when AE is OFF.<wbr/></p>
<p>If the lens is controlled by the camera device auto-focus algorithm,<wbr/>
the camera device will report the current AF status in <a href="#dynamic_android.control.afState">android.<wbr/>control.<wbr/>af<wbr/>State</a>
in result metadata.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When afMode is AUTO or MACRO,<wbr/> the lens must not move until an AF trigger is sent in a
request (<a href="#controls_android.control.afTrigger">android.<wbr/>control.<wbr/>af<wbr/>Trigger</a> <code>==</code> START).<wbr/> After an AF trigger,<wbr/> the afState will end
up with either FOCUSED_<wbr/>LOCKED or NOT_<wbr/>FOCUSED_<wbr/>LOCKED state (see
<a href="#dynamic_android.control.afState">android.<wbr/>control.<wbr/>af<wbr/>State</a> for detailed state transitions),<wbr/> which indicates that the lens is
locked and will not move.<wbr/> If camera movement (e.<wbr/>g.<wbr/> tilting camera) causes the lens to move
after the lens is locked,<wbr/> the HAL must compensate this movement appropriately such that
the same focal plane remains in focus.<wbr/></p>
<p>When afMode is one of the continuous auto focus modes,<wbr/> the HAL is free to start a AF
scan whenever it's not locked.<wbr/> When the lens is locked after an AF trigger
(see <a href="#dynamic_android.control.afState">android.<wbr/>control.<wbr/>af<wbr/>State</a> for detailed state transitions),<wbr/> the HAL should maintain the
same lock behavior as above.<wbr/></p>
<p>When afMode is OFF,<wbr/> the application controls focus manually.<wbr/> The accuracy of the
focus distance control depends on the <a href="#static_android.lens.info.focusDistanceCalibration">android.<wbr/>lens.<wbr/>info.<wbr/>focus<wbr/>Distance<wbr/>Calibration</a>.<wbr/>
However,<wbr/> the lens must not move regardless of the camera movement for any focus distance
manual control.<wbr/></p>
<p>To put this in concrete terms,<wbr/> if the camera has lens elements which may move based on
camera orientation or motion (e.<wbr/>g.<wbr/> due to gravity),<wbr/> then the HAL must drive the lens to
remain in a fixed position invariant to the camera's orientation or motion,<wbr/> for example,<wbr/>
by using accelerometer measurements in the lens control logic.<wbr/> This is a typical issue
that will arise on camera modules with open-loop VCMs.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.afRegions">
<td class="entry_name
" rowspan="5">
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>
<span class="entry_type_visibility"> [public as meteringRectangle]</span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of metering areas to use for auto-focus.<wbr/></p>
</td>
<td class="entry_units">
Pixel coordinates within android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size or
android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size depending on
distortion correction capability and mode
</td>
<td class="entry_range">
<p>Coordinates must be between <code>[(0,<wbr/>0),<wbr/> (width,<wbr/> height))</code> of
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a> or <a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>
depending on distortion correction capability and mode</p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Not available if <a href="#static_android.control.maxRegionsAf">android.<wbr/>control.<wbr/>max<wbr/>Regions<wbr/>Af</a> is 0.<wbr/>
Otherwise will always be present.<wbr/></p>
<p>The maximum number of focus areas supported by the device is determined by the value
of <a href="#static_android.control.maxRegionsAf">android.<wbr/>control.<wbr/>max<wbr/>Regions<wbr/>Af</a>.<wbr/></p>
<p>For devices not supporting <a href="#controls_android.distortionCorrection.mode">android.<wbr/>distortion<wbr/>Correction.<wbr/>mode</a> control,<wbr/> the coordinate
system always follows that of <a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>,<wbr/> with (0,<wbr/>0) being
the top-left pixel in the active pixel array,<wbr/> and
(<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>width - 1,<wbr/>
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>height - 1) being the bottom-right pixel in the
active pixel array.<wbr/></p>
<p>For devices supporting <a href="#controls_android.distortionCorrection.mode">android.<wbr/>distortion<wbr/>Correction.<wbr/>mode</a> control,<wbr/> the coordinate
system depends on the mode being set.<wbr/>
When the distortion correction mode is OFF,<wbr/> the coordinate system follows
<a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>,<wbr/> with
<code>(0,<wbr/> 0)</code> being the top-left pixel of the pre-correction active array,<wbr/> and
(<a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>.<wbr/>width - 1,<wbr/>
<a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>.<wbr/>height - 1) being the bottom-right
pixel in the pre-correction active pixel array.<wbr/>
When the distortion correction mode is not OFF,<wbr/> the coordinate system follows
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>,<wbr/> with
<code>(0,<wbr/> 0)</code> being the top-left pixel of the active array,<wbr/> and
(<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>width - 1,<wbr/>
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>height - 1) being the bottom-right pixel in the
active pixel array.<wbr/></p>
<p>The weight must be within <code>[0,<wbr/> 1000]</code>,<wbr/> and represents a weight
for every pixel in the area.<wbr/> This means that a large metering area
with the same weight as a smaller area will have more effect in
the metering result.<wbr/> Metering areas can partially overlap and the
camera device will add the weights in the overlap region.<wbr/></p>
<p>The weights are relative to weights of other metering regions,<wbr/> so if only one region
is used,<wbr/> all non-zero weights will have the same effect.<wbr/> A region with 0 weight is
ignored.<wbr/></p>
<p>If all regions have 0 weight,<wbr/> then no specific metering area needs to be used by the
camera device.<wbr/> The capture result will either be a zero weight region as well,<wbr/> or
the region selected by the camera device as the focus area of interest.<wbr/></p>
<p>If the metering region is outside the used <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> returned in
capture result metadata,<wbr/> the camera device will ignore the sections outside the crop
region and output only the intersection rectangle as the metering region in the result
metadata.<wbr/> If the region is entirely outside the crop region,<wbr/> it will be ignored and
not reported in the result metadata.<wbr/></p>
<p>When setting the AF metering regions,<wbr/> the application must consider the additional
crop resulted from the aspect ratio differences between the preview stream and
<a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a>.<wbr/> For example,<wbr/> if the <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> is the full
active array size with 4:3 aspect ratio,<wbr/> and the preview stream is 16:9,<wbr/>
the boundary of AF regions will be [0,<wbr/> y_<wbr/>crop] and
[active_<wbr/>width,<wbr/> active_<wbr/>height - 2 * y_<wbr/>crop] rather than [0,<wbr/> 0] and
[active_<wbr/>width,<wbr/> active_<wbr/>height],<wbr/> where y_<wbr/>crop is the additional crop due to aspect ratio
mismatch.<wbr/></p>
<p>Starting from API level 30,<wbr/> the coordinate system of activeArraySize or
preCorrectionActiveArraySize is used to represent post-zoomRatio field of view,<wbr/> not
pre-zoom field of view.<wbr/> This means that the same afRegions values at different
<a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> represent different parts of the scene.<wbr/> The afRegions
coordinates are relative to the activeArray/<wbr/>preCorrectionActiveArray representing the
zoomed field of view.<wbr/> If <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> is set to 1.<wbr/>0 (default),<wbr/> the same
afRegions at different <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> still represent the same parts of the
scene as they do before.<wbr/> See <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> for details.<wbr/> Whether to use
activeArraySize or preCorrectionActiveArraySize still depends on distortion correction
mode.<wbr/></p>
<p>For camera devices with the
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR">Camera<wbr/>Metadata#REQUEST_<wbr/>AVAILABLE_<wbr/>CAPABILITIES_<wbr/>ULTRA_<wbr/>HIGH_<wbr/>RESOLUTION_<wbr/>SENSOR</a>
capability or devices where
<a href="https://developer.android.com/reference/CameraCharacteristics.html#getAvailableCaptureRequestKeys">CameraCharacteristics#getAvailableCaptureRequestKeys</a>
lists <a href="#controls_android.sensor.pixelMode">android.<wbr/>sensor.<wbr/>pixel<wbr/>Mode</a>,<wbr/>
<a href="#static_android.sensor.info.activeArraySizeMaximumResolution">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size<wbr/>Maximum<wbr/>Resolution</a> /<wbr/>
<a href="#static_android.sensor.info.preCorrectionActiveArraySizeMaximumResolution">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size<wbr/>Maximum<wbr/>Resolution</a> must be used as the
coordinate system for requests where <a href="#controls_android.sensor.pixelMode">android.<wbr/>sensor.<wbr/>pixel<wbr/>Mode</a> is set to
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION">Camera<wbr/>Metadata#SENSOR_<wbr/>PIXEL_<wbr/>MODE_<wbr/>MAXIMUM_<wbr/>RESOLUTION</a>.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>The HAL level representation of MeteringRectangle[] is a
int[5 * area_<wbr/>count].<wbr/>
Every five elements represent a metering region of
(xmin,<wbr/> ymin,<wbr/> xmax,<wbr/> ymax,<wbr/> weight).<wbr/>
The rectangle is defined to be inclusive on xmin and ymin,<wbr/> but
exclusive on xmax and ymax.<wbr/>
HAL must always report metering regions in the coordinate system of pre-correction
active array.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.afTrigger">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>af<wbr/>Trigger
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">IDLE (v3.2)</span>
<span class="entry_type_enum_notes"><p>The trigger is idle.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">START (v3.2)</span>
<span class="entry_type_enum_notes"><p>Autofocus will trigger now.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CANCEL (v3.2)</span>
<span class="entry_type_enum_notes"><p>Autofocus will return to its initial
state,<wbr/> and cancel any currently active trigger.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether the camera device will trigger autofocus for this request.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This entry is normally set to IDLE,<wbr/> or is not
included at all in the request settings.<wbr/></p>
<p>When included and set to START,<wbr/> the camera device will trigger the
autofocus algorithm.<wbr/> If autofocus is disabled,<wbr/> this trigger has no effect.<wbr/></p>
<p>When set to CANCEL,<wbr/> the camera device will cancel any active trigger,<wbr/>
and return to its initial AF state.<wbr/></p>
<p>Generally,<wbr/> applications should set this entry to START or CANCEL for only a
single capture,<wbr/> and then return it to IDLE (or not set at all).<wbr/> Specifying
START for multiple captures in a row means restarting the AF operation over
and over again.<wbr/></p>
<p>See <a href="#dynamic_android.control.afState">android.<wbr/>control.<wbr/>af<wbr/>State</a> for what the trigger means for each AF mode.<wbr/></p>
<p>Using the autofocus trigger and the precapture trigger <a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a>
simultaneously is allowed.<wbr/> However,<wbr/> since these triggers often require cooperation between
the auto-focus and auto-exposure routines (for example,<wbr/> the may need to be enabled for a
focus sweep),<wbr/> the camera device may delay acting on a later trigger until the previous
trigger has been fully handled.<wbr/> This may lead to longer intervals between the trigger and
changes to <a href="#dynamic_android.control.afState">android.<wbr/>control.<wbr/>af<wbr/>State</a>,<wbr/> for example.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>The HAL must support triggering the AF trigger while an AE precapture trigger is active
(and vice versa),<wbr/> or at the same time as the AE trigger.<wbr/> It is acceptable for the HAL to
treat these as two consecutive triggers,<wbr/> for example handling the AF trigger and then the
AE trigger.<wbr/> Or the HAL may choose to optimize the case with both triggers fired at once,<wbr/>
to minimize the latency for converging both focus and exposure/<wbr/>flash usage.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.awbLock">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>awb<wbr/>Lock
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public as boolean]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>Auto-white balance lock is disabled; the AWB
algorithm is free to update its parameters if in AUTO
mode.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ON (v3.2)</span>
<span class="entry_type_enum_notes"><p>Auto-white balance lock is enabled; the AWB
algorithm will not update its parameters while the lock
is active.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether auto-white balance (AWB) is currently locked to its
latest calculated values.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When set to <code>true</code> (ON),<wbr/> the AWB algorithm is locked to its latest parameters,<wbr/>
and will not change color balance settings until the lock is set to <code>false</code> (OFF).<wbr/></p>
<p>Since the camera device has a pipeline of in-flight requests,<wbr/> the settings that
get locked do not necessarily correspond to the settings that were present in the
latest capture result received from the camera device,<wbr/> since additional captures
and AWB updates may have occurred even before the result was sent out.<wbr/> If an
application is switching between automatic and manual control and wishes to eliminate
any flicker during the switch,<wbr/> the following procedure is recommended:</p>
<ol>
<li>Starting in auto-AWB mode:</li>
<li>Lock AWB</li>
<li>Wait for the first result to be output that has the AWB locked</li>
<li>Copy AWB settings from that result into a request,<wbr/> set the request to manual AWB</li>
<li>Submit the capture request,<wbr/> proceed to run manual AWB as desired.<wbr/></li>
</ol>
<p>Note that AWB lock is only meaningful when
<a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a> is in the AUTO mode; in other modes,<wbr/>
AWB is already fixed to a specific setting.<wbr/></p>
<p>Some LEGACY devices may not support ON; the value is then overridden to OFF.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.awbMode">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>awb<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-white balance routine is disabled.<wbr/></p>
<p>The application-selected color transform matrix
(<a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>) and gains
(<a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a>) are used by the camera
device for manual white balance control.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">AUTO (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-white balance routine is active.<wbr/></p>
<p>The application's values for <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>
and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> are ignored.<wbr/>
For devices that support the MANUAL_<wbr/>POST_<wbr/>PROCESSING capability,<wbr/> the
values used by the camera device for the transform and gains
will be available in the capture result for this request.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">INCANDESCENT (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-white balance routine is disabled;
the camera device uses incandescent light as the assumed scene
illumination for white balance.<wbr/></p>
<p>While the exact white balance transforms are up to the
camera device,<wbr/> they will approximately match the CIE
standard illuminant A.<wbr/></p>
<p>The application's values for <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>
and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> are ignored.<wbr/>
For devices that support the MANUAL_<wbr/>POST_<wbr/>PROCESSING capability,<wbr/> the
values used by the camera device for the transform and gains
will be available in the capture result for this request.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">FLUORESCENT (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-white balance routine is disabled;
the camera device uses fluorescent light as the assumed scene
illumination for white balance.<wbr/></p>
<p>While the exact white balance transforms are up to the
camera device,<wbr/> they will approximately match the CIE
standard illuminant F2.<wbr/></p>
<p>The application's values for <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>
and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> are ignored.<wbr/>
For devices that support the MANUAL_<wbr/>POST_<wbr/>PROCESSING capability,<wbr/> the
values used by the camera device for the transform and gains
will be available in the capture result for this request.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">WARM_FLUORESCENT (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-white balance routine is disabled;
the camera device uses warm fluorescent light as the assumed scene
illumination for white balance.<wbr/></p>
<p>While the exact white balance transforms are up to the
camera device,<wbr/> they will approximately match the CIE
standard illuminant F4.<wbr/></p>
<p>The application's values for <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>
and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> are ignored.<wbr/>
For devices that support the MANUAL_<wbr/>POST_<wbr/>PROCESSING capability,<wbr/> the
values used by the camera device for the transform and gains
will be available in the capture result for this request.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">DAYLIGHT (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-white balance routine is disabled;
the camera device uses daylight light as the assumed scene
illumination for white balance.<wbr/></p>
<p>While the exact white balance transforms are up to the
camera device,<wbr/> they will approximately match the CIE
standard illuminant D65.<wbr/></p>
<p>The application's values for <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>
and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> are ignored.<wbr/>
For devices that support the MANUAL_<wbr/>POST_<wbr/>PROCESSING capability,<wbr/> the
values used by the camera device for the transform and gains
will be available in the capture result for this request.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CLOUDY_DAYLIGHT (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-white balance routine is disabled;
the camera device uses cloudy daylight light as the assumed scene
illumination for white balance.<wbr/></p>
<p>The application's values for <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>
and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> are ignored.<wbr/>
For devices that support the MANUAL_<wbr/>POST_<wbr/>PROCESSING capability,<wbr/> the
values used by the camera device for the transform and gains
will be available in the capture result for this request.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">TWILIGHT (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-white balance routine is disabled;
the camera device uses twilight light as the assumed scene
illumination for white balance.<wbr/></p>
<p>The application's values for <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>
and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> are ignored.<wbr/>
For devices that support the MANUAL_<wbr/>POST_<wbr/>PROCESSING capability,<wbr/> the
values used by the camera device for the transform and gains
will be available in the capture result for this request.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SHADE (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-white balance routine is disabled;
the camera device uses shade light as the assumed scene
illumination for white balance.<wbr/></p>
<p>The application's values for <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>
and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> are ignored.<wbr/>
For devices that support the MANUAL_<wbr/>POST_<wbr/>PROCESSING capability,<wbr/> the
values used by the camera device for the transform and gains
will be available in the capture result for this request.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether auto-white balance (AWB) is currently setting the color
transform fields,<wbr/> and what its illumination target
is.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.control.awbAvailableModes">android.<wbr/>control.<wbr/>awb<wbr/>Available<wbr/>Modes</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This control is only effective if <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> is AUTO.<wbr/></p>
<p>When set to the AUTO mode,<wbr/> the camera device's auto-white balance
routine is enabled,<wbr/> overriding the application's selected
<a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>,<wbr/> <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> and
<a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a>.<wbr/> Note that when <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a>
is OFF,<wbr/> the behavior of AWB is device dependent.<wbr/> It is recommended to
also set AWB mode to OFF or lock AWB by using <a href="#controls_android.control.awbLock">android.<wbr/>control.<wbr/>awb<wbr/>Lock</a> before
setting AE mode to OFF.<wbr/></p>
<p>When set to the OFF mode,<wbr/> the camera device's auto-white balance
routine is disabled.<wbr/> The application manually controls the white
balance by <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>,<wbr/> <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a>
and <a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a>.<wbr/></p>
<p>When set to any other modes,<wbr/> the camera device's auto-white
balance routine is disabled.<wbr/> The camera device uses each
particular illumination target for white balance
adjustment.<wbr/> The application's values for
<a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>,<wbr/>
<a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> and
<a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a> are ignored.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.awbRegions">
<td class="entry_name
" rowspan="5">
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>
<span class="entry_type_visibility"> [public as meteringRectangle]</span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of metering areas to use for auto-white-balance illuminant
estimation.<wbr/></p>
</td>
<td class="entry_units">
Pixel coordinates within android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size or
android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size depending on
distortion correction capability and mode
</td>
<td class="entry_range">
<p>Coordinates must be between <code>[(0,<wbr/>0),<wbr/> (width,<wbr/> height))</code> of
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a> or <a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>
depending on distortion correction capability and mode</p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Not available if <a href="#static_android.control.maxRegionsAwb">android.<wbr/>control.<wbr/>max<wbr/>Regions<wbr/>Awb</a> is 0.<wbr/>
Otherwise will always be present.<wbr/></p>
<p>The maximum number of regions supported by the device is determined by the value
of <a href="#static_android.control.maxRegionsAwb">android.<wbr/>control.<wbr/>max<wbr/>Regions<wbr/>Awb</a>.<wbr/></p>
<p>For devices not supporting <a href="#controls_android.distortionCorrection.mode">android.<wbr/>distortion<wbr/>Correction.<wbr/>mode</a> control,<wbr/> the coordinate
system always follows that of <a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>,<wbr/> with (0,<wbr/>0) being
the top-left pixel in the active pixel array,<wbr/> and
(<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>width - 1,<wbr/>
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>height - 1) being the bottom-right pixel in the
active pixel array.<wbr/></p>
<p>For devices supporting <a href="#controls_android.distortionCorrection.mode">android.<wbr/>distortion<wbr/>Correction.<wbr/>mode</a> control,<wbr/> the coordinate
system depends on the mode being set.<wbr/>
When the distortion correction mode is OFF,<wbr/> the coordinate system follows
<a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>,<wbr/> with
<code>(0,<wbr/> 0)</code> being the top-left pixel of the pre-correction active array,<wbr/> and
(<a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>.<wbr/>width - 1,<wbr/>
<a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>.<wbr/>height - 1) being the bottom-right
pixel in the pre-correction active pixel array.<wbr/>
When the distortion correction mode is not OFF,<wbr/> the coordinate system follows
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>,<wbr/> with
<code>(0,<wbr/> 0)</code> being the top-left pixel of the active array,<wbr/> and
(<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>width - 1,<wbr/>
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>height - 1) being the bottom-right pixel in the
active pixel array.<wbr/></p>
<p>The weight must range from 0 to 1000,<wbr/> and represents a weight
for every pixel in the area.<wbr/> This means that a large metering area
with the same weight as a smaller area will have more effect in
the metering result.<wbr/> Metering areas can partially overlap and the
camera device will add the weights in the overlap region.<wbr/></p>
<p>The weights are relative to weights of other white balance metering regions,<wbr/> so if
only one region is used,<wbr/> all non-zero weights will have the same effect.<wbr/> A region with
0 weight is ignored.<wbr/></p>
<p>If all regions have 0 weight,<wbr/> then no specific metering area needs to be used by the
camera device.<wbr/></p>
<p>If the metering region is outside the used <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> returned in
capture result metadata,<wbr/> the camera device will ignore the sections outside the crop
region and output only the intersection rectangle as the metering region in the result
metadata.<wbr/> If the region is entirely outside the crop region,<wbr/> it will be ignored and
not reported in the result metadata.<wbr/></p>
<p>When setting the AWB metering regions,<wbr/> the application must consider the additional
crop resulted from the aspect ratio differences between the preview stream and
<a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a>.<wbr/> For example,<wbr/> if the <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> is the full
active array size with 4:3 aspect ratio,<wbr/> and the preview stream is 16:9,<wbr/>
the boundary of AWB regions will be [0,<wbr/> y_<wbr/>crop] and
[active_<wbr/>width,<wbr/> active_<wbr/>height - 2 * y_<wbr/>crop] rather than [0,<wbr/> 0] and
[active_<wbr/>width,<wbr/> active_<wbr/>height],<wbr/> where y_<wbr/>crop is the additional crop due to aspect ratio
mismatch.<wbr/></p>
<p>Starting from API level 30,<wbr/> the coordinate system of activeArraySize or
preCorrectionActiveArraySize is used to represent post-zoomRatio field of view,<wbr/> not
pre-zoom field of view.<wbr/> This means that the same awbRegions values at different
<a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> represent different parts of the scene.<wbr/> The awbRegions
coordinates are relative to the activeArray/<wbr/>preCorrectionActiveArray representing the
zoomed field of view.<wbr/> If <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> is set to 1.<wbr/>0 (default),<wbr/> the same
awbRegions at different <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> still represent the same parts of
the scene as they do before.<wbr/> See <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> for details.<wbr/> Whether to use
activeArraySize or preCorrectionActiveArraySize still depends on distortion correction
mode.<wbr/></p>
<p>For camera devices with the
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR">Camera<wbr/>Metadata#REQUEST_<wbr/>AVAILABLE_<wbr/>CAPABILITIES_<wbr/>ULTRA_<wbr/>HIGH_<wbr/>RESOLUTION_<wbr/>SENSOR</a>
capability or devices where
<a href="https://developer.android.com/reference/CameraCharacteristics.html#getAvailableCaptureRequestKeys">CameraCharacteristics#getAvailableCaptureRequestKeys</a>
lists <a href="#controls_android.sensor.pixelMode">android.<wbr/>sensor.<wbr/>pixel<wbr/>Mode</a>,<wbr/>
<a href="#static_android.sensor.info.activeArraySizeMaximumResolution">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size<wbr/>Maximum<wbr/>Resolution</a> /<wbr/>
<a href="#static_android.sensor.info.preCorrectionActiveArraySizeMaximumResolution">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size<wbr/>Maximum<wbr/>Resolution</a> must be used as the
coordinate system for requests where <a href="#controls_android.sensor.pixelMode">android.<wbr/>sensor.<wbr/>pixel<wbr/>Mode</a> is set to
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION">Camera<wbr/>Metadata#SENSOR_<wbr/>PIXEL_<wbr/>MODE_<wbr/>MAXIMUM_<wbr/>RESOLUTION</a>.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>The HAL level representation of MeteringRectangle[] is a
int[5 * area_<wbr/>count].<wbr/>
Every five elements represent a metering region of
(xmin,<wbr/> ymin,<wbr/> xmax,<wbr/> ymax,<wbr/> weight).<wbr/>
The rectangle is defined to be inclusive on xmin and ymin,<wbr/> but
exclusive on xmax and ymax.<wbr/>
HAL must always report metering regions in the coordinate system of pre-correction
active array.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.captureIntent">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>capture<wbr/>Intent
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">CUSTOM (v3.2)</span>
<span class="entry_type_enum_notes"><p>The goal of this request doesn't fall into the other
categories.<wbr/> The camera device will default to preview-like
behavior.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">PREVIEW (v3.2)</span>
<span class="entry_type_enum_notes"><p>This request is for a preview-like use case.<wbr/></p>
<p>The precapture trigger may be used to start off a metering
w/<wbr/>flash sequence.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">STILL_CAPTURE (v3.2)</span>
<span class="entry_type_enum_notes"><p>This request is for a still capture-type
use case.<wbr/></p>
<p>If the flash unit is under automatic control,<wbr/> it may fire as needed.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">VIDEO_RECORD (v3.2)</span>
<span class="entry_type_enum_notes"><p>This request is for a video recording
use case.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">VIDEO_SNAPSHOT (v3.2)</span>
<span class="entry_type_enum_notes"><p>This request is for a video snapshot (still
image while recording video) use case.<wbr/></p>
<p>The camera device should take the highest-quality image
possible (given the other settings) without disrupting the
frame rate of video recording.<wbr/> </p></span>
</li>
<li>
<span class="entry_type_enum_name">ZERO_SHUTTER_LAG (v3.2)</span>
<span class="entry_type_enum_notes"><p>This request is for a ZSL usecase; the
application will stream full-resolution images and
reprocess one or several later for a final
capture.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">MANUAL (v3.2)</span>
<span class="entry_type_enum_notes"><p>This request is for manual capture use case where
the applications want to directly control the capture parameters.<wbr/></p>
<p>For example,<wbr/> the application may wish to manually control
<a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a>,<wbr/> <a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a>,<wbr/> etc.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">MOTION_TRACKING (v3.3)</span>
<span class="entry_type_enum_notes"><p>This request is for a motion tracking use case,<wbr/> where
the application will use camera and inertial sensor data to
locate and track objects in the world.<wbr/></p>
<p>The camera device auto-exposure routine will limit the exposure time
of the camera to no more than 20 milliseconds,<wbr/> to minimize motion blur.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Information to the camera device 3A (auto-exposure,<wbr/>
auto-focus,<wbr/> auto-white balance) routines about the purpose
of this capture,<wbr/> to help the camera device to decide optimal 3A
strategy.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This control (except for MANUAL) is only effective if
<code><a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> != OFF</code> and any 3A routine is active.<wbr/></p>
<p>All intents are supported by all devices,<wbr/> except that:</p>
<ul>
<li>ZERO_<wbr/>SHUTTER_<wbr/>LAG will be supported if <a href="#static_android.request.availableCapabilities">android.<wbr/>request.<wbr/>available<wbr/>Capabilities</a> contains
PRIVATE_<wbr/>REPROCESSING or YUV_<wbr/>REPROCESSING.<wbr/></li>
<li>MANUAL will be supported if <a href="#static_android.request.availableCapabilities">android.<wbr/>request.<wbr/>available<wbr/>Capabilities</a> contains
MANUAL_<wbr/>SENSOR.<wbr/></li>
<li>MOTION_<wbr/>TRACKING will be supported if <a href="#static_android.request.availableCapabilities">android.<wbr/>request.<wbr/>available<wbr/>Capabilities</a> contains
MOTION_<wbr/>TRACKING.<wbr/></li>
</ul>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.effectMode">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>effect<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>No color effect will be applied.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">MONO (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>A "monocolor" effect where the image is mapped into
a single color.<wbr/></p>
<p>This will typically be grayscale.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">NEGATIVE (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>A "photo-negative" effect where the image's colors
are inverted.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SOLARIZE (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>A "solarisation" effect (Sabattier effect) where the
image is wholly or partially reversed in
tone.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SEPIA (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>A "sepia" effect where the image is mapped into warm
gray,<wbr/> red,<wbr/> and brown tones.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">POSTERIZE (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>A "posterization" effect where the image uses
discrete regions of tone rather than a continuous
gradient of tones.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">WHITEBOARD (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>A "whiteboard" effect where the image is typically displayed
as regions of white,<wbr/> with black or grey details.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">BLACKBOARD (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>A "blackboard" effect where the image is typically displayed
as regions of black,<wbr/> with white or grey details.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">AQUA (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>An "aqua" effect where a blue hue is added to the image.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>A special color effect to apply.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.control.availableEffects">android.<wbr/>control.<wbr/>available<wbr/>Effects</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When this mode is set,<wbr/> a color effect will be applied
to images produced by the camera device.<wbr/> The interpretation
and implementation of these color effects is left to the
implementor of the camera device,<wbr/> and should not be
depended on to be consistent (or present) across all
devices.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.mode">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>Full application control of pipeline.<wbr/></p>
<p>All control by the device's metering and focusing (3A)
routines is disabled,<wbr/> and no other settings in
android.<wbr/>control.<wbr/>* have any effect,<wbr/> except that
<a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> may be used by the camera
device to select post-processing values for processing
blocks that do not allow for manual control,<wbr/> or are not
exposed by the camera API.<wbr/></p>
<p>However,<wbr/> the camera device's 3A routines may continue to
collect statistics and update their internal state so that
when control is switched to AUTO mode,<wbr/> good control values
can be immediately applied.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">AUTO (v3.2)</span>
<span class="entry_type_enum_notes"><p>Use settings for each individual 3A routine.<wbr/></p>
<p>Manual control of capture parameters is disabled.<wbr/> All
controls in android.<wbr/>control.<wbr/>* besides sceneMode take
effect.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">USE_SCENE_MODE (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Use a specific scene mode.<wbr/></p>
<p>Enabling this disables control.<wbr/>aeMode,<wbr/> control.<wbr/>awbMode and
control.<wbr/>afMode controls; the camera device will 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 scene mode is supported (i.<wbr/>e.<wbr/>
<a href="#static_android.control.availableSceneModes">android.<wbr/>control.<wbr/>available<wbr/>Scene<wbr/>Modes</a>
contain some modes other than DISABLED).<wbr/></p>
<p>For extended scene modes such as BOKEH,<wbr/> please use USE_<wbr/>EXTENDED_<wbr/>SCENE_<wbr/>MODE instead.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">OFF_KEEP_STATE (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Same as OFF mode,<wbr/> except that this capture will not be
used by camera device background auto-exposure,<wbr/> auto-white balance and
auto-focus algorithms (3A) to update their statistics.<wbr/></p>
<p>Specifically,<wbr/> the 3A routines are locked to the last
values set from a request with AUTO,<wbr/> OFF,<wbr/> or
USE_<wbr/>SCENE_<wbr/>MODE,<wbr/> and any statistics or state updates
collected from manual captures with OFF_<wbr/>KEEP_<wbr/>STATE will be
discarded by the camera device.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">USE_EXTENDED_SCENE_MODE (v3.5)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Use a specific extended scene mode.<wbr/></p>
<p>When extended scene mode is on,<wbr/> the camera device may override certain control
parameters,<wbr/> such as targetFpsRange,<wbr/> AE,<wbr/> AWB,<wbr/> and AF modes,<wbr/> to achieve best power and
quality tradeoffs.<wbr/> Only the mandatory stream combinations of LIMITED hardware level
are guaranteed.<wbr/></p>
<p>This setting can only be used if extended scene mode is supported (i.<wbr/>e.<wbr/>
android.<wbr/>control.<wbr/>available<wbr/>Extended<wbr/>Scene<wbr/>Modes
contains some modes other than DISABLED).<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Overall mode of 3A (auto-exposure,<wbr/> auto-white-balance,<wbr/> auto-focus) control
routines.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.control.availableModes">android.<wbr/>control.<wbr/>available<wbr/>Modes</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This is a top-level 3A control switch.<wbr/> When set to OFF,<wbr/> all 3A control
by the camera device is disabled.<wbr/> The application must set the fields for
capture parameters itself.<wbr/></p>
<p>When set to AUTO,<wbr/> the individual algorithm controls in
android.<wbr/>control.<wbr/>* are in effect,<wbr/> such as <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a>.<wbr/></p>
<p>When set to USE_<wbr/>SCENE_<wbr/>MODE or USE_<wbr/>EXTENDED_<wbr/>SCENE_<wbr/>MODE,<wbr/> the individual controls in
android.<wbr/>control.<wbr/>* are mostly disabled,<wbr/> and the camera device
implements one of the scene mode or extended scene mode settings (such as ACTION,<wbr/>
SUNSET,<wbr/> PARTY,<wbr/> or BOKEH) as it wishes.<wbr/> The camera device scene mode
3A settings are provided by <a href="https://developer.android.com/reference/android/hardware/camera2/CaptureResult.html">capture results</a>.<wbr/></p>
<p>When set to OFF_<wbr/>KEEP_<wbr/>STATE,<wbr/> it is similar to OFF mode,<wbr/> the only difference
is that this frame will not be used by camera device background 3A statistics
update,<wbr/> as if this frame is never captured.<wbr/> This mode can be used in the scenario
where the application doesn't want a 3A manual control capture to affect
the subsequent auto 3A capture results.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.sceneMode">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>scene<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">DISABLED (v3.2)</span>
<span class="entry_type_enum_value">0</span>
<span class="entry_type_enum_notes"><p>Indicates that no scene modes are set for a given capture request.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">FACE_PRIORITY (v3.2)</span>
<span class="entry_type_enum_notes"><p>If face detection support exists,<wbr/> use face
detection data for auto-focus,<wbr/> auto-white balance,<wbr/> and
auto-exposure routines.<wbr/></p>
<p>If face detection statistics are disabled
(i.<wbr/>e.<wbr/> <a href="#controls_android.statistics.faceDetectMode">android.<wbr/>statistics.<wbr/>face<wbr/>Detect<wbr/>Mode</a> is set to OFF),<wbr/>
this should still operate correctly (but will not return
face detection statistics to the framework).<wbr/></p>
<p>Unlike the other scene modes,<wbr/> <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a>,<wbr/>
<a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a>,<wbr/> and <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a>
remain active when FACE_<wbr/>PRIORITY is set.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ACTION (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for photos of quickly moving objects.<wbr/></p>
<p>Similar to SPORTS.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">PORTRAIT (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for still photos of people.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">LANDSCAPE (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for photos of distant macroscopic objects.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">NIGHT (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for low-light settings.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">NIGHT_PORTRAIT (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for still photos of people in low-light
settings.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">THEATRE (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for dim,<wbr/> indoor settings where flash must
remain off.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">BEACH (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for bright,<wbr/> outdoor beach settings.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SNOW (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for bright,<wbr/> outdoor settings containing snow.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SUNSET (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for scenes of the setting sun.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">STEADYPHOTO (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized to avoid blurry photos due to small amounts of
device motion (for example: due to hand shake).<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">FIREWORKS (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for nighttime photos of fireworks.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SPORTS (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for photos of quickly moving people.<wbr/></p>
<p>Similar to ACTION.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">PARTY (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for dim,<wbr/> indoor settings with multiple moving
people.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CANDLELIGHT (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for dim settings where the main light source
is a candle.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">BARCODE (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for accurately capturing a photo of barcode
for use by camera applications that wish to read the
barcode value.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">HIGH_SPEED_VIDEO (v3.2)</span>
<span class="entry_type_enum_deprecated">[deprecated]</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_hidden">[java_public]</span>
<span class="entry_type_enum_notes"><p>This is deprecated,<wbr/> please use <a href="https://developer.android.com/reference/android/hardware/camera2/CameraDevice.html#createConstrainedHighSpeedCaptureSession">CameraDevice#createConstrainedHighSpeedCaptureSession</a>
and <a href="https://developer.android.com/reference/android/hardware/camera2/CameraConstrainedHighSpeedCaptureSession.html#createHighSpeedRequestList">CameraConstrainedHighSpeedCaptureSession#createHighSpeedRequestList</a>
for high speed video recording.<wbr/></p>
<p>Optimized for high speed video recording (frame rate &gt;=60fps) use case.<wbr/></p>
<p>The supported high speed video sizes and fps ranges are specified in
<a href="#static_android.control.availableHighSpeedVideoConfigurations">android.<wbr/>control.<wbr/>available<wbr/>High<wbr/>Speed<wbr/>Video<wbr/>Configurations</a>.<wbr/> To get desired
output frame rates,<wbr/> the application is only allowed to select video size
and fps range combinations listed in this static metadata.<wbr/> The fps range
can be control via <a href="#controls_android.control.aeTargetFpsRange">android.<wbr/>control.<wbr/>ae<wbr/>Target<wbr/>Fps<wbr/>Range</a>.<wbr/></p>
<p>In this mode,<wbr/> the camera device will override aeMode,<wbr/> awbMode,<wbr/> and afMode to
ON,<wbr/> ON,<wbr/> and CONTINUOUS_<wbr/>VIDEO,<wbr/> respectively.<wbr/> All post-processing block mode
controls will be overridden to be FAST.<wbr/> Therefore,<wbr/> no manual control of capture
and post-processing parameters is possible.<wbr/> All other controls operate the
same as when <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> == AUTO.<wbr/> This means that all other
android.<wbr/>control.<wbr/>* fields continue to work,<wbr/> such as</p>
<ul>
<li><a href="#controls_android.control.aeTargetFpsRange">android.<wbr/>control.<wbr/>ae<wbr/>Target<wbr/>Fps<wbr/>Range</a></li>
<li><a href="#controls_android.control.aeExposureCompensation">android.<wbr/>control.<wbr/>ae<wbr/>Exposure<wbr/>Compensation</a></li>
<li><a href="#controls_android.control.aeLock">android.<wbr/>control.<wbr/>ae<wbr/>Lock</a></li>
<li><a href="#controls_android.control.awbLock">android.<wbr/>control.<wbr/>awb<wbr/>Lock</a></li>
<li><a href="#controls_android.control.effectMode">android.<wbr/>control.<wbr/>effect<wbr/>Mode</a></li>
<li><a href="#controls_android.control.aeRegions">android.<wbr/>control.<wbr/>ae<wbr/>Regions</a></li>
<li><a href="#controls_android.control.afRegions">android.<wbr/>control.<wbr/>af<wbr/>Regions</a></li>
<li><a href="#controls_android.control.awbRegions">android.<wbr/>control.<wbr/>awb<wbr/>Regions</a></li>
<li><a href="#controls_android.control.afTrigger">android.<wbr/>control.<wbr/>af<wbr/>Trigger</a></li>
<li><a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a></li>
<li><a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a></li>
</ul>
<p>Outside of android.<wbr/>control.<wbr/>*,<wbr/> the following controls will work:</p>
<ul>
<li><a href="#controls_android.flash.mode">android.<wbr/>flash.<wbr/>mode</a> (automatic flash for still capture will not work since aeMode is ON)</li>
<li><a href="#controls_android.lens.opticalStabilizationMode">android.<wbr/>lens.<wbr/>optical<wbr/>Stabilization<wbr/>Mode</a> (if it is supported)</li>
<li><a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a></li>
<li><a href="#controls_android.statistics.faceDetectMode">android.<wbr/>statistics.<wbr/>face<wbr/>Detect<wbr/>Mode</a></li>
</ul>
<p>For high speed recording use case,<wbr/> the actual maximum supported frame rate may
be lower than what camera can output,<wbr/> depending on the destination Surfaces for
the image data.<wbr/> For example,<wbr/> if the destination surface is from video encoder,<wbr/>
the application need check if the video encoder is capable of supporting the
high frame rate for a given video size,<wbr/> or it will end up with lower recording
frame rate.<wbr/> If the destination surface is from preview window,<wbr/> the preview frame
rate will be bounded by the screen refresh rate.<wbr/></p>
<p>The camera device will only support up to 2 output high speed streams
(processed non-stalling format defined in <a href="#static_android.request.maxNumOutputStreams">android.<wbr/>request.<wbr/>max<wbr/>Num<wbr/>Output<wbr/>Streams</a>)
in this mode.<wbr/> This control will be effective only if all of below conditions are true:</p>
<ul>
<li>The application created no more than maxNumHighSpeedStreams processed non-stalling
format output streams,<wbr/> where maxNumHighSpeedStreams is calculated as
min(2,<wbr/> <a href="#static_android.request.maxNumOutputStreams">android.<wbr/>request.<wbr/>max<wbr/>Num<wbr/>Output<wbr/>Streams</a>[Processed (but not-stalling)]).<wbr/></li>
<li>The stream sizes are selected from the sizes reported by
<a href="#static_android.control.availableHighSpeedVideoConfigurations">android.<wbr/>control.<wbr/>available<wbr/>High<wbr/>Speed<wbr/>Video<wbr/>Configurations</a>.<wbr/></li>
<li>No processed non-stalling or raw streams are configured.<wbr/></li>
</ul>
<p>When above conditions are NOT satisfied,<wbr/> the controls of this mode and
<a href="#controls_android.control.aeTargetFpsRange">android.<wbr/>control.<wbr/>ae<wbr/>Target<wbr/>Fps<wbr/>Range</a> will be ignored by the camera device,<wbr/>
the camera device will fall back to <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> <code>==</code> AUTO,<wbr/>
and the returned capture result metadata will give the fps range chosen
by the camera device.<wbr/></p>
<p>Switching into or out of this mode may trigger some camera ISP/<wbr/>sensor
reconfigurations,<wbr/> which may introduce extra latency.<wbr/> It is recommended that
the application avoids unnecessary scene mode switch as much as possible.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">HDR (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Turn on a device-specific high dynamic range (HDR) mode.<wbr/></p>
<p>In this scene mode,<wbr/> the camera device captures images
that keep a larger range of scene illumination levels
visible in the final image.<wbr/> For example,<wbr/> when taking a
picture of a object in front of a bright window,<wbr/> both
the object and the scene through the window may be
visible when using HDR mode,<wbr/> while in normal AUTO mode,<wbr/>
one or the other may be poorly exposed.<wbr/> As a tradeoff,<wbr/>
HDR mode generally takes much longer to capture a single
image,<wbr/> has no user control,<wbr/> and may have other artifacts
depending on the HDR method used.<wbr/></p>
<p>Therefore,<wbr/> HDR captures operate at a much slower rate
than regular captures.<wbr/></p>
<p>In this mode,<wbr/> on LIMITED or FULL devices,<wbr/> when a request
is made with a <a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> of
STILL_<wbr/>CAPTURE,<wbr/> the camera device will capture an image
using a high dynamic range capture technique.<wbr/> On LEGACY
devices,<wbr/> captures that target a JPEG-format output will
be captured with HDR,<wbr/> and the capture intent is not
relevant.<wbr/></p>
<p>The HDR capture may involve the device capturing a burst
of images internally and combining them into one,<wbr/> or it
may involve the device using specialized high dynamic
range capture hardware.<wbr/> In all cases,<wbr/> a single image is
produced in response to a capture request submitted
while in HDR mode.<wbr/></p>
<p>Since substantial post-processing is generally needed to
produce an HDR image,<wbr/> only YUV,<wbr/> PRIVATE,<wbr/> and JPEG
outputs are supported for LIMITED/<wbr/>FULL device HDR
captures,<wbr/> and only JPEG outputs are supported for LEGACY
HDR captures.<wbr/> Using a RAW output for HDR capture is not
supported.<wbr/></p>
<p>Some devices may also support always-on HDR,<wbr/> which
applies HDR processing at full frame rate.<wbr/> For these
devices,<wbr/> intents other than STILL_<wbr/>CAPTURE will also
produce an HDR output with no frame rate impact compared
to normal operation,<wbr/> though the quality may be lower
than for STILL_<wbr/>CAPTURE intents.<wbr/></p>
<p>If SCENE_<wbr/>MODE_<wbr/>HDR is used with unsupported output types
or capture intents,<wbr/> the images captured will be as if
the SCENE_<wbr/>MODE was not enabled at all.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">FACE_PRIORITY_LOW_LIGHT (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_hidden">[hidden]</span>
<span class="entry_type_enum_notes"><p>Same as FACE_<wbr/>PRIORITY scene mode,<wbr/> except that the camera
device will choose higher sensitivity values (<a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a>)
under low light conditions.<wbr/></p>
<p>The camera device may be tuned to expose the images in a reduced
sensitivity range to produce the best quality images.<wbr/> For example,<wbr/>
if the <a href="#static_android.sensor.info.sensitivityRange">android.<wbr/>sensor.<wbr/>info.<wbr/>sensitivity<wbr/>Range</a> gives range of [100,<wbr/> 1600],<wbr/>
the camera device auto-exposure routine tuning process may limit the actual
exposure sensitivity range to [100,<wbr/> 1200] to ensure that the noise level isn't
excessive in order to preserve the image quality.<wbr/> Under this situation,<wbr/> the image under
low light may be under-exposed when the sensor max exposure time (bounded by the
<a href="#controls_android.control.aeTargetFpsRange">android.<wbr/>control.<wbr/>ae<wbr/>Target<wbr/>Fps<wbr/>Range</a> when <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> is one of the
ON_<wbr/>* modes) and effective max sensitivity are reached.<wbr/> This scene mode allows the
camera device auto-exposure routine to increase the sensitivity up to the max
sensitivity specified by <a href="#static_android.sensor.info.sensitivityRange">android.<wbr/>sensor.<wbr/>info.<wbr/>sensitivity<wbr/>Range</a> when the scene is too
dark and the max exposure time is reached.<wbr/> The captured images may be noisier
compared with the images captured in normal FACE_<wbr/>PRIORITY mode; therefore,<wbr/> it is
recommended that the application only use this scene mode when it is capable of
reducing the noise level of the captured images.<wbr/></p>
<p>Unlike the other scene modes,<wbr/> <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a>,<wbr/>
<a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a>,<wbr/> and <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a>
remain active when FACE_<wbr/>PRIORITY_<wbr/>LOW_<wbr/>LIGHT is set.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">DEVICE_CUSTOM_START (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_hidden">[hidden]</span>
<span class="entry_type_enum_value">100</span>
<span class="entry_type_enum_notes"><p>Scene mode values within the range of
<code>[DEVICE_<wbr/>CUSTOM_<wbr/>START,<wbr/> DEVICE_<wbr/>CUSTOM_<wbr/>END]</code> are reserved for device specific
customized scene modes.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">DEVICE_CUSTOM_END (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_hidden">[hidden]</span>
<span class="entry_type_enum_value">127</span>
<span class="entry_type_enum_notes"><p>Scene mode values within the range of
<code>[DEVICE_<wbr/>CUSTOM_<wbr/>START,<wbr/> DEVICE_<wbr/>CUSTOM_<wbr/>END]</code> are reserved for device specific
customized scene modes.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Control for which scene mode is currently active.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.control.availableSceneModes">android.<wbr/>control.<wbr/>available<wbr/>Scene<wbr/>Modes</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Scene modes are custom camera modes optimized for a certain set of conditions and
capture settings.<wbr/></p>
<p>This is the mode that that is active when
<code><a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> == USE_<wbr/>SCENE_<wbr/>MODE</code>.<wbr/> Aside from FACE_<wbr/>PRIORITY,<wbr/> these modes will
disable <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a>,<wbr/> <a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a>,<wbr/> and <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a>
while in use.<wbr/></p>
<p>The interpretation and implementation of these scene modes is left
to the implementor of the camera device.<wbr/> Their behavior will not be
consistent across all devices,<wbr/> and any given device may only implement
a subset of these modes.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>HAL implementations that include scene modes are expected to provide
the per-scene settings to use for <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a>,<wbr/>
<a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a>,<wbr/> and <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a> in
<a href="#static_android.control.sceneModeOverrides">android.<wbr/>control.<wbr/>scene<wbr/>Mode<wbr/>Overrides</a>.<wbr/></p>
<p>For HIGH_<wbr/>SPEED_<wbr/>VIDEO mode,<wbr/> if it is included in <a href="#static_android.control.availableSceneModes">android.<wbr/>control.<wbr/>available<wbr/>Scene<wbr/>Modes</a>,<wbr/> the
HAL must list supported video size and fps range in
<a href="#static_android.control.availableHighSpeedVideoConfigurations">android.<wbr/>control.<wbr/>available<wbr/>High<wbr/>Speed<wbr/>Video<wbr/>Configurations</a>.<wbr/> For a given size,<wbr/> e.<wbr/>g.<wbr/> 1280x720,<wbr/>
if the HAL has two different sensor configurations for normal streaming mode and high
speed streaming,<wbr/> when this scene mode is set/<wbr/>reset in a sequence of capture requests,<wbr/> the
HAL may have to switch between different sensor modes.<wbr/> This mode is deprecated in legacy
HAL3.<wbr/>3,<wbr/> to support high speed video recording,<wbr/> please implement
<a href="#static_android.control.availableHighSpeedVideoConfigurations">android.<wbr/>control.<wbr/>available<wbr/>High<wbr/>Speed<wbr/>Video<wbr/>Configurations</a> and CONSTRAINED_<wbr/>HIGH_<wbr/>SPEED_<wbr/>VIDEO
capability defined in <a href="#static_android.request.availableCapabilities">android.<wbr/>request.<wbr/>available<wbr/>Capabilities</a>.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.videoStabilizationMode">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>video<wbr/>Stabilization<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>Video stabilization is disabled.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ON (v3.2)</span>
<span class="entry_type_enum_notes"><p>Video stabilization is enabled.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">PREVIEW_STABILIZATION (v3.8)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Preview stabilization,<wbr/> where the preview in addition to all other non-RAW streams are
stabilized with the same quality of stabilization,<wbr/> is enabled.<wbr/> This mode aims to give
clients a 'what you see is what you get' effect.<wbr/> In this mode,<wbr/> the FoV reduction will
be a maximum of 20 % both horizontally and vertically
(10% from left,<wbr/> right,<wbr/> top,<wbr/> bottom) for the given zoom ratio /<wbr/> crop region.<wbr/>
The resultant FoV will also be the same across all processed streams
(that have the same aspect ratio).<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether video stabilization is
active.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Video stabilization automatically warps images from
the camera in order to stabilize motion between consecutive frames.<wbr/></p>
<p>If enabled,<wbr/> video stabilization can modify the
<a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> to keep the video stream stabilized.<wbr/></p>
<p>Switching between different video stabilization modes may take several
frames to initialize,<wbr/> the camera device will report the current mode
in capture result metadata.<wbr/> For example,<wbr/> When "ON" mode is requested,<wbr/>
the video stabilization modes in the first several capture results may
still be "OFF",<wbr/> and it will become "ON" when the initialization is
done.<wbr/></p>
<p>In addition,<wbr/> not all recording sizes or frame rates may be supported for
stabilization by a device that reports stabilization support.<wbr/> It is guaranteed
that an output targeting a MediaRecorder or MediaCodec will be stabilized if
the recording resolution is less than or equal to 1920 x 1080 (width less than
or equal to 1920,<wbr/> height less than or equal to 1080),<wbr/> and the recording
frame rate is less than or equal to 30fps.<wbr/> At other sizes,<wbr/> the CaptureResult
<a href="#controls_android.control.videoStabilizationMode">android.<wbr/>control.<wbr/>video<wbr/>Stabilization<wbr/>Mode</a> field will return
OFF if the recording output is not stabilized,<wbr/> or if there are no output
Surface types that can be stabilized.<wbr/></p>
<p>The application is strongly recommended to call
<a href="https://developer.android.com/reference/android/hardware/camera2/params/SessionConfiguration.html#setSessionParameters">SessionConfiguration#setSessionParameters</a>
with the desired video stabilization mode before creating the capture session.<wbr/>
Video stabilization mode is a session parameter on many devices.<wbr/> Specifying
it at session creation time helps avoid reconfiguration delay caused by difference
between the default value and the first CaptureRequest.<wbr/></p>
<p>If a camera device supports both this mode and OIS
(<a href="#controls_android.lens.opticalStabilizationMode">android.<wbr/>lens.<wbr/>optical<wbr/>Stabilization<wbr/>Mode</a>),<wbr/> turning both modes on may
produce undesirable interaction,<wbr/> so it is recommended not to enable
both at the same time.<wbr/></p>
<p>If video stabilization is set to "PREVIEW_<wbr/>STABILIZATION",<wbr/>
<a href="#controls_android.lens.opticalStabilizationMode">android.<wbr/>lens.<wbr/>optical<wbr/>Stabilization<wbr/>Mode</a> is overridden.<wbr/> The camera sub-system may choose
to turn on hardware based image stabilization in addition to software based stabilization
if it deems that appropriate.<wbr/>
This key may be a part of the available session keys,<wbr/> which camera clients may
query via
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#getAvailableSessionKeys">CameraCharacteristics#getAvailableSessionKeys</a>.<wbr/>
If this is the case,<wbr/> changing this key over the life-time of a capture session may
cause delays /<wbr/> glitches.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When this key is set to "PREVIEW_<wbr/>STABILIZATION",<wbr/>
for non-stalling buffers returned without errors,<wbr/> the time interval between notify readout
timestamp and when buffers are returned to the camera framework,<wbr/> must be no more than 1
extra frame interval,<wbr/> relative to the case where this key is set to "OFF".<wbr/></p>
<p>This is in order for look-ahead time period to be short enough
for preview to match video recording for real-time usage.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.postRawSensitivityBoost">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>post<wbr/>Raw<wbr/>Sensitivity<wbr/>Boost
</td>
<td class="entry_type">
<span class="entry_type_name">int32</span>
<span class="entry_type_visibility"> [public]</span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The amount of additional sensitivity boost applied to output images
after RAW sensor data is captured.<wbr/></p>
</td>
<td class="entry_units">
ISO arithmetic units,<wbr/> the same as android.<wbr/>sensor.<wbr/>sensitivity
</td>
<td class="entry_range">
<p><a href="#static_android.control.postRawSensitivityBoostRange">android.<wbr/>control.<wbr/>post<wbr/>Raw<wbr/>Sensitivity<wbr/>Boost<wbr/>Range</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Some camera devices support additional digital sensitivity boosting in the
camera processing pipeline after sensor RAW image is captured.<wbr/>
Such a boost will be applied to YUV/<wbr/>JPEG format output images but will not
have effect on RAW output formats like RAW_<wbr/>SENSOR,<wbr/> RAW10,<wbr/> RAW12 or RAW_<wbr/>OPAQUE.<wbr/></p>
<p>This key will be <code>null</code> for devices that do not support any RAW format
outputs.<wbr/> For devices that do support RAW format outputs,<wbr/> this key will always
present,<wbr/> and if a device does not support post RAW sensitivity boost,<wbr/> it will
list <code>100</code> in this key.<wbr/></p>
<p>If the camera device cannot apply the exact boost requested,<wbr/> it will reduce the
boost to the nearest supported value.<wbr/>
The final boost value used will be available in the output capture result.<wbr/></p>
<p>For devices that support post RAW sensitivity boost,<wbr/> the YUV/<wbr/>JPEG output images
of such device will have the total sensitivity of
<code><a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a> * <a href="#controls_android.control.postRawSensitivityBoost">android.<wbr/>control.<wbr/>post<wbr/>Raw<wbr/>Sensitivity<wbr/>Boost</a> /<wbr/> 100</code>
The sensitivity of RAW format images will always be <code><a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a></code></p>
<p>This control is only effective if <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> or <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> is set to
OFF; otherwise the auto-exposure algorithm will override this value.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.enableZsl">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>enable<wbr/>Zsl
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public as boolean]</span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">FALSE (v3.2)</span>
<span class="entry_type_enum_notes"><p>Requests with <a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> == STILL_<wbr/>CAPTURE must be captured
after previous requests.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">TRUE (v3.2)</span>
<span class="entry_type_enum_notes"><p>Requests with <a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> == STILL_<wbr/>CAPTURE may or may not be
captured before previous requests.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Allow camera device to enable zero-shutter-lag mode for requests with
<a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> == STILL_<wbr/>CAPTURE.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>If enableZsl is <code>true</code>,<wbr/> the camera device may enable zero-shutter-lag mode for requests with
STILL_<wbr/>CAPTURE capture intent.<wbr/> The camera device may use images captured in the past to
produce output images for a zero-shutter-lag request.<wbr/> The result metadata including the
<a href="#dynamic_android.sensor.timestamp">android.<wbr/>sensor.<wbr/>timestamp</a> reflects the source frames used to produce output images.<wbr/>
Therefore,<wbr/> the contents of the output images and the result metadata may be out of order
compared to previous regular requests.<wbr/> enableZsl does not affect requests with other
capture intents.<wbr/></p>
<p>For example,<wbr/> when requests are submitted in the following order:
Request A: enableZsl is ON,<wbr/> <a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> is PREVIEW
Request B: enableZsl is ON,<wbr/> <a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> is STILL_<wbr/>CAPTURE</p>
<p>The output images for request B may have contents captured before the output images for
request A,<wbr/> and the result metadata for request B may be older than the result metadata for
request A.<wbr/></p>
<p>Note that when enableZsl is <code>true</code>,<wbr/> it is not guaranteed to get output images captured in
the past for requests with STILL_<wbr/>CAPTURE capture intent.<wbr/></p>
<p>For applications targeting SDK versions O and newer,<wbr/> the value of enableZsl in
TEMPLATE_<wbr/>STILL_<wbr/>CAPTURE template may be <code>true</code>.<wbr/> The value in other templates is always
<code>false</code> if present.<wbr/></p>
<p>For applications targeting SDK versions older than O,<wbr/> the value of enableZsl in all
capture templates is always <code>false</code> if present.<wbr/></p>
<p>For application-operated ZSL,<wbr/> use CAMERA3_<wbr/>TEMPLATE_<wbr/>ZERO_<wbr/>SHUTTER_<wbr/>LAG template.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>It is valid for HAL to produce regular output images for requests with STILL_<wbr/>CAPTURE
capture intent.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.extendedSceneMode">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>extended<wbr/>Scene<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">DISABLED (v3.5)</span>
<span class="entry_type_enum_value">0</span>
<span class="entry_type_enum_notes"><p>Extended scene mode is disabled.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">BOKEH_STILL_CAPTURE (v3.5)</span>
<span class="entry_type_enum_notes"><p>High quality bokeh mode is enabled for all non-raw streams (including YUV,<wbr/>
JPEG,<wbr/> and IMPLEMENTATION_<wbr/>DEFINED) when capture intent is STILL_<wbr/>CAPTURE.<wbr/> Due to the
extra image processing,<wbr/> this mode may introduce additional stall to non-raw streams.<wbr/>
This mode should be used in high quality still capture use case.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">BOKEH_CONTINUOUS (v3.5)</span>
<span class="entry_type_enum_notes"><p>Bokeh effect must not slow down capture rate relative to sensor raw output,<wbr/>
and the effect is applied to all processed streams no larger than the maximum
streaming dimension.<wbr/> This mode should be used if performance and power are a
priority,<wbr/> such as video recording.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">VENDOR_START (v3.5)</span>
<span class="entry_type_enum_hidden">[hidden]</span>
<span class="entry_type_enum_value">0x40</span>
<span class="entry_type_enum_notes"><p>Vendor defined extended scene modes.<wbr/> These depend on vendor implementation.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether extended scene mode is enabled for a particular capture request.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>5</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>With bokeh mode,<wbr/> the camera device may blur out the parts of scene that are not in
focus,<wbr/> creating a bokeh (or shallow depth of field) effect for people or objects.<wbr/></p>
<p>When set to BOKEH_<wbr/>STILL_<wbr/>CAPTURE mode with STILL_<wbr/>CAPTURE capture intent,<wbr/> due to the extra
processing needed for high quality bokeh effect,<wbr/> the stall may be longer than when
capture intent is not STILL_<wbr/>CAPTURE.<wbr/></p>
<p>When set to BOKEH_<wbr/>STILL_<wbr/>CAPTURE mode with PREVIEW capture intent,<wbr/></p>
<ul>
<li>If the camera device has BURST_<wbr/>CAPTURE capability,<wbr/> the frame rate requirement of
BURST_<wbr/>CAPTURE must still be met.<wbr/></li>
<li>All streams not larger than the maximum streaming dimension for BOKEH_<wbr/>STILL_<wbr/>CAPTURE mode
(queried via <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_CAPABILITIES">Camera<wbr/>Characteristics#CONTROL_<wbr/>AVAILABLE_<wbr/>EXTENDED_<wbr/>SCENE_<wbr/>MODE_<wbr/>CAPABILITIES</a>)
will have preview bokeh effect applied.<wbr/></li>
</ul>
<p>When set to BOKEH_<wbr/>CONTINUOUS mode,<wbr/> configured streams dimension should not exceed this mode's
maximum streaming dimension in order to have bokeh effect applied.<wbr/> Bokeh effect may not
be available for streams larger than the maximum streaming dimension.<wbr/></p>
<p>Switching between different extended scene modes may involve reconfiguration of the camera
pipeline,<wbr/> resulting in long latency.<wbr/> The application should check this key against the
available session keys queried via
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#getAvailableSessionKeys">CameraCharacteristics#getAvailableSessionKeys</a>.<wbr/></p>
<p>For a logical multi-camera,<wbr/> bokeh may be implemented by stereo vision from sub-cameras
with different field of view.<wbr/> As a result,<wbr/> when bokeh mode is enabled,<wbr/> the camera device
may override <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> or <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>,<wbr/> and the field of
view may be smaller than when bokeh mode is off.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.zoomRatio">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>zoom<wbr/>Ratio
</td>
<td class="entry_type">
<span class="entry_type_name">float</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[limited] </span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The desired zoom ratio</p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.control.zoomRatioRange">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio<wbr/>Range</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>5</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Instead of using <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> for zoom,<wbr/> the application can now choose to
use this tag to specify the desired zoom level.<wbr/></p>
<p>By using this control,<wbr/> the application gains a simpler way to control zoom,<wbr/> which can
be a combination of optical and digital zoom.<wbr/> For example,<wbr/> a multi-camera system may
contain more than one lens with different focal lengths,<wbr/> and the user can use optical
zoom by switching between lenses.<wbr/> Using zoomRatio has benefits in the scenarios below:</p>
<ul>
<li>Zooming in from a wide-angle lens to a telephoto lens: A floating-point ratio provides
better precision compared to an integer value of <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a>.<wbr/></li>
<li>Zooming out from a wide lens to an ultrawide lens: zoomRatio supports zoom-out whereas
<a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> doesn't.<wbr/></li>
</ul>
<p>To illustrate,<wbr/> here are several scenarios of different zoom ratios,<wbr/> crop regions,<wbr/>
and output streams,<wbr/> for a hypothetical camera device with an active array of size
<code>(2000,<wbr/>1500)</code>.<wbr/></p>
<ul>
<li>Camera Configuration:<ul>
<li>Active array size: <code>2000x1500</code> (3 MP,<wbr/> 4:3 aspect ratio)</li>
<li>Output stream #1: <code>640x480</code> (VGA,<wbr/> 4:3 aspect ratio)</li>
<li>Output stream #2: <code>1280x720</code> (720p,<wbr/> 16:9 aspect ratio)</li>
</ul>
</li>
<li>Case #1: 4:3 crop region with 2.<wbr/>0x zoom ratio<ul>
<li>Zoomed field of view: 1/<wbr/>4 of original field of view</li>
<li>Crop region: <code>Rect(0,<wbr/> 0,<wbr/> 2000,<wbr/> 1500) //<wbr/> (left,<wbr/> top,<wbr/> right,<wbr/> bottom)</code> (post zoom)</li>
</ul>
</li>
<li><img alt="4:3 aspect ratio crop diagram" src="images/camera2/metadata/android.control.zoomRatio/zoom-ratio-2-crop-43.png"/><ul>
<li><code>640x480</code> stream source area: <code>(0,<wbr/> 0,<wbr/> 2000,<wbr/> 1500)</code> (equal to crop region)</li>
<li><code>1280x720</code> stream source area: <code>(0,<wbr/> 187,<wbr/> 2000,<wbr/> 1312)</code> (letterboxed)</li>
</ul>
</li>
<li>Case #2: 16:9 crop region with 2.<wbr/>0x zoom.<wbr/><ul>
<li>Zoomed field of view: 1/<wbr/>4 of original field of view</li>
<li>Crop region: <code>Rect(0,<wbr/> 187,<wbr/> 2000,<wbr/> 1312)</code></li>
<li><img alt="16:9 aspect ratio crop diagram" src="images/camera2/metadata/android.control.zoomRatio/zoom-ratio-2-crop-169.png"/></li>
<li><code>640x480</code> stream source area: <code>(250,<wbr/> 187,<wbr/> 1750,<wbr/> 1312)</code> (pillarboxed)</li>
<li><code>1280x720</code> stream source area: <code>(0,<wbr/> 187,<wbr/> 2000,<wbr/> 1312)</code> (equal to crop region)</li>
</ul>
</li>
<li>Case #3: 1:1 crop region with 0.<wbr/>5x zoom out to ultrawide lens.<wbr/><ul>
<li>Zoomed field of view: 4x of original field of view (switched from wide lens to ultrawide lens)</li>
<li>Crop region: <code>Rect(250,<wbr/> 0,<wbr/> 1750,<wbr/> 1500)</code></li>
<li><img alt="1:1 aspect ratio crop diagram" src="images/camera2/metadata/android.control.zoomRatio/zoom-ratio-0.5-crop-11.png"/></li>
<li><code>640x480</code> stream source area: <code>(250,<wbr/> 187,<wbr/> 1750,<wbr/> 1312)</code> (letterboxed)</li>
<li><code>1280x720</code> stream source area: <code>(250,<wbr/> 328,<wbr/> 1750,<wbr/> 1172)</code> (letterboxed)</li>
</ul>
</li>
</ul>
<p>As seen from the graphs above,<wbr/> the coordinate system of cropRegion now changes to the
effective after-zoom field-of-view,<wbr/> and is represented by the rectangle of (0,<wbr/> 0,<wbr/>
activeArrayWith,<wbr/> activeArrayHeight).<wbr/> The same applies to AE/<wbr/>AWB/<wbr/>AF regions,<wbr/> and faces.<wbr/>
This coordinate system change isn't applicable to RAW capture and its related
metadata such as intrinsicCalibration and lensShadingMap.<wbr/></p>
<p>Using the same hypothetical example above,<wbr/> and assuming output stream #1 (640x480) is
the viewfinder stream,<wbr/> the application can achieve 2.<wbr/>0x zoom in one of two ways:</p>
<ul>
<li>zoomRatio = 2.<wbr/>0,<wbr/> scaler.<wbr/>cropRegion = (0,<wbr/> 0,<wbr/> 2000,<wbr/> 1500)</li>
<li>zoomRatio = 1.<wbr/>0 (default),<wbr/> scaler.<wbr/>cropRegion = (500,<wbr/> 375,<wbr/> 1500,<wbr/> 1125)</li>
</ul>
<p>If the application intends to set aeRegions to be top-left quarter of the viewfinder
field-of-view,<wbr/> the <a href="#controls_android.control.aeRegions">android.<wbr/>control.<wbr/>ae<wbr/>Regions</a> should be set to (0,<wbr/> 0,<wbr/> 1000,<wbr/> 750) with
zoomRatio set to 2.<wbr/>0.<wbr/> Alternatively,<wbr/> the application can set aeRegions to the equivalent
region of (500,<wbr/> 375,<wbr/> 1000,<wbr/> 750) for zoomRatio of 1.<wbr/>0.<wbr/> If the application doesn't
explicitly set <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>,<wbr/> its value defaults to 1.<wbr/>0.<wbr/></p>
<p>One limitation of controlling zoom using zoomRatio is that the <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a>
must only be used for letterboxing or pillarboxing of the sensor active array,<wbr/> and no
FREEFORM cropping can be used with <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> other than 1.<wbr/>0.<wbr/> If
<a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> is not 1.<wbr/>0,<wbr/> and <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> is set to be
windowboxing,<wbr/> the camera framework will override the <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> to be
the active array.<wbr/></p>
<p>In the capture request,<wbr/> if the application sets <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> to a
value != 1.<wbr/>0,<wbr/> the <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> tag in the capture result reflects the
effective zoom ratio achieved by the camera device,<wbr/> and the <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a>
adjusts for additional crops that are not zoom related.<wbr/> Otherwise,<wbr/> if the application
sets <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> to 1.<wbr/>0,<wbr/> or does not set it at all,<wbr/> the
<a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> tag in the result metadata will also be 1.<wbr/>0.<wbr/></p>
<p>When the application requests a physical stream for a logical multi-camera,<wbr/> the
<a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> in the physical camera result metadata will be 1.<wbr/>0,<wbr/> and
the <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> tag reflects the amount of zoom and crop done by the
physical camera device.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>For all capture request templates,<wbr/> this field must be set to 1.<wbr/>0 in order to have
consistent field of views between different modes.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.afRegionsSet">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>af<wbr/>Regions<wbr/>Set
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [fwk_only as boolean]</span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">FALSE (v3.2)</span>
<span class="entry_type_enum_notes"><p>AF regions (<a href="#controls_android.control.afRegions">android.<wbr/>control.<wbr/>af<wbr/>Regions</a>) have not been set by the camera client.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">TRUE (v3.2)</span>
<span class="entry_type_enum_notes"><p>AF regions (<a href="#controls_android.control.afRegions">android.<wbr/>control.<wbr/>af<wbr/>Regions</a>) have been set by the camera client.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Framework-only private key which informs camera fwk that the AF regions has been set
by the client and those regions need not be corrected when <a href="#controls_android.sensor.pixelMode">android.<wbr/>sensor.<wbr/>pixel<wbr/>Mode</a> is
set to MAXIMUM_<wbr/>RESOLUTION.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This must be set to TRUE by the camera2 java fwk when the camera client sets
<a href="#controls_android.control.afRegions">android.<wbr/>control.<wbr/>af<wbr/>Regions</a>.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.aeRegionsSet">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>ae<wbr/>Regions<wbr/>Set
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [fwk_only as boolean]</span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">FALSE (v3.2)</span>
<span class="entry_type_enum_notes"><p>AE regions (<a href="#controls_android.control.aeRegions">android.<wbr/>control.<wbr/>ae<wbr/>Regions</a>) have not been set by the camera client.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">TRUE (v3.2)</span>
<span class="entry_type_enum_notes"><p>AE regions (<a href="#controls_android.control.aeRegions">android.<wbr/>control.<wbr/>ae<wbr/>Regions</a>) have been set by the camera client.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Framework-only private key which informs camera fwk that the AE regions has been set
by the client and those regions need not be corrected when <a href="#controls_android.sensor.pixelMode">android.<wbr/>sensor.<wbr/>pixel<wbr/>Mode</a> is
set to MAXIMUM_<wbr/>RESOLUTION.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This must be set to TRUE by the camera2 java fwk when the camera client sets
<a href="#controls_android.control.aeRegions">android.<wbr/>control.<wbr/>ae<wbr/>Regions</a>.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.awbRegionsSet">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>awb<wbr/>Regions<wbr/>Set
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [fwk_only as boolean]</span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">FALSE (v3.2)</span>
<span class="entry_type_enum_notes"><p>AWB regions (<a href="#controls_android.control.awbRegions">android.<wbr/>control.<wbr/>awb<wbr/>Regions</a>) have not been set by the camera client.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">TRUE (v3.2)</span>
<span class="entry_type_enum_notes"><p>AWB regions (<a href="#controls_android.control.awbRegions">android.<wbr/>control.<wbr/>awb<wbr/>Regions</a>) have been set by the camera client.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Framework-only private key which informs camera fwk that the AF regions has been set
by the client and those regions need not be corrected when <a href="#controls_android.sensor.pixelMode">android.<wbr/>sensor.<wbr/>pixel<wbr/>Mode</a> is
set to MAXIMUM_<wbr/>RESOLUTION.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This must be set to TRUE by the camera2 java fwk when the camera client sets
<a href="#controls_android.control.awbRegions">android.<wbr/>control.<wbr/>awb<wbr/>Regions</a>.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.settingsOverride">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>settings<wbr/>Override
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">int32</span>
<span class="entry_type_visibility"> [public]</span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.9)</span>
<span class="entry_type_enum_notes"><p>No keys are applied sooner than the other keys when applying CaptureRequest
settings to the camera device.<wbr/> This is the default value.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ZOOM (v3.9)</span>
<span class="entry_type_enum_notes"><p>Zoom related keys are applied sooner than the other keys in the CaptureRequest.<wbr/> The
zoom related keys are:</p>
<ul>
<li><a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a></li>
<li><a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a></li>
<li><a href="#controls_android.control.aeRegions">android.<wbr/>control.<wbr/>ae<wbr/>Regions</a></li>
<li><a href="#controls_android.control.awbRegions">android.<wbr/>control.<wbr/>awb<wbr/>Regions</a></li>
<li><a href="#controls_android.control.afRegions">android.<wbr/>control.<wbr/>af<wbr/>Regions</a></li>
</ul>
<p>Even though <a href="#controls_android.control.aeRegions">android.<wbr/>control.<wbr/>ae<wbr/>Regions</a>,<wbr/> <a href="#controls_android.control.awbRegions">android.<wbr/>control.<wbr/>awb<wbr/>Regions</a>,<wbr/>
and <a href="#controls_android.control.afRegions">android.<wbr/>control.<wbr/>af<wbr/>Regions</a> are not directly zoom related,<wbr/> applications
typically scale these regions together with <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> to have a
consistent mapping within the current field of view.<wbr/> In this aspect,<wbr/> they are
related to <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> and <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">VENDOR_START (v3.9)</span>
<span class="entry_type_enum_hidden">[hidden]</span>
<span class="entry_type_enum_value">0x4000</span>
<span class="entry_type_enum_notes"><p>Vendor defined settingsOverride.<wbr/> These depend on vendor implementation.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The desired CaptureRequest settings override with which certain keys are
applied earlier so that they can take effect sooner.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.control.availableSettingsOverrides">android.<wbr/>control.<wbr/>available<wbr/>Settings<wbr/>Overrides</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>9</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>There are some CaptureRequest keys which can be applied earlier than others
when controls within a CaptureRequest aren't required to take effect at the same time.<wbr/>
One such example is zoom.<wbr/> Zoom can be applied at a later stage of the camera pipeline.<wbr/>
As soon as the camera device receives the CaptureRequest,<wbr/> it can apply the requested
zoom value onto an earlier request that's already in the pipeline,<wbr/> thus improves zoom
latency.<wbr/></p>
<p>This key's value in the capture result reflects whether the controls for this capture
are overridden "by" a newer request.<wbr/> This means that if a capture request turns on
settings override,<wbr/> the capture result of an earlier request will contain the key value
of ZOOM.<wbr/> On the other hand,<wbr/> if a capture request has settings override turned on,<wbr/>
but all newer requests have it turned off,<wbr/> the key's value in the capture result will
be OFF because this capture isn't overridden by a newer capture.<wbr/> In the two examples
below,<wbr/> the capture results columns illustrate the settingsOverride values in different
scenarios.<wbr/></p>
<p>Assuming the zoom settings override can speed up by 1 frame,<wbr/> below example illustrates
the speed-up at the start of capture session:</p>
<pre><code>Camera session created
Request 1 (zoom=1.<wbr/>0x,<wbr/> override=ZOOM) -&gt;
Request 2 (zoom=1.<wbr/>2x,<wbr/> override=ZOOM) -&gt;
Request 3 (zoom=1.<wbr/>4x,<wbr/> override=ZOOM) -&gt; Result 1 (zoom=1.<wbr/>2x,<wbr/> override=ZOOM)
Request 4 (zoom=1.<wbr/>6x,<wbr/> override=ZOOM) -&gt; Result 2 (zoom=1.<wbr/>4x,<wbr/> override=ZOOM)
Request 5 (zoom=1.<wbr/>8x,<wbr/> override=ZOOM) -&gt; Result 3 (zoom=1.<wbr/>6x,<wbr/> override=ZOOM)
-&gt; Result 4 (zoom=1.<wbr/>8x,<wbr/> override=ZOOM)
-&gt; Result 5 (zoom=1.<wbr/>8x,<wbr/> override=OFF)
</code></pre>
<p>The application can turn on settings override and use zoom as normal.<wbr/> The example
shows that the later zoom values (1.<wbr/>2x,<wbr/> 1.<wbr/>4x,<wbr/> 1.<wbr/>6x,<wbr/> and 1.<wbr/>8x) overwrite the zoom
values (1.<wbr/>0x,<wbr/> 1.<wbr/>2x,<wbr/> 1.<wbr/>4x,<wbr/> and 1.<wbr/>8x) of earlier requests (#1,<wbr/> #2,<wbr/> #3,<wbr/> and #4).<wbr/></p>
<p>The application must make sure the settings override doesn't interfere with user
journeys requiring simultaneous application of all controls in CaptureRequest on the
requested output targets.<wbr/> For example,<wbr/> if the application takes a still capture using
CameraCaptureSession#capture,<wbr/> and the repeating request immediately sets a different
zoom value using override,<wbr/> the inflight still capture could have its zoom value
overwritten unexpectedly.<wbr/></p>
<p>So the application is strongly recommended to turn off settingsOverride when taking
still/<wbr/>burst captures,<wbr/> and turn it back on when there is only repeating viewfinder
request and no inflight still/<wbr/>burst captures.<wbr/></p>
<p>Below is the example demonstrating the transitions in and out of the
settings override:</p>
<pre><code>Request 1 (zoom=1.<wbr/>0x,<wbr/> override=OFF)
Request 2 (zoom=1.<wbr/>2x,<wbr/> override=OFF)
Request 3 (zoom=1.<wbr/>4x,<wbr/> override=ZOOM) -&gt; Result 1 (zoom=1.<wbr/>0x,<wbr/> override=OFF)
Request 4 (zoom=1.<wbr/>6x,<wbr/> override=ZOOM) -&gt; Result 2 (zoom=1.<wbr/>4x,<wbr/> override=ZOOM)
Request 5 (zoom=1.<wbr/>8x,<wbr/> override=OFF) -&gt; Result 3 (zoom=1.<wbr/>6x,<wbr/> override=ZOOM)
-&gt; Result 4 (zoom=1.<wbr/>6x,<wbr/> override=OFF)
-&gt; Result 5 (zoom=1.<wbr/>8x,<wbr/> override=OFF)
</code></pre>
<p>This example shows that:</p>
<ul>
<li>The application "ramps in" settings override by setting the control to ZOOM.<wbr/>
In the example,<wbr/> request #3 enables zoom settings override.<wbr/> Because the camera device
can speed up applying zoom by 1 frame,<wbr/> the outputs of request #2 has 1.<wbr/>4x zoom,<wbr/> the
value specified in request #3.<wbr/></li>
<li>The application "ramps out" of settings override by setting the control to OFF.<wbr/> In
the example,<wbr/> request #5 changes the override to OFF.<wbr/> Because request #4's zoom
takes effect in result #3,<wbr/> result #4's zoom remains the same until new value takes
effect in result #5.<wbr/></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>The HAL must set this value to OFF in all of the Capture templates.<wbr/></p>
<p>Typically the HAL unblocks processCaptureRequest at the same rate as the sensor capture,<wbr/>
and the HAL queues the capture settings in its pipeline when processCaptureRequest
returns.<wbr/> However,<wbr/> when the settings override is enabled,<wbr/> the HAL can optimize the
overridden controls' latency by applying them as soon as processCaptureRequest is
called,<wbr/> rather than when it's unblocked.<wbr/></p>
<p>For devices launching with API level 35 or newer,<wbr/> to avoid regression on zoom
smoothness,<wbr/> when zoom settings override is on during pinch zoom (zoom value gradually
changes),<wbr/> the zoom effect in the camera output must not become more jittery.<wbr/> More
specifically,<wbr/> the variation of zoom pipeline latency must not increase.<wbr/> The latency
improvement must be at least 1 frame regardless of zoom in or zoom out.<wbr/></p>
<p>For devices launched before API level 35,<wbr/> if zoom settings override is on,<wbr/> when
zooming in,<wbr/> the HAL must be able to apply the zoom related settings at least 1
frame ahead.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.autoframing">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>autoframing
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[limited] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.9)</span>
<span class="entry_type_enum_notes"><p>Disable autoframing.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ON (v3.9)</span>
<span class="entry_type_enum_notes"><p>Enable autoframing to keep people in the frame's field of view.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">AUTO (v3.9)</span>
<span class="entry_type_enum_hidden">[hidden]</span>
<span class="entry_type_enum_notes"><p>Automatically select ON or OFF based on the system level preferences.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Automatic crop,<wbr/> pan and zoom to keep objects in the center of the frame.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>9</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Auto-framing is a special mode provided by the camera device to dynamically crop,<wbr/> zoom
or pan the camera feed to try to ensure that the people in a scene occupy a reasonable
portion of the viewport.<wbr/> It is primarily designed to support video calling in
situations where the user isn't directly in front of the device,<wbr/> especially for
wide-angle cameras.<wbr/>
<a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> and <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> in CaptureResult will be used
to denote the coordinates of the auto-framed region.<wbr/>
Zoom and video stabilization controls are disabled when auto-framing is enabled.<wbr/> The 3A
regions must map the screen coordinates into the scaler crop returned from the capture
result instead of using the active array sensor.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>While auto-framing is ON,<wbr/> the aspect ratio of the auto-framed region must match the
aspect ratio of the configured output stream.<wbr/>
When reporting CaptureResult,<wbr/> SCALER_<wbr/>CROP_<wbr/>REGION might not adequately describe the
actual sensor pixels.<wbr/> In this case,<wbr/> it is acceptable for the returned parameters to only
be an approximation of the image sensor region that is actually used.<wbr/>
When auto-framing is turned off,<wbr/> the transition should be immediate,<wbr/> with no panning or
zooming to transition to the settings requested by the app.<wbr/> When it is turned on,<wbr/> the
transition can be immediate or smooth.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.zoomMethod">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>zoom<wbr/>Method
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [fwk_public]</span>
<span class="entry_type_hwlevel">[limited] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">AUTO (v3.11)</span>
<span class="entry_type_enum_value">0</span>
<span class="entry_type_enum_notes"><p>The camera device automatically detects whether the application does zoom with
<a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> or <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>,<wbr/> and in turn decides which
metadata tag reflects the effective zoom level.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ZOOM_RATIO (v3.11)</span>
<span class="entry_type_enum_value">1</span>
<span class="entry_type_enum_notes"><p>The application intends to control zoom via <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>,<wbr/> and
the effective zoom level is reflected by <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> in capture results.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether the application uses <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> or <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>
to control zoom levels.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>11</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>If set to AUTO,<wbr/> the camera device detects which capture request key the application uses
to do zoom,<wbr/> <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> or <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>.<wbr/> If
the application doesn't set android.<wbr/>scaler.<wbr/>zoom<wbr/>Ratio or sets it to 1.<wbr/>0 in the capture
request,<wbr/> the effective zoom level is reflected in <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> in capture
results.<wbr/> If <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> is set to values other than 1.<wbr/>0,<wbr/> the effective
zoom level is reflected in <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>.<wbr/> AUTO is the default value
for this control,<wbr/> and also the behavior of the OS before Android version
<a href="https://developer.android.com/reference/android/os/Build.VERSION_CODES.html#BAKLAVA">BAKLAVA</a>.<wbr/></p>
<p>If set to ZOOM_<wbr/>RATIO,<wbr/> the application explicitly specifies zoom level be controlled
by <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>,<wbr/> and the effective zoom level is reflected in
<a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> in capture results.<wbr/> This addresses an ambiguity with AUTO,<wbr/>
with which the camera device cannot know if the application is using cropRegion or
zoomRatio at 1.<wbr/>0x.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Do not use this key directly.<wbr/> It's for camera framework usage,<wbr/>
and not for HAL consumption.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="controls_android.control.aePriorityMode">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>ae<wbr/>Priority<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.11)</span>
<span class="entry_type_enum_notes"><p>Disable AE priority mode.<wbr/> This is the default value.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SENSOR_SENSITIVITY_PRIORITY (v3.11)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-exposure routine is active and
prioritizes the application-selected ISO (<a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a>).<wbr/></p>
<p>The application has control over <a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a> while
the application's values for <a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a> and
<a href="#controls_android.sensor.frameDuration">android.<wbr/>sensor.<wbr/>frame<wbr/>Duration</a> are ignored.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SENSOR_EXPOSURE_TIME_PRIORITY (v3.11)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-exposure routine is active and
prioritizes the application-selected exposure time
(<a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a>).<wbr/></p>
<p>The application has control over <a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a> while
the application's values for <a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a> and
<a href="#controls_android.sensor.frameDuration">android.<wbr/>sensor.<wbr/>frame<wbr/>Duration</a> are ignored.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Turn on AE priority mode.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>11</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This control is only effective if <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> is
AUTO and <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> is set to one of its
ON modes,<wbr/> with the exception of ON_<wbr/>LOW_<wbr/>LIGHT_<wbr/>BOOST_<wbr/>BRIGHTNESS_<wbr/>PRIORITY.<wbr/></p>
<p>When a priority mode is enabled,<wbr/> the camera device's
auto-exposure routine will maintain the application's
selected parameters relevant to the priority mode while overriding
the remaining exposure parameters
(<a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a>,<wbr/> <a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a>,<wbr/> and
<a href="#controls_android.sensor.frameDuration">android.<wbr/>sensor.<wbr/>frame<wbr/>Duration</a>).<wbr/> For example,<wbr/> if
SENSOR_<wbr/>SENSITIVITY_<wbr/>PRIORITY mode is enabled,<wbr/> the camera device will
maintain the application-selected <a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a>
while adjusting <a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a>
and <a href="#controls_android.sensor.frameDuration">android.<wbr/>sensor.<wbr/>frame<wbr/>Duration</a>.<wbr/> The overridden fields for a
given capture will be available in its CaptureResult.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>The total sensitivity applied for SENSOR_<wbr/>SENSITIVITY_<wbr/>PRIORITY should not be
adjusted by any HAL applied <a href="#controls_android.control.postRawSensitivityBoost">android.<wbr/>control.<wbr/>post<wbr/>Raw<wbr/>Sensitivity<wbr/>Boost</a>.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<!-- end of kind -->
</tbody>
<tr><td colspan="7" class="kind">static</td></tr>
<thead class="entries_header">
<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_hal_version">Initial HIDL HAL version</th>
<th class="th_tags">Tags</th>
</tr>
</thead>
<tbody>
<tr class="entry" id="static_android.control.aeAvailableAntibandingModes">
<td class="entry_name
" rowspan="3">
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>
<span class="entry_type_visibility"> [public as enumList]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<div class="entry_type_notes">list of enums</div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of auto-exposure antibanding modes for <a href="#controls_android.control.aeAntibandingMode">android.<wbr/>control.<wbr/>ae<wbr/>Antibanding<wbr/>Mode</a> that are
supported by this camera device.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Any value listed in <a href="#controls_android.control.aeAntibandingMode">android.<wbr/>control.<wbr/>ae<wbr/>Antibanding<wbr/>Mode</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Not all of the auto-exposure anti-banding modes may be
supported by a given camera device.<wbr/> This field lists the
valid anti-banding modes that the application may request
for this camera device with the
<a href="#controls_android.control.aeAntibandingMode">android.<wbr/>control.<wbr/>ae<wbr/>Antibanding<wbr/>Mode</a> control.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.aeAvailableModes">
<td class="entry_name
" rowspan="3">
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>
<span class="entry_type_visibility"> [public as enumList]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<div class="entry_type_notes">list of enums</div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of auto-exposure modes for <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> that are supported by this camera
device.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Any value listed in <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Not all the auto-exposure modes may be supported by a
given camera device,<wbr/> especially if no flash unit is
available.<wbr/> This entry lists the valid modes for
<a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> for this camera device.<wbr/></p>
<p>All camera devices support ON,<wbr/> and all camera devices with flash
units support ON_<wbr/>AUTO_<wbr/>FLASH and ON_<wbr/>ALWAYS_<wbr/>FLASH.<wbr/></p>
<p>FULL mode camera devices always support OFF mode,<wbr/>
which enables application control of camera exposure time,<wbr/>
sensitivity,<wbr/> and frame duration.<wbr/></p>
<p>LEGACY mode camera devices never support OFF mode.<wbr/>
LIMITED mode devices support OFF if they support the MANUAL_<wbr/>SENSOR
capability.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.aeAvailableTargetFpsRanges">
<td class="entry_name
" rowspan="5">
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>
<span class="entry_type_visibility"> [public as rangeInt]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<div class="entry_type_notes">list of pairs of frame rates</div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of frame rate ranges for <a href="#controls_android.control.aeTargetFpsRange">android.<wbr/>control.<wbr/>ae<wbr/>Target<wbr/>Fps<wbr/>Range</a> supported by
this camera device.<wbr/></p>
</td>
<td class="entry_units">
Frames per second (FPS)
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>For devices at the LEGACY level or above:</p>
<ul>
<li>
<p>For constant-framerate recording,<wbr/> for each normal
<a href="https://developer.android.com/reference/android/media/CamcorderProfile.html">CamcorderProfile</a>,<wbr/> that is,<wbr/> a
<a href="https://developer.android.com/reference/android/media/CamcorderProfile.html">CamcorderProfile</a> that has
<a href="https://developer.android.com/reference/android/media/CamcorderProfile.html#quality">quality</a> in
the range [<a href="https://developer.android.com/reference/android/media/CamcorderProfile.html#QUALITY_LOW">QUALITY_<wbr/>LOW</a>,<wbr/>
<a href="https://developer.android.com/reference/android/media/CamcorderProfile.html#QUALITY_2160P">QUALITY_<wbr/>2160P</a>],<wbr/> if the profile is
supported by the device and has
<a href="https://developer.android.com/reference/android/media/CamcorderProfile.html#videoFrameRate">videoFrameRate</a> <code>x</code>,<wbr/> this list will
always include (<code>x</code>,<wbr/><code>x</code>).<wbr/></p>
</li>
<li>
<p>Also,<wbr/> a camera device must either not support any
<a href="https://developer.android.com/reference/android/media/CamcorderProfile.html">CamcorderProfile</a>,<wbr/>
or support at least one
normal <a href="https://developer.android.com/reference/android/media/CamcorderProfile.html">CamcorderProfile</a> that has
<a href="https://developer.android.com/reference/android/media/CamcorderProfile.html#videoFrameRate">videoFrameRate</a> <code>x</code> &gt;= 24.<wbr/></p>
</li>
</ul>
<p>For devices at the LIMITED level or above:</p>
<ul>
<li>For devices that advertise NIR color filter arrangement in
<a href="#static_android.sensor.info.colorFilterArrangement">android.<wbr/>sensor.<wbr/>info.<wbr/>color<wbr/>Filter<wbr/>Arrangement</a>,<wbr/> this list will always include
(<code>max</code>,<wbr/> <code>max</code>) where <code>max</code> = the maximum output frame rate of the maximum YUV_<wbr/>420_<wbr/>888
output size.<wbr/></li>
<li>For devices advertising any color filter arrangement other than NIR,<wbr/> or devices not
advertising color filter arrangement,<wbr/> this list will always include (<code>min</code>,<wbr/> <code>max</code>) and
(<code>max</code>,<wbr/> <code>max</code>) where <code>min</code> &lt;= 15 and <code>max</code> = the maximum output frame rate of the
maximum YUV_<wbr/>420_<wbr/>888 output size.<wbr/></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>HAL must make sure the lower bound and upper bound of each supported targetFpsRange can
be reached.<wbr/> For example,<wbr/> if HAL supports an aeTargetFpsRange of (15,<wbr/> 30),<wbr/> when set by the
application,<wbr/> the camera must be able to reach 15fps in sufficient dark scenes.<wbr/> This way
the application knows the exact range of frame rate it can expect.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.aeCompensationRange">
<td class="entry_name
" rowspan="1">
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>
<span class="entry_type_visibility"> [public as rangeInt]</span>
<span class="entry_type_hwlevel">[legacy] </span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Maximum and minimum exposure compensation values for
<a href="#controls_android.control.aeExposureCompensation">android.<wbr/>control.<wbr/>ae<wbr/>Exposure<wbr/>Compensation</a>,<wbr/> in counts of <a href="#static_android.control.aeCompensationStep">android.<wbr/>control.<wbr/>ae<wbr/>Compensation<wbr/>Step</a>,<wbr/>
that are supported by this camera device.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Range [0,<wbr/>0] indicates that exposure compensation is not supported.<wbr/></p>
<p>For LIMITED and FULL devices,<wbr/> range must follow below requirements if exposure
compensation is supported (<code>range != [0,<wbr/> 0]</code>):</p>
<p><code>Min.<wbr/>exposure compensation * <a href="#static_android.control.aeCompensationStep">android.<wbr/>control.<wbr/>ae<wbr/>Compensation<wbr/>Step</a> &lt;= -2 EV</code></p>
<p><code>Max.<wbr/>exposure compensation * <a href="#static_android.control.aeCompensationStep">android.<wbr/>control.<wbr/>ae<wbr/>Compensation<wbr/>Step</a> &gt;= 2 EV</code></p>
<p>LEGACY devices may support a smaller range than this.<wbr/></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.aeCompensationStep">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>ae<wbr/>Compensation<wbr/>Step
</td>
<td class="entry_type">
<span class="entry_type_name">rational</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Smallest step by which the exposure compensation
can be changed.<wbr/></p>
</td>
<td class="entry_units">
Exposure Value (EV)
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This is the unit for <a href="#controls_android.control.aeExposureCompensation">android.<wbr/>control.<wbr/>ae<wbr/>Exposure<wbr/>Compensation</a>.<wbr/> For example,<wbr/> if this key has
a value of <code>1/<wbr/>2</code>,<wbr/> then a setting of <code>-2</code> for <a href="#controls_android.control.aeExposureCompensation">android.<wbr/>control.<wbr/>ae<wbr/>Exposure<wbr/>Compensation</a> means
that the target EV offset for the auto-exposure routine is -1 EV.<wbr/></p>
<p>One unit of EV compensation changes the brightness of the captured image by a factor
of two.<wbr/> +1 EV doubles the image brightness,<wbr/> while -1 EV halves the image brightness.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This must be less than or equal to 1/<wbr/>2.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.afAvailableModes">
<td class="entry_name
" rowspan="3">
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>
<span class="entry_type_visibility"> [public as enumList]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<div class="entry_type_notes">List of enums</div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of auto-focus (AF) modes for <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a> that are
supported by this camera device.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Any value listed in <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Not all the auto-focus modes may be supported by a
given camera device.<wbr/> This entry lists the valid modes for
<a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a> for this camera device.<wbr/></p>
<p>All LIMITED and FULL mode camera devices will support OFF mode,<wbr/> and all
camera devices with adjustable focuser units
(<code><a href="#static_android.lens.info.minimumFocusDistance">android.<wbr/>lens.<wbr/>info.<wbr/>minimum<wbr/>Focus<wbr/>Distance</a> &gt; 0</code>) will support AUTO mode.<wbr/></p>
<p>LEGACY devices will support OFF mode only if they support
focusing to infinity (by also setting <a href="#controls_android.lens.focusDistance">android.<wbr/>lens.<wbr/>focus<wbr/>Distance</a> to
<code>0.<wbr/>0f</code>).<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.availableEffects">
<td class="entry_name
" rowspan="3">
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>
<span class="entry_type_visibility"> [public as enumList]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<div class="entry_type_notes">List of enums (android.<wbr/>control.<wbr/>effect<wbr/>Mode).<wbr/></div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of color effects for <a href="#controls_android.control.effectMode">android.<wbr/>control.<wbr/>effect<wbr/>Mode</a> that are supported by this camera
device.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Any value listed in <a href="#controls_android.control.effectMode">android.<wbr/>control.<wbr/>effect<wbr/>Mode</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This list contains the color effect modes that can be applied to
images produced by the camera device.<wbr/>
Implementations are not expected to be consistent across all devices.<wbr/>
If no color effect modes are available for a device,<wbr/> this will only list
OFF.<wbr/></p>
<p>A color effect will only be applied if
<a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> != OFF.<wbr/> OFF is always included in this list.<wbr/></p>
<p>This control has no effect on the operation of other control routines such
as auto-exposure,<wbr/> white balance,<wbr/> or focus.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.availableSceneModes">
<td class="entry_name
" rowspan="3">
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>
<span class="entry_type_visibility"> [public as enumList]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<div class="entry_type_notes">List of enums (android.<wbr/>control.<wbr/>scene<wbr/>Mode).<wbr/></div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of scene modes for <a href="#controls_android.control.sceneMode">android.<wbr/>control.<wbr/>scene<wbr/>Mode</a> that are supported by this camera
device.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Any value listed in <a href="#controls_android.control.sceneMode">android.<wbr/>control.<wbr/>scene<wbr/>Mode</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This list contains scene modes that can be set for the camera device.<wbr/>
Only scene modes that have been fully implemented for the
camera device may be included here.<wbr/> Implementations are not expected
to be consistent across all devices.<wbr/></p>
<p>If no scene modes are supported by the camera device,<wbr/> this
will be set to DISABLED.<wbr/> Otherwise DISABLED will not be listed.<wbr/></p>
<p>FACE_<wbr/>PRIORITY is always listed if face detection is
supported (i.<wbr/>e.<wbr/><code><a href="#static_android.statistics.info.maxFaceCount">android.<wbr/>statistics.<wbr/>info.<wbr/>max<wbr/>Face<wbr/>Count</a> &gt;
0</code>).<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.availableVideoStabilizationModes">
<td class="entry_name
" rowspan="3">
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>
<span class="entry_type_visibility"> [public as enumList]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<div class="entry_type_notes">List of enums.<wbr/></div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of video stabilization modes for <a href="#controls_android.control.videoStabilizationMode">android.<wbr/>control.<wbr/>video<wbr/>Stabilization<wbr/>Mode</a>
that are supported by this camera device.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Any value listed in <a href="#controls_android.control.videoStabilizationMode">android.<wbr/>control.<wbr/>video<wbr/>Stabilization<wbr/>Mode</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>OFF will always be listed.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.awbAvailableModes">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>awb<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>
<span class="entry_type_visibility"> [public as enumList]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<div class="entry_type_notes">List of enums</div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of auto-white-balance modes for <a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a> that are supported by this
camera device.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Any value listed in <a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Not all the auto-white-balance modes may be supported by a
given camera device.<wbr/> This entry lists the valid modes for
<a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a> for this camera device.<wbr/></p>
<p>All camera devices will support ON mode.<wbr/></p>
<p>Camera devices that support the MANUAL_<wbr/>POST_<wbr/>PROCESSING capability will always support OFF
mode,<wbr/> which enables application control of white balance,<wbr/> by using
<a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a> and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a>(<a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a> must be set to TRANSFORM_<wbr/>MATRIX).<wbr/> This includes all FULL
mode camera devices.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.maxRegions">
<td class="entry_name
" rowspan="1">
android.<wbr/>control.<wbr/>max<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">
3
</span>
<span class="entry_type_visibility"> [ndk_public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of the maximum number of regions that can be used for metering in
auto-exposure (AE),<wbr/> auto-white balance (AWB),<wbr/> and auto-focus (AF);
this corresponds to the maximum number of elements in
<a href="#controls_android.control.aeRegions">android.<wbr/>control.<wbr/>ae<wbr/>Regions</a>,<wbr/> <a href="#controls_android.control.awbRegions">android.<wbr/>control.<wbr/>awb<wbr/>Regions</a>,<wbr/>
and <a href="#controls_android.control.afRegions">android.<wbr/>control.<wbr/>af<wbr/>Regions</a>.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Value must be &gt;= 0 for each element.<wbr/> For full-capability devices
this value must be &gt;= 1 for AE and AF.<wbr/> The order of the elements is:
<code>(AE,<wbr/> AWB,<wbr/> AF)</code>.<wbr/></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.maxRegionsAe">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>max<wbr/>Regions<wbr/>Ae
</td>
<td class="entry_type">
<span class="entry_type_name">int32</span>
<span class="entry_type_visibility"> [java_public]</span>
<span class="entry_type_synthetic">[synthetic] </span>
<span class="entry_type_hwlevel">[legacy] </span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The maximum number of metering regions that can be used by the auto-exposure (AE)
routine.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Value will be &gt;= 0.<wbr/> For FULL-capability devices,<wbr/> this
value will be &gt;= 1.<wbr/></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This corresponds to the maximum allowed number of elements in
<a href="#controls_android.control.aeRegions">android.<wbr/>control.<wbr/>ae<wbr/>Regions</a>.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This entry is private to the framework.<wbr/> Fill in
maxRegions to have this entry be automatically populated.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.maxRegionsAwb">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>max<wbr/>Regions<wbr/>Awb
</td>
<td class="entry_type">
<span class="entry_type_name">int32</span>
<span class="entry_type_visibility"> [java_public]</span>
<span class="entry_type_synthetic">[synthetic] </span>
<span class="entry_type_hwlevel">[legacy] </span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The maximum number of metering regions that can be used by the auto-white balance (AWB)
routine.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Value will be &gt;= 0.<wbr/></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This corresponds to the maximum allowed number of elements in
<a href="#controls_android.control.awbRegions">android.<wbr/>control.<wbr/>awb<wbr/>Regions</a>.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This entry is private to the framework.<wbr/> Fill in
maxRegions to have this entry be automatically populated.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.maxRegionsAf">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>max<wbr/>Regions<wbr/>Af
</td>
<td class="entry_type">
<span class="entry_type_name">int32</span>
<span class="entry_type_visibility"> [java_public]</span>
<span class="entry_type_synthetic">[synthetic] </span>
<span class="entry_type_hwlevel">[legacy] </span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The maximum number of metering regions that can be used by the auto-focus (AF) routine.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Value will be &gt;= 0.<wbr/> For FULL-capability devices,<wbr/> this
value will be &gt;= 1.<wbr/></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This corresponds to the maximum allowed number of elements in
<a href="#controls_android.control.afRegions">android.<wbr/>control.<wbr/>af<wbr/>Regions</a>.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This entry is private to the framework.<wbr/> Fill in
maxRegions to have this entry be automatically populated.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.sceneModeOverrides">
<td class="entry_name
" rowspan="5">
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 length(availableSceneModes)
</span>
<span class="entry_type_visibility"> [system]</span>
<span class="entry_type_hwlevel">[limited] </span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Ordered list of auto-exposure,<wbr/> auto-white balance,<wbr/> and auto-focus
settings to use with each available scene mode.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>For each available scene mode,<wbr/> the list must contain three
entries containing the <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a>,<wbr/>
<a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a>,<wbr/> and <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a> values used
by the camera device.<wbr/> The entry order is <code>(aeMode,<wbr/> awbMode,<wbr/> afMode)</code>
where aeMode has the lowest index position.<wbr/></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When a scene mode is enabled,<wbr/> the camera device is expected
to override <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a>,<wbr/> <a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a>,<wbr/>
and <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a> with its preferred settings for
that scene mode.<wbr/></p>
<p>The order of this list matches that of availableSceneModes,<wbr/>
with 3 entries for each mode.<wbr/> The overrides listed
for FACE_<wbr/>PRIORITY and FACE_<wbr/>PRIORITY_<wbr/>LOW_<wbr/>LIGHT (if supported) are ignored,<wbr/>
since for that mode the application-set <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a>,<wbr/>
<a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a>,<wbr/> and <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a> values are
used instead,<wbr/> matching the behavior when <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a>
is set to AUTO.<wbr/> It is recommended that the FACE_<wbr/>PRIORITY and
FACE_<wbr/>PRIORITY_<wbr/>LOW_<wbr/>LIGHT (if supported) overrides should be set to 0.<wbr/></p>
<p>For example,<wbr/> if availableSceneModes contains
<code>(FACE_<wbr/>PRIORITY,<wbr/> ACTION,<wbr/> NIGHT)</code>,<wbr/> then the camera framework
expects sceneModeOverrides to have 9 entries formatted like:
<code>(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)</code>.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>To maintain backward compatibility,<wbr/> this list will be made available
in the static metadata of the camera service.<wbr/> The camera service will
use these values to set <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a>,<wbr/>
<a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a>,<wbr/> and <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a> when using a scene
mode other than FACE_<wbr/>PRIORITY and FACE_<wbr/>PRIORITY_<wbr/>LOW_<wbr/>LIGHT (if supported).<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.availableHighSpeedVideoConfigurations">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>available<wbr/>High<wbr/>Speed<wbr/>Video<wbr/>Configurations
</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 n
</span>
<span class="entry_type_visibility"> [hidden as highSpeedVideoConfiguration]</span>
<span class="entry_type_hwlevel">[limited] </span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of available high speed video size,<wbr/> fps range and max batch size configurations
supported by the camera device,<wbr/> in the format of (width,<wbr/> height,<wbr/> fps_<wbr/>min,<wbr/> fps_<wbr/>max,<wbr/> batch_<wbr/>size_<wbr/>max).<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>For each configuration,<wbr/> the fps_<wbr/>max &gt;= 120fps.<wbr/></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_V1">V1</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When CONSTRAINED_<wbr/>HIGH_<wbr/>SPEED_<wbr/>VIDEO is supported in <a href="#static_android.request.availableCapabilities">android.<wbr/>request.<wbr/>available<wbr/>Capabilities</a>,<wbr/>
this metadata will list the supported high speed video size,<wbr/> fps range and max batch size
configurations.<wbr/> All the sizes listed in this configuration will be a subset of the sizes
reported by <a href="https://developer.android.com/reference/android/hardware/camera2/params/StreamConfigurationMap.html#getOutputSizes">StreamConfigurationMap#getOutputSizes</a>
for processed non-stalling formats.<wbr/></p>
<p>For the high speed video use case,<wbr/> the application must
select the video size and fps range from this metadata to configure the recording and
preview streams and setup the recording requests.<wbr/> For example,<wbr/> if the application intends
to do high speed recording,<wbr/> it can select the maximum size reported by this metadata to
configure output streams.<wbr/> Once the size is selected,<wbr/> application can filter this metadata
by selected size and get the supported fps ranges,<wbr/> and use these fps ranges to setup the
recording requests.<wbr/> Note that for the use case of multiple output streams,<wbr/> application
must select one unique size from this metadata to use (e.<wbr/>g.,<wbr/> preview and recording streams
must have the same size).<wbr/> Otherwise,<wbr/> the high speed capture session creation will fail.<wbr/></p>
<p>The min and max fps will be multiple times of 30fps.<wbr/></p>
<p>High speed video streaming extends significant performance pressure to camera hardware,<wbr/>
to achieve efficient high speed streaming,<wbr/> the camera device may have to aggregate
multiple frames together and send to camera device for processing where the request
controls are same for all the frames in this batch.<wbr/> Max batch size indicates
the max possible number of frames the camera device will group together for this high
speed stream configuration.<wbr/> This max batch size will be used to generate a high speed
recording request list by
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraConstrainedHighSpeedCaptureSession.html#createHighSpeedRequestList">CameraConstrainedHighSpeedCaptureSession#createHighSpeedRequestList</a>.<wbr/>
The max batch size for each configuration will satisfy below conditions:</p>
<ul>
<li>Each max batch size will be a divisor of its corresponding fps_<wbr/>max /<wbr/> 30.<wbr/> For example,<wbr/>
if max_<wbr/>fps is 300,<wbr/> max batch size will only be 1,<wbr/> 2,<wbr/> 5,<wbr/> or 10.<wbr/></li>
<li>The camera device may choose smaller internal batch size for each configuration,<wbr/> but
the actual batch size will be a divisor of max batch size.<wbr/> For example,<wbr/> if the max batch
size is 8,<wbr/> the actual batch size used by camera device will only be 1,<wbr/> 2,<wbr/> 4,<wbr/> or 8.<wbr/></li>
<li>The max batch size in each configuration entry must be no larger than 32.<wbr/></li>
</ul>
<p>The camera device doesn't have to support batch mode to achieve high speed video recording,<wbr/>
in such case,<wbr/> batch_<wbr/>size_<wbr/>max will be reported as 1 in each configuration entry.<wbr/></p>
<p>This fps ranges in this configuration list can only be used to create requests
that are submitted to a high speed camera capture session created by
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraDevice.html#createConstrainedHighSpeedCaptureSession">CameraDevice#createConstrainedHighSpeedCaptureSession</a>.<wbr/>
The fps ranges reported in this metadata must not be used to setup capture requests for
normal capture session,<wbr/> or it will cause request error.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>All the sizes listed in this configuration will be a subset of the sizes reported by
<a href="#static_android.scaler.availableStreamConfigurations">android.<wbr/>scaler.<wbr/>available<wbr/>Stream<wbr/>Configurations</a> for processed non-stalling output formats.<wbr/>
Note that for all high speed video configurations,<wbr/> HAL must be able to support a minimum
of two streams,<wbr/> though the application might choose to configure just one stream.<wbr/></p>
<p>The HAL may support multiple sensor modes for high speed outputs,<wbr/> for example,<wbr/> 120fps
sensor mode and 120fps recording,<wbr/> 240fps sensor mode for 240fps recording.<wbr/> The application
usually starts preview first,<wbr/> then starts recording.<wbr/> To avoid sensor mode switch caused
stutter when starting recording as much as possible,<wbr/> the application may want to ensure
the same sensor mode is used for preview and recording.<wbr/> Therefore,<wbr/> The HAL must advertise
the variable fps range [30,<wbr/> fps_<wbr/>max] for each fixed fps range in this configuration list.<wbr/>
For example,<wbr/> if the HAL advertises [120,<wbr/> 120] and [240,<wbr/> 240],<wbr/> the HAL must also advertise
[30,<wbr/> 120] and [30,<wbr/> 240] for each configuration.<wbr/> In doing so,<wbr/> if the application intends to
do 120fps recording,<wbr/> it can select [30,<wbr/> 120] to start preview,<wbr/> and [120,<wbr/> 120] to start
recording.<wbr/> For these variable fps ranges,<wbr/> it's up to the HAL to decide the actual fps
values that are suitable for smooth preview streaming.<wbr/>
If the HAL sees different max_<wbr/>fps values that fall into different sensor modes in a
sequence of requests,<wbr/> the HAL must switch the sensor mode as quick as possible to minimize
the mode switch caused stutter.<wbr/></p>
<p>HAL can also support 60fps preview during high speed recording session by advertising
[60,<wbr/> max_<wbr/>fps] for preview and [max_<wbr/>fps,<wbr/> max_<wbr/>fps] for recording.<wbr/> However,<wbr/> HAL must not
advertise both 30fps preview and 60fps preview for the same recording frame rate.<wbr/></p>
<p>Starting from AIDL ICameraDevice V2,<wbr/> camera HAL must report the valid batch_<wbr/>size_<wbr/>max.<wbr/> The
field will actually be used to generate a high speed recording request list.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.aeLockAvailable">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>ae<wbr/>Lock<wbr/>Available
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public as boolean]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">FALSE (v3.2)</span>
</li>
<li>
<span class="entry_type_enum_name">TRUE (v3.2)</span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether the camera device supports <a href="#controls_android.control.aeLock">android.<wbr/>control.<wbr/>ae<wbr/>Lock</a></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Devices with MANUAL_<wbr/>SENSOR capability or BURST_<wbr/>CAPTURE capability will always
list <code>true</code>.<wbr/> This includes FULL devices.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.awbLockAvailable">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>awb<wbr/>Lock<wbr/>Available
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public as boolean]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">FALSE (v3.2)</span>
</li>
<li>
<span class="entry_type_enum_name">TRUE (v3.2)</span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether the camera device supports <a href="#controls_android.control.awbLock">android.<wbr/>control.<wbr/>awb<wbr/>Lock</a></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Devices with MANUAL_<wbr/>POST_<wbr/>PROCESSING capability or BURST_<wbr/>CAPTURE capability will
always list <code>true</code>.<wbr/> This includes FULL devices.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.availableModes">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<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>
<span class="entry_type_visibility"> [public as enumList]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<div class="entry_type_notes">List of enums (android.<wbr/>control.<wbr/>mode).<wbr/></div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of control modes for <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> that are supported by this camera
device.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Any value listed in <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This list contains control modes that can be set for the camera device.<wbr/>
LEGACY mode devices will always support AUTO mode.<wbr/> LIMITED and FULL
devices will always support OFF,<wbr/> AUTO modes.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.postRawSensitivityBoostRange">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>post<wbr/>Raw<wbr/>Sensitivity<wbr/>Boost<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>
<span class="entry_type_visibility"> [public as rangeInt]</span>
<div class="entry_type_notes">Range of supported post RAW sensitivity boosts</div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Range of boosts for <a href="#controls_android.control.postRawSensitivityBoost">android.<wbr/>control.<wbr/>post<wbr/>Raw<wbr/>Sensitivity<wbr/>Boost</a> supported
by this camera device.<wbr/></p>
</td>
<td class="entry_units">
ISO arithmetic units,<wbr/> the same as android.<wbr/>sensor.<wbr/>sensitivity
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Devices support post RAW sensitivity boost will advertise
<a href="#controls_android.control.postRawSensitivityBoost">android.<wbr/>control.<wbr/>post<wbr/>Raw<wbr/>Sensitivity<wbr/>Boost</a> key for controlling
post RAW sensitivity boost.<wbr/></p>
<p>This key will be <code>null</code> for devices that do not support any RAW format
outputs.<wbr/> For devices that do support RAW format outputs,<wbr/> this key will always
present,<wbr/> and if a device does not support post RAW sensitivity boost,<wbr/> it will
list <code>(100,<wbr/> 100)</code> in this key.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This key is added in legacy HAL3.<wbr/>4.<wbr/> For legacy HAL3.<wbr/>3 or earlier devices,<wbr/> camera
framework will generate this key as <code>(100,<wbr/> 100)</code> if device supports any of RAW output
formats.<wbr/> All legacy HAL3.<wbr/>4 and above devices should list this key if device supports
any of RAW output formats.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.availableExtendedSceneModeMaxSizes">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>available<wbr/>Extended<wbr/>Scene<wbr/>Mode<wbr/>Max<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">
3 x n
</span>
<span class="entry_type_visibility"> [ndk_public]</span>
<span class="entry_type_hwlevel">[limited] </span>
<div class="entry_type_notes">List of extended scene modes and the corresponding max streaming sizes.<wbr/></div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The list of extended scene modes for <a href="#controls_android.control.extendedSceneMode">android.<wbr/>control.<wbr/>extended<wbr/>Scene<wbr/>Mode</a> that are supported
by this camera device,<wbr/> and each extended scene mode's maximum streaming (non-stall) size
with effect.<wbr/></p>
</td>
<td class="entry_units">
(mode,<wbr/> width,<wbr/> height)
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>5</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>For DISABLED mode,<wbr/> the camera behaves normally with no extended scene mode enabled.<wbr/></p>
<p>For BOKEH_<wbr/>STILL_<wbr/>CAPTURE mode,<wbr/> the maximum streaming dimension specifies the limit
under which bokeh is effective when capture intent is PREVIEW.<wbr/> Note that when capture
intent is PREVIEW,<wbr/> the bokeh effect may not be as high in quality compared to
STILL_<wbr/>CAPTURE intent in order to maintain reasonable frame rate.<wbr/> The maximum streaming
dimension must be one of the YUV_<wbr/>420_<wbr/>888 or PRIVATE resolutions in
availableStreamConfigurations,<wbr/> or (0,<wbr/> 0) if preview bokeh is not supported.<wbr/> If the
application configures a stream larger than the maximum streaming dimension,<wbr/> bokeh
effect may not be applied for this stream for PREVIEW intent.<wbr/></p>
<p>For BOKEH_<wbr/>CONTINUOUS mode,<wbr/> the maximum streaming dimension specifies the limit under
which bokeh is effective.<wbr/> This dimension must be one of the YUV_<wbr/>420_<wbr/>888 or PRIVATE
resolutions in availableStreamConfigurations,<wbr/> and if the sensor maximum resolution is
larger than or equal to 1080p,<wbr/> the maximum streaming dimension must be at least 1080p.<wbr/>
If the application configures a stream with larger dimension,<wbr/> the stream may not have
bokeh effect applied.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>For available extended scene modes,<wbr/> DISABLED will always be listed.<wbr/></p>
<p>HAL must support at list one non-OFF extended scene mode if extendedSceneMode control is
available on the camera device.<wbr/> For DISABLED mode,<wbr/> the maximum streaming resolution must
be set to (0,<wbr/> 0).<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.availableExtendedSceneModeZoomRatioRanges">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>available<wbr/>Extended<wbr/>Scene<wbr/>Mode<wbr/>Zoom<wbr/>Ratio<wbr/>Ranges
</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 n
</span>
<span class="entry_type_visibility"> [ndk_public]</span>
<span class="entry_type_hwlevel">[limited] </span>
<div class="entry_type_notes">Zoom ranges for all supported non-OFF extended scene modes.<wbr/></div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The ranges of supported zoom ratio for non-DISABLED <a href="#controls_android.control.extendedSceneMode">android.<wbr/>control.<wbr/>extended<wbr/>Scene<wbr/>Mode</a>.<wbr/></p>
</td>
<td class="entry_units">
(minZoom,<wbr/> maxZoom)
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>5</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When extended scene mode is set,<wbr/> the camera device may have limited range of zoom ratios
compared to when extended scene mode is DISABLED.<wbr/> This tag lists the zoom ratio ranges
for all supported non-DISABLED extended scene modes,<wbr/> in the same order as in
android.<wbr/>control.<wbr/>available<wbr/>Extended.<wbr/></p>
<p>Range [1.<wbr/>0,<wbr/> 1.<wbr/>0] means that no zoom (optical or digital) is supported.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.availableExtendedSceneModeCapabilities">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>available<wbr/>Extended<wbr/>Scene<wbr/>Mode<wbr/>Capabilities
</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>
<span class="entry_type_visibility"> [public as capability]</span>
<span class="entry_type_synthetic">[synthetic] </span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The list of extended scene modes for <a href="#controls_android.control.extendedSceneMode">android.<wbr/>control.<wbr/>extended<wbr/>Scene<wbr/>Mode</a> that
are supported by this camera device,<wbr/> and each extended scene mode's capabilities such
as maximum streaming size,<wbr/> and supported zoom ratio ranges.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>5</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>For DISABLED mode,<wbr/> the camera behaves normally with no extended scene mode enabled.<wbr/></p>
<p>For BOKEH_<wbr/>STILL_<wbr/>CAPTURE mode,<wbr/> the maximum streaming dimension specifies the limit
under which bokeh is effective when capture intent is PREVIEW.<wbr/> Note that when capture
intent is PREVIEW,<wbr/> the bokeh effect may not be as high quality compared to STILL_<wbr/>CAPTURE
intent in order to maintain reasonable frame rate.<wbr/> The maximum streaming dimension must
be one of the YUV_<wbr/>420_<wbr/>888 or PRIVATE resolutions in availableStreamConfigurations,<wbr/> or
(0,<wbr/> 0) if preview bokeh is not supported.<wbr/> If the application configures a stream
larger than the maximum streaming dimension,<wbr/> bokeh effect may not be applied for this
stream for PREVIEW intent.<wbr/></p>
<p>For BOKEH_<wbr/>CONTINUOUS mode,<wbr/> the maximum streaming dimension specifies the limit under
which bokeh is effective.<wbr/> This dimension must be one of the YUV_<wbr/>420_<wbr/>888 or PRIVATE
resolutions in availableStreamConfigurations,<wbr/> and if the sensor maximum resolution is
larger than or equal to 1080p,<wbr/> the maximum streaming dimension must be at least 1080p.<wbr/>
If the application configures a stream with larger dimension,<wbr/> the stream may not have
bokeh effect applied.<wbr/></p>
<p>When extended scene mode is set,<wbr/> the camera device may have limited range of zoom ratios
compared to when the mode is DISABLED.<wbr/> availableExtendedSceneModeCapabilities lists the
zoom ranges for all supported extended modes.<wbr/> A range of (1.<wbr/>0,<wbr/> 1.<wbr/>0) means that no zoom
(optical or digital) is supported.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.zoomRatioRange">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>zoom<wbr/>Ratio<wbr/>Range
</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>
<span class="entry_type_visibility"> [public as rangeFloat]</span>
<span class="entry_type_hwlevel">[limited] </span>
<div class="entry_type_notes">The range of zoom ratios that this camera device supports.<wbr/></div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Minimum and maximum zoom ratios supported by this camera device.<wbr/></p>
</td>
<td class="entry_units">
A pair of zoom ratio in floating-points: (minZoom,<wbr/> maxZoom)
</td>
<td class="entry_range">
<p>maxZoom &gt;= 1.<wbr/>0 &gt;= minZoom</p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>5</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>If the camera device supports zoom-out from 1x zoom,<wbr/> minZoom will be less than 1.<wbr/>0,<wbr/> and
setting <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> to values less than 1.<wbr/>0 increases the camera's field
of view.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When the key is reported,<wbr/> the camera device's <a href="#static_android.scaler.availableMaxDigitalZoom">android.<wbr/>scaler.<wbr/>available<wbr/>Max<wbr/>Digital<wbr/>Zoom</a>
must be less than or equal to maxZoom.<wbr/> The camera framework makes sure to always
control zoom via <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>.<wbr/> The <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> tag is only
used to do horizontal or vertical cropping (but not both) to achieve aspect ratio
different than the camera sensor's native aspect ratio.<wbr/></p>
<p>For a logical multi-camera device,<wbr/> this key must either be reported for both the logical
camera device and all its physical sub-cameras,<wbr/> or none of them.<wbr/></p>
<p>When the key is not reported,<wbr/> camera framework derives the application-facing
zoomRatioRange to be (1,<wbr/> <a href="#static_android.scaler.availableMaxDigitalZoom">android.<wbr/>scaler.<wbr/>available<wbr/>Max<wbr/>Digital<wbr/>Zoom</a>).<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.availableHighSpeedVideoConfigurationsMaximumResolution">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>available<wbr/>High<wbr/>Speed<wbr/>Video<wbr/>Configurations<wbr/>Maximum<wbr/>Resolution
</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 n
</span>
<span class="entry_type_visibility"> [hidden as highSpeedVideoConfiguration]</span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of available high speed video size,<wbr/> fps range and max batch size configurations
supported by the camera device,<wbr/> in the format of
(width,<wbr/> height,<wbr/> fps_<wbr/>min,<wbr/> fps_<wbr/>max,<wbr/> batch_<wbr/>size_<wbr/>max),<wbr/>
when <a href="#controls_android.sensor.pixelMode">android.<wbr/>sensor.<wbr/>pixel<wbr/>Mode</a> is set to
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION">Camera<wbr/>Metadata#SENSOR_<wbr/>PIXEL_<wbr/>MODE_<wbr/>MAXIMUM_<wbr/>RESOLUTION</a>.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>For each configuration,<wbr/> the fps_<wbr/>max &gt;= 120fps.<wbr/></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>6</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_V1">V1</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Analogous to <a href="#static_android.control.availableHighSpeedVideoConfigurations">android.<wbr/>control.<wbr/>available<wbr/>High<wbr/>Speed<wbr/>Video<wbr/>Configurations</a>,<wbr/> for configurations
which are applicable when <a href="#controls_android.sensor.pixelMode">android.<wbr/>sensor.<wbr/>pixel<wbr/>Mode</a> is set to
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION">Camera<wbr/>Metadata#SENSOR_<wbr/>PIXEL_<wbr/>MODE_<wbr/>MAXIMUM_<wbr/>RESOLUTION</a>.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Refer to hal details for <a href="#static_android.control.availableHighSpeedVideoConfigurations">android.<wbr/>control.<wbr/>available<wbr/>High<wbr/>Speed<wbr/>Video<wbr/>Configurations</a>.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.availableSettingsOverrides">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>available<wbr/>Settings<wbr/>Overrides
</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>
<span class="entry_type_visibility"> [public as enumList]</span>
<div class="entry_type_notes">list of enums</div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of available settings overrides supported by the camera device that can
be used to speed up certain controls.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Any value listed in <a href="#controls_android.control.settingsOverride">android.<wbr/>control.<wbr/>settings<wbr/>Override</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>9</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When not all controls within a CaptureRequest are required to take effect
at the same time on the outputs,<wbr/> the camera device may apply certain request keys sooner
to improve latency.<wbr/> This list contains such supported settings overrides.<wbr/> Each settings
override corresponds to a set of CaptureRequest keys that can be sped up when applying.<wbr/></p>
<p>A supported settings override can be passed in via
<a href="https://developer.android.com/reference/android/hardware/camera2/CaptureRequest.html#CONTROL_SETTINGS_OVERRIDE">Capture<wbr/>Request#CONTROL_<wbr/>SETTINGS_<wbr/>OVERRIDE</a>,<wbr/> and the
CaptureRequest keys corresponding to the override are applied as soon as possible,<wbr/> not
bound by per-frame synchronization.<wbr/> See <a href="#controls_android.control.settingsOverride">android.<wbr/>control.<wbr/>settings<wbr/>Override</a> for the
CaptureRequest keys for each override.<wbr/></p>
<p>OFF is always included in this list.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.autoframingAvailable">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>autoframing<wbr/>Available
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public as boolean]</span>
<span class="entry_type_hwlevel">[limited] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">FALSE (v3.9)</span>
</li>
<li>
<span class="entry_type_enum_name">TRUE (v3.9)</span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether the camera device supports <a href="#controls_android.control.autoframing">android.<wbr/>control.<wbr/>autoframing</a>.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>9</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Will be <code>false</code> if auto-framing is not available.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.lowLightBoostInfoLuminanceRange">
<td class="entry_name
" rowspan="1">
android.<wbr/>control.<wbr/>low<wbr/>Light<wbr/>Boost<wbr/>Info<wbr/>Luminance<wbr/>Range
</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>
<span class="entry_type_visibility"> [public as rangeFloat]</span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The operating luminance range of low light boost measured in lux (lx).<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>The lower bound indicates the lowest scene luminance value the AE mode
'ON_<wbr/>LOW_<wbr/>LIGHT_<wbr/>BOOST_<wbr/>BRIGHTNESS_<wbr/>PRIORITY' can operate within.<wbr/> Scenes of lower luminance
than this may receive less brightening,<wbr/> increased noise,<wbr/> or artifacts.<wbr/></p>
<p>The upper bound indicates the luminance threshold at the point when the mode is enabled.<wbr/>
For example,<wbr/> 'Range[0.<wbr/>3,<wbr/> 30.<wbr/>0]' defines 0.<wbr/>3 lux being the lowest scene luminance the
mode can reliably support.<wbr/> 30.<wbr/>0 lux represents the threshold when this mode is
activated.<wbr/> Scenes measured at less than or equal to 30 lux will activate low light
boost.<wbr/></p>
<p>If this key is defined,<wbr/> then the AE mode 'ON_<wbr/>LOW_<wbr/>LIGHT_<wbr/>BOOST_<wbr/>BRIGHTNESS_<wbr/>PRIORITY' will
also be present.<wbr/></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>10</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="static_android.control.aeAvailablePriorityModes">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>ae<wbr/>Available<wbr/>Priority<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>
<span class="entry_type_visibility"> [public as enumList]</span>
<div class="entry_type_notes">list of enums</div>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of auto-exposure priority modes for <a href="#controls_android.control.aePriorityMode">android.<wbr/>control.<wbr/>ae<wbr/>Priority<wbr/>Mode</a>
that are supported by this camera device.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p>Any value listed in <a href="#controls_android.control.aePriorityMode">android.<wbr/>control.<wbr/>ae<wbr/>Priority<wbr/>Mode</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>11</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This entry lists the valid modes for
<a href="#controls_android.control.aePriorityMode">android.<wbr/>control.<wbr/>ae<wbr/>Priority<wbr/>Mode</a> for this camera device.<wbr/>
If no AE priority modes are available for a device,<wbr/> this will only list OFF.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<!-- end of kind -->
</tbody>
<tr><td colspan="7" class="kind">dynamic</td></tr>
<thead class="entries_header">
<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_hal_version">Initial HIDL HAL version</th>
<th class="th_tags">Tags</th>
</tr>
</thead>
<tbody>
<tr class="entry" id="dynamic_android.control.aePrecaptureId">
<td class="entry_name
entry_name_deprecated
" rowspan="3">
android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Id
</td>
<td class="entry_type">
<span class="entry_type_name">int32</span>
<span class="entry_type_visibility"> [system]</span>
<span class="entry_type_deprecated">[deprecated] </span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The ID sent with the latest
CAMERA2_<wbr/>TRIGGER_<wbr/>PRECAPTURE_<wbr/>METERING call</p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><span class="entry_range_deprecated">Deprecated</span>. Do not use.</p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>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</p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.aeAntibandingMode">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>ae<wbr/>Antibanding<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device will not adjust exposure duration to
avoid banding problems.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">50HZ (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device will adjust exposure duration to
avoid banding problems with 50Hz illumination sources.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">60HZ (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device will adjust exposure duration to
avoid banding problems with 60Hz illumination
sources.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">AUTO (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device will automatically adapt its
antibanding routine to the current illumination
condition.<wbr/> This is the default mode if AUTO is
available on given camera device.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The desired setting for the camera device's auto-exposure
algorithm's antibanding compensation.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.control.aeAvailableAntibandingModes">android.<wbr/>control.<wbr/>ae<wbr/>Available<wbr/>Antibanding<wbr/>Modes</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Some kinds of lighting fixtures,<wbr/> such as some fluorescent
lights,<wbr/> flicker at the rate of the power supply frequency
(60Hz or 50Hz,<wbr/> depending on country).<wbr/> While this is
typically not noticeable to a person,<wbr/> it can be visible to
a camera device.<wbr/> If a camera sets its exposure time to the
wrong value,<wbr/> the flicker may become visible in the
viewfinder as flicker or in a final captured image,<wbr/> as a
set of variable-brightness bands across the image.<wbr/></p>
<p>Therefore,<wbr/> the auto-exposure routines of camera devices
include antibanding routines that ensure that the chosen
exposure value will not cause such banding.<wbr/> The choice of
exposure time depends on the rate of flicker,<wbr/> which the
camera device can detect automatically,<wbr/> or the expected
rate can be selected by the application using this
control.<wbr/></p>
<p>A given camera device may not support all of the possible
options for the antibanding mode.<wbr/> The
<a href="#static_android.control.aeAvailableAntibandingModes">android.<wbr/>control.<wbr/>ae<wbr/>Available<wbr/>Antibanding<wbr/>Modes</a> key contains
the available modes for a given camera device.<wbr/></p>
<p>AUTO mode is the default if it is available on given
camera device.<wbr/> When AUTO mode is not available,<wbr/> the
default will be either 50HZ or 60HZ,<wbr/> and both 50HZ
and 60HZ will be available.<wbr/></p>
<p>If manual exposure control is enabled (by setting
<a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> or <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> to OFF),<wbr/>
then this setting has no effect,<wbr/> and the application must
ensure it selects exposure times that do not cause banding
issues.<wbr/> The <a href="#dynamic_android.statistics.sceneFlicker">android.<wbr/>statistics.<wbr/>scene<wbr/>Flicker</a> key can assist
the application in this.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>For all capture request templates,<wbr/> this field must be set
to AUTO if AUTO mode is available.<wbr/> If AUTO is not available,<wbr/>
the default must be either 50HZ or 60HZ,<wbr/> and both 50HZ and
60HZ must be available.<wbr/></p>
<p>If manual exposure control is enabled (by setting
<a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> or <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> to OFF),<wbr/>
then the exposure values provided by the application must not be
adjusted for antibanding.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.aeExposureCompensation">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>ae<wbr/>Exposure<wbr/>Compensation
</td>
<td class="entry_type">
<span class="entry_type_name">int32</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Adjustment to auto-exposure (AE) target image
brightness.<wbr/></p>
</td>
<td class="entry_units">
Compensation steps
</td>
<td class="entry_range">
<p><a href="#static_android.control.aeCompensationRange">android.<wbr/>control.<wbr/>ae<wbr/>Compensation<wbr/>Range</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>The adjustment is measured as a count of steps,<wbr/> with the
step size defined by <a href="#static_android.control.aeCompensationStep">android.<wbr/>control.<wbr/>ae<wbr/>Compensation<wbr/>Step</a> and the
allowed range by <a href="#static_android.control.aeCompensationRange">android.<wbr/>control.<wbr/>ae<wbr/>Compensation<wbr/>Range</a>.<wbr/></p>
<p>For example,<wbr/> if the exposure value (EV) step is 0.<wbr/>333,<wbr/> '6'
will mean an exposure compensation of +2 EV; -3 will mean an
exposure compensation of -1 EV.<wbr/> One EV represents a doubling
of image brightness.<wbr/> Note that this control will only be
effective if <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> <code>!=</code> OFF.<wbr/> This control
will take effect even when <a href="#controls_android.control.aeLock">android.<wbr/>control.<wbr/>ae<wbr/>Lock</a> <code>== true</code>.<wbr/></p>
<p>In the event of exposure compensation value being changed,<wbr/> camera device
may take several frames to reach the newly requested exposure target.<wbr/>
During that time,<wbr/> <a href="#dynamic_android.control.aeState">android.<wbr/>control.<wbr/>ae<wbr/>State</a> field will be in the SEARCHING
state.<wbr/> Once the new exposure target is reached,<wbr/> <a href="#dynamic_android.control.aeState">android.<wbr/>control.<wbr/>ae<wbr/>State</a> will
change from SEARCHING to either CONVERGED,<wbr/> LOCKED (if AE lock is enabled),<wbr/> or
FLASH_<wbr/>REQUIRED (if the scene is too dark for still capture).<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.aeLock">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>ae<wbr/>Lock
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public as boolean]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>Auto-exposure lock is disabled; the AE algorithm
is free to update its parameters.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ON (v3.2)</span>
<span class="entry_type_enum_notes"><p>Auto-exposure lock is enabled; the AE algorithm
must not update the exposure and sensitivity parameters
while the lock is active.<wbr/></p>
<p><a href="#controls_android.control.aeExposureCompensation">android.<wbr/>control.<wbr/>ae<wbr/>Exposure<wbr/>Compensation</a> setting changes
will still take effect while auto-exposure is locked.<wbr/></p>
<p>Some rare LEGACY devices may not support
this,<wbr/> in which case the value will always be overridden to OFF.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether auto-exposure (AE) is currently locked to its latest
calculated values.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When set to <code>true</code> (ON),<wbr/> the AE algorithm is locked to its latest parameters,<wbr/>
and will not change exposure settings until the lock is set to <code>false</code> (OFF).<wbr/></p>
<p>Note that even when AE is locked,<wbr/> the flash may be fired if
the <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> is ON_<wbr/>AUTO_<wbr/>FLASH /<wbr/>
ON_<wbr/>ALWAYS_<wbr/>FLASH /<wbr/> ON_<wbr/>AUTO_<wbr/>FLASH_<wbr/>REDEYE.<wbr/></p>
<p>When <a href="#controls_android.control.aeExposureCompensation">android.<wbr/>control.<wbr/>ae<wbr/>Exposure<wbr/>Compensation</a> is changed,<wbr/> even if the AE lock
is ON,<wbr/> the camera device will still adjust its exposure value.<wbr/></p>
<p>If AE precapture is triggered (see <a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a>)
when AE is already locked,<wbr/> the camera device will not change the exposure time
(<a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a>) and sensitivity (<a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a>)
parameters.<wbr/> The flash may be fired if the <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a>
is ON_<wbr/>AUTO_<wbr/>FLASH/<wbr/>ON_<wbr/>AUTO_<wbr/>FLASH_<wbr/>REDEYE and the scene is too dark.<wbr/> If the
<a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> is ON_<wbr/>ALWAYS_<wbr/>FLASH,<wbr/> the scene may become overexposed.<wbr/>
Similarly,<wbr/> AE precapture trigger CANCEL has no effect when AE is already locked.<wbr/></p>
<p>When an AE precapture sequence is triggered,<wbr/> AE unlock will not be able to unlock
the AE if AE is locked by the camera device internally during precapture metering
sequence In other words,<wbr/> submitting requests with AE unlock has no effect for an
ongoing precapture metering sequence.<wbr/> Otherwise,<wbr/> the precapture metering sequence
will never succeed in a sequence of preview requests where AE lock is always set
to <code>false</code>.<wbr/></p>
<p>Since the camera device has a pipeline of in-flight requests,<wbr/> the settings that
get locked do not necessarily correspond to the settings that were present in the
latest capture result received from the camera device,<wbr/> since additional captures
and AE updates may have occurred even before the result was sent out.<wbr/> If an
application is switching between automatic and manual control and wishes to eliminate
any flicker during the switch,<wbr/> the following procedure is recommended:</p>
<ol>
<li>Starting in auto-AE mode:</li>
<li>Lock AE</li>
<li>Wait for the first result to be output that has the AE locked</li>
<li>Copy exposure settings from that result into a request,<wbr/> set the request to manual AE</li>
<li>Submit the capture request,<wbr/> proceed to run manual AE as desired.<wbr/></li>
</ol>
<p>See <a href="#dynamic_android.control.aeState">android.<wbr/>control.<wbr/>ae<wbr/>State</a> for AE lock related state transition details.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.aeMode">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>ae<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's autoexposure routine is disabled.<wbr/></p>
<p>The application-selected <a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a>,<wbr/>
<a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a> and
<a href="#controls_android.sensor.frameDuration">android.<wbr/>sensor.<wbr/>frame<wbr/>Duration</a> are used by the camera
device,<wbr/> along with android.<wbr/>flash.<wbr/>* fields,<wbr/> if there's
a flash unit for this camera device.<wbr/></p>
<p>Note that auto-white balance (AWB) and auto-focus (AF)
behavior is device dependent when AE is in OFF mode.<wbr/>
To have consistent behavior across different devices,<wbr/>
it is recommended to either set AWB and AF to OFF mode
or lock AWB and AF before setting AE to OFF.<wbr/>
See <a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a>,<wbr/> <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a>,<wbr/>
<a href="#controls_android.control.awbLock">android.<wbr/>control.<wbr/>awb<wbr/>Lock</a>,<wbr/> and <a href="#controls_android.control.afTrigger">android.<wbr/>control.<wbr/>af<wbr/>Trigger</a>
for more details.<wbr/></p>
<p>LEGACY devices do not support the OFF mode and will
override attempts to use this value to ON.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ON (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's autoexposure routine is active,<wbr/>
with no flash control.<wbr/></p>
<p>The application's values for
<a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a>,<wbr/>
<a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a>,<wbr/> and
<a href="#controls_android.sensor.frameDuration">android.<wbr/>sensor.<wbr/>frame<wbr/>Duration</a> are ignored.<wbr/> The
application has control over the various
android.<wbr/>flash.<wbr/>* fields.<wbr/></p>
<p>If the device supports manual flash strength control,<wbr/> i.<wbr/>e.,<wbr/>
if <a href="#static_android.flash.singleStrengthMaxLevel">android.<wbr/>flash.<wbr/>single<wbr/>Strength<wbr/>Max<wbr/>Level</a> and
<a href="#static_android.flash.torchStrengthMaxLevel">android.<wbr/>flash.<wbr/>torch<wbr/>Strength<wbr/>Max<wbr/>Level</a> are greater than 1,<wbr/> then
the auto-exposure (AE) precapture metering sequence should be
triggered for the configured flash mode and strength to avoid
the image being incorrectly exposed at different
<a href="#controls_android.flash.strengthLevel">android.<wbr/>flash.<wbr/>strength<wbr/>Level</a>.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ON_AUTO_FLASH (v3.2)</span>
<span class="entry_type_enum_notes"><p>Like ON,<wbr/> except that the camera device also controls
the camera's flash unit,<wbr/> firing it in low-light
conditions.<wbr/></p>
<p>The flash may be fired during a precapture sequence
(triggered by <a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a>) and
may be fired for captures for which the
<a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> field is set to
STILL_<wbr/>CAPTURE</p></span>
</li>
<li>
<span class="entry_type_enum_name">ON_ALWAYS_FLASH (v3.2)</span>
<span class="entry_type_enum_notes"><p>Like ON,<wbr/> except that the camera device also controls
the camera's flash unit,<wbr/> always firing it for still
captures.<wbr/></p>
<p>The flash may be fired during a precapture sequence
(triggered by <a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a>) and
will always be fired for captures for which the
<a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> field is set to
STILL_<wbr/>CAPTURE</p></span>
</li>
<li>
<span class="entry_type_enum_name">ON_AUTO_FLASH_REDEYE (v3.2)</span>
<span class="entry_type_enum_notes"><p>Like ON_<wbr/>AUTO_<wbr/>FLASH,<wbr/> but with automatic red eye
reduction.<wbr/></p>
<p>If deemed necessary by the camera device,<wbr/> a red eye
reduction flash will fire during the precapture
sequence.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ON_EXTERNAL_FLASH (v3.3)</span>
<span class="entry_type_enum_notes"><p>An external flash has been turned on.<wbr/></p>
<p>It informs the camera device that an external flash has been turned on,<wbr/> and that
metering (and continuous focus if active) should be quickly recalculated to account
for the external flash.<wbr/> Otherwise,<wbr/> this mode acts like ON.<wbr/></p>
<p>When the external flash is turned off,<wbr/> AE mode should be changed to one of the
other available AE modes.<wbr/></p>
<p>If the camera device supports AE external flash mode,<wbr/> <a href="#dynamic_android.control.aeState">android.<wbr/>control.<wbr/>ae<wbr/>State</a> must
be FLASH_<wbr/>REQUIRED after the camera device finishes AE scan and it's too dark without
flash.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY (v3.10)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Like 'ON' but applies additional brightness boost in low light scenes.<wbr/></p>
<p>When the scene lighting conditions are within the range defined by
<a href="#static_android.control.lowLightBoostInfoLuminanceRange">android.<wbr/>control.<wbr/>low<wbr/>Light<wbr/>Boost<wbr/>Info<wbr/>Luminance<wbr/>Range</a> this mode will apply additional
brightness boost.<wbr/></p>
<p>This mode will automatically adjust the intensity of low light boost applied
according to the scene lighting conditions.<wbr/> A darker scene will receive more boost
while a brighter scene will receive less boost.<wbr/></p>
<p>This mode can ignore the set target frame rate to allow more light to be captured
which can result in choppier motion.<wbr/> The frame rate can extend to lower than the
<a href="#static_android.control.aeAvailableTargetFpsRanges">android.<wbr/>control.<wbr/>ae<wbr/>Available<wbr/>Target<wbr/>Fps<wbr/>Ranges</a> but will not go below 10 FPS.<wbr/> This mode
can also increase the sensor sensitivity gain which can result in increased luma
and chroma noise.<wbr/> The sensor sensitivity gain can extend to higher values beyond
<a href="#static_android.sensor.info.sensitivityRange">android.<wbr/>sensor.<wbr/>info.<wbr/>sensitivity<wbr/>Range</a>.<wbr/> This mode may also apply additional
processing to recover details in dark and bright areas of the image,<wbr/>and noise
reduction at high sensitivity gain settings to manage the trade-off between light
sensitivity and capture noise.<wbr/></p>
<p>This mode is restricted to two output surfaces.<wbr/> One output surface type can either
be SurfaceView or TextureView.<wbr/> Another output surface type can either be MediaCodec
or MediaRecorder.<wbr/> This mode cannot be used with a target FPS range higher than 30
FPS.<wbr/></p>
<p>If the session configuration is not supported,<wbr/> the AE mode reported in the
CaptureResult will be 'ON' instead of 'ON_<wbr/>LOW_<wbr/>LIGHT_<wbr/>BOOST_<wbr/>BRIGHTNESS_<wbr/>PRIORITY'.<wbr/></p>
<p>When this AE mode is enabled,<wbr/> the CaptureResult field
<a href="#dynamic_android.control.lowLightBoostState">android.<wbr/>control.<wbr/>low<wbr/>Light<wbr/>Boost<wbr/>State</a> will indicate when low light boost is 'ACTIVE'
or 'INACTIVE'.<wbr/> By default <a href="#dynamic_android.control.lowLightBoostState">android.<wbr/>control.<wbr/>low<wbr/>Light<wbr/>Boost<wbr/>State</a> will be 'INACTIVE'.<wbr/></p>
<p>The low light boost is 'ACTIVE' once the scene lighting condition is less than the
upper bound lux value defined by <a href="#static_android.control.lowLightBoostInfoLuminanceRange">android.<wbr/>control.<wbr/>low<wbr/>Light<wbr/>Boost<wbr/>Info<wbr/>Luminance<wbr/>Range</a>.<wbr/>
This mode will be 'INACTIVE' once the scene lighting condition is greater than the
upper bound lux value defined by <a href="#static_android.control.lowLightBoostInfoLuminanceRange">android.<wbr/>control.<wbr/>low<wbr/>Light<wbr/>Boost<wbr/>Info<wbr/>Luminance<wbr/>Range</a>.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The desired mode for the camera device's
auto-exposure routine.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.control.aeAvailableModes">android.<wbr/>control.<wbr/>ae<wbr/>Available<wbr/>Modes</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This control is only effective if <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> is
AUTO.<wbr/></p>
<p>When set to any of the ON modes,<wbr/> the camera device's
auto-exposure routine is enabled,<wbr/> overriding the
application's selected exposure time,<wbr/> sensor sensitivity,<wbr/>
and frame duration (<a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a>,<wbr/>
<a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a>,<wbr/> and
<a href="#controls_android.sensor.frameDuration">android.<wbr/>sensor.<wbr/>frame<wbr/>Duration</a>).<wbr/> If <a href="#controls_android.control.aePriorityMode">android.<wbr/>control.<wbr/>ae<wbr/>Priority<wbr/>Mode</a> is
enabled,<wbr/> the relevant priority CaptureRequest settings will not be overridden.<wbr/>
See <a href="#controls_android.control.aePriorityMode">android.<wbr/>control.<wbr/>ae<wbr/>Priority<wbr/>Mode</a> for more details.<wbr/> If one of the FLASH modes
is selected,<wbr/> the camera device's flash unit controls are
also overridden.<wbr/></p>
<p>The FLASH modes are only available if the camera device
has a flash unit (<a href="#static_android.flash.info.available">android.<wbr/>flash.<wbr/>info.<wbr/>available</a> is <code>true</code>).<wbr/></p>
<p>If flash TORCH mode is desired,<wbr/> this field must be set to
ON or OFF,<wbr/> and <a href="#controls_android.flash.mode">android.<wbr/>flash.<wbr/>mode</a> set to TORCH.<wbr/></p>
<p>When set to any of the ON modes,<wbr/> the values chosen by the
camera device auto-exposure routine for the overridden
fields for a given capture will be available in its
CaptureResult.<wbr/></p>
<p>When <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> is AE_<wbr/>MODE_<wbr/>ON and if the device
supports manual flash strength control,<wbr/> i.<wbr/>e.,<wbr/>
if <a href="#static_android.flash.singleStrengthMaxLevel">android.<wbr/>flash.<wbr/>single<wbr/>Strength<wbr/>Max<wbr/>Level</a> and
<a href="#static_android.flash.torchStrengthMaxLevel">android.<wbr/>flash.<wbr/>torch<wbr/>Strength<wbr/>Max<wbr/>Level</a> are greater than 1,<wbr/> then
the auto-exposure (AE) precapture metering sequence should be
triggered to avoid the image being incorrectly exposed at
different <a href="#controls_android.flash.strengthLevel">android.<wbr/>flash.<wbr/>strength<wbr/>Level</a>.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.aeRegions">
<td class="entry_name
" rowspan="5">
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>
<span class="entry_type_visibility"> [public as meteringRectangle]</span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of metering areas to use for auto-exposure adjustment.<wbr/></p>
</td>
<td class="entry_units">
Pixel coordinates within android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size or
android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size depending on
distortion correction capability and mode
</td>
<td class="entry_range">
<p>Coordinates must be between <code>[(0,<wbr/>0),<wbr/> (width,<wbr/> height))</code> of
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a> or <a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>
depending on distortion correction capability and mode</p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Not available if <a href="#static_android.control.maxRegionsAe">android.<wbr/>control.<wbr/>max<wbr/>Regions<wbr/>Ae</a> is 0.<wbr/>
Otherwise will always be present.<wbr/></p>
<p>The maximum number of regions supported by the device is determined by the value
of <a href="#static_android.control.maxRegionsAe">android.<wbr/>control.<wbr/>max<wbr/>Regions<wbr/>Ae</a>.<wbr/></p>
<p>For devices not supporting <a href="#controls_android.distortionCorrection.mode">android.<wbr/>distortion<wbr/>Correction.<wbr/>mode</a> control,<wbr/> the coordinate
system always follows that of <a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>,<wbr/> with (0,<wbr/>0) being
the top-left pixel in the active pixel array,<wbr/> and
(<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>width - 1,<wbr/>
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>height - 1) being the bottom-right pixel in the
active pixel array.<wbr/></p>
<p>For devices supporting <a href="#controls_android.distortionCorrection.mode">android.<wbr/>distortion<wbr/>Correction.<wbr/>mode</a> control,<wbr/> the coordinate
system depends on the mode being set.<wbr/>
When the distortion correction mode is OFF,<wbr/> the coordinate system follows
<a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>,<wbr/> with
<code>(0,<wbr/> 0)</code> being the top-left pixel of the pre-correction active array,<wbr/> and
(<a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>.<wbr/>width - 1,<wbr/>
<a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>.<wbr/>height - 1) being the bottom-right
pixel in the pre-correction active pixel array.<wbr/>
When the distortion correction mode is not OFF,<wbr/> the coordinate system follows
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>,<wbr/> with
<code>(0,<wbr/> 0)</code> being the top-left pixel of the active array,<wbr/> and
(<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>width - 1,<wbr/>
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>height - 1) being the bottom-right pixel in the
active pixel array.<wbr/></p>
<p>The weight must be within <code>[0,<wbr/> 1000]</code>,<wbr/> and represents a weight
for every pixel in the area.<wbr/> This means that a large metering area
with the same weight as a smaller area will have more effect in
the metering result.<wbr/> Metering areas can partially overlap and the
camera device will add the weights in the overlap region.<wbr/></p>
<p>The weights are relative to weights of other exposure metering regions,<wbr/> so if only one
region is used,<wbr/> all non-zero weights will have the same effect.<wbr/> A region with 0
weight is ignored.<wbr/></p>
<p>If all regions have 0 weight,<wbr/> then no specific metering area needs to be used by the
camera device.<wbr/></p>
<p>If the metering region is outside the used <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> returned in
capture result metadata,<wbr/> the camera device will ignore the sections outside the crop
region and output only the intersection rectangle as the metering region in the result
metadata.<wbr/> If the region is entirely outside the crop region,<wbr/> it will be ignored and
not reported in the result metadata.<wbr/></p>
<p>When setting the AE metering regions,<wbr/> the application must consider the additional
crop resulted from the aspect ratio differences between the preview stream and
<a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a>.<wbr/> For example,<wbr/> if the <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> is the full
active array size with 4:3 aspect ratio,<wbr/> and the preview stream is 16:9,<wbr/>
the boundary of AE regions will be [0,<wbr/> y_<wbr/>crop] and
[active_<wbr/>width,<wbr/> active_<wbr/>height - 2 * y_<wbr/>crop] rather than [0,<wbr/> 0] and
[active_<wbr/>width,<wbr/> active_<wbr/>height],<wbr/> where y_<wbr/>crop is the additional crop due to aspect ratio
mismatch.<wbr/></p>
<p>Starting from API level 30,<wbr/> the coordinate system of activeArraySize or
preCorrectionActiveArraySize is used to represent post-zoomRatio field of view,<wbr/> not
pre-zoom field of view.<wbr/> This means that the same aeRegions values at different
<a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> represent different parts of the scene.<wbr/> The aeRegions
coordinates are relative to the activeArray/<wbr/>preCorrectionActiveArray representing the
zoomed field of view.<wbr/> If <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> is set to 1.<wbr/>0 (default),<wbr/> the same
aeRegions at different <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> still represent the same parts of the
scene as they do before.<wbr/> See <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> for details.<wbr/> Whether to use
activeArraySize or preCorrectionActiveArraySize still depends on distortion correction
mode.<wbr/></p>
<p>For camera devices with the
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR">Camera<wbr/>Metadata#REQUEST_<wbr/>AVAILABLE_<wbr/>CAPABILITIES_<wbr/>ULTRA_<wbr/>HIGH_<wbr/>RESOLUTION_<wbr/>SENSOR</a>
capability or devices where
<a href="https://developer.android.com/reference/CameraCharacteristics.html#getAvailableCaptureRequestKeys">CameraCharacteristics#getAvailableCaptureRequestKeys</a>
lists <a href="#controls_android.sensor.pixelMode">android.<wbr/>sensor.<wbr/>pixel<wbr/>Mode</a>,<wbr/>
<a href="#static_android.sensor.info.activeArraySizeMaximumResolution">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size<wbr/>Maximum<wbr/>Resolution</a> /<wbr/>
<a href="#static_android.sensor.info.preCorrectionActiveArraySizeMaximumResolution">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size<wbr/>Maximum<wbr/>Resolution</a> must be used as the
coordinate system for requests where <a href="#controls_android.sensor.pixelMode">android.<wbr/>sensor.<wbr/>pixel<wbr/>Mode</a> is set to
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION">Camera<wbr/>Metadata#SENSOR_<wbr/>PIXEL_<wbr/>MODE_<wbr/>MAXIMUM_<wbr/>RESOLUTION</a>.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>The HAL level representation of MeteringRectangle[] is a
int[5 * area_<wbr/>count].<wbr/>
Every five elements represent a metering region of
(xmin,<wbr/> ymin,<wbr/> xmax,<wbr/> ymax,<wbr/> weight).<wbr/>
The rectangle is defined to be inclusive on xmin and ymin,<wbr/> but
exclusive on xmax and ymax.<wbr/>
HAL must always report metering regions in the coordinate system of pre-correction
active array.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.aeTargetFpsRange">
<td class="entry_name
" rowspan="3">
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>
<span class="entry_type_visibility"> [public as rangeInt]</span>
<span class="entry_type_hwlevel">[legacy] </span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Range over which the auto-exposure routine can
adjust the capture frame rate to maintain good
exposure.<wbr/></p>
</td>
<td class="entry_units">
Frames per second (FPS)
</td>
<td class="entry_range">
<p>Any of the entries in <a href="#static_android.control.aeAvailableTargetFpsRanges">android.<wbr/>control.<wbr/>ae<wbr/>Available<wbr/>Target<wbr/>Fps<wbr/>Ranges</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Only constrains auto-exposure (AE) algorithm,<wbr/> not
manual control of <a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a> and
<a href="#controls_android.sensor.frameDuration">android.<wbr/>sensor.<wbr/>frame<wbr/>Duration</a>.<wbr/></p>
<p>Note that the actual achievable max framerate also depends on the minimum frame
duration of the output streams.<wbr/> The max frame rate will be
<code>min(aeTargetFpsRange.<wbr/>maxFps,<wbr/> 1 /<wbr/> max(individual stream min durations))</code>.<wbr/> For example,<wbr/>
if the application sets this key to <code>{60,<wbr/> 60}</code>,<wbr/> but the maximum minFrameDuration among
all configured streams is 33ms,<wbr/> the maximum framerate won't be 60fps,<wbr/> but will be
30fps.<wbr/></p>
<p>To start a CaptureSession with a target FPS range different from the
capture request template's default value,<wbr/> the application
is strongly recommended to call
<a href="https://developer.android.com/reference/android/hardware/camera2/params/SessionConfiguration.html#setSessionParameters">SessionConfiguration#setSessionParameters</a>
with the target fps range before creating the capture session.<wbr/> The aeTargetFpsRange is
typically a session parameter.<wbr/> Specifying it at session creation time helps avoid
session reconfiguration delays in cases like 60fps or high speed recording.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.aePrecaptureTrigger">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[limited] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">IDLE (v3.2)</span>
<span class="entry_type_enum_notes"><p>The trigger is idle.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">START (v3.2)</span>
<span class="entry_type_enum_notes"><p>The precapture metering sequence will be started
by the camera device.<wbr/></p>
<p>The exact effect of the precapture trigger depends on
the current AE mode and state.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CANCEL (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device will cancel any currently active or completed
precapture metering sequence,<wbr/> the auto-exposure routine will return to its
initial state.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether the camera device will trigger a precapture
metering sequence when it processes this request.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This entry is normally set to IDLE,<wbr/> or is not
included at all in the request settings.<wbr/> When included and
set to START,<wbr/> the camera device will trigger the auto-exposure (AE)
precapture metering sequence.<wbr/></p>
<p>When set to CANCEL,<wbr/> the camera device will cancel any active
precapture metering trigger,<wbr/> and return to its initial AE state.<wbr/>
If a precapture metering sequence is already completed,<wbr/> and the camera
device has implicitly locked the AE for subsequent still capture,<wbr/> the
CANCEL trigger will unlock the AE and return to its initial AE state.<wbr/></p>
<p>The precapture sequence should be triggered before starting a
high-quality still capture for final metering decisions to
be made,<wbr/> and for firing pre-capture flash pulses to estimate
scene brightness and required final capture flash power,<wbr/> when
the flash is enabled.<wbr/></p>
<p>Flash is enabled during precapture sequence when:</p>
<ul>
<li>AE mode is ON_<wbr/>ALWAYS_<wbr/>FLASH</li>
<li>AE mode is ON_<wbr/>AUTO_<wbr/>FLASH and the scene is deemed too dark without flash,<wbr/> or</li>
<li>AE mode is ON and flash mode is TORCH or SINGLE</li>
</ul>
<p>Normally,<wbr/> this entry should be set to START for only single request,<wbr/> and the
application should wait until the sequence completes before starting a new one.<wbr/></p>
<p>When a precapture metering sequence is finished,<wbr/> the camera device
may lock the auto-exposure routine internally to be able to accurately expose the
subsequent still capture image (<code><a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> == STILL_<wbr/>CAPTURE</code>).<wbr/>
For this case,<wbr/> the AE may not resume normal scan if no subsequent still capture is
submitted.<wbr/> To ensure that the AE routine restarts normal scan,<wbr/> the application should
submit a request with <code><a href="#controls_android.control.aeLock">android.<wbr/>control.<wbr/>ae<wbr/>Lock</a> == true</code>,<wbr/> followed by a request
with <code><a href="#controls_android.control.aeLock">android.<wbr/>control.<wbr/>ae<wbr/>Lock</a> == false</code>,<wbr/> if the application decides not to submit a
still capture request after the precapture sequence completes.<wbr/> Alternatively,<wbr/> for
API level 23 or newer devices,<wbr/> the CANCEL can be used to unlock the camera device
internally locked AE if the application doesn't submit a still capture request after
the AE precapture trigger.<wbr/> Note that,<wbr/> the CANCEL was added in API level 23,<wbr/> and must not
be used in devices that have earlier API levels.<wbr/></p>
<p>The exact effect of auto-exposure (AE) precapture trigger
depends on the current AE mode and state; see
<a href="#dynamic_android.control.aeState">android.<wbr/>control.<wbr/>ae<wbr/>State</a> for AE precapture state transition
details.<wbr/></p>
<p>On LEGACY-level devices,<wbr/> the precapture trigger is not supported;
capturing a high-resolution JPEG image will automatically trigger a
precapture sequence before the high-resolution capture,<wbr/> including
potentially firing a pre-capture flash.<wbr/></p>
<p>Using the precapture trigger and the auto-focus trigger <a href="#controls_android.control.afTrigger">android.<wbr/>control.<wbr/>af<wbr/>Trigger</a>
simultaneously is allowed.<wbr/> However,<wbr/> since these triggers often require cooperation between
the auto-focus and auto-exposure routines (for example,<wbr/> the may need to be enabled for a
focus sweep),<wbr/> the camera device may delay acting on a later trigger until the previous
trigger has been fully handled.<wbr/> This may lead to longer intervals between the trigger and
changes to <a href="#dynamic_android.control.aeState">android.<wbr/>control.<wbr/>ae<wbr/>State</a> indicating the start of the precapture sequence,<wbr/> for
example.<wbr/></p>
<p>If both the precapture and the auto-focus trigger are activated on the same request,<wbr/> then
the camera device will complete them in the optimal order for that device.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>The HAL must support triggering the AE precapture trigger while an AF trigger is active
(and vice versa),<wbr/> or at the same time as the AF trigger.<wbr/> It is acceptable for the HAL to
treat these as two consecutive triggers,<wbr/> for example handling the AF trigger and then the
AE trigger.<wbr/> Or the HAL may choose to optimize the case with both triggers fired at once,<wbr/>
to minimize the latency for converging both focus and exposure/<wbr/>flash usage.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.aeState">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>ae<wbr/>State
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[limited] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">INACTIVE (v3.2)</span>
<span class="entry_type_enum_notes"><p>AE is off or recently reset.<wbr/></p>
<p>When a camera device is opened,<wbr/> it starts in
this state.<wbr/> This is a transient state,<wbr/> the camera device may skip reporting
this state in capture result.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SEARCHING (v3.2)</span>
<span class="entry_type_enum_notes"><p>AE doesn't yet have a good set of control values
for the current scene.<wbr/></p>
<p>This is a transient state,<wbr/> the camera device may skip
reporting this state in capture result.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CONVERGED (v3.2)</span>
<span class="entry_type_enum_notes"><p>AE has a good set of control values for the
current scene.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">LOCKED (v3.2)</span>
<span class="entry_type_enum_notes"><p>AE has been locked.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">FLASH_REQUIRED (v3.2)</span>
<span class="entry_type_enum_notes"><p>AE has a good set of control values,<wbr/> but flash
needs to be fired for good quality still
capture.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">PRECAPTURE (v3.2)</span>
<span class="entry_type_enum_notes"><p>AE has been asked to do a precapture sequence
and is currently executing it.<wbr/></p>
<p>Precapture can be triggered through setting
<a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a> to START.<wbr/> Currently
active and completed (if it causes camera device internal AE lock) precapture
metering sequence can be canceled through setting
<a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a> to CANCEL.<wbr/></p>
<p>Once PRECAPTURE completes,<wbr/> AE will transition to CONVERGED
or FLASH_<wbr/>REQUIRED as appropriate.<wbr/> This is a transient
state,<wbr/> the camera device may skip reporting this state in
capture result.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Current state of the auto-exposure (AE) algorithm.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Switching between or enabling AE modes (<a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a>) always
resets the AE state to INACTIVE.<wbr/> Similarly,<wbr/> switching between <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a>,<wbr/>
or <a href="#controls_android.control.sceneMode">android.<wbr/>control.<wbr/>scene<wbr/>Mode</a> if <code><a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> == USE_<wbr/>SCENE_<wbr/>MODE</code> resets all
the algorithm states to INACTIVE.<wbr/></p>
<p>The camera device can do several state transitions between two results,<wbr/> if it is
allowed by the state transition table.<wbr/> For example: INACTIVE may never actually be
seen in a result.<wbr/></p>
<p>The state in the result is the state for this image (in sync with this image): if
AE state becomes CONVERGED,<wbr/> then the image data associated with this result should
be good to use.<wbr/></p>
<p>Below are state transition tables for different AE modes.<wbr/></p>
<table>
<thead>
<tr>
<th style="text-align: center;">State</th>
<th style="text-align: center;">Transition Cause</th>
<th style="text-align: center;">New State</th>
<th style="text-align: center;">Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;"></td>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Camera device auto exposure algorithm is disabled</td>
</tr>
</tbody>
</table>
<p>When <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> is AE_<wbr/>MODE_<wbr/>ON*:</p>
<table>
<thead>
<tr>
<th style="text-align: center;">State</th>
<th style="text-align: center;">Transition Cause</th>
<th style="text-align: center;">New State</th>
<th style="text-align: center;">Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Camera device initiates AE scan</td>
<td style="text-align: center;">SEARCHING</td>
<td style="text-align: center;">Values changing</td>
</tr>
<tr>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;"><a href="#controls_android.control.aeLock">android.<wbr/>control.<wbr/>ae<wbr/>Lock</a> is ON</td>
<td style="text-align: center;">LOCKED</td>
<td style="text-align: center;">Values locked</td>
</tr>
<tr>
<td style="text-align: center;">SEARCHING</td>
<td style="text-align: center;">Camera device finishes AE scan</td>
<td style="text-align: center;">CONVERGED</td>
<td style="text-align: center;">Good values,<wbr/> not changing</td>
</tr>
<tr>
<td style="text-align: center;">SEARCHING</td>
<td style="text-align: center;">Camera device finishes AE scan</td>
<td style="text-align: center;">FLASH_<wbr/>REQUIRED</td>
<td style="text-align: center;">Converged but too dark w/<wbr/>o flash</td>
</tr>
<tr>
<td style="text-align: center;">SEARCHING</td>
<td style="text-align: center;"><a href="#controls_android.control.aeLock">android.<wbr/>control.<wbr/>ae<wbr/>Lock</a> is ON</td>
<td style="text-align: center;">LOCKED</td>
<td style="text-align: center;">Values locked</td>
</tr>
<tr>
<td style="text-align: center;">CONVERGED</td>
<td style="text-align: center;">Camera device initiates AE scan</td>
<td style="text-align: center;">SEARCHING</td>
<td style="text-align: center;">Values changing</td>
</tr>
<tr>
<td style="text-align: center;">CONVERGED</td>
<td style="text-align: center;"><a href="#controls_android.control.aeLock">android.<wbr/>control.<wbr/>ae<wbr/>Lock</a> is ON</td>
<td style="text-align: center;">LOCKED</td>
<td style="text-align: center;">Values locked</td>
</tr>
<tr>
<td style="text-align: center;">FLASH_<wbr/>REQUIRED</td>
<td style="text-align: center;">Camera device initiates AE scan</td>
<td style="text-align: center;">SEARCHING</td>
<td style="text-align: center;">Values changing</td>
</tr>
<tr>
<td style="text-align: center;">FLASH_<wbr/>REQUIRED</td>
<td style="text-align: center;"><a href="#controls_android.control.aeLock">android.<wbr/>control.<wbr/>ae<wbr/>Lock</a> is ON</td>
<td style="text-align: center;">LOCKED</td>
<td style="text-align: center;">Values locked</td>
</tr>
<tr>
<td style="text-align: center;">LOCKED</td>
<td style="text-align: center;"><a href="#controls_android.control.aeLock">android.<wbr/>control.<wbr/>ae<wbr/>Lock</a> is OFF</td>
<td style="text-align: center;">SEARCHING</td>
<td style="text-align: center;">Values not good after unlock</td>
</tr>
<tr>
<td style="text-align: center;">LOCKED</td>
<td style="text-align: center;"><a href="#controls_android.control.aeLock">android.<wbr/>control.<wbr/>ae<wbr/>Lock</a> is OFF</td>
<td style="text-align: center;">CONVERGED</td>
<td style="text-align: center;">Values good after unlock</td>
</tr>
<tr>
<td style="text-align: center;">LOCKED</td>
<td style="text-align: center;"><a href="#controls_android.control.aeLock">android.<wbr/>control.<wbr/>ae<wbr/>Lock</a> is OFF</td>
<td style="text-align: center;">FLASH_<wbr/>REQUIRED</td>
<td style="text-align: center;">Exposure good,<wbr/> but too dark</td>
</tr>
<tr>
<td style="text-align: center;">PRECAPTURE</td>
<td style="text-align: center;">Sequence done.<wbr/> <a href="#controls_android.control.aeLock">android.<wbr/>control.<wbr/>ae<wbr/>Lock</a> is OFF</td>
<td style="text-align: center;">CONVERGED</td>
<td style="text-align: center;">Ready for high-quality capture</td>
</tr>
<tr>
<td style="text-align: center;">PRECAPTURE</td>
<td style="text-align: center;">Sequence done.<wbr/> <a href="#controls_android.control.aeLock">android.<wbr/>control.<wbr/>ae<wbr/>Lock</a> is ON</td>
<td style="text-align: center;">LOCKED</td>
<td style="text-align: center;">Ready for high-quality capture</td>
</tr>
<tr>
<td style="text-align: center;">LOCKED</td>
<td style="text-align: center;">aeLock is ON and aePrecaptureTrigger is START</td>
<td style="text-align: center;">LOCKED</td>
<td style="text-align: center;">Precapture trigger is ignored when AE is already locked</td>
</tr>
<tr>
<td style="text-align: center;">LOCKED</td>
<td style="text-align: center;">aeLock is ON and aePrecaptureTrigger is CANCEL</td>
<td style="text-align: center;">LOCKED</td>
<td style="text-align: center;">Precapture trigger is ignored when AE is already locked</td>
</tr>
<tr>
<td style="text-align: center;">Any state (excluding LOCKED)</td>
<td style="text-align: center;"><a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a> is START</td>
<td style="text-align: center;">PRECAPTURE</td>
<td style="text-align: center;">Start AE precapture metering sequence</td>
</tr>
<tr>
<td style="text-align: center;">Any state (excluding LOCKED)</td>
<td style="text-align: center;"><a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a> is CANCEL</td>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Currently active precapture metering sequence is canceled</td>
</tr>
</tbody>
</table>
<p>If the camera device supports AE external flash mode (ON_<wbr/>EXTERNAL_<wbr/>FLASH is included in
<a href="#static_android.control.aeAvailableModes">android.<wbr/>control.<wbr/>ae<wbr/>Available<wbr/>Modes</a>),<wbr/> <a href="#dynamic_android.control.aeState">android.<wbr/>control.<wbr/>ae<wbr/>State</a> must be FLASH_<wbr/>REQUIRED after
the camera device finishes AE scan and it's too dark without flash.<wbr/></p>
<p>For the above table,<wbr/> the camera device may skip reporting any state changes that happen
without application intervention (i.<wbr/>e.<wbr/> mode switch,<wbr/> trigger,<wbr/> locking).<wbr/> Any state that
can be skipped in that manner is called a transient state.<wbr/></p>
<p>For example,<wbr/> for above AE modes (AE_<wbr/>MODE_<wbr/>ON*),<wbr/> in addition to the state transitions
listed in above table,<wbr/> it is also legal for the camera device to skip one or more
transient states between two results.<wbr/> See below table for examples:</p>
<table>
<thead>
<tr>
<th style="text-align: center;">State</th>
<th style="text-align: center;">Transition Cause</th>
<th style="text-align: center;">New State</th>
<th style="text-align: center;">Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Camera device finished AE scan</td>
<td style="text-align: center;">CONVERGED</td>
<td style="text-align: center;">Values are already good,<wbr/> transient states are skipped by camera device.<wbr/></td>
</tr>
<tr>
<td style="text-align: center;">Any state (excluding LOCKED)</td>
<td style="text-align: center;"><a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a> is START,<wbr/> sequence done</td>
<td style="text-align: center;">FLASH_<wbr/>REQUIRED</td>
<td style="text-align: center;">Converged but too dark w/<wbr/>o flash after a precapture sequence,<wbr/> transient states are skipped by camera device.<wbr/></td>
</tr>
<tr>
<td style="text-align: center;">Any state (excluding LOCKED)</td>
<td style="text-align: center;"><a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a> is START,<wbr/> sequence done</td>
<td style="text-align: center;">CONVERGED</td>
<td style="text-align: center;">Converged after a precapture sequence,<wbr/> transient states are skipped by camera device.<wbr/></td>
</tr>
<tr>
<td style="text-align: center;">Any state (excluding LOCKED)</td>
<td style="text-align: center;"><a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a> is CANCEL,<wbr/> converged</td>
<td style="text-align: center;">FLASH_<wbr/>REQUIRED</td>
<td style="text-align: center;">Converged but too dark w/<wbr/>o flash after a precapture sequence is canceled,<wbr/> transient states are skipped by camera device.<wbr/></td>
</tr>
<tr>
<td style="text-align: center;">Any state (excluding LOCKED)</td>
<td style="text-align: center;"><a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a> is CANCEL,<wbr/> converged</td>
<td style="text-align: center;">CONVERGED</td>
<td style="text-align: center;">Converged after a precapture sequences canceled,<wbr/> transient states are skipped by camera device.<wbr/></td>
</tr>
<tr>
<td style="text-align: center;">CONVERGED</td>
<td style="text-align: center;">Camera device finished AE scan</td>
<td style="text-align: center;">FLASH_<wbr/>REQUIRED</td>
<td style="text-align: center;">Converged but too dark w/<wbr/>o flash after a new scan,<wbr/> transient states are skipped by camera device.<wbr/></td>
</tr>
<tr>
<td style="text-align: center;">FLASH_<wbr/>REQUIRED</td>
<td style="text-align: center;">Camera device finished AE scan</td>
<td style="text-align: center;">CONVERGED</td>
<td style="text-align: center;">Converged after a new scan,<wbr/> transient states are skipped by camera device.<wbr/></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.afMode">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>af<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>The auto-focus routine does not control the lens;
<a href="#controls_android.lens.focusDistance">android.<wbr/>lens.<wbr/>focus<wbr/>Distance</a> is controlled by the
application.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">AUTO (v3.2)</span>
<span class="entry_type_enum_notes"><p>Basic automatic focus mode.<wbr/></p>
<p>In this mode,<wbr/> the lens does not move unless
the autofocus trigger action is called.<wbr/> When that trigger
is activated,<wbr/> AF will transition to ACTIVE_<wbr/>SCAN,<wbr/> then to
the outcome of the scan (FOCUSED or NOT_<wbr/>FOCUSED).<wbr/></p>
<p>Always supported if lens is not fixed focus.<wbr/></p>
<p>Use <a href="#static_android.lens.info.minimumFocusDistance">android.<wbr/>lens.<wbr/>info.<wbr/>minimum<wbr/>Focus<wbr/>Distance</a> to determine if lens
is fixed-focus.<wbr/></p>
<p>Triggering AF_<wbr/>CANCEL resets the lens position to default,<wbr/>
and sets the AF state to INACTIVE.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">MACRO (v3.2)</span>
<span class="entry_type_enum_notes"><p>Close-up focusing mode.<wbr/></p>
<p>In this mode,<wbr/> the lens does not move unless the
autofocus trigger action is called.<wbr/> When that trigger is
activated,<wbr/> AF will transition to ACTIVE_<wbr/>SCAN,<wbr/> then to
the outcome of the scan (FOCUSED or NOT_<wbr/>FOCUSED).<wbr/> This
mode is optimized for focusing on objects very close to
the camera.<wbr/></p>
<p>When that trigger is activated,<wbr/> AF will 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/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CONTINUOUS_VIDEO (v3.2)</span>
<span class="entry_type_enum_notes"><p>In this mode,<wbr/> the AF algorithm modifies the lens
position continually to attempt to provide a
constantly-in-focus image stream.<wbr/></p>
<p>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/></p>
<p>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/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CONTINUOUS_PICTURE (v3.2)</span>
<span class="entry_type_enum_notes"><p>In this mode,<wbr/> the AF algorithm modifies the lens
position continually to attempt to provide a
constantly-in-focus image stream.<wbr/></p>
<p>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/></p>
<p>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/></p></span>
</li>
<li>
<span class="entry_type_enum_name">EDOF (v3.2)</span>
<span class="entry_type_enum_notes"><p>Extended depth of field (digital focus) mode.<wbr/></p>
<p>The camera device will produce images with an extended
depth of field automatically; no special focusing
operations need to be done before taking a picture.<wbr/></p>
<p>AF triggers are ignored,<wbr/> and the AF state will always be
INACTIVE.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether auto-focus (AF) is currently enabled,<wbr/> and what
mode it is set to.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.control.afAvailableModes">android.<wbr/>control.<wbr/>af<wbr/>Available<wbr/>Modes</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Only effective if <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> = AUTO and the lens is not fixed focus
(i.<wbr/>e.<wbr/> <code><a href="#static_android.lens.info.minimumFocusDistance">android.<wbr/>lens.<wbr/>info.<wbr/>minimum<wbr/>Focus<wbr/>Distance</a> &gt; 0</code>).<wbr/> Also note that
when <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> is OFF,<wbr/> the behavior of AF is device
dependent.<wbr/> It is recommended to lock AF by using <a href="#controls_android.control.afTrigger">android.<wbr/>control.<wbr/>af<wbr/>Trigger</a> before
setting <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> to OFF,<wbr/> or set AF mode to OFF when AE is OFF.<wbr/></p>
<p>If the lens is controlled by the camera device auto-focus algorithm,<wbr/>
the camera device will report the current AF status in <a href="#dynamic_android.control.afState">android.<wbr/>control.<wbr/>af<wbr/>State</a>
in result metadata.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When afMode is AUTO or MACRO,<wbr/> the lens must not move until an AF trigger is sent in a
request (<a href="#controls_android.control.afTrigger">android.<wbr/>control.<wbr/>af<wbr/>Trigger</a> <code>==</code> START).<wbr/> After an AF trigger,<wbr/> the afState will end
up with either FOCUSED_<wbr/>LOCKED or NOT_<wbr/>FOCUSED_<wbr/>LOCKED state (see
<a href="#dynamic_android.control.afState">android.<wbr/>control.<wbr/>af<wbr/>State</a> for detailed state transitions),<wbr/> which indicates that the lens is
locked and will not move.<wbr/> If camera movement (e.<wbr/>g.<wbr/> tilting camera) causes the lens to move
after the lens is locked,<wbr/> the HAL must compensate this movement appropriately such that
the same focal plane remains in focus.<wbr/></p>
<p>When afMode is one of the continuous auto focus modes,<wbr/> the HAL is free to start a AF
scan whenever it's not locked.<wbr/> When the lens is locked after an AF trigger
(see <a href="#dynamic_android.control.afState">android.<wbr/>control.<wbr/>af<wbr/>State</a> for detailed state transitions),<wbr/> the HAL should maintain the
same lock behavior as above.<wbr/></p>
<p>When afMode is OFF,<wbr/> the application controls focus manually.<wbr/> The accuracy of the
focus distance control depends on the <a href="#static_android.lens.info.focusDistanceCalibration">android.<wbr/>lens.<wbr/>info.<wbr/>focus<wbr/>Distance<wbr/>Calibration</a>.<wbr/>
However,<wbr/> the lens must not move regardless of the camera movement for any focus distance
manual control.<wbr/></p>
<p>To put this in concrete terms,<wbr/> if the camera has lens elements which may move based on
camera orientation or motion (e.<wbr/>g.<wbr/> due to gravity),<wbr/> then the HAL must drive the lens to
remain in a fixed position invariant to the camera's orientation or motion,<wbr/> for example,<wbr/>
by using accelerometer measurements in the lens control logic.<wbr/> This is a typical issue
that will arise on camera modules with open-loop VCMs.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.afRegions">
<td class="entry_name
" rowspan="5">
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>
<span class="entry_type_visibility"> [public as meteringRectangle]</span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of metering areas to use for auto-focus.<wbr/></p>
</td>
<td class="entry_units">
Pixel coordinates within android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size or
android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size depending on
distortion correction capability and mode
</td>
<td class="entry_range">
<p>Coordinates must be between <code>[(0,<wbr/>0),<wbr/> (width,<wbr/> height))</code> of
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a> or <a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>
depending on distortion correction capability and mode</p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Not available if <a href="#static_android.control.maxRegionsAf">android.<wbr/>control.<wbr/>max<wbr/>Regions<wbr/>Af</a> is 0.<wbr/>
Otherwise will always be present.<wbr/></p>
<p>The maximum number of focus areas supported by the device is determined by the value
of <a href="#static_android.control.maxRegionsAf">android.<wbr/>control.<wbr/>max<wbr/>Regions<wbr/>Af</a>.<wbr/></p>
<p>For devices not supporting <a href="#controls_android.distortionCorrection.mode">android.<wbr/>distortion<wbr/>Correction.<wbr/>mode</a> control,<wbr/> the coordinate
system always follows that of <a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>,<wbr/> with (0,<wbr/>0) being
the top-left pixel in the active pixel array,<wbr/> and
(<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>width - 1,<wbr/>
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>height - 1) being the bottom-right pixel in the
active pixel array.<wbr/></p>
<p>For devices supporting <a href="#controls_android.distortionCorrection.mode">android.<wbr/>distortion<wbr/>Correction.<wbr/>mode</a> control,<wbr/> the coordinate
system depends on the mode being set.<wbr/>
When the distortion correction mode is OFF,<wbr/> the coordinate system follows
<a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>,<wbr/> with
<code>(0,<wbr/> 0)</code> being the top-left pixel of the pre-correction active array,<wbr/> and
(<a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>.<wbr/>width - 1,<wbr/>
<a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>.<wbr/>height - 1) being the bottom-right
pixel in the pre-correction active pixel array.<wbr/>
When the distortion correction mode is not OFF,<wbr/> the coordinate system follows
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>,<wbr/> with
<code>(0,<wbr/> 0)</code> being the top-left pixel of the active array,<wbr/> and
(<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>width - 1,<wbr/>
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>height - 1) being the bottom-right pixel in the
active pixel array.<wbr/></p>
<p>The weight must be within <code>[0,<wbr/> 1000]</code>,<wbr/> and represents a weight
for every pixel in the area.<wbr/> This means that a large metering area
with the same weight as a smaller area will have more effect in
the metering result.<wbr/> Metering areas can partially overlap and the
camera device will add the weights in the overlap region.<wbr/></p>
<p>The weights are relative to weights of other metering regions,<wbr/> so if only one region
is used,<wbr/> all non-zero weights will have the same effect.<wbr/> A region with 0 weight is
ignored.<wbr/></p>
<p>If all regions have 0 weight,<wbr/> then no specific metering area needs to be used by the
camera device.<wbr/> The capture result will either be a zero weight region as well,<wbr/> or
the region selected by the camera device as the focus area of interest.<wbr/></p>
<p>If the metering region is outside the used <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> returned in
capture result metadata,<wbr/> the camera device will ignore the sections outside the crop
region and output only the intersection rectangle as the metering region in the result
metadata.<wbr/> If the region is entirely outside the crop region,<wbr/> it will be ignored and
not reported in the result metadata.<wbr/></p>
<p>When setting the AF metering regions,<wbr/> the application must consider the additional
crop resulted from the aspect ratio differences between the preview stream and
<a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a>.<wbr/> For example,<wbr/> if the <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> is the full
active array size with 4:3 aspect ratio,<wbr/> and the preview stream is 16:9,<wbr/>
the boundary of AF regions will be [0,<wbr/> y_<wbr/>crop] and
[active_<wbr/>width,<wbr/> active_<wbr/>height - 2 * y_<wbr/>crop] rather than [0,<wbr/> 0] and
[active_<wbr/>width,<wbr/> active_<wbr/>height],<wbr/> where y_<wbr/>crop is the additional crop due to aspect ratio
mismatch.<wbr/></p>
<p>Starting from API level 30,<wbr/> the coordinate system of activeArraySize or
preCorrectionActiveArraySize is used to represent post-zoomRatio field of view,<wbr/> not
pre-zoom field of view.<wbr/> This means that the same afRegions values at different
<a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> represent different parts of the scene.<wbr/> The afRegions
coordinates are relative to the activeArray/<wbr/>preCorrectionActiveArray representing the
zoomed field of view.<wbr/> If <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> is set to 1.<wbr/>0 (default),<wbr/> the same
afRegions at different <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> still represent the same parts of the
scene as they do before.<wbr/> See <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> for details.<wbr/> Whether to use
activeArraySize or preCorrectionActiveArraySize still depends on distortion correction
mode.<wbr/></p>
<p>For camera devices with the
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR">Camera<wbr/>Metadata#REQUEST_<wbr/>AVAILABLE_<wbr/>CAPABILITIES_<wbr/>ULTRA_<wbr/>HIGH_<wbr/>RESOLUTION_<wbr/>SENSOR</a>
capability or devices where
<a href="https://developer.android.com/reference/CameraCharacteristics.html#getAvailableCaptureRequestKeys">CameraCharacteristics#getAvailableCaptureRequestKeys</a>
lists <a href="#controls_android.sensor.pixelMode">android.<wbr/>sensor.<wbr/>pixel<wbr/>Mode</a>,<wbr/>
<a href="#static_android.sensor.info.activeArraySizeMaximumResolution">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size<wbr/>Maximum<wbr/>Resolution</a> /<wbr/>
<a href="#static_android.sensor.info.preCorrectionActiveArraySizeMaximumResolution">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size<wbr/>Maximum<wbr/>Resolution</a> must be used as the
coordinate system for requests where <a href="#controls_android.sensor.pixelMode">android.<wbr/>sensor.<wbr/>pixel<wbr/>Mode</a> is set to
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION">Camera<wbr/>Metadata#SENSOR_<wbr/>PIXEL_<wbr/>MODE_<wbr/>MAXIMUM_<wbr/>RESOLUTION</a>.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>The HAL level representation of MeteringRectangle[] is a
int[5 * area_<wbr/>count].<wbr/>
Every five elements represent a metering region of
(xmin,<wbr/> ymin,<wbr/> xmax,<wbr/> ymax,<wbr/> weight).<wbr/>
The rectangle is defined to be inclusive on xmin and ymin,<wbr/> but
exclusive on xmax and ymax.<wbr/>
HAL must always report metering regions in the coordinate system of pre-correction
active array.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.afTrigger">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>af<wbr/>Trigger
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">IDLE (v3.2)</span>
<span class="entry_type_enum_notes"><p>The trigger is idle.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">START (v3.2)</span>
<span class="entry_type_enum_notes"><p>Autofocus will trigger now.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CANCEL (v3.2)</span>
<span class="entry_type_enum_notes"><p>Autofocus will return to its initial
state,<wbr/> and cancel any currently active trigger.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether the camera device will trigger autofocus for this request.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This entry is normally set to IDLE,<wbr/> or is not
included at all in the request settings.<wbr/></p>
<p>When included and set to START,<wbr/> the camera device will trigger the
autofocus algorithm.<wbr/> If autofocus is disabled,<wbr/> this trigger has no effect.<wbr/></p>
<p>When set to CANCEL,<wbr/> the camera device will cancel any active trigger,<wbr/>
and return to its initial AF state.<wbr/></p>
<p>Generally,<wbr/> applications should set this entry to START or CANCEL for only a
single capture,<wbr/> and then return it to IDLE (or not set at all).<wbr/> Specifying
START for multiple captures in a row means restarting the AF operation over
and over again.<wbr/></p>
<p>See <a href="#dynamic_android.control.afState">android.<wbr/>control.<wbr/>af<wbr/>State</a> for what the trigger means for each AF mode.<wbr/></p>
<p>Using the autofocus trigger and the precapture trigger <a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a>
simultaneously is allowed.<wbr/> However,<wbr/> since these triggers often require cooperation between
the auto-focus and auto-exposure routines (for example,<wbr/> the may need to be enabled for a
focus sweep),<wbr/> the camera device may delay acting on a later trigger until the previous
trigger has been fully handled.<wbr/> This may lead to longer intervals between the trigger and
changes to <a href="#dynamic_android.control.afState">android.<wbr/>control.<wbr/>af<wbr/>State</a>,<wbr/> for example.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>The HAL must support triggering the AF trigger while an AE precapture trigger is active
(and vice versa),<wbr/> or at the same time as the AE trigger.<wbr/> It is acceptable for the HAL to
treat these as two consecutive triggers,<wbr/> for example handling the AF trigger and then the
AE trigger.<wbr/> Or the HAL may choose to optimize the case with both triggers fired at once,<wbr/>
to minimize the latency for converging both focus and exposure/<wbr/>flash usage.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.afState">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>af<wbr/>State
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">INACTIVE (v3.2)</span>
<span class="entry_type_enum_notes"><p>AF is off or has not yet tried to scan/<wbr/>been asked
to scan.<wbr/></p>
<p>When a camera device is opened,<wbr/> it starts in this
state.<wbr/> This is a transient state,<wbr/> the camera device may
skip reporting this state in capture
result.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">PASSIVE_SCAN (v3.2)</span>
<span class="entry_type_enum_notes"><p>AF is currently performing an AF scan initiated the
camera device in a continuous autofocus mode.<wbr/></p>
<p>Only used by CONTINUOUS_<wbr/>* AF modes.<wbr/> This is a transient
state,<wbr/> the camera device may skip reporting this state in
capture result.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">PASSIVE_FOCUSED (v3.2)</span>
<span class="entry_type_enum_notes"><p>AF currently believes it is in focus,<wbr/> but may
restart scanning at any time.<wbr/></p>
<p>Only used by CONTINUOUS_<wbr/>* AF modes.<wbr/> This is a transient
state,<wbr/> the camera device may skip reporting this state in
capture result.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ACTIVE_SCAN (v3.2)</span>
<span class="entry_type_enum_notes"><p>AF is performing an AF scan because it was
triggered by AF trigger.<wbr/></p>
<p>Only used by AUTO or MACRO AF modes.<wbr/> This is a transient
state,<wbr/> the camera device may skip reporting this state in
capture result.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">FOCUSED_LOCKED (v3.2)</span>
<span class="entry_type_enum_notes"><p>AF believes it is focused correctly and has locked
focus.<wbr/></p>
<p>This state is reached only after an explicit START AF trigger has been
sent (<a href="#controls_android.control.afTrigger">android.<wbr/>control.<wbr/>af<wbr/>Trigger</a>),<wbr/> when good focus has been obtained.<wbr/></p>
<p>The lens will remain stationary until the AF mode (<a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a>) is changed or
a new AF trigger is sent to the camera device (<a href="#controls_android.control.afTrigger">android.<wbr/>control.<wbr/>af<wbr/>Trigger</a>).<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">NOT_FOCUSED_LOCKED (v3.2)</span>
<span class="entry_type_enum_notes"><p>AF has failed to focus successfully and has locked
focus.<wbr/></p>
<p>This state is reached only after an explicit START AF trigger has been
sent (<a href="#controls_android.control.afTrigger">android.<wbr/>control.<wbr/>af<wbr/>Trigger</a>),<wbr/> when good focus cannot be obtained.<wbr/></p>
<p>The lens will remain stationary until the AF mode (<a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a>) is changed or
a new AF trigger is sent to the camera device (<a href="#controls_android.control.afTrigger">android.<wbr/>control.<wbr/>af<wbr/>Trigger</a>).<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">PASSIVE_UNFOCUSED (v3.2)</span>
<span class="entry_type_enum_notes"><p>AF finished a passive scan without finding focus,<wbr/>
and may restart scanning at any time.<wbr/></p>
<p>Only used by CONTINUOUS_<wbr/>* AF modes.<wbr/> This is a transient state,<wbr/> the camera
device may skip reporting this state in capture result.<wbr/></p>
<p>LEGACY camera devices do not support this state.<wbr/> When a passive
scan has finished,<wbr/> it will always go to PASSIVE_<wbr/>FOCUSED.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Current state of auto-focus (AF) algorithm.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Switching between or enabling AF modes (<a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a>) always
resets the AF state to INACTIVE.<wbr/> Similarly,<wbr/> switching between <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a>,<wbr/>
or <a href="#controls_android.control.sceneMode">android.<wbr/>control.<wbr/>scene<wbr/>Mode</a> if <code><a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> == USE_<wbr/>SCENE_<wbr/>MODE</code> resets all
the algorithm states to INACTIVE.<wbr/></p>
<p>The camera device can do several state transitions between two results,<wbr/> if it is
allowed by the state transition table.<wbr/> For example: INACTIVE may never actually be
seen in a result.<wbr/></p>
<p>The state in the result is the state for this image (in sync with this image): if
AF state becomes FOCUSED,<wbr/> then the image data associated with this result should
be sharp.<wbr/></p>
<p>Below are state transition tables for different AF modes.<wbr/></p>
<p>When <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a> is AF_<wbr/>MODE_<wbr/>OFF or AF_<wbr/>MODE_<wbr/>EDOF:</p>
<table>
<thead>
<tr>
<th style="text-align: center;">State</th>
<th style="text-align: center;">Transition Cause</th>
<th style="text-align: center;">New State</th>
<th style="text-align: center;">Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;"></td>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Never changes</td>
</tr>
</tbody>
</table>
<p>When <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a> is AF_<wbr/>MODE_<wbr/>AUTO or AF_<wbr/>MODE_<wbr/>MACRO:</p>
<table>
<thead>
<tr>
<th style="text-align: center;">State</th>
<th style="text-align: center;">Transition Cause</th>
<th style="text-align: center;">New State</th>
<th style="text-align: center;">Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">ACTIVE_<wbr/>SCAN</td>
<td style="text-align: center;">Start AF sweep,<wbr/> Lens now moving</td>
</tr>
<tr>
<td style="text-align: center;">ACTIVE_<wbr/>SCAN</td>
<td style="text-align: center;">AF sweep done</td>
<td style="text-align: center;">FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">Focused,<wbr/> Lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">ACTIVE_<wbr/>SCAN</td>
<td style="text-align: center;">AF sweep done</td>
<td style="text-align: center;">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">Not focused,<wbr/> Lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">ACTIVE_<wbr/>SCAN</td>
<td style="text-align: center;">AF_<wbr/>CANCEL</td>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Cancel/<wbr/>reset AF,<wbr/> Lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">AF_<wbr/>CANCEL</td>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Cancel/<wbr/>reset AF</td>
</tr>
<tr>
<td style="text-align: center;">FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">ACTIVE_<wbr/>SCAN</td>
<td style="text-align: center;">Start new sweep,<wbr/> Lens now moving</td>
</tr>
<tr>
<td style="text-align: center;">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">AF_<wbr/>CANCEL</td>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Cancel/<wbr/>reset AF</td>
</tr>
<tr>
<td style="text-align: center;">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">ACTIVE_<wbr/>SCAN</td>
<td style="text-align: center;">Start new sweep,<wbr/> Lens now moving</td>
</tr>
<tr>
<td style="text-align: center;">Any state</td>
<td style="text-align: center;">Mode change</td>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;"></td>
</tr>
</tbody>
</table>
<p>For the above table,<wbr/> the camera device may skip reporting any state changes that happen
without application intervention (i.<wbr/>e.<wbr/> mode switch,<wbr/> trigger,<wbr/> locking).<wbr/> Any state that
can be skipped in that manner is called a transient state.<wbr/></p>
<p>For example,<wbr/> for these AF modes (AF_<wbr/>MODE_<wbr/>AUTO and AF_<wbr/>MODE_<wbr/>MACRO),<wbr/> in addition to the
state transitions listed in above table,<wbr/> it is also legal for the camera device to skip
one or more transient states between two results.<wbr/> See below table for examples:</p>
<table>
<thead>
<tr>
<th style="text-align: center;">State</th>
<th style="text-align: center;">Transition Cause</th>
<th style="text-align: center;">New State</th>
<th style="text-align: center;">Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">Focus is already good or good after a scan,<wbr/> lens is now locked.<wbr/></td>
</tr>
<tr>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">Focus failed after a scan,<wbr/> lens is now locked.<wbr/></td>
</tr>
<tr>
<td style="text-align: center;">FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">Focus is already good or good after a scan,<wbr/> lens is now locked.<wbr/></td>
</tr>
<tr>
<td style="text-align: center;">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">Focus is good after a scan,<wbr/> lens is not locked.<wbr/></td>
</tr>
</tbody>
</table>
<p>When <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a> is AF_<wbr/>MODE_<wbr/>CONTINUOUS_<wbr/>VIDEO:</p>
<table>
<thead>
<tr>
<th style="text-align: center;">State</th>
<th style="text-align: center;">Transition Cause</th>
<th style="text-align: center;">New State</th>
<th style="text-align: center;">Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Camera device initiates new scan</td>
<td style="text-align: center;">PASSIVE_<wbr/>SCAN</td>
<td style="text-align: center;">Start AF scan,<wbr/> Lens now moving</td>
</tr>
<tr>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">AF state query,<wbr/> Lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">PASSIVE_<wbr/>SCAN</td>
<td style="text-align: center;">Camera device completes current scan</td>
<td style="text-align: center;">PASSIVE_<wbr/>FOCUSED</td>
<td style="text-align: center;">End AF scan,<wbr/> Lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">PASSIVE_<wbr/>SCAN</td>
<td style="text-align: center;">Camera device fails current scan</td>
<td style="text-align: center;">PASSIVE_<wbr/>UNFOCUSED</td>
<td style="text-align: center;">End AF scan,<wbr/> Lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">PASSIVE_<wbr/>SCAN</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">Immediate transition,<wbr/> if focus is good.<wbr/> Lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">PASSIVE_<wbr/>SCAN</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">Immediate transition,<wbr/> if focus is bad.<wbr/> Lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">PASSIVE_<wbr/>SCAN</td>
<td style="text-align: center;">AF_<wbr/>CANCEL</td>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Reset lens position,<wbr/> Lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">PASSIVE_<wbr/>FOCUSED</td>
<td style="text-align: center;">Camera device initiates new scan</td>
<td style="text-align: center;">PASSIVE_<wbr/>SCAN</td>
<td style="text-align: center;">Start AF scan,<wbr/> Lens now moving</td>
</tr>
<tr>
<td style="text-align: center;">PASSIVE_<wbr/>UNFOCUSED</td>
<td style="text-align: center;">Camera device initiates new scan</td>
<td style="text-align: center;">PASSIVE_<wbr/>SCAN</td>
<td style="text-align: center;">Start AF scan,<wbr/> Lens now moving</td>
</tr>
<tr>
<td style="text-align: center;">PASSIVE_<wbr/>FOCUSED</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">Immediate transition,<wbr/> lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">PASSIVE_<wbr/>UNFOCUSED</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">Immediate transition,<wbr/> lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">No effect</td>
</tr>
<tr>
<td style="text-align: center;">FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">AF_<wbr/>CANCEL</td>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Restart AF scan</td>
</tr>
<tr>
<td style="text-align: center;">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">No effect</td>
</tr>
<tr>
<td style="text-align: center;">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">AF_<wbr/>CANCEL</td>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Restart AF scan</td>
</tr>
</tbody>
</table>
<p>When <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a> is AF_<wbr/>MODE_<wbr/>CONTINUOUS_<wbr/>PICTURE:</p>
<table>
<thead>
<tr>
<th style="text-align: center;">State</th>
<th style="text-align: center;">Transition Cause</th>
<th style="text-align: center;">New State</th>
<th style="text-align: center;">Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Camera device initiates new scan</td>
<td style="text-align: center;">PASSIVE_<wbr/>SCAN</td>
<td style="text-align: center;">Start AF scan,<wbr/> Lens now moving</td>
</tr>
<tr>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">AF state query,<wbr/> Lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">PASSIVE_<wbr/>SCAN</td>
<td style="text-align: center;">Camera device completes current scan</td>
<td style="text-align: center;">PASSIVE_<wbr/>FOCUSED</td>
<td style="text-align: center;">End AF scan,<wbr/> Lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">PASSIVE_<wbr/>SCAN</td>
<td style="text-align: center;">Camera device fails current scan</td>
<td style="text-align: center;">PASSIVE_<wbr/>UNFOCUSED</td>
<td style="text-align: center;">End AF scan,<wbr/> Lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">PASSIVE_<wbr/>SCAN</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">Eventual transition once the focus is good.<wbr/> Lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">PASSIVE_<wbr/>SCAN</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">Eventual transition if cannot find focus.<wbr/> Lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">PASSIVE_<wbr/>SCAN</td>
<td style="text-align: center;">AF_<wbr/>CANCEL</td>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Reset lens position,<wbr/> Lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">PASSIVE_<wbr/>FOCUSED</td>
<td style="text-align: center;">Camera device initiates new scan</td>
<td style="text-align: center;">PASSIVE_<wbr/>SCAN</td>
<td style="text-align: center;">Start AF scan,<wbr/> Lens now moving</td>
</tr>
<tr>
<td style="text-align: center;">PASSIVE_<wbr/>UNFOCUSED</td>
<td style="text-align: center;">Camera device initiates new scan</td>
<td style="text-align: center;">PASSIVE_<wbr/>SCAN</td>
<td style="text-align: center;">Start AF scan,<wbr/> Lens now moving</td>
</tr>
<tr>
<td style="text-align: center;">PASSIVE_<wbr/>FOCUSED</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">Immediate trans.<wbr/> Lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">PASSIVE_<wbr/>UNFOCUSED</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">Immediate trans.<wbr/> Lens now locked</td>
</tr>
<tr>
<td style="text-align: center;">FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">No effect</td>
</tr>
<tr>
<td style="text-align: center;">FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">AF_<wbr/>CANCEL</td>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Restart AF scan</td>
</tr>
<tr>
<td style="text-align: center;">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">No effect</td>
</tr>
<tr>
<td style="text-align: center;">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
<td style="text-align: center;">AF_<wbr/>CANCEL</td>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Restart AF scan</td>
</tr>
</tbody>
</table>
<p>When switch between AF_<wbr/>MODE_<wbr/>CONTINUOUS_<wbr/>* (CAF modes) and AF_<wbr/>MODE_<wbr/>AUTO/<wbr/>AF_<wbr/>MODE_<wbr/>MACRO
(AUTO modes),<wbr/> the initial INACTIVE or PASSIVE_<wbr/>SCAN states may be skipped by the
camera device.<wbr/> When a trigger is included in a mode switch request,<wbr/> the trigger
will be evaluated in the context of the new mode in the request.<wbr/>
See below table for examples:</p>
<table>
<thead>
<tr>
<th style="text-align: center;">State</th>
<th style="text-align: center;">Transition Cause</th>
<th style="text-align: center;">New State</th>
<th style="text-align: center;">Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">any state</td>
<td style="text-align: center;">CAF--&gt;AUTO mode switch</td>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Mode switch without trigger,<wbr/> initial state must be INACTIVE</td>
</tr>
<tr>
<td style="text-align: center;">any state</td>
<td style="text-align: center;">CAF--&gt;AUTO mode switch with AF_<wbr/>TRIGGER</td>
<td style="text-align: center;">trigger-reachable states from INACTIVE</td>
<td style="text-align: center;">Mode switch with trigger,<wbr/> INACTIVE is skipped</td>
</tr>
<tr>
<td style="text-align: center;">any state</td>
<td style="text-align: center;">AUTO--&gt;CAF mode switch</td>
<td style="text-align: center;">passively reachable states from INACTIVE</td>
<td style="text-align: center;">Mode switch without trigger,<wbr/> passive transient state is skipped</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.afTriggerId">
<td class="entry_name
entry_name_deprecated
" rowspan="3">
android.<wbr/>control.<wbr/>af<wbr/>Trigger<wbr/>Id
</td>
<td class="entry_type">
<span class="entry_type_name">int32</span>
<span class="entry_type_visibility"> [system]</span>
<span class="entry_type_deprecated">[deprecated] </span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The ID sent with the latest
CAMERA2_<wbr/>TRIGGER_<wbr/>AUTOFOCUS call</p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><span class="entry_range_deprecated">Deprecated</span>. Do not use.</p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>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</p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.awbLock">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>awb<wbr/>Lock
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public as boolean]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>Auto-white balance lock is disabled; the AWB
algorithm is free to update its parameters if in AUTO
mode.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ON (v3.2)</span>
<span class="entry_type_enum_notes"><p>Auto-white balance lock is enabled; the AWB
algorithm will not update its parameters while the lock
is active.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether auto-white balance (AWB) is currently locked to its
latest calculated values.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When set to <code>true</code> (ON),<wbr/> the AWB algorithm is locked to its latest parameters,<wbr/>
and will not change color balance settings until the lock is set to <code>false</code> (OFF).<wbr/></p>
<p>Since the camera device has a pipeline of in-flight requests,<wbr/> the settings that
get locked do not necessarily correspond to the settings that were present in the
latest capture result received from the camera device,<wbr/> since additional captures
and AWB updates may have occurred even before the result was sent out.<wbr/> If an
application is switching between automatic and manual control and wishes to eliminate
any flicker during the switch,<wbr/> the following procedure is recommended:</p>
<ol>
<li>Starting in auto-AWB mode:</li>
<li>Lock AWB</li>
<li>Wait for the first result to be output that has the AWB locked</li>
<li>Copy AWB settings from that result into a request,<wbr/> set the request to manual AWB</li>
<li>Submit the capture request,<wbr/> proceed to run manual AWB as desired.<wbr/></li>
</ol>
<p>Note that AWB lock is only meaningful when
<a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a> is in the AUTO mode; in other modes,<wbr/>
AWB is already fixed to a specific setting.<wbr/></p>
<p>Some LEGACY devices may not support ON; the value is then overridden to OFF.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.awbMode">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>awb<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-white balance routine is disabled.<wbr/></p>
<p>The application-selected color transform matrix
(<a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>) and gains
(<a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a>) are used by the camera
device for manual white balance control.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">AUTO (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-white balance routine is active.<wbr/></p>
<p>The application's values for <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>
and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> are ignored.<wbr/>
For devices that support the MANUAL_<wbr/>POST_<wbr/>PROCESSING capability,<wbr/> the
values used by the camera device for the transform and gains
will be available in the capture result for this request.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">INCANDESCENT (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-white balance routine is disabled;
the camera device uses incandescent light as the assumed scene
illumination for white balance.<wbr/></p>
<p>While the exact white balance transforms are up to the
camera device,<wbr/> they will approximately match the CIE
standard illuminant A.<wbr/></p>
<p>The application's values for <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>
and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> are ignored.<wbr/>
For devices that support the MANUAL_<wbr/>POST_<wbr/>PROCESSING capability,<wbr/> the
values used by the camera device for the transform and gains
will be available in the capture result for this request.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">FLUORESCENT (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-white balance routine is disabled;
the camera device uses fluorescent light as the assumed scene
illumination for white balance.<wbr/></p>
<p>While the exact white balance transforms are up to the
camera device,<wbr/> they will approximately match the CIE
standard illuminant F2.<wbr/></p>
<p>The application's values for <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>
and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> are ignored.<wbr/>
For devices that support the MANUAL_<wbr/>POST_<wbr/>PROCESSING capability,<wbr/> the
values used by the camera device for the transform and gains
will be available in the capture result for this request.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">WARM_FLUORESCENT (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-white balance routine is disabled;
the camera device uses warm fluorescent light as the assumed scene
illumination for white balance.<wbr/></p>
<p>While the exact white balance transforms are up to the
camera device,<wbr/> they will approximately match the CIE
standard illuminant F4.<wbr/></p>
<p>The application's values for <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>
and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> are ignored.<wbr/>
For devices that support the MANUAL_<wbr/>POST_<wbr/>PROCESSING capability,<wbr/> the
values used by the camera device for the transform and gains
will be available in the capture result for this request.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">DAYLIGHT (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-white balance routine is disabled;
the camera device uses daylight light as the assumed scene
illumination for white balance.<wbr/></p>
<p>While the exact white balance transforms are up to the
camera device,<wbr/> they will approximately match the CIE
standard illuminant D65.<wbr/></p>
<p>The application's values for <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>
and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> are ignored.<wbr/>
For devices that support the MANUAL_<wbr/>POST_<wbr/>PROCESSING capability,<wbr/> the
values used by the camera device for the transform and gains
will be available in the capture result for this request.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CLOUDY_DAYLIGHT (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-white balance routine is disabled;
the camera device uses cloudy daylight light as the assumed scene
illumination for white balance.<wbr/></p>
<p>The application's values for <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>
and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> are ignored.<wbr/>
For devices that support the MANUAL_<wbr/>POST_<wbr/>PROCESSING capability,<wbr/> the
values used by the camera device for the transform and gains
will be available in the capture result for this request.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">TWILIGHT (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-white balance routine is disabled;
the camera device uses twilight light as the assumed scene
illumination for white balance.<wbr/></p>
<p>The application's values for <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>
and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> are ignored.<wbr/>
For devices that support the MANUAL_<wbr/>POST_<wbr/>PROCESSING capability,<wbr/> the
values used by the camera device for the transform and gains
will be available in the capture result for this request.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SHADE (v3.2)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-white balance routine is disabled;
the camera device uses shade light as the assumed scene
illumination for white balance.<wbr/></p>
<p>The application's values for <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>
and <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> are ignored.<wbr/>
For devices that support the MANUAL_<wbr/>POST_<wbr/>PROCESSING capability,<wbr/> the
values used by the camera device for the transform and gains
will be available in the capture result for this request.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether auto-white balance (AWB) is currently setting the color
transform fields,<wbr/> and what its illumination target
is.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.control.awbAvailableModes">android.<wbr/>control.<wbr/>awb<wbr/>Available<wbr/>Modes</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This control is only effective if <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> is AUTO.<wbr/></p>
<p>When set to the AUTO mode,<wbr/> the camera device's auto-white balance
routine is enabled,<wbr/> overriding the application's selected
<a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>,<wbr/> <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> and
<a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a>.<wbr/> Note that when <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a>
is OFF,<wbr/> the behavior of AWB is device dependent.<wbr/> It is recommended to
also set AWB mode to OFF or lock AWB by using <a href="#controls_android.control.awbLock">android.<wbr/>control.<wbr/>awb<wbr/>Lock</a> before
setting AE mode to OFF.<wbr/></p>
<p>When set to the OFF mode,<wbr/> the camera device's auto-white balance
routine is disabled.<wbr/> The application manually controls the white
balance by <a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>,<wbr/> <a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a>
and <a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a>.<wbr/></p>
<p>When set to any other modes,<wbr/> the camera device's auto-white
balance routine is disabled.<wbr/> The camera device uses each
particular illumination target for white balance
adjustment.<wbr/> The application's values for
<a href="#controls_android.colorCorrection.transform">android.<wbr/>color<wbr/>Correction.<wbr/>transform</a>,<wbr/>
<a href="#controls_android.colorCorrection.gains">android.<wbr/>color<wbr/>Correction.<wbr/>gains</a> and
<a href="#controls_android.colorCorrection.mode">android.<wbr/>color<wbr/>Correction.<wbr/>mode</a> are ignored.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.awbRegions">
<td class="entry_name
" rowspan="5">
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>
<span class="entry_type_visibility"> [public as meteringRectangle]</span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>List of metering areas to use for auto-white-balance illuminant
estimation.<wbr/></p>
</td>
<td class="entry_units">
Pixel coordinates within android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size or
android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size depending on
distortion correction capability and mode
</td>
<td class="entry_range">
<p>Coordinates must be between <code>[(0,<wbr/>0),<wbr/> (width,<wbr/> height))</code> of
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a> or <a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>
depending on distortion correction capability and mode</p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Not available if <a href="#static_android.control.maxRegionsAwb">android.<wbr/>control.<wbr/>max<wbr/>Regions<wbr/>Awb</a> is 0.<wbr/>
Otherwise will always be present.<wbr/></p>
<p>The maximum number of regions supported by the device is determined by the value
of <a href="#static_android.control.maxRegionsAwb">android.<wbr/>control.<wbr/>max<wbr/>Regions<wbr/>Awb</a>.<wbr/></p>
<p>For devices not supporting <a href="#controls_android.distortionCorrection.mode">android.<wbr/>distortion<wbr/>Correction.<wbr/>mode</a> control,<wbr/> the coordinate
system always follows that of <a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>,<wbr/> with (0,<wbr/>0) being
the top-left pixel in the active pixel array,<wbr/> and
(<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>width - 1,<wbr/>
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>height - 1) being the bottom-right pixel in the
active pixel array.<wbr/></p>
<p>For devices supporting <a href="#controls_android.distortionCorrection.mode">android.<wbr/>distortion<wbr/>Correction.<wbr/>mode</a> control,<wbr/> the coordinate
system depends on the mode being set.<wbr/>
When the distortion correction mode is OFF,<wbr/> the coordinate system follows
<a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>,<wbr/> with
<code>(0,<wbr/> 0)</code> being the top-left pixel of the pre-correction active array,<wbr/> and
(<a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>.<wbr/>width - 1,<wbr/>
<a href="#static_android.sensor.info.preCorrectionActiveArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size</a>.<wbr/>height - 1) being the bottom-right
pixel in the pre-correction active pixel array.<wbr/>
When the distortion correction mode is not OFF,<wbr/> the coordinate system follows
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>,<wbr/> with
<code>(0,<wbr/> 0)</code> being the top-left pixel of the active array,<wbr/> and
(<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>width - 1,<wbr/>
<a href="#static_android.sensor.info.activeArraySize">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size</a>.<wbr/>height - 1) being the bottom-right pixel in the
active pixel array.<wbr/></p>
<p>The weight must range from 0 to 1000,<wbr/> and represents a weight
for every pixel in the area.<wbr/> This means that a large metering area
with the same weight as a smaller area will have more effect in
the metering result.<wbr/> Metering areas can partially overlap and the
camera device will add the weights in the overlap region.<wbr/></p>
<p>The weights are relative to weights of other white balance metering regions,<wbr/> so if
only one region is used,<wbr/> all non-zero weights will have the same effect.<wbr/> A region with
0 weight is ignored.<wbr/></p>
<p>If all regions have 0 weight,<wbr/> then no specific metering area needs to be used by the
camera device.<wbr/></p>
<p>If the metering region is outside the used <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> returned in
capture result metadata,<wbr/> the camera device will ignore the sections outside the crop
region and output only the intersection rectangle as the metering region in the result
metadata.<wbr/> If the region is entirely outside the crop region,<wbr/> it will be ignored and
not reported in the result metadata.<wbr/></p>
<p>When setting the AWB metering regions,<wbr/> the application must consider the additional
crop resulted from the aspect ratio differences between the preview stream and
<a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a>.<wbr/> For example,<wbr/> if the <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> is the full
active array size with 4:3 aspect ratio,<wbr/> and the preview stream is 16:9,<wbr/>
the boundary of AWB regions will be [0,<wbr/> y_<wbr/>crop] and
[active_<wbr/>width,<wbr/> active_<wbr/>height - 2 * y_<wbr/>crop] rather than [0,<wbr/> 0] and
[active_<wbr/>width,<wbr/> active_<wbr/>height],<wbr/> where y_<wbr/>crop is the additional crop due to aspect ratio
mismatch.<wbr/></p>
<p>Starting from API level 30,<wbr/> the coordinate system of activeArraySize or
preCorrectionActiveArraySize is used to represent post-zoomRatio field of view,<wbr/> not
pre-zoom field of view.<wbr/> This means that the same awbRegions values at different
<a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> represent different parts of the scene.<wbr/> The awbRegions
coordinates are relative to the activeArray/<wbr/>preCorrectionActiveArray representing the
zoomed field of view.<wbr/> If <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> is set to 1.<wbr/>0 (default),<wbr/> the same
awbRegions at different <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> still represent the same parts of
the scene as they do before.<wbr/> See <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> for details.<wbr/> Whether to use
activeArraySize or preCorrectionActiveArraySize still depends on distortion correction
mode.<wbr/></p>
<p>For camera devices with the
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR">Camera<wbr/>Metadata#REQUEST_<wbr/>AVAILABLE_<wbr/>CAPABILITIES_<wbr/>ULTRA_<wbr/>HIGH_<wbr/>RESOLUTION_<wbr/>SENSOR</a>
capability or devices where
<a href="https://developer.android.com/reference/CameraCharacteristics.html#getAvailableCaptureRequestKeys">CameraCharacteristics#getAvailableCaptureRequestKeys</a>
lists <a href="#controls_android.sensor.pixelMode">android.<wbr/>sensor.<wbr/>pixel<wbr/>Mode</a>,<wbr/>
<a href="#static_android.sensor.info.activeArraySizeMaximumResolution">android.<wbr/>sensor.<wbr/>info.<wbr/>active<wbr/>Array<wbr/>Size<wbr/>Maximum<wbr/>Resolution</a> /<wbr/>
<a href="#static_android.sensor.info.preCorrectionActiveArraySizeMaximumResolution">android.<wbr/>sensor.<wbr/>info.<wbr/>pre<wbr/>Correction<wbr/>Active<wbr/>Array<wbr/>Size<wbr/>Maximum<wbr/>Resolution</a> must be used as the
coordinate system for requests where <a href="#controls_android.sensor.pixelMode">android.<wbr/>sensor.<wbr/>pixel<wbr/>Mode</a> is set to
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION">Camera<wbr/>Metadata#SENSOR_<wbr/>PIXEL_<wbr/>MODE_<wbr/>MAXIMUM_<wbr/>RESOLUTION</a>.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>The HAL level representation of MeteringRectangle[] is a
int[5 * area_<wbr/>count].<wbr/>
Every five elements represent a metering region of
(xmin,<wbr/> ymin,<wbr/> xmax,<wbr/> ymax,<wbr/> weight).<wbr/>
The rectangle is defined to be inclusive on xmin and ymin,<wbr/> but
exclusive on xmax and ymax.<wbr/>
HAL must always report metering regions in the coordinate system of pre-correction
active array.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.captureIntent">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>capture<wbr/>Intent
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">CUSTOM (v3.2)</span>
<span class="entry_type_enum_notes"><p>The goal of this request doesn't fall into the other
categories.<wbr/> The camera device will default to preview-like
behavior.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">PREVIEW (v3.2)</span>
<span class="entry_type_enum_notes"><p>This request is for a preview-like use case.<wbr/></p>
<p>The precapture trigger may be used to start off a metering
w/<wbr/>flash sequence.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">STILL_CAPTURE (v3.2)</span>
<span class="entry_type_enum_notes"><p>This request is for a still capture-type
use case.<wbr/></p>
<p>If the flash unit is under automatic control,<wbr/> it may fire as needed.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">VIDEO_RECORD (v3.2)</span>
<span class="entry_type_enum_notes"><p>This request is for a video recording
use case.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">VIDEO_SNAPSHOT (v3.2)</span>
<span class="entry_type_enum_notes"><p>This request is for a video snapshot (still
image while recording video) use case.<wbr/></p>
<p>The camera device should take the highest-quality image
possible (given the other settings) without disrupting the
frame rate of video recording.<wbr/> </p></span>
</li>
<li>
<span class="entry_type_enum_name">ZERO_SHUTTER_LAG (v3.2)</span>
<span class="entry_type_enum_notes"><p>This request is for a ZSL usecase; the
application will stream full-resolution images and
reprocess one or several later for a final
capture.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">MANUAL (v3.2)</span>
<span class="entry_type_enum_notes"><p>This request is for manual capture use case where
the applications want to directly control the capture parameters.<wbr/></p>
<p>For example,<wbr/> the application may wish to manually control
<a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a>,<wbr/> <a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a>,<wbr/> etc.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">MOTION_TRACKING (v3.3)</span>
<span class="entry_type_enum_notes"><p>This request is for a motion tracking use case,<wbr/> where
the application will use camera and inertial sensor data to
locate and track objects in the world.<wbr/></p>
<p>The camera device auto-exposure routine will limit the exposure time
of the camera to no more than 20 milliseconds,<wbr/> to minimize motion blur.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Information to the camera device 3A (auto-exposure,<wbr/>
auto-focus,<wbr/> auto-white balance) routines about the purpose
of this capture,<wbr/> to help the camera device to decide optimal 3A
strategy.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This control (except for MANUAL) is only effective if
<code><a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> != OFF</code> and any 3A routine is active.<wbr/></p>
<p>All intents are supported by all devices,<wbr/> except that:</p>
<ul>
<li>ZERO_<wbr/>SHUTTER_<wbr/>LAG will be supported if <a href="#static_android.request.availableCapabilities">android.<wbr/>request.<wbr/>available<wbr/>Capabilities</a> contains
PRIVATE_<wbr/>REPROCESSING or YUV_<wbr/>REPROCESSING.<wbr/></li>
<li>MANUAL will be supported if <a href="#static_android.request.availableCapabilities">android.<wbr/>request.<wbr/>available<wbr/>Capabilities</a> contains
MANUAL_<wbr/>SENSOR.<wbr/></li>
<li>MOTION_<wbr/>TRACKING will be supported if <a href="#static_android.request.availableCapabilities">android.<wbr/>request.<wbr/>available<wbr/>Capabilities</a> contains
MOTION_<wbr/>TRACKING.<wbr/></li>
</ul>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.awbState">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>awb<wbr/>State
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[limited] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">INACTIVE (v3.2)</span>
<span class="entry_type_enum_notes"><p>AWB is not in auto mode,<wbr/> or has not yet started metering.<wbr/></p>
<p>When a camera device is opened,<wbr/> it starts in this
state.<wbr/> This is a transient state,<wbr/> the camera device may
skip reporting this state in capture
result.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SEARCHING (v3.2)</span>
<span class="entry_type_enum_notes"><p>AWB doesn't yet have a good set of control
values for the current scene.<wbr/></p>
<p>This is a transient state,<wbr/> the camera device
may skip reporting this state in capture result.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CONVERGED (v3.2)</span>
<span class="entry_type_enum_notes"><p>AWB has a good set of control values for the
current scene.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">LOCKED (v3.2)</span>
<span class="entry_type_enum_notes"><p>AWB has been locked.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Current state of auto-white balance (AWB) algorithm.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Switching between or enabling AWB modes (<a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a>) always
resets the AWB state to INACTIVE.<wbr/> Similarly,<wbr/> switching between <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a>,<wbr/>
or <a href="#controls_android.control.sceneMode">android.<wbr/>control.<wbr/>scene<wbr/>Mode</a> if <code><a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> == USE_<wbr/>SCENE_<wbr/>MODE</code> resets all
the algorithm states to INACTIVE.<wbr/></p>
<p>The camera device can do several state transitions between two results,<wbr/> if it is
allowed by the state transition table.<wbr/> So INACTIVE may never actually be seen in
a result.<wbr/></p>
<p>The state in the result is the state for this image (in sync with this image): if
AWB state becomes CONVERGED,<wbr/> then the image data associated with this result should
be good to use.<wbr/></p>
<p>Below are state transition tables for different AWB modes.<wbr/></p>
<p>When <code><a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a> != AWB_<wbr/>MODE_<wbr/>AUTO</code>:</p>
<table>
<thead>
<tr>
<th style="text-align: center;">State</th>
<th style="text-align: center;">Transition Cause</th>
<th style="text-align: center;">New State</th>
<th style="text-align: center;">Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;"></td>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Camera device auto white balance algorithm is disabled</td>
</tr>
</tbody>
</table>
<p>When <a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a> is AWB_<wbr/>MODE_<wbr/>AUTO:</p>
<table>
<thead>
<tr>
<th style="text-align: center;">State</th>
<th style="text-align: center;">Transition Cause</th>
<th style="text-align: center;">New State</th>
<th style="text-align: center;">Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Camera device initiates AWB scan</td>
<td style="text-align: center;">SEARCHING</td>
<td style="text-align: center;">Values changing</td>
</tr>
<tr>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;"><a href="#controls_android.control.awbLock">android.<wbr/>control.<wbr/>awb<wbr/>Lock</a> is ON</td>
<td style="text-align: center;">LOCKED</td>
<td style="text-align: center;">Values locked</td>
</tr>
<tr>
<td style="text-align: center;">SEARCHING</td>
<td style="text-align: center;">Camera device finishes AWB scan</td>
<td style="text-align: center;">CONVERGED</td>
<td style="text-align: center;">Good values,<wbr/> not changing</td>
</tr>
<tr>
<td style="text-align: center;">SEARCHING</td>
<td style="text-align: center;"><a href="#controls_android.control.awbLock">android.<wbr/>control.<wbr/>awb<wbr/>Lock</a> is ON</td>
<td style="text-align: center;">LOCKED</td>
<td style="text-align: center;">Values locked</td>
</tr>
<tr>
<td style="text-align: center;">CONVERGED</td>
<td style="text-align: center;">Camera device initiates AWB scan</td>
<td style="text-align: center;">SEARCHING</td>
<td style="text-align: center;">Values changing</td>
</tr>
<tr>
<td style="text-align: center;">CONVERGED</td>
<td style="text-align: center;"><a href="#controls_android.control.awbLock">android.<wbr/>control.<wbr/>awb<wbr/>Lock</a> is ON</td>
<td style="text-align: center;">LOCKED</td>
<td style="text-align: center;">Values locked</td>
</tr>
<tr>
<td style="text-align: center;">LOCKED</td>
<td style="text-align: center;"><a href="#controls_android.control.awbLock">android.<wbr/>control.<wbr/>awb<wbr/>Lock</a> is OFF</td>
<td style="text-align: center;">SEARCHING</td>
<td style="text-align: center;">Values not good after unlock</td>
</tr>
</tbody>
</table>
<p>For the above table,<wbr/> the camera device may skip reporting any state changes that happen
without application intervention (i.<wbr/>e.<wbr/> mode switch,<wbr/> trigger,<wbr/> locking).<wbr/> Any state that
can be skipped in that manner is called a transient state.<wbr/></p>
<p>For example,<wbr/> for this AWB mode (AWB_<wbr/>MODE_<wbr/>AUTO),<wbr/> in addition to the state transitions
listed in above table,<wbr/> it is also legal for the camera device to skip one or more
transient states between two results.<wbr/> See below table for examples:</p>
<table>
<thead>
<tr>
<th style="text-align: center;">State</th>
<th style="text-align: center;">Transition Cause</th>
<th style="text-align: center;">New State</th>
<th style="text-align: center;">Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">INACTIVE</td>
<td style="text-align: center;">Camera device finished AWB scan</td>
<td style="text-align: center;">CONVERGED</td>
<td style="text-align: center;">Values are already good,<wbr/> transient states are skipped by camera device.<wbr/></td>
</tr>
<tr>
<td style="text-align: center;">LOCKED</td>
<td style="text-align: center;"><a href="#controls_android.control.awbLock">android.<wbr/>control.<wbr/>awb<wbr/>Lock</a> is OFF</td>
<td style="text-align: center;">CONVERGED</td>
<td style="text-align: center;">Values good after unlock,<wbr/> transient states are skipped by camera device.<wbr/></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.effectMode">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>effect<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>No color effect will be applied.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">MONO (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>A "monocolor" effect where the image is mapped into
a single color.<wbr/></p>
<p>This will typically be grayscale.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">NEGATIVE (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>A "photo-negative" effect where the image's colors
are inverted.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SOLARIZE (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>A "solarisation" effect (Sabattier effect) where the
image is wholly or partially reversed in
tone.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SEPIA (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>A "sepia" effect where the image is mapped into warm
gray,<wbr/> red,<wbr/> and brown tones.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">POSTERIZE (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>A "posterization" effect where the image uses
discrete regions of tone rather than a continuous
gradient of tones.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">WHITEBOARD (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>A "whiteboard" effect where the image is typically displayed
as regions of white,<wbr/> with black or grey details.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">BLACKBOARD (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>A "blackboard" effect where the image is typically displayed
as regions of black,<wbr/> with white or grey details.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">AQUA (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>An "aqua" effect where a blue hue is added to the image.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>A special color effect to apply.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.control.availableEffects">android.<wbr/>control.<wbr/>available<wbr/>Effects</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When this mode is set,<wbr/> a color effect will be applied
to images produced by the camera device.<wbr/> The interpretation
and implementation of these color effects is left to the
implementor of the camera device,<wbr/> and should not be
depended on to be consistent (or present) across all
devices.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.mode">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>Full application control of pipeline.<wbr/></p>
<p>All control by the device's metering and focusing (3A)
routines is disabled,<wbr/> and no other settings in
android.<wbr/>control.<wbr/>* have any effect,<wbr/> except that
<a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> may be used by the camera
device to select post-processing values for processing
blocks that do not allow for manual control,<wbr/> or are not
exposed by the camera API.<wbr/></p>
<p>However,<wbr/> the camera device's 3A routines may continue to
collect statistics and update their internal state so that
when control is switched to AUTO mode,<wbr/> good control values
can be immediately applied.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">AUTO (v3.2)</span>
<span class="entry_type_enum_notes"><p>Use settings for each individual 3A routine.<wbr/></p>
<p>Manual control of capture parameters is disabled.<wbr/> All
controls in android.<wbr/>control.<wbr/>* besides sceneMode take
effect.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">USE_SCENE_MODE (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Use a specific scene mode.<wbr/></p>
<p>Enabling this disables control.<wbr/>aeMode,<wbr/> control.<wbr/>awbMode and
control.<wbr/>afMode controls; the camera device will 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 scene mode is supported (i.<wbr/>e.<wbr/>
<a href="#static_android.control.availableSceneModes">android.<wbr/>control.<wbr/>available<wbr/>Scene<wbr/>Modes</a>
contain some modes other than DISABLED).<wbr/></p>
<p>For extended scene modes such as BOKEH,<wbr/> please use USE_<wbr/>EXTENDED_<wbr/>SCENE_<wbr/>MODE instead.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">OFF_KEEP_STATE (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Same as OFF mode,<wbr/> except that this capture will not be
used by camera device background auto-exposure,<wbr/> auto-white balance and
auto-focus algorithms (3A) to update their statistics.<wbr/></p>
<p>Specifically,<wbr/> the 3A routines are locked to the last
values set from a request with AUTO,<wbr/> OFF,<wbr/> or
USE_<wbr/>SCENE_<wbr/>MODE,<wbr/> and any statistics or state updates
collected from manual captures with OFF_<wbr/>KEEP_<wbr/>STATE will be
discarded by the camera device.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">USE_EXTENDED_SCENE_MODE (v3.5)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Use a specific extended scene mode.<wbr/></p>
<p>When extended scene mode is on,<wbr/> the camera device may override certain control
parameters,<wbr/> such as targetFpsRange,<wbr/> AE,<wbr/> AWB,<wbr/> and AF modes,<wbr/> to achieve best power and
quality tradeoffs.<wbr/> Only the mandatory stream combinations of LIMITED hardware level
are guaranteed.<wbr/></p>
<p>This setting can only be used if extended scene mode is supported (i.<wbr/>e.<wbr/>
android.<wbr/>control.<wbr/>available<wbr/>Extended<wbr/>Scene<wbr/>Modes
contains some modes other than DISABLED).<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Overall mode of 3A (auto-exposure,<wbr/> auto-white-balance,<wbr/> auto-focus) control
routines.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.control.availableModes">android.<wbr/>control.<wbr/>available<wbr/>Modes</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This is a top-level 3A control switch.<wbr/> When set to OFF,<wbr/> all 3A control
by the camera device is disabled.<wbr/> The application must set the fields for
capture parameters itself.<wbr/></p>
<p>When set to AUTO,<wbr/> the individual algorithm controls in
android.<wbr/>control.<wbr/>* are in effect,<wbr/> such as <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a>.<wbr/></p>
<p>When set to USE_<wbr/>SCENE_<wbr/>MODE or USE_<wbr/>EXTENDED_<wbr/>SCENE_<wbr/>MODE,<wbr/> the individual controls in
android.<wbr/>control.<wbr/>* are mostly disabled,<wbr/> and the camera device
implements one of the scene mode or extended scene mode settings (such as ACTION,<wbr/>
SUNSET,<wbr/> PARTY,<wbr/> or BOKEH) as it wishes.<wbr/> The camera device scene mode
3A settings are provided by <a href="https://developer.android.com/reference/android/hardware/camera2/CaptureResult.html">capture results</a>.<wbr/></p>
<p>When set to OFF_<wbr/>KEEP_<wbr/>STATE,<wbr/> it is similar to OFF mode,<wbr/> the only difference
is that this frame will not be used by camera device background 3A statistics
update,<wbr/> as if this frame is never captured.<wbr/> This mode can be used in the scenario
where the application doesn't want a 3A manual control capture to affect
the subsequent auto 3A capture results.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.sceneMode">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>scene<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">DISABLED (v3.2)</span>
<span class="entry_type_enum_value">0</span>
<span class="entry_type_enum_notes"><p>Indicates that no scene modes are set for a given capture request.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">FACE_PRIORITY (v3.2)</span>
<span class="entry_type_enum_notes"><p>If face detection support exists,<wbr/> use face
detection data for auto-focus,<wbr/> auto-white balance,<wbr/> and
auto-exposure routines.<wbr/></p>
<p>If face detection statistics are disabled
(i.<wbr/>e.<wbr/> <a href="#controls_android.statistics.faceDetectMode">android.<wbr/>statistics.<wbr/>face<wbr/>Detect<wbr/>Mode</a> is set to OFF),<wbr/>
this should still operate correctly (but will not return
face detection statistics to the framework).<wbr/></p>
<p>Unlike the other scene modes,<wbr/> <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a>,<wbr/>
<a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a>,<wbr/> and <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a>
remain active when FACE_<wbr/>PRIORITY is set.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ACTION (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for photos of quickly moving objects.<wbr/></p>
<p>Similar to SPORTS.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">PORTRAIT (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for still photos of people.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">LANDSCAPE (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for photos of distant macroscopic objects.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">NIGHT (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for low-light settings.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">NIGHT_PORTRAIT (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for still photos of people in low-light
settings.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">THEATRE (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for dim,<wbr/> indoor settings where flash must
remain off.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">BEACH (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for bright,<wbr/> outdoor beach settings.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SNOW (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for bright,<wbr/> outdoor settings containing snow.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SUNSET (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for scenes of the setting sun.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">STEADYPHOTO (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized to avoid blurry photos due to small amounts of
device motion (for example: due to hand shake).<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">FIREWORKS (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for nighttime photos of fireworks.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SPORTS (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for photos of quickly moving people.<wbr/></p>
<p>Similar to ACTION.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">PARTY (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for dim,<wbr/> indoor settings with multiple moving
people.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CANDLELIGHT (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for dim settings where the main light source
is a candle.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">BARCODE (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Optimized for accurately capturing a photo of barcode
for use by camera applications that wish to read the
barcode value.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">HIGH_SPEED_VIDEO (v3.2)</span>
<span class="entry_type_enum_deprecated">[deprecated]</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_hidden">[java_public]</span>
<span class="entry_type_enum_notes"><p>This is deprecated,<wbr/> please use <a href="https://developer.android.com/reference/android/hardware/camera2/CameraDevice.html#createConstrainedHighSpeedCaptureSession">CameraDevice#createConstrainedHighSpeedCaptureSession</a>
and <a href="https://developer.android.com/reference/android/hardware/camera2/CameraConstrainedHighSpeedCaptureSession.html#createHighSpeedRequestList">CameraConstrainedHighSpeedCaptureSession#createHighSpeedRequestList</a>
for high speed video recording.<wbr/></p>
<p>Optimized for high speed video recording (frame rate &gt;=60fps) use case.<wbr/></p>
<p>The supported high speed video sizes and fps ranges are specified in
<a href="#static_android.control.availableHighSpeedVideoConfigurations">android.<wbr/>control.<wbr/>available<wbr/>High<wbr/>Speed<wbr/>Video<wbr/>Configurations</a>.<wbr/> To get desired
output frame rates,<wbr/> the application is only allowed to select video size
and fps range combinations listed in this static metadata.<wbr/> The fps range
can be control via <a href="#controls_android.control.aeTargetFpsRange">android.<wbr/>control.<wbr/>ae<wbr/>Target<wbr/>Fps<wbr/>Range</a>.<wbr/></p>
<p>In this mode,<wbr/> the camera device will override aeMode,<wbr/> awbMode,<wbr/> and afMode to
ON,<wbr/> ON,<wbr/> and CONTINUOUS_<wbr/>VIDEO,<wbr/> respectively.<wbr/> All post-processing block mode
controls will be overridden to be FAST.<wbr/> Therefore,<wbr/> no manual control of capture
and post-processing parameters is possible.<wbr/> All other controls operate the
same as when <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> == AUTO.<wbr/> This means that all other
android.<wbr/>control.<wbr/>* fields continue to work,<wbr/> such as</p>
<ul>
<li><a href="#controls_android.control.aeTargetFpsRange">android.<wbr/>control.<wbr/>ae<wbr/>Target<wbr/>Fps<wbr/>Range</a></li>
<li><a href="#controls_android.control.aeExposureCompensation">android.<wbr/>control.<wbr/>ae<wbr/>Exposure<wbr/>Compensation</a></li>
<li><a href="#controls_android.control.aeLock">android.<wbr/>control.<wbr/>ae<wbr/>Lock</a></li>
<li><a href="#controls_android.control.awbLock">android.<wbr/>control.<wbr/>awb<wbr/>Lock</a></li>
<li><a href="#controls_android.control.effectMode">android.<wbr/>control.<wbr/>effect<wbr/>Mode</a></li>
<li><a href="#controls_android.control.aeRegions">android.<wbr/>control.<wbr/>ae<wbr/>Regions</a></li>
<li><a href="#controls_android.control.afRegions">android.<wbr/>control.<wbr/>af<wbr/>Regions</a></li>
<li><a href="#controls_android.control.awbRegions">android.<wbr/>control.<wbr/>awb<wbr/>Regions</a></li>
<li><a href="#controls_android.control.afTrigger">android.<wbr/>control.<wbr/>af<wbr/>Trigger</a></li>
<li><a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a></li>
<li><a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a></li>
</ul>
<p>Outside of android.<wbr/>control.<wbr/>*,<wbr/> the following controls will work:</p>
<ul>
<li><a href="#controls_android.flash.mode">android.<wbr/>flash.<wbr/>mode</a> (automatic flash for still capture will not work since aeMode is ON)</li>
<li><a href="#controls_android.lens.opticalStabilizationMode">android.<wbr/>lens.<wbr/>optical<wbr/>Stabilization<wbr/>Mode</a> (if it is supported)</li>
<li><a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a></li>
<li><a href="#controls_android.statistics.faceDetectMode">android.<wbr/>statistics.<wbr/>face<wbr/>Detect<wbr/>Mode</a></li>
</ul>
<p>For high speed recording use case,<wbr/> the actual maximum supported frame rate may
be lower than what camera can output,<wbr/> depending on the destination Surfaces for
the image data.<wbr/> For example,<wbr/> if the destination surface is from video encoder,<wbr/>
the application need check if the video encoder is capable of supporting the
high frame rate for a given video size,<wbr/> or it will end up with lower recording
frame rate.<wbr/> If the destination surface is from preview window,<wbr/> the preview frame
rate will be bounded by the screen refresh rate.<wbr/></p>
<p>The camera device will only support up to 2 output high speed streams
(processed non-stalling format defined in <a href="#static_android.request.maxNumOutputStreams">android.<wbr/>request.<wbr/>max<wbr/>Num<wbr/>Output<wbr/>Streams</a>)
in this mode.<wbr/> This control will be effective only if all of below conditions are true:</p>
<ul>
<li>The application created no more than maxNumHighSpeedStreams processed non-stalling
format output streams,<wbr/> where maxNumHighSpeedStreams is calculated as
min(2,<wbr/> <a href="#static_android.request.maxNumOutputStreams">android.<wbr/>request.<wbr/>max<wbr/>Num<wbr/>Output<wbr/>Streams</a>[Processed (but not-stalling)]).<wbr/></li>
<li>The stream sizes are selected from the sizes reported by
<a href="#static_android.control.availableHighSpeedVideoConfigurations">android.<wbr/>control.<wbr/>available<wbr/>High<wbr/>Speed<wbr/>Video<wbr/>Configurations</a>.<wbr/></li>
<li>No processed non-stalling or raw streams are configured.<wbr/></li>
</ul>
<p>When above conditions are NOT satisfied,<wbr/> the controls of this mode and
<a href="#controls_android.control.aeTargetFpsRange">android.<wbr/>control.<wbr/>ae<wbr/>Target<wbr/>Fps<wbr/>Range</a> will be ignored by the camera device,<wbr/>
the camera device will fall back to <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> <code>==</code> AUTO,<wbr/>
and the returned capture result metadata will give the fps range chosen
by the camera device.<wbr/></p>
<p>Switching into or out of this mode may trigger some camera ISP/<wbr/>sensor
reconfigurations,<wbr/> which may introduce extra latency.<wbr/> It is recommended that
the application avoids unnecessary scene mode switch as much as possible.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">HDR (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Turn on a device-specific high dynamic range (HDR) mode.<wbr/></p>
<p>In this scene mode,<wbr/> the camera device captures images
that keep a larger range of scene illumination levels
visible in the final image.<wbr/> For example,<wbr/> when taking a
picture of a object in front of a bright window,<wbr/> both
the object and the scene through the window may be
visible when using HDR mode,<wbr/> while in normal AUTO mode,<wbr/>
one or the other may be poorly exposed.<wbr/> As a tradeoff,<wbr/>
HDR mode generally takes much longer to capture a single
image,<wbr/> has no user control,<wbr/> and may have other artifacts
depending on the HDR method used.<wbr/></p>
<p>Therefore,<wbr/> HDR captures operate at a much slower rate
than regular captures.<wbr/></p>
<p>In this mode,<wbr/> on LIMITED or FULL devices,<wbr/> when a request
is made with a <a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> of
STILL_<wbr/>CAPTURE,<wbr/> the camera device will capture an image
using a high dynamic range capture technique.<wbr/> On LEGACY
devices,<wbr/> captures that target a JPEG-format output will
be captured with HDR,<wbr/> and the capture intent is not
relevant.<wbr/></p>
<p>The HDR capture may involve the device capturing a burst
of images internally and combining them into one,<wbr/> or it
may involve the device using specialized high dynamic
range capture hardware.<wbr/> In all cases,<wbr/> a single image is
produced in response to a capture request submitted
while in HDR mode.<wbr/></p>
<p>Since substantial post-processing is generally needed to
produce an HDR image,<wbr/> only YUV,<wbr/> PRIVATE,<wbr/> and JPEG
outputs are supported for LIMITED/<wbr/>FULL device HDR
captures,<wbr/> and only JPEG outputs are supported for LEGACY
HDR captures.<wbr/> Using a RAW output for HDR capture is not
supported.<wbr/></p>
<p>Some devices may also support always-on HDR,<wbr/> which
applies HDR processing at full frame rate.<wbr/> For these
devices,<wbr/> intents other than STILL_<wbr/>CAPTURE will also
produce an HDR output with no frame rate impact compared
to normal operation,<wbr/> though the quality may be lower
than for STILL_<wbr/>CAPTURE intents.<wbr/></p>
<p>If SCENE_<wbr/>MODE_<wbr/>HDR is used with unsupported output types
or capture intents,<wbr/> the images captured will be as if
the SCENE_<wbr/>MODE was not enabled at all.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">FACE_PRIORITY_LOW_LIGHT (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_hidden">[hidden]</span>
<span class="entry_type_enum_notes"><p>Same as FACE_<wbr/>PRIORITY scene mode,<wbr/> except that the camera
device will choose higher sensitivity values (<a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a>)
under low light conditions.<wbr/></p>
<p>The camera device may be tuned to expose the images in a reduced
sensitivity range to produce the best quality images.<wbr/> For example,<wbr/>
if the <a href="#static_android.sensor.info.sensitivityRange">android.<wbr/>sensor.<wbr/>info.<wbr/>sensitivity<wbr/>Range</a> gives range of [100,<wbr/> 1600],<wbr/>
the camera device auto-exposure routine tuning process may limit the actual
exposure sensitivity range to [100,<wbr/> 1200] to ensure that the noise level isn't
excessive in order to preserve the image quality.<wbr/> Under this situation,<wbr/> the image under
low light may be under-exposed when the sensor max exposure time (bounded by the
<a href="#controls_android.control.aeTargetFpsRange">android.<wbr/>control.<wbr/>ae<wbr/>Target<wbr/>Fps<wbr/>Range</a> when <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> is one of the
ON_<wbr/>* modes) and effective max sensitivity are reached.<wbr/> This scene mode allows the
camera device auto-exposure routine to increase the sensitivity up to the max
sensitivity specified by <a href="#static_android.sensor.info.sensitivityRange">android.<wbr/>sensor.<wbr/>info.<wbr/>sensitivity<wbr/>Range</a> when the scene is too
dark and the max exposure time is reached.<wbr/> The captured images may be noisier
compared with the images captured in normal FACE_<wbr/>PRIORITY mode; therefore,<wbr/> it is
recommended that the application only use this scene mode when it is capable of
reducing the noise level of the captured images.<wbr/></p>
<p>Unlike the other scene modes,<wbr/> <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a>,<wbr/>
<a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a>,<wbr/> and <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a>
remain active when FACE_<wbr/>PRIORITY_<wbr/>LOW_<wbr/>LIGHT is set.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">DEVICE_CUSTOM_START (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_hidden">[hidden]</span>
<span class="entry_type_enum_value">100</span>
<span class="entry_type_enum_notes"><p>Scene mode values within the range of
<code>[DEVICE_<wbr/>CUSTOM_<wbr/>START,<wbr/> DEVICE_<wbr/>CUSTOM_<wbr/>END]</code> are reserved for device specific
customized scene modes.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">DEVICE_CUSTOM_END (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_hidden">[hidden]</span>
<span class="entry_type_enum_value">127</span>
<span class="entry_type_enum_notes"><p>Scene mode values within the range of
<code>[DEVICE_<wbr/>CUSTOM_<wbr/>START,<wbr/> DEVICE_<wbr/>CUSTOM_<wbr/>END]</code> are reserved for device specific
customized scene modes.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Control for which scene mode is currently active.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.control.availableSceneModes">android.<wbr/>control.<wbr/>available<wbr/>Scene<wbr/>Modes</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Scene modes are custom camera modes optimized for a certain set of conditions and
capture settings.<wbr/></p>
<p>This is the mode that that is active when
<code><a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> == USE_<wbr/>SCENE_<wbr/>MODE</code>.<wbr/> Aside from FACE_<wbr/>PRIORITY,<wbr/> these modes will
disable <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a>,<wbr/> <a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a>,<wbr/> and <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a>
while in use.<wbr/></p>
<p>The interpretation and implementation of these scene modes is left
to the implementor of the camera device.<wbr/> Their behavior will not be
consistent across all devices,<wbr/> and any given device may only implement
a subset of these modes.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>HAL implementations that include scene modes are expected to provide
the per-scene settings to use for <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a>,<wbr/>
<a href="#controls_android.control.awbMode">android.<wbr/>control.<wbr/>awb<wbr/>Mode</a>,<wbr/> and <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a> in
<a href="#static_android.control.sceneModeOverrides">android.<wbr/>control.<wbr/>scene<wbr/>Mode<wbr/>Overrides</a>.<wbr/></p>
<p>For HIGH_<wbr/>SPEED_<wbr/>VIDEO mode,<wbr/> if it is included in <a href="#static_android.control.availableSceneModes">android.<wbr/>control.<wbr/>available<wbr/>Scene<wbr/>Modes</a>,<wbr/> the
HAL must list supported video size and fps range in
<a href="#static_android.control.availableHighSpeedVideoConfigurations">android.<wbr/>control.<wbr/>available<wbr/>High<wbr/>Speed<wbr/>Video<wbr/>Configurations</a>.<wbr/> For a given size,<wbr/> e.<wbr/>g.<wbr/> 1280x720,<wbr/>
if the HAL has two different sensor configurations for normal streaming mode and high
speed streaming,<wbr/> when this scene mode is set/<wbr/>reset in a sequence of capture requests,<wbr/> the
HAL may have to switch between different sensor modes.<wbr/> This mode is deprecated in legacy
HAL3.<wbr/>3,<wbr/> to support high speed video recording,<wbr/> please implement
<a href="#static_android.control.availableHighSpeedVideoConfigurations">android.<wbr/>control.<wbr/>available<wbr/>High<wbr/>Speed<wbr/>Video<wbr/>Configurations</a> and CONSTRAINED_<wbr/>HIGH_<wbr/>SPEED_<wbr/>VIDEO
capability defined in <a href="#static_android.request.availableCapabilities">android.<wbr/>request.<wbr/>available<wbr/>Capabilities</a>.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.videoStabilizationMode">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>video<wbr/>Stabilization<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[legacy] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>Video stabilization is disabled.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ON (v3.2)</span>
<span class="entry_type_enum_notes"><p>Video stabilization is enabled.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">PREVIEW_STABILIZATION (v3.8)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Preview stabilization,<wbr/> where the preview in addition to all other non-RAW streams are
stabilized with the same quality of stabilization,<wbr/> is enabled.<wbr/> This mode aims to give
clients a 'what you see is what you get' effect.<wbr/> In this mode,<wbr/> the FoV reduction will
be a maximum of 20 % both horizontally and vertically
(10% from left,<wbr/> right,<wbr/> top,<wbr/> bottom) for the given zoom ratio /<wbr/> crop region.<wbr/>
The resultant FoV will also be the same across all processed streams
(that have the same aspect ratio).<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether video stabilization is
active.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_BC">BC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Video stabilization automatically warps images from
the camera in order to stabilize motion between consecutive frames.<wbr/></p>
<p>If enabled,<wbr/> video stabilization can modify the
<a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> to keep the video stream stabilized.<wbr/></p>
<p>Switching between different video stabilization modes may take several
frames to initialize,<wbr/> the camera device will report the current mode
in capture result metadata.<wbr/> For example,<wbr/> When "ON" mode is requested,<wbr/>
the video stabilization modes in the first several capture results may
still be "OFF",<wbr/> and it will become "ON" when the initialization is
done.<wbr/></p>
<p>In addition,<wbr/> not all recording sizes or frame rates may be supported for
stabilization by a device that reports stabilization support.<wbr/> It is guaranteed
that an output targeting a MediaRecorder or MediaCodec will be stabilized if
the recording resolution is less than or equal to 1920 x 1080 (width less than
or equal to 1920,<wbr/> height less than or equal to 1080),<wbr/> and the recording
frame rate is less than or equal to 30fps.<wbr/> At other sizes,<wbr/> the CaptureResult
<a href="#controls_android.control.videoStabilizationMode">android.<wbr/>control.<wbr/>video<wbr/>Stabilization<wbr/>Mode</a> field will return
OFF if the recording output is not stabilized,<wbr/> or if there are no output
Surface types that can be stabilized.<wbr/></p>
<p>The application is strongly recommended to call
<a href="https://developer.android.com/reference/android/hardware/camera2/params/SessionConfiguration.html#setSessionParameters">SessionConfiguration#setSessionParameters</a>
with the desired video stabilization mode before creating the capture session.<wbr/>
Video stabilization mode is a session parameter on many devices.<wbr/> Specifying
it at session creation time helps avoid reconfiguration delay caused by difference
between the default value and the first CaptureRequest.<wbr/></p>
<p>If a camera device supports both this mode and OIS
(<a href="#controls_android.lens.opticalStabilizationMode">android.<wbr/>lens.<wbr/>optical<wbr/>Stabilization<wbr/>Mode</a>),<wbr/> turning both modes on may
produce undesirable interaction,<wbr/> so it is recommended not to enable
both at the same time.<wbr/></p>
<p>If video stabilization is set to "PREVIEW_<wbr/>STABILIZATION",<wbr/>
<a href="#controls_android.lens.opticalStabilizationMode">android.<wbr/>lens.<wbr/>optical<wbr/>Stabilization<wbr/>Mode</a> is overridden.<wbr/> The camera sub-system may choose
to turn on hardware based image stabilization in addition to software based stabilization
if it deems that appropriate.<wbr/>
This key may be a part of the available session keys,<wbr/> which camera clients may
query via
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#getAvailableSessionKeys">CameraCharacteristics#getAvailableSessionKeys</a>.<wbr/>
If this is the case,<wbr/> changing this key over the life-time of a capture session may
cause delays /<wbr/> glitches.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When this key is set to "PREVIEW_<wbr/>STABILIZATION",<wbr/>
for non-stalling buffers returned without errors,<wbr/> the time interval between notify readout
timestamp and when buffers are returned to the camera framework,<wbr/> must be no more than 1
extra frame interval,<wbr/> relative to the case where this key is set to "OFF".<wbr/></p>
<p>This is in order for look-ahead time period to be short enough
for preview to match video recording for real-time usage.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.postRawSensitivityBoost">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>post<wbr/>Raw<wbr/>Sensitivity<wbr/>Boost
</td>
<td class="entry_type">
<span class="entry_type_name">int32</span>
<span class="entry_type_visibility"> [public]</span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The amount of additional sensitivity boost applied to output images
after RAW sensor data is captured.<wbr/></p>
</td>
<td class="entry_units">
ISO arithmetic units,<wbr/> the same as android.<wbr/>sensor.<wbr/>sensitivity
</td>
<td class="entry_range">
<p><a href="#static_android.control.postRawSensitivityBoostRange">android.<wbr/>control.<wbr/>post<wbr/>Raw<wbr/>Sensitivity<wbr/>Boost<wbr/>Range</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Some camera devices support additional digital sensitivity boosting in the
camera processing pipeline after sensor RAW image is captured.<wbr/>
Such a boost will be applied to YUV/<wbr/>JPEG format output images but will not
have effect on RAW output formats like RAW_<wbr/>SENSOR,<wbr/> RAW10,<wbr/> RAW12 or RAW_<wbr/>OPAQUE.<wbr/></p>
<p>This key will be <code>null</code> for devices that do not support any RAW format
outputs.<wbr/> For devices that do support RAW format outputs,<wbr/> this key will always
present,<wbr/> and if a device does not support post RAW sensitivity boost,<wbr/> it will
list <code>100</code> in this key.<wbr/></p>
<p>If the camera device cannot apply the exact boost requested,<wbr/> it will reduce the
boost to the nearest supported value.<wbr/>
The final boost value used will be available in the output capture result.<wbr/></p>
<p>For devices that support post RAW sensitivity boost,<wbr/> the YUV/<wbr/>JPEG output images
of such device will have the total sensitivity of
<code><a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a> * <a href="#controls_android.control.postRawSensitivityBoost">android.<wbr/>control.<wbr/>post<wbr/>Raw<wbr/>Sensitivity<wbr/>Boost</a> /<wbr/> 100</code>
The sensitivity of RAW format images will always be <code><a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a></code></p>
<p>This control is only effective if <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> or <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> is set to
OFF; otherwise the auto-exposure algorithm will override this value.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.enableZsl">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>enable<wbr/>Zsl
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public as boolean]</span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">FALSE (v3.2)</span>
<span class="entry_type_enum_notes"><p>Requests with <a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> == STILL_<wbr/>CAPTURE must be captured
after previous requests.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">TRUE (v3.2)</span>
<span class="entry_type_enum_notes"><p>Requests with <a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> == STILL_<wbr/>CAPTURE may or may not be
captured before previous requests.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Allow camera device to enable zero-shutter-lag mode for requests with
<a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> == STILL_<wbr/>CAPTURE.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>If enableZsl is <code>true</code>,<wbr/> the camera device may enable zero-shutter-lag mode for requests with
STILL_<wbr/>CAPTURE capture intent.<wbr/> The camera device may use images captured in the past to
produce output images for a zero-shutter-lag request.<wbr/> The result metadata including the
<a href="#dynamic_android.sensor.timestamp">android.<wbr/>sensor.<wbr/>timestamp</a> reflects the source frames used to produce output images.<wbr/>
Therefore,<wbr/> the contents of the output images and the result metadata may be out of order
compared to previous regular requests.<wbr/> enableZsl does not affect requests with other
capture intents.<wbr/></p>
<p>For example,<wbr/> when requests are submitted in the following order:
Request A: enableZsl is ON,<wbr/> <a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> is PREVIEW
Request B: enableZsl is ON,<wbr/> <a href="#controls_android.control.captureIntent">android.<wbr/>control.<wbr/>capture<wbr/>Intent</a> is STILL_<wbr/>CAPTURE</p>
<p>The output images for request B may have contents captured before the output images for
request A,<wbr/> and the result metadata for request B may be older than the result metadata for
request A.<wbr/></p>
<p>Note that when enableZsl is <code>true</code>,<wbr/> it is not guaranteed to get output images captured in
the past for requests with STILL_<wbr/>CAPTURE capture intent.<wbr/></p>
<p>For applications targeting SDK versions O and newer,<wbr/> the value of enableZsl in
TEMPLATE_<wbr/>STILL_<wbr/>CAPTURE template may be <code>true</code>.<wbr/> The value in other templates is always
<code>false</code> if present.<wbr/></p>
<p>For applications targeting SDK versions older than O,<wbr/> the value of enableZsl in all
capture templates is always <code>false</code> if present.<wbr/></p>
<p>For application-operated ZSL,<wbr/> use CAMERA3_<wbr/>TEMPLATE_<wbr/>ZERO_<wbr/>SHUTTER_<wbr/>LAG template.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>It is valid for HAL to produce regular output images for requests with STILL_<wbr/>CAPTURE
capture intent.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.afSceneChange">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>af<wbr/>Scene<wbr/>Change
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">NOT_DETECTED (v3.3)</span>
<span class="entry_type_enum_notes"><p>Scene change is not detected within the AF region(s).<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">DETECTED (v3.3)</span>
<span class="entry_type_enum_notes"><p>Scene change is detected within the AF region(s).<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether a significant scene change is detected within the currently-set AF
region(s).<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>3</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When the camera focus routine detects a change in the scene it is looking at,<wbr/>
such as a large shift in camera viewpoint,<wbr/> significant motion in the scene,<wbr/> or a
significant illumination change,<wbr/> this value will be set to DETECTED for a single capture
result.<wbr/> Otherwise the value will be NOT_<wbr/>DETECTED.<wbr/> The threshold for detection is similar
to what would trigger a new passive focus scan to begin in CONTINUOUS autofocus modes.<wbr/></p>
<p>This key will be available if the camera device advertises this key via <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#getAvailableCaptureResultKeys">CameraCharacteristics#getAvailableCaptureResultKeys</a>.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.extendedSceneMode">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>extended<wbr/>Scene<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">DISABLED (v3.5)</span>
<span class="entry_type_enum_value">0</span>
<span class="entry_type_enum_notes"><p>Extended scene mode is disabled.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">BOKEH_STILL_CAPTURE (v3.5)</span>
<span class="entry_type_enum_notes"><p>High quality bokeh mode is enabled for all non-raw streams (including YUV,<wbr/>
JPEG,<wbr/> and IMPLEMENTATION_<wbr/>DEFINED) when capture intent is STILL_<wbr/>CAPTURE.<wbr/> Due to the
extra image processing,<wbr/> this mode may introduce additional stall to non-raw streams.<wbr/>
This mode should be used in high quality still capture use case.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">BOKEH_CONTINUOUS (v3.5)</span>
<span class="entry_type_enum_notes"><p>Bokeh effect must not slow down capture rate relative to sensor raw output,<wbr/>
and the effect is applied to all processed streams no larger than the maximum
streaming dimension.<wbr/> This mode should be used if performance and power are a
priority,<wbr/> such as video recording.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">VENDOR_START (v3.5)</span>
<span class="entry_type_enum_hidden">[hidden]</span>
<span class="entry_type_enum_value">0x40</span>
<span class="entry_type_enum_notes"><p>Vendor defined extended scene modes.<wbr/> These depend on vendor implementation.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether extended scene mode is enabled for a particular capture request.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>5</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>With bokeh mode,<wbr/> the camera device may blur out the parts of scene that are not in
focus,<wbr/> creating a bokeh (or shallow depth of field) effect for people or objects.<wbr/></p>
<p>When set to BOKEH_<wbr/>STILL_<wbr/>CAPTURE mode with STILL_<wbr/>CAPTURE capture intent,<wbr/> due to the extra
processing needed for high quality bokeh effect,<wbr/> the stall may be longer than when
capture intent is not STILL_<wbr/>CAPTURE.<wbr/></p>
<p>When set to BOKEH_<wbr/>STILL_<wbr/>CAPTURE mode with PREVIEW capture intent,<wbr/></p>
<ul>
<li>If the camera device has BURST_<wbr/>CAPTURE capability,<wbr/> the frame rate requirement of
BURST_<wbr/>CAPTURE must still be met.<wbr/></li>
<li>All streams not larger than the maximum streaming dimension for BOKEH_<wbr/>STILL_<wbr/>CAPTURE mode
(queried via <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_CAPABILITIES">Camera<wbr/>Characteristics#CONTROL_<wbr/>AVAILABLE_<wbr/>EXTENDED_<wbr/>SCENE_<wbr/>MODE_<wbr/>CAPABILITIES</a>)
will have preview bokeh effect applied.<wbr/></li>
</ul>
<p>When set to BOKEH_<wbr/>CONTINUOUS mode,<wbr/> configured streams dimension should not exceed this mode's
maximum streaming dimension in order to have bokeh effect applied.<wbr/> Bokeh effect may not
be available for streams larger than the maximum streaming dimension.<wbr/></p>
<p>Switching between different extended scene modes may involve reconfiguration of the camera
pipeline,<wbr/> resulting in long latency.<wbr/> The application should check this key against the
available session keys queried via
<a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#getAvailableSessionKeys">CameraCharacteristics#getAvailableSessionKeys</a>.<wbr/></p>
<p>For a logical multi-camera,<wbr/> bokeh may be implemented by stereo vision from sub-cameras
with different field of view.<wbr/> As a result,<wbr/> when bokeh mode is enabled,<wbr/> the camera device
may override <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> or <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>,<wbr/> and the field of
view may be smaller than when bokeh mode is off.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.zoomRatio">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>zoom<wbr/>Ratio
</td>
<td class="entry_type">
<span class="entry_type_name">float</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[limited] </span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The desired zoom ratio</p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.control.zoomRatioRange">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio<wbr/>Range</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>5</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Instead of using <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> for zoom,<wbr/> the application can now choose to
use this tag to specify the desired zoom level.<wbr/></p>
<p>By using this control,<wbr/> the application gains a simpler way to control zoom,<wbr/> which can
be a combination of optical and digital zoom.<wbr/> For example,<wbr/> a multi-camera system may
contain more than one lens with different focal lengths,<wbr/> and the user can use optical
zoom by switching between lenses.<wbr/> Using zoomRatio has benefits in the scenarios below:</p>
<ul>
<li>Zooming in from a wide-angle lens to a telephoto lens: A floating-point ratio provides
better precision compared to an integer value of <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a>.<wbr/></li>
<li>Zooming out from a wide lens to an ultrawide lens: zoomRatio supports zoom-out whereas
<a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> doesn't.<wbr/></li>
</ul>
<p>To illustrate,<wbr/> here are several scenarios of different zoom ratios,<wbr/> crop regions,<wbr/>
and output streams,<wbr/> for a hypothetical camera device with an active array of size
<code>(2000,<wbr/>1500)</code>.<wbr/></p>
<ul>
<li>Camera Configuration:<ul>
<li>Active array size: <code>2000x1500</code> (3 MP,<wbr/> 4:3 aspect ratio)</li>
<li>Output stream #1: <code>640x480</code> (VGA,<wbr/> 4:3 aspect ratio)</li>
<li>Output stream #2: <code>1280x720</code> (720p,<wbr/> 16:9 aspect ratio)</li>
</ul>
</li>
<li>Case #1: 4:3 crop region with 2.<wbr/>0x zoom ratio<ul>
<li>Zoomed field of view: 1/<wbr/>4 of original field of view</li>
<li>Crop region: <code>Rect(0,<wbr/> 0,<wbr/> 2000,<wbr/> 1500) //<wbr/> (left,<wbr/> top,<wbr/> right,<wbr/> bottom)</code> (post zoom)</li>
</ul>
</li>
<li><img alt="4:3 aspect ratio crop diagram" src="images/camera2/metadata/android.control.zoomRatio/zoom-ratio-2-crop-43.png"/><ul>
<li><code>640x480</code> stream source area: <code>(0,<wbr/> 0,<wbr/> 2000,<wbr/> 1500)</code> (equal to crop region)</li>
<li><code>1280x720</code> stream source area: <code>(0,<wbr/> 187,<wbr/> 2000,<wbr/> 1312)</code> (letterboxed)</li>
</ul>
</li>
<li>Case #2: 16:9 crop region with 2.<wbr/>0x zoom.<wbr/><ul>
<li>Zoomed field of view: 1/<wbr/>4 of original field of view</li>
<li>Crop region: <code>Rect(0,<wbr/> 187,<wbr/> 2000,<wbr/> 1312)</code></li>
<li><img alt="16:9 aspect ratio crop diagram" src="images/camera2/metadata/android.control.zoomRatio/zoom-ratio-2-crop-169.png"/></li>
<li><code>640x480</code> stream source area: <code>(250,<wbr/> 187,<wbr/> 1750,<wbr/> 1312)</code> (pillarboxed)</li>
<li><code>1280x720</code> stream source area: <code>(0,<wbr/> 187,<wbr/> 2000,<wbr/> 1312)</code> (equal to crop region)</li>
</ul>
</li>
<li>Case #3: 1:1 crop region with 0.<wbr/>5x zoom out to ultrawide lens.<wbr/><ul>
<li>Zoomed field of view: 4x of original field of view (switched from wide lens to ultrawide lens)</li>
<li>Crop region: <code>Rect(250,<wbr/> 0,<wbr/> 1750,<wbr/> 1500)</code></li>
<li><img alt="1:1 aspect ratio crop diagram" src="images/camera2/metadata/android.control.zoomRatio/zoom-ratio-0.5-crop-11.png"/></li>
<li><code>640x480</code> stream source area: <code>(250,<wbr/> 187,<wbr/> 1750,<wbr/> 1312)</code> (letterboxed)</li>
<li><code>1280x720</code> stream source area: <code>(250,<wbr/> 328,<wbr/> 1750,<wbr/> 1172)</code> (letterboxed)</li>
</ul>
</li>
</ul>
<p>As seen from the graphs above,<wbr/> the coordinate system of cropRegion now changes to the
effective after-zoom field-of-view,<wbr/> and is represented by the rectangle of (0,<wbr/> 0,<wbr/>
activeArrayWith,<wbr/> activeArrayHeight).<wbr/> The same applies to AE/<wbr/>AWB/<wbr/>AF regions,<wbr/> and faces.<wbr/>
This coordinate system change isn't applicable to RAW capture and its related
metadata such as intrinsicCalibration and lensShadingMap.<wbr/></p>
<p>Using the same hypothetical example above,<wbr/> and assuming output stream #1 (640x480) is
the viewfinder stream,<wbr/> the application can achieve 2.<wbr/>0x zoom in one of two ways:</p>
<ul>
<li>zoomRatio = 2.<wbr/>0,<wbr/> scaler.<wbr/>cropRegion = (0,<wbr/> 0,<wbr/> 2000,<wbr/> 1500)</li>
<li>zoomRatio = 1.<wbr/>0 (default),<wbr/> scaler.<wbr/>cropRegion = (500,<wbr/> 375,<wbr/> 1500,<wbr/> 1125)</li>
</ul>
<p>If the application intends to set aeRegions to be top-left quarter of the viewfinder
field-of-view,<wbr/> the <a href="#controls_android.control.aeRegions">android.<wbr/>control.<wbr/>ae<wbr/>Regions</a> should be set to (0,<wbr/> 0,<wbr/> 1000,<wbr/> 750) with
zoomRatio set to 2.<wbr/>0.<wbr/> Alternatively,<wbr/> the application can set aeRegions to the equivalent
region of (500,<wbr/> 375,<wbr/> 1000,<wbr/> 750) for zoomRatio of 1.<wbr/>0.<wbr/> If the application doesn't
explicitly set <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>,<wbr/> its value defaults to 1.<wbr/>0.<wbr/></p>
<p>One limitation of controlling zoom using zoomRatio is that the <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a>
must only be used for letterboxing or pillarboxing of the sensor active array,<wbr/> and no
FREEFORM cropping can be used with <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> other than 1.<wbr/>0.<wbr/> If
<a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> is not 1.<wbr/>0,<wbr/> and <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> is set to be
windowboxing,<wbr/> the camera framework will override the <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> to be
the active array.<wbr/></p>
<p>In the capture request,<wbr/> if the application sets <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> to a
value != 1.<wbr/>0,<wbr/> the <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> tag in the capture result reflects the
effective zoom ratio achieved by the camera device,<wbr/> and the <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a>
adjusts for additional crops that are not zoom related.<wbr/> Otherwise,<wbr/> if the application
sets <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> to 1.<wbr/>0,<wbr/> or does not set it at all,<wbr/> the
<a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> tag in the result metadata will also be 1.<wbr/>0.<wbr/></p>
<p>When the application requests a physical stream for a logical multi-camera,<wbr/> the
<a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> in the physical camera result metadata will be 1.<wbr/>0,<wbr/> and
the <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> tag reflects the amount of zoom and crop done by the
physical camera device.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>For all capture request templates,<wbr/> this field must be set to 1.<wbr/>0 in order to have
consistent field of views between different modes.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.settingsOverride">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>settings<wbr/>Override
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">int32</span>
<span class="entry_type_visibility"> [public]</span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.9)</span>
<span class="entry_type_enum_notes"><p>No keys are applied sooner than the other keys when applying CaptureRequest
settings to the camera device.<wbr/> This is the default value.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ZOOM (v3.9)</span>
<span class="entry_type_enum_notes"><p>Zoom related keys are applied sooner than the other keys in the CaptureRequest.<wbr/> The
zoom related keys are:</p>
<ul>
<li><a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a></li>
<li><a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a></li>
<li><a href="#controls_android.control.aeRegions">android.<wbr/>control.<wbr/>ae<wbr/>Regions</a></li>
<li><a href="#controls_android.control.awbRegions">android.<wbr/>control.<wbr/>awb<wbr/>Regions</a></li>
<li><a href="#controls_android.control.afRegions">android.<wbr/>control.<wbr/>af<wbr/>Regions</a></li>
</ul>
<p>Even though <a href="#controls_android.control.aeRegions">android.<wbr/>control.<wbr/>ae<wbr/>Regions</a>,<wbr/> <a href="#controls_android.control.awbRegions">android.<wbr/>control.<wbr/>awb<wbr/>Regions</a>,<wbr/>
and <a href="#controls_android.control.afRegions">android.<wbr/>control.<wbr/>af<wbr/>Regions</a> are not directly zoom related,<wbr/> applications
typically scale these regions together with <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> to have a
consistent mapping within the current field of view.<wbr/> In this aspect,<wbr/> they are
related to <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> and <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">VENDOR_START (v3.9)</span>
<span class="entry_type_enum_hidden">[hidden]</span>
<span class="entry_type_enum_value">0x4000</span>
<span class="entry_type_enum_notes"><p>Vendor defined settingsOverride.<wbr/> These depend on vendor implementation.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The desired CaptureRequest settings override with which certain keys are
applied earlier so that they can take effect sooner.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.control.availableSettingsOverrides">android.<wbr/>control.<wbr/>available<wbr/>Settings<wbr/>Overrides</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>9</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>There are some CaptureRequest keys which can be applied earlier than others
when controls within a CaptureRequest aren't required to take effect at the same time.<wbr/>
One such example is zoom.<wbr/> Zoom can be applied at a later stage of the camera pipeline.<wbr/>
As soon as the camera device receives the CaptureRequest,<wbr/> it can apply the requested
zoom value onto an earlier request that's already in the pipeline,<wbr/> thus improves zoom
latency.<wbr/></p>
<p>This key's value in the capture result reflects whether the controls for this capture
are overridden "by" a newer request.<wbr/> This means that if a capture request turns on
settings override,<wbr/> the capture result of an earlier request will contain the key value
of ZOOM.<wbr/> On the other hand,<wbr/> if a capture request has settings override turned on,<wbr/>
but all newer requests have it turned off,<wbr/> the key's value in the capture result will
be OFF because this capture isn't overridden by a newer capture.<wbr/> In the two examples
below,<wbr/> the capture results columns illustrate the settingsOverride values in different
scenarios.<wbr/></p>
<p>Assuming the zoom settings override can speed up by 1 frame,<wbr/> below example illustrates
the speed-up at the start of capture session:</p>
<pre><code>Camera session created
Request 1 (zoom=1.<wbr/>0x,<wbr/> override=ZOOM) -&gt;
Request 2 (zoom=1.<wbr/>2x,<wbr/> override=ZOOM) -&gt;
Request 3 (zoom=1.<wbr/>4x,<wbr/> override=ZOOM) -&gt; Result 1 (zoom=1.<wbr/>2x,<wbr/> override=ZOOM)
Request 4 (zoom=1.<wbr/>6x,<wbr/> override=ZOOM) -&gt; Result 2 (zoom=1.<wbr/>4x,<wbr/> override=ZOOM)
Request 5 (zoom=1.<wbr/>8x,<wbr/> override=ZOOM) -&gt; Result 3 (zoom=1.<wbr/>6x,<wbr/> override=ZOOM)
-&gt; Result 4 (zoom=1.<wbr/>8x,<wbr/> override=ZOOM)
-&gt; Result 5 (zoom=1.<wbr/>8x,<wbr/> override=OFF)
</code></pre>
<p>The application can turn on settings override and use zoom as normal.<wbr/> The example
shows that the later zoom values (1.<wbr/>2x,<wbr/> 1.<wbr/>4x,<wbr/> 1.<wbr/>6x,<wbr/> and 1.<wbr/>8x) overwrite the zoom
values (1.<wbr/>0x,<wbr/> 1.<wbr/>2x,<wbr/> 1.<wbr/>4x,<wbr/> and 1.<wbr/>8x) of earlier requests (#1,<wbr/> #2,<wbr/> #3,<wbr/> and #4).<wbr/></p>
<p>The application must make sure the settings override doesn't interfere with user
journeys requiring simultaneous application of all controls in CaptureRequest on the
requested output targets.<wbr/> For example,<wbr/> if the application takes a still capture using
CameraCaptureSession#capture,<wbr/> and the repeating request immediately sets a different
zoom value using override,<wbr/> the inflight still capture could have its zoom value
overwritten unexpectedly.<wbr/></p>
<p>So the application is strongly recommended to turn off settingsOverride when taking
still/<wbr/>burst captures,<wbr/> and turn it back on when there is only repeating viewfinder
request and no inflight still/<wbr/>burst captures.<wbr/></p>
<p>Below is the example demonstrating the transitions in and out of the
settings override:</p>
<pre><code>Request 1 (zoom=1.<wbr/>0x,<wbr/> override=OFF)
Request 2 (zoom=1.<wbr/>2x,<wbr/> override=OFF)
Request 3 (zoom=1.<wbr/>4x,<wbr/> override=ZOOM) -&gt; Result 1 (zoom=1.<wbr/>0x,<wbr/> override=OFF)
Request 4 (zoom=1.<wbr/>6x,<wbr/> override=ZOOM) -&gt; Result 2 (zoom=1.<wbr/>4x,<wbr/> override=ZOOM)
Request 5 (zoom=1.<wbr/>8x,<wbr/> override=OFF) -&gt; Result 3 (zoom=1.<wbr/>6x,<wbr/> override=ZOOM)
-&gt; Result 4 (zoom=1.<wbr/>6x,<wbr/> override=OFF)
-&gt; Result 5 (zoom=1.<wbr/>8x,<wbr/> override=OFF)
</code></pre>
<p>This example shows that:</p>
<ul>
<li>The application "ramps in" settings override by setting the control to ZOOM.<wbr/>
In the example,<wbr/> request #3 enables zoom settings override.<wbr/> Because the camera device
can speed up applying zoom by 1 frame,<wbr/> the outputs of request #2 has 1.<wbr/>4x zoom,<wbr/> the
value specified in request #3.<wbr/></li>
<li>The application "ramps out" of settings override by setting the control to OFF.<wbr/> In
the example,<wbr/> request #5 changes the override to OFF.<wbr/> Because request #4's zoom
takes effect in result #3,<wbr/> result #4's zoom remains the same until new value takes
effect in result #5.<wbr/></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>The HAL must set this value to OFF in all of the Capture templates.<wbr/></p>
<p>Typically the HAL unblocks processCaptureRequest at the same rate as the sensor capture,<wbr/>
and the HAL queues the capture settings in its pipeline when processCaptureRequest
returns.<wbr/> However,<wbr/> when the settings override is enabled,<wbr/> the HAL can optimize the
overridden controls' latency by applying them as soon as processCaptureRequest is
called,<wbr/> rather than when it's unblocked.<wbr/></p>
<p>For devices launching with API level 35 or newer,<wbr/> to avoid regression on zoom
smoothness,<wbr/> when zoom settings override is on during pinch zoom (zoom value gradually
changes),<wbr/> the zoom effect in the camera output must not become more jittery.<wbr/> More
specifically,<wbr/> the variation of zoom pipeline latency must not increase.<wbr/> The latency
improvement must be at least 1 frame regardless of zoom in or zoom out.<wbr/></p>
<p>For devices launched before API level 35,<wbr/> if zoom settings override is on,<wbr/> when
zooming in,<wbr/> the HAL must be able to apply the zoom related settings at least 1
frame ahead.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.settingsOverridingFrameNumber">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>settings<wbr/>Overriding<wbr/>Frame<wbr/>Number
</td>
<td class="entry_type">
<span class="entry_type_name">int32</span>
<span class="entry_type_visibility"> [system]</span>
</td> <!-- entry_type -->
<td class="entry_description">
<p>The frame number of the newer request overriding this capture.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>9</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Must be equal to the frame number of the result if this capture isn't
overridden by a newer request,<wbr/> i.<wbr/>e.<wbr/> if <a href="#controls_android.control.settingsOverride">android.<wbr/>control.<wbr/>settings<wbr/>Override</a> is OFF
in the capture result.<wbr/> On the other hand,<wbr/> if the capture is overridden by a newer
request,<wbr/> the value of this tag (unsigned) must be larger than the frame number of
the capture result.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.autoframing">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>autoframing
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[limited] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.9)</span>
<span class="entry_type_enum_notes"><p>Disable autoframing.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ON (v3.9)</span>
<span class="entry_type_enum_notes"><p>Enable autoframing to keep people in the frame's field of view.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">AUTO (v3.9)</span>
<span class="entry_type_enum_hidden">[hidden]</span>
<span class="entry_type_enum_notes"><p>Automatically select ON or OFF based on the system level preferences.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Automatic crop,<wbr/> pan and zoom to keep objects in the center of the frame.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>9</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Auto-framing is a special mode provided by the camera device to dynamically crop,<wbr/> zoom
or pan the camera feed to try to ensure that the people in a scene occupy a reasonable
portion of the viewport.<wbr/> It is primarily designed to support video calling in
situations where the user isn't directly in front of the device,<wbr/> especially for
wide-angle cameras.<wbr/>
<a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> and <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> in CaptureResult will be used
to denote the coordinates of the auto-framed region.<wbr/>
Zoom and video stabilization controls are disabled when auto-framing is enabled.<wbr/> The 3A
regions must map the screen coordinates into the scaler crop returned from the capture
result instead of using the active array sensor.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>While auto-framing is ON,<wbr/> the aspect ratio of the auto-framed region must match the
aspect ratio of the configured output stream.<wbr/>
When reporting CaptureResult,<wbr/> SCALER_<wbr/>CROP_<wbr/>REGION might not adequately describe the
actual sensor pixels.<wbr/> In this case,<wbr/> it is acceptable for the returned parameters to only
be an approximation of the image sensor region that is actually used.<wbr/>
When auto-framing is turned off,<wbr/> the transition should be immediate,<wbr/> with no panning or
zooming to transition to the settings requested by the app.<wbr/> When it is turned on,<wbr/> the
transition can be immediate or smooth.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.autoframingState">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>autoframing<wbr/>State
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[limited] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">INACTIVE (v3.9)</span>
<span class="entry_type_enum_notes"><p>Auto-framing is inactive.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">FRAMING (v3.9)</span>
<span class="entry_type_enum_notes"><p>Auto-framing is in process - either zooming in,<wbr/> zooming out or pan is taking place.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CONVERGED (v3.9)</span>
<span class="entry_type_enum_notes"><p>Auto-framing has reached a stable state (frame/<wbr/>fov is not being adjusted).<wbr/> The state
may transition back to FRAMING if the scene changes.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Current state of auto-framing.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>9</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When the camera doesn't have auto-framing available (i.<wbr/>e
<code><a href="#static_android.control.autoframingAvailable">android.<wbr/>control.<wbr/>autoframing<wbr/>Available</a></code> == false) or it is not enabled (i.<wbr/>e
<code><a href="#controls_android.control.autoframing">android.<wbr/>control.<wbr/>autoframing</a></code> == OFF),<wbr/> the state will always be INACTIVE.<wbr/>
Other states indicate the current auto-framing state:</p>
<ul>
<li>When <code><a href="#controls_android.control.autoframing">android.<wbr/>control.<wbr/>autoframing</a></code> is set to ON,<wbr/> auto-framing will take
place.<wbr/> While the frame is aligning itself to center the object (doing things like
zooming in,<wbr/> zooming out or pan),<wbr/> the state will be FRAMING.<wbr/></li>
<li>When field of view is not being adjusted anymore and has reached a stable state,<wbr/> the
state will be CONVERGED.<wbr/></li>
</ul>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.lowLightBoostState">
<td class="entry_name
" rowspan="3">
android.<wbr/>control.<wbr/>low<wbr/>Light<wbr/>Boost<wbr/>State
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">INACTIVE (v3.10)</span>
<span class="entry_type_enum_notes"><p>The AE mode 'ON_<wbr/>LOW_<wbr/>LIGHT_<wbr/>BOOST_<wbr/>BRIGHTNESS_<wbr/>PRIORITY' is enabled but not applied.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ACTIVE (v3.10)</span>
<span class="entry_type_enum_notes"><p>The AE mode 'ON_<wbr/>LOW_<wbr/>LIGHT_<wbr/>BOOST_<wbr/>BRIGHTNESS_<wbr/>PRIORITY' is enabled and applied.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Current state of the low light boost AE mode.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>10</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>When low light boost is enabled by setting the AE mode to
'ON_<wbr/>LOW_<wbr/>LIGHT_<wbr/>BOOST_<wbr/>BRIGHTNESS_<wbr/>PRIORITY',<wbr/> it can dynamically apply a low light
boost when the light level threshold is exceeded.<wbr/></p>
<p>This state indicates when low light boost is 'ACTIVE' and applied.<wbr/> Similarly,<wbr/> it can
indicate when it is not being applied by returning 'INACTIVE'.<wbr/></p>
<p>The default value will always be 'INACTIVE'.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.zoomMethod">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>zoom<wbr/>Method
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [fwk_public]</span>
<span class="entry_type_hwlevel">[limited] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">AUTO (v3.11)</span>
<span class="entry_type_enum_value">0</span>
<span class="entry_type_enum_notes"><p>The camera device automatically detects whether the application does zoom with
<a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> or <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>,<wbr/> and in turn decides which
metadata tag reflects the effective zoom level.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ZOOM_RATIO (v3.11)</span>
<span class="entry_type_enum_value">1</span>
<span class="entry_type_enum_notes"><p>The application intends to control zoom via <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>,<wbr/> and
the effective zoom level is reflected by <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> in capture results.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Whether the application uses <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> or <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>
to control zoom levels.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>11</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>If set to AUTO,<wbr/> the camera device detects which capture request key the application uses
to do zoom,<wbr/> <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> or <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>.<wbr/> If
the application doesn't set android.<wbr/>scaler.<wbr/>zoom<wbr/>Ratio or sets it to 1.<wbr/>0 in the capture
request,<wbr/> the effective zoom level is reflected in <a href="#controls_android.scaler.cropRegion">android.<wbr/>scaler.<wbr/>crop<wbr/>Region</a> in capture
results.<wbr/> If <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> is set to values other than 1.<wbr/>0,<wbr/> the effective
zoom level is reflected in <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>.<wbr/> AUTO is the default value
for this control,<wbr/> and also the behavior of the OS before Android version
<a href="https://developer.android.com/reference/android/os/Build.VERSION_CODES.html#BAKLAVA">BAKLAVA</a>.<wbr/></p>
<p>If set to ZOOM_<wbr/>RATIO,<wbr/> the application explicitly specifies zoom level be controlled
by <a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a>,<wbr/> and the effective zoom level is reflected in
<a href="#controls_android.control.zoomRatio">android.<wbr/>control.<wbr/>zoom<wbr/>Ratio</a> in capture results.<wbr/> This addresses an ambiguity with AUTO,<wbr/>
with which the camera device cannot know if the application is using cropRegion or
zoomRatio at 1.<wbr/>0x.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Do not use this key directly.<wbr/> It's for camera framework usage,<wbr/>
and not for HAL consumption.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
<!-- end of entry -->
<tr class="entry" id="dynamic_android.control.aePriorityMode">
<td class="entry_name
" rowspan="5">
android.<wbr/>control.<wbr/>ae<wbr/>Priority<wbr/>Mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.11)</span>
<span class="entry_type_enum_notes"><p>Disable AE priority mode.<wbr/> This is the default value.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SENSOR_SENSITIVITY_PRIORITY (v3.11)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-exposure routine is active and
prioritizes the application-selected ISO (<a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a>).<wbr/></p>
<p>The application has control over <a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a> while
the application's values for <a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a> and
<a href="#controls_android.sensor.frameDuration">android.<wbr/>sensor.<wbr/>frame<wbr/>Duration</a> are ignored.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SENSOR_EXPOSURE_TIME_PRIORITY (v3.11)</span>
<span class="entry_type_enum_notes"><p>The camera device's auto-exposure routine is active and
prioritizes the application-selected exposure time
(<a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a>).<wbr/></p>
<p>The application has control over <a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a> while
the application's values for <a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a> and
<a href="#controls_android.sensor.frameDuration">android.<wbr/>sensor.<wbr/>frame<wbr/>Duration</a> are ignored.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Turn on AE priority mode.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>11</p>
</td>
<td class="entry_tags">
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>This control is only effective if <a href="#controls_android.control.mode">android.<wbr/>control.<wbr/>mode</a> is
AUTO and <a href="#controls_android.control.aeMode">android.<wbr/>control.<wbr/>ae<wbr/>Mode</a> is set to one of its
ON modes,<wbr/> with the exception of ON_<wbr/>LOW_<wbr/>LIGHT_<wbr/>BOOST_<wbr/>BRIGHTNESS_<wbr/>PRIORITY.<wbr/></p>
<p>When a priority mode is enabled,<wbr/> the camera device's
auto-exposure routine will maintain the application's
selected parameters relevant to the priority mode while overriding
the remaining exposure parameters
(<a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a>,<wbr/> <a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a>,<wbr/> and
<a href="#controls_android.sensor.frameDuration">android.<wbr/>sensor.<wbr/>frame<wbr/>Duration</a>).<wbr/> For example,<wbr/> if
SENSOR_<wbr/>SENSITIVITY_<wbr/>PRIORITY mode is enabled,<wbr/> the camera device will
maintain the application-selected <a href="#controls_android.sensor.sensitivity">android.<wbr/>sensor.<wbr/>sensitivity</a>
while adjusting <a href="#controls_android.sensor.exposureTime">android.<wbr/>sensor.<wbr/>exposure<wbr/>Time</a>
and <a href="#controls_android.sensor.frameDuration">android.<wbr/>sensor.<wbr/>frame<wbr/>Duration</a>.<wbr/> The overridden fields for a
given capture will be available in its CaptureResult.<wbr/></p>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">HAL Implementation Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>The total sensitivity applied for SENSOR_<wbr/>SENSITIVITY_<wbr/>PRIORITY should not be
adjusted by any HAL applied <a href="#controls_android.control.postRawSensitivityBoost">android.<wbr/>control.<wbr/>post<wbr/>Raw<wbr/>Sensitivity<wbr/>Boost</a>.<wbr/></p>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></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 class="entries_header">
<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_hal_version">Initial HIDL HAL version</th>
<th class="th_tags">Tags</th>
</tr>
</thead>
<tbody>
<tr class="entry" id="controls_android.demosaic.mode">
<td class="entry_name
" rowspan="1">
android.<wbr/>demosaic.<wbr/>mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [system]</span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">FAST (v3.2)</span>
<span class="entry_type_enum_notes"><p>Minimal or no slowdown of frame rate compared to
Bayer RAW output.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">HIGH_QUALITY (v3.2)</span>
<span class="entry_type_enum_notes"><p>Improved processing quality but the frame rate might be slowed down
relative to raw output.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Controls the quality of the demosaicing
processing.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_FUTURE">FUTURE</a></li>
</ul>
</td>
</tr>
<tr class="entry_spacer"><td class="entry_spacer" colspan="7"></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 class="entries_header">
<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_hal_version">Initial HIDL HAL version</th>
<th class="th_tags">Tags</th>
</tr>
</thead>
<tbody>
<tr class="entry" id="controls_android.edge.mode">
<td class="entry_name
" rowspan="5">
android.<wbr/>edge.<wbr/>mode
</td>
<td class="entry_type">
<span class="entry_type_name entry_type_name_enum">byte</span>
<span class="entry_type_visibility"> [public]</span>
<span class="entry_type_hwlevel">[full] </span>
<ul class="entry_type_enum">
<li>
<span class="entry_type_enum_name">OFF (v3.2)</span>
<span class="entry_type_enum_notes"><p>No edge enhancement is applied.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">FAST (v3.2)</span>
<span class="entry_type_enum_notes"><p>Apply edge enhancement at a quality level that does not slow down frame rate
relative to sensor output.<wbr/> It may be the same as OFF if edge enhancement will
slow down frame rate relative to sensor.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">HIGH_QUALITY (v3.2)</span>
<span class="entry_type_enum_notes"><p>Apply high-quality edge enhancement,<wbr/> at a cost of possibly reduced output frame rate.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ZERO_SHUTTER_LAG (v3.2)</span>
<span class="entry_type_enum_optional">[optional]</span>
<span class="entry_type_enum_notes"><p>Edge enhancement is applied at different
levels for different output streams,<wbr/> based on resolution.<wbr/> Streams at maximum recording
resolution (see <a href="https://developer.android.com/reference/android/hardware/camera2/CameraDevice.html#createCaptureSession">CameraDevice#createCaptureSession</a>)
or below have edge enhancement applied,<wbr/> while higher-resolution streams have no edge
enhancement applied.<wbr/> The level of edge enhancement for low-resolution streams is tuned
so that frame rate is not impacted,<wbr/> and the quality is equal to or better than FAST
(since it is only applied to lower-resolution outputs,<wbr/> quality may improve from FAST).<wbr/></p>
<p>This mode is intended to be used by applications operating in a zero-shutter-lag mode
with YUV or PRIVATE reprocessing,<wbr/> where the application continuously captures
high-resolution intermediate buffers into a circular buffer,<wbr/> from which a final image is
produced via reprocessing when a user takes a picture.<wbr/> For such a use case,<wbr/> the
high-resolution buffers must not have edge enhancement applied to maximize efficiency of
preview and to avoid double-applying enhancement when reprocessed,<wbr/> while low-resolution
buffers (used for recording or preview,<wbr/> generally) need edge enhancement applied for
reasonable preview quality.<wbr/></p>
<p>This mode is guaranteed to be supported by devices that support either the
YUV_<wbr/>REPROCESSING or PRIVATE_<wbr/>REPROCESSING capabilities
(<a href="#static_android.request.availableCapabilities">android.<wbr/>request.<wbr/>available<wbr/>Capabilities</a> lists either of those capabilities) and it will
be the default mode for CAMERA3_<wbr/>TEMPLATE_<wbr/>ZERO_<wbr/>SHUTTER_<wbr/>LAG template.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
<p>Operation mode for edge
enhancement.<wbr/></p>
</td>
<td class="entry_units">
</td>
<td class="entry_range">
<p><a href="#static_android.edge.availableEdgeModes">android.<wbr/>edge.<wbr/>available<wbr/>Edge<wbr/>Modes</a></p>
</td>
<td class="entry_hal_version">
<p>3.<wbr/>2</p>
</td>
<td class="entry_tags">
<ul class="entry_tags">
<li><a href="#tag_V1">V1</a></li>
<li><a href="#tag_REPROC">REPROC</a></li>
</ul>
</td>
</tr>
<tr class="entries_header">
<th class="th_details" colspan="6">Details</th>
</tr>
<tr class="entry_cont">
<td class="entry_details" colspan="6">
<p>Edge enhancement improves sharpness and details in the captured image.<wbr/> OFF means
no enhancement will be applied by the camera device.<wbr/></p>
<p>FAST/<wbr/>HIGH_<wbr/>QUALITY both mean camera device determined enhancement
will be applied.<wbr/> HIGH_<wbr/>QUALITY mode indicates that the
camera device will use the highest-quality enhancement algorithms,<wbr/>
even if it slows down capture rate.<wbr/> FAST means the camera device will
not slow down capture rate when applying edge enhancement.<wbr/> FAST may be the same as OFF if
edge enhancement will slow down capture rate.<wbr/> Every output stream will have a similar
amount of enhancement applied.<wbr/></p>
<p>ZERO_<wbr/>SHUTTER_<wbr/>LAG is meant to be used by applications that maintain a continuous circular
buffer of high-resolution images during preview and reprocess image(s) from that buffer
into a final capture when triggered by the user.<wbr/> In this mode,<wbr/> the camera device applies
edge enhancement to low-resolution streams (below maximum recording resolution) to
maximize preview quality,<wbr/> but does not apply edge enhancement to high-resolution streams,<wbr/>
since those will be reprocessed later if necessary.<wbr/></p>
<p>For YUV_<wbr/>REPROCESSING,<wbr/> these FAST/<wbr/>HIGH_<wbr/>QUALITY modes both mean that the camera
device will apply FAST/<wbr/>HIGH_<wbr/>QUALITY YUV-domain edge enhancement,<wbr/> respectively.<wbr/>