Camera2: Docs: Update cross-refs, aeMode, aeAntibandingMode

Unhide android.control.aeMode and android.control.availableAeModes,
which were supposed to be public all along.

This matches up to system/media commit #9fa0d90ff

Change-Id: Ibba2756dd5889344b5d0531dc6f066566776cdc1
diff --git a/api/current.txt b/api/current.txt
index d3f9fe8..2b04927 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -11199,6 +11199,7 @@
     method public java.util.List<android.hardware.camera2.CameraMetadata.Key<?>> getAvailableCaptureRequestKeys();
     method public java.util.List<android.hardware.camera2.CameraMetadata.Key<?>> getAvailableCaptureResultKeys();
     field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_AVAILABLE_ANTIBANDING_MODES;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_AVAILABLE_MODES;
     field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES;
     field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_COMPENSATION_RANGE;
     field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_COMPENSATION_STEP;
@@ -11504,6 +11505,7 @@
     field public static final android.hardware.camera2.CameraMetadata.Key BLACK_LEVEL_LOCK;
     field public static final android.hardware.camera2.CameraMetadata.Key COLOR_CORRECTION_GAINS;
     field public static final android.hardware.camera2.CameraMetadata.Key COLOR_CORRECTION_TRANSFORM;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_MODE;
     field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_REGIONS;
     field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_STATE;
     field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AF_MODE;
diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java
index ca89cb6..56bfdf8 100644
--- a/core/java/android/hardware/camera2/CameraCharacteristics.java
+++ b/core/java/android/hardware/camera2/CameraCharacteristics.java
@@ -126,14 +126,38 @@
      * modify the comment blocks at the start or end.
      *~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~*/
 
+
     /**
-     * <p>Which set of antibanding modes are
-     * supported</p>
+     * <p>The set of auto-exposure antibanding modes that are
+     * supported by this camera device.</p>
+     * <p>Not all of the auto-exposure anti-banding modes may be
+     * supported by a given camera device. This field lists the
+     * valid anti-banding modes that the application may request
+     * for this camera device; they must include AUTO.</p>
      */
     public static final Key<byte[]> CONTROL_AE_AVAILABLE_ANTIBANDING_MODES =
             new Key<byte[]>("android.control.aeAvailableAntibandingModes", byte[].class);
 
     /**
+     * <p>The set of auto-exposure modes that are supported by this
+     * camera device.</p>
+     * <p>Not all the auto-exposure modes may be supported by a
+     * given camera device, especially if no flash unit is
+     * available. This entry lists the valid modes for
+     * {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} for this camera device.</p>
+     * <p>All camera devices support ON, and all camera devices with
+     * flash units support ON_AUTO_FLASH and
+     * ON_ALWAYS_FLASH.</p>
+     * <p>Full-capability camera devices always support OFF mode,
+     * which enables application control of camera exposure time,
+     * sensitivity, and frame duration.</p>
+     *
+     * @see CaptureRequest#CONTROL_AE_MODE
+     */
+    public static final Key<byte[]> CONTROL_AE_AVAILABLE_MODES =
+            new Key<byte[]>("android.control.aeAvailableModes", byte[].class);
+
+    /**
      * <p>List of frame rate ranges supported by the
      * AE algorithm/hardware</p>
      */
@@ -211,14 +235,16 @@
      * <li>The sizes must be sorted by increasing pixel area (width x height).
      * If several resolutions have the same area, they must be sorted by increasing width.</li>
      * <li>The aspect ratio of the largest thumbnail size must be same as the
-     * aspect ratio of largest size in android.scaler.availableJpegSizes.
+     * aspect ratio of largest size in {@link CameraCharacteristics#SCALER_AVAILABLE_JPEG_SIZES android.scaler.availableJpegSizes}.
      * The largest size is defined as the size that has the largest pixel area
      * in a given size list.</li>
-     * <li>Each size in android.scaler.availableJpegSizes must have at least
+     * <li>Each size in {@link CameraCharacteristics#SCALER_AVAILABLE_JPEG_SIZES android.scaler.availableJpegSizes} must have at least
      * one corresponding size that has the same aspect ratio in availableThumbnailSizes,
      * and vice versa.</li>
      * <li>All non (0, 0) sizes must have non-zero widths and heights.</li>
      * </ul>
+     *
+     * @see CameraCharacteristics#SCALER_AVAILABLE_JPEG_SIZES
      */
     public static final Key<android.hardware.camera2.Size[]> JPEG_AVAILABLE_THUMBNAIL_SIZES =
             new Key<android.hardware.camera2.Size[]>("android.jpeg.availableThumbnailSizes", android.hardware.camera2.Size[].class);
@@ -304,9 +330,7 @@
      * future versions of camera service. This quirk will stop
      * working at that point; DO NOT USE without careful
      * consideration of future support.</p>
-     *
-     * <b>Optional</b> - This value may be null on some devices.
-     *
+     * <p><b>Optional</b> - This value may be null on some devices.</p>
      * @hide
      */
     public static final Key<Byte> QUIRKS_USE_PARTIAL_RESULT =
@@ -429,12 +453,6 @@
     /**
      * <p>Gain factor from electrons to raw units when
      * ISO=100</p>
-     *
-     * <b>Optional</b> - This value may be null on some devices.
-     *
-     * <b>{@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL}</b> -
-     * Present on all devices that report being FULL level hardware devices in the
-     * {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL HARDWARE_LEVEL} key.
      */
     public static final Key<Rational> SENSOR_BASE_GAIN_FACTOR =
             new Key<Rational>("android.sensor.baseGainFactor", Rational.class);
@@ -442,16 +460,17 @@
     /**
      * <p>Maximum sensitivity that is implemented
      * purely through analog gain</p>
-     * <p>For android.sensor.sensitivity values less than or
+     * <p>For {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity} values less than or
      * equal to this, all applied gain must be analog. For
      * values above this, it can be a mix of analog and
      * digital</p>
+     * <p><b>Optional</b> - This value may be null on some devices.</p>
+     * <p><b>Full capability</b> -
+     * Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
+     * {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
      *
-     * <b>Optional</b> - This value may be null on some devices.
-     *
-     * <b>{@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL}</b> -
-     * Present on all devices that report being FULL level hardware devices in the
-     * {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL HARDWARE_LEVEL} key.
+     * @see CaptureRequest#SENSOR_SENSITIVITY
+     * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
      */
     public static final Key<Integer> SENSOR_MAX_ANALOG_SENSITIVITY =
             new Key<Integer>("android.sensor.maxAnalogSensitivity", int.class);
@@ -498,7 +517,6 @@
     /**
      * <p>A list of camera LEDs that are available on this system.</p>
      * @see #LED_AVAILABLE_LEDS_TRANSMIT
-     *
      * @hide
      */
     public static final Key<int[]> LED_AVAILABLE_LEDS =
diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java
index f56feaa..58e93235 100644
--- a/core/java/android/hardware/camera2/CameraMetadata.java
+++ b/core/java/android/hardware/camera2/CameraMetadata.java
@@ -249,8 +249,11 @@
     //
 
     /**
-     * <p>Use the android.colorCorrection.transform matrix
-     * and android.colorCorrection.gains to do color conversion</p>
+     * <p>Use the {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform} matrix
+     * and {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} to do color conversion</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_TRANSFORM
+     * @see CaptureRequest#COLOR_CORRECTION_GAINS
      * @see CaptureRequest#COLOR_CORRECTION_MODE
      */
     public static final int COLOR_CORRECTION_MODE_TRANSFORM_MATRIX = 0;
@@ -274,21 +277,31 @@
     //
 
     /**
+     * <p>The camera device will not adjust exposure duration to
+     * avoid banding problems.</p>
      * @see CaptureRequest#CONTROL_AE_ANTIBANDING_MODE
      */
     public static final int CONTROL_AE_ANTIBANDING_MODE_OFF = 0;
 
     /**
+     * <p>The camera device will adjust exposure duration to
+     * avoid banding problems with 50Hz illumination sources.</p>
      * @see CaptureRequest#CONTROL_AE_ANTIBANDING_MODE
      */
     public static final int CONTROL_AE_ANTIBANDING_MODE_50HZ = 1;
 
     /**
+     * <p>The camera device will adjust exposure duration to
+     * avoid banding problems with 60Hz illumination
+     * sources.</p>
      * @see CaptureRequest#CONTROL_AE_ANTIBANDING_MODE
      */
     public static final int CONTROL_AE_ANTIBANDING_MODE_60HZ = 2;
 
     /**
+     * <p>The camera device will automatically adapt its
+     * antibanding routine to the current illumination
+     * conditions. This is the default.</p>
      * @see CaptureRequest#CONTROL_AE_ANTIBANDING_MODE
      */
     public static final int CONTROL_AE_ANTIBANDING_MODE_AUTO = 3;
@@ -298,42 +311,73 @@
     //
 
     /**
-     * <p>Autoexposure is disabled; sensor.exposureTime,
-     * sensor.sensitivity and sensor.frameDuration are used</p>
+     * <p>The camera device's autoexposure routine is disabled;
+     * the application-selected {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime},
+     * {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity} and
+     * {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration} are used by the camera
+     * device, along with android.flash.* fields, if there's
+     * a flash unit for this camera device.</p>
+     *
+     * @see CaptureRequest#SENSOR_EXPOSURE_TIME
+     * @see CaptureRequest#SENSOR_FRAME_DURATION
+     * @see CaptureRequest#SENSOR_SENSITIVITY
      * @see CaptureRequest#CONTROL_AE_MODE
      */
     public static final int CONTROL_AE_MODE_OFF = 0;
 
     /**
-     * <p>Autoexposure is active, no flash
-     * control</p>
+     * <p>The camera device's autoexposure routine is active,
+     * with no flash control. The application's values for
+     * {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime},
+     * {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}, and
+     * {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration} are ignored. The
+     * application has control over the various
+     * android.flash.* fields.</p>
+     *
+     * @see CaptureRequest#SENSOR_EXPOSURE_TIME
+     * @see CaptureRequest#SENSOR_FRAME_DURATION
+     * @see CaptureRequest#SENSOR_SENSITIVITY
      * @see CaptureRequest#CONTROL_AE_MODE
      */
     public static final int CONTROL_AE_MODE_ON = 1;
 
     /**
-     * <p>If autoexposure is active and flash exists, auto
-     * flash control; flash may be fired when precapture
-     * trigger is activated, and for captures for which
-     * captureIntent = STILL_CAPTURE</p>
+     * <p>Like ON, except that the camera device also controls
+     * the camera's flash unit, firing it in low-light
+     * conditions. The flash may be fired during a
+     * precapture sequence (triggered by
+     * {@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger}) and may be fired
+     * for captures for which the
+     * {@link CaptureRequest#CONTROL_CAPTURE_INTENT android.control.captureIntent} field is set to
+     * STILL_CAPTURE</p>
+     *
+     * @see CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
+     * @see CaptureRequest#CONTROL_CAPTURE_INTENT
      * @see CaptureRequest#CONTROL_AE_MODE
      */
     public static final int CONTROL_AE_MODE_ON_AUTO_FLASH = 2;
 
     /**
-     * <p>If autoexposure is active and flash exists, auto
-     * flash control for precapture trigger and always flash
-     * when captureIntent = STILL_CAPTURE</p>
+     * <p>Like ON, except that the camera device also controls
+     * the camera's flash unit, always firing it for still
+     * captures. The flash may be fired during a precapture
+     * sequence (triggered by
+     * {@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger}) and will always
+     * be fired for captures for which the
+     * {@link CaptureRequest#CONTROL_CAPTURE_INTENT android.control.captureIntent} field is set to
+     * STILL_CAPTURE</p>
+     *
+     * @see CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
+     * @see CaptureRequest#CONTROL_CAPTURE_INTENT
      * @see CaptureRequest#CONTROL_AE_MODE
      */
     public static final int CONTROL_AE_MODE_ON_ALWAYS_FLASH = 3;
 
     /**
-     * <p>Optional. Automatic red eye reduction with flash.
-     * If deemed necessary, red eye reduction sequence should
-     * fire when precapture trigger is activated, and final
-     * flash should fire when captureIntent =
-     * STILL_CAPTURE</p>
+     * <p>Like ON_AUTO_FLASH, but with automatic red eye
+     * reduction. If deemed necessary by the camera device,
+     * a red eye reduction flash will fire during the
+     * precapture sequence.</p>
      * @see CaptureRequest#CONTROL_AE_MODE
      */
     public static final int CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE = 4;
@@ -363,21 +407,25 @@
 
     /**
      * <p>The auto-focus routine does not control the lens;
-     * android.lens.focusDistance is controlled by the
+     * {@link CaptureRequest#LENS_FOCUS_DISTANCE android.lens.focusDistance} is controlled by the
      * application</p>
+     *
+     * @see CaptureRequest#LENS_FOCUS_DISTANCE
      * @see CaptureRequest#CONTROL_AF_MODE
      */
     public static final int CONTROL_AF_MODE_OFF = 0;
 
     /**
      * <p>If lens is not fixed focus.</p>
-     * <p>Use android.lens.info.minimumFocusDistance to determine if lens
+     * <p>Use {@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance} to determine if lens
      * is fixed-focus. In this mode, the lens does not move unless
      * the autofocus trigger action is called. When that trigger
      * is activated, AF must transition to ACTIVE_SCAN, then to
      * the outcome of the scan (FOCUSED or NOT_FOCUSED).</p>
      * <p>Triggering AF_CANCEL resets the lens position to default,
      * and sets the AF state to INACTIVE.</p>
+     *
+     * @see CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
      * @see CaptureRequest#CONTROL_AF_MODE
      */
     public static final int CONTROL_AF_MODE_AUTO = 1;
diff --git a/core/java/android/hardware/camera2/CaptureRequest.java b/core/java/android/hardware/camera2/CaptureRequest.java
index 28341d9..9ba3eea 100644
--- a/core/java/android/hardware/camera2/CaptureRequest.java
+++ b/core/java/android/hardware/camera2/CaptureRequest.java
@@ -317,9 +317,12 @@
      * modify the comment blocks at the start or end.
      *~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~*/
 
+
     /**
-     * <p>When android.control.awbMode is not OFF, TRANSFORM_MATRIX
+     * <p>When {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode} is not OFF, TRANSFORM_MATRIX
      * should be ignored.</p>
+     *
+     * @see CaptureRequest#CONTROL_AWB_MODE
      * @see #COLOR_CORRECTION_MODE_TRANSFORM_MATRIX
      * @see #COLOR_CORRECTION_MODE_FAST
      * @see #COLOR_CORRECTION_MODE_HIGH_QUALITY
@@ -331,12 +334,14 @@
      * <p>A color transform matrix to use to transform
      * from sensor RGB color space to output linear sRGB color space</p>
      * <p>This matrix is either set by HAL when the request
-     * android.colorCorrection.mode is not TRANSFORM_MATRIX, or
+     * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} is not TRANSFORM_MATRIX, or
      * directly by the application in the request when the
-     * android.colorCorrection.mode is TRANSFORM_MATRIX.</p>
+     * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} is TRANSFORM_MATRIX.</p>
      * <p>In the latter case, the HAL may round the matrix to account
      * for precision issues; the final rounded matrix should be
      * reported back in this matrix result metadata.</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_MODE
      */
     public static final Key<Rational[]> COLOR_CORRECTION_TRANSFORM =
             new Key<Rational[]>("android.colorCorrection.transform", Rational[].class);
@@ -352,18 +357,52 @@
      * it should use the G_even value,and write G_odd equal to
      * G_even in the output result metadata.</p>
      * <p>This array is either set by HAL when the request
-     * android.colorCorrection.mode is not TRANSFORM_MATRIX, or
+     * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} is not TRANSFORM_MATRIX, or
      * directly by the application in the request when the
-     * android.colorCorrection.mode is TRANSFORM_MATRIX.</p>
+     * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} is TRANSFORM_MATRIX.</p>
      * <p>The ouput should be the gains actually applied by the HAL to
      * the current frame.</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_MODE
      */
     public static final Key<float[]> COLOR_CORRECTION_GAINS =
             new Key<float[]>("android.colorCorrection.gains", float[].class);
 
     /**
-     * <p>Enum for controlling
-     * antibanding</p>
+     * <p>The desired setting for the camera device's auto-exposure
+     * algorithm's antibanding compensation.</p>
+     * <p>Some kinds of lighting fixtures, such as some fluorescent
+     * lights, flicker at the rate of the power supply frequency
+     * (60Hz or 50Hz, depending on country). While this is
+     * typically not noticeable to a person, it can be visible to
+     * a camera device. If a camera sets its exposure time to the
+     * wrong value, the flicker may become visible in the
+     * viewfinder as flicker or in a final captured image, as a
+     * set of variable-brightness bands across the image.</p>
+     * <p>Therefore, the auto-exposure routines of camera devices
+     * include antibanding routines that ensure that the chosen
+     * exposure value will not cause such banding. The choice of
+     * exposure time depends on the rate of flicker, which the
+     * camera device can detect automatically, or the expected
+     * rate can be selected by the application using this
+     * control.</p>
+     * <p>A given camera device may not support all of the possible
+     * options for the antibanding mode. The
+     * {@link CameraCharacteristics#CONTROL_AE_AVAILABLE_ANTIBANDING_MODES android.control.aeAvailableAntibandingModes} key contains
+     * the available modes for a given camera device.</p>
+     * <p>The default mode is AUTO, which must be supported by all
+     * camera devices.</p>
+     * <p>If manual exposure control is enabled (by setting
+     * {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} or {@link CaptureRequest#CONTROL_MODE android.control.mode} to OFF),
+     * then this setting has no effect, and the application must
+     * ensure it selects exposure times that do not cause banding
+     * issues. The {@link CaptureResult#STATISTICS_SCENE_FLICKER android.statistics.sceneFlicker} key can assist
+     * the application in this.</p>
+     *
+     * @see CameraCharacteristics#CONTROL_AE_AVAILABLE_ANTIBANDING_MODES
+     * @see CaptureResult#STATISTICS_SCENE_FLICKER
+     * @see CaptureRequest#CONTROL_AE_MODE
+     * @see CaptureRequest#CONTROL_MODE
      * @see #CONTROL_AE_ANTIBANDING_MODE_OFF
      * @see #CONTROL_AE_ANTIBANDING_MODE_50HZ
      * @see #CONTROL_AE_ANTIBANDING_MODE_60HZ
@@ -393,17 +432,33 @@
             new Key<Boolean>("android.control.aeLock", boolean.class);
 
     /**
-     * <p>Whether AE is currently updating the sensor
-     * exposure and sensitivity fields</p>
-     * <p>Only effective if android.control.mode = AUTO.</p>
-     * <p>If auto-exposure is active, HAL auto-focus routine is enabled,
-     * then HAL auto-exposure routine overrides the control variables
-     * that relate to auto-exposure routine, and these override values
-     * are then available in the result metadata for that capture.</p>
-     * <p>For example, if auto-exposure is enabled in a request, the HAL should
-     * overwrite the exposure, gain, and frame duration fields (and potentially
-     * the flash fields, depending on AE mode) of the request.  The overridden
-     * values are then provided back to the user in the corresponding result.</p>
+     * <p>The desired mode for the camera device's
+     * auto-exposure routine.</p>
+     * <p>This control is only effective if {@link CaptureRequest#CONTROL_MODE android.control.mode} is
+     * AUTO.</p>
+     * <p>When set to any of the ON modes, the camera device's
+     * auto-exposure routine is enabled, overriding the
+     * application's selected exposure time, sensor sensitivity,
+     * and frame duration ({@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime},
+     * {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}, and
+     * {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration}). If one of the FLASH modes
+     * is selected, the camera device's flash unit controls are
+     * also overridden.</p>
+     * <p>The FLASH modes are only available if the camera device
+     * has a flash unit ({@link CameraCharacteristics#FLASH_INFO_AVAILABLE android.flash.info.available} is <code>true</code>).</p>
+     * <p>If flash TORCH mode is desired, this field must be set to
+     * ON or OFF, and {@link CaptureRequest#FLASH_MODE android.flash.mode} set to TORCH.</p>
+     * <p>When set to any of the ON modes, the values chosen by the
+     * camera device auto-exposure routine for the overridden
+     * fields for a given capture will be available in its
+     * CaptureResult.</p>
+     *
+     * @see CaptureRequest#SENSOR_EXPOSURE_TIME
+     * @see CaptureRequest#SENSOR_FRAME_DURATION
+     * @see CaptureRequest#SENSOR_SENSITIVITY
+     * @see CaptureRequest#FLASH_MODE
+     * @see CameraCharacteristics#FLASH_INFO_AVAILABLE
+     * @see CaptureRequest#CONTROL_MODE
      * @see #CONTROL_AE_MODE_OFF
      * @see #CONTROL_AE_MODE_ON
      * @see #CONTROL_AE_MODE_ON_AUTO_FLASH
@@ -421,15 +476,18 @@
      * specified coordinates.</p>
      * <p>The coordinate system is based on the active pixel array,
      * with (0,0) being the top-left pixel in the active pixel array, and
-     * (android.sensor.info.activeArraySize.width - 1,
-     * android.sensor.info.activeArraySize.height - 1) being the
+     * ({@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.width - 1,
+     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.height - 1) being the
      * bottom-right pixel in the active pixel array. The weight
      * should be nonnegative.</p>
      * <p>If all regions have 0 weight, then no specific metering area
      * needs to be used by the HAL. If the metering region is
-     * outside the current android.scaler.cropRegion, the HAL
+     * outside the current {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion}, the HAL
      * should ignore the sections outside the region and output the
      * used sections in the frame metadata</p>
+     *
+     * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
+     * @see CaptureRequest#SCALER_CROP_REGION
      */
     public static final Key<int[]> CONTROL_AE_REGIONS =
             new Key<int[]>("android.control.aeRegions", int[].class);
@@ -438,7 +496,9 @@
      * <p>Range over which fps can be adjusted to
      * maintain exposure</p>
      * <p>Only constrains AE algorithm, not manual control
-     * of android.sensor.exposureTime</p>
+     * of {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime}</p>
+     *
+     * @see CaptureRequest#SENSOR_EXPOSURE_TIME
      */
     public static final Key<int[]> CONTROL_AE_TARGET_FPS_RANGE =
             new Key<int[]>("android.control.aeTargetFpsRange", int[].class);
@@ -462,10 +522,13 @@
     /**
      * <p>Whether AF is currently enabled, and what
      * mode it is set to</p>
-     * <p>Only effective if android.control.mode = AUTO.</p>
+     * <p>Only effective if {@link CaptureRequest#CONTROL_MODE android.control.mode} = AUTO.</p>
      * <p>If lens is controlled by HAL auto-focus algorithm, the HAL should
-     * report the current AF status in android.control.afState in
+     * report the current AF status in {@link CaptureResult#CONTROL_AF_STATE android.control.afState} in
      * result metadata.</p>
+     *
+     * @see CaptureRequest#CONTROL_MODE
+     * @see CaptureResult#CONTROL_AF_STATE
      * @see #CONTROL_AF_MODE_OFF
      * @see #CONTROL_AF_MODE_AUTO
      * @see #CONTROL_AF_MODE_MACRO
@@ -484,15 +547,18 @@
      * specified coordinates.</p>
      * <p>The coordinate system is based on the active pixel array,
      * with (0,0) being the top-left pixel in the active pixel array, and
-     * (android.sensor.info.activeArraySize.width - 1,
-     * android.sensor.info.activeArraySize.height - 1) being the
+     * ({@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.width - 1,
+     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.height - 1) being the
      * bottom-right pixel in the active pixel array. The weight
      * should be nonnegative.</p>
      * <p>If all regions have 0 weight, then no specific focus area
      * needs to be used by the HAL. If the focusing region is
-     * outside the current android.scaler.cropRegion, the HAL
+     * outside the current {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion}, the HAL
      * should ignore the sections outside the region and output the
      * used sections in the frame metadata</p>
+     *
+     * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
+     * @see CaptureRequest#SCALER_CROP_REGION
      */
     public static final Key<int[]> CONTROL_AF_REGIONS =
             new Key<int[]>("android.control.afRegions", int[].class);
@@ -528,7 +594,9 @@
      * transform fields, and what its illumination target
      * is</p>
      * <p>[BC - AWB lock,AWB modes]</p>
-     * <p>Only effective if android.control.mode = AUTO.</p>
+     * <p>Only effective if {@link CaptureRequest#CONTROL_MODE android.control.mode} = AUTO.</p>
+     *
+     * @see CaptureRequest#CONTROL_MODE
      * @see #CONTROL_AWB_MODE_OFF
      * @see #CONTROL_AWB_MODE_AUTO
      * @see #CONTROL_AWB_MODE_INCANDESCENT
@@ -551,15 +619,18 @@
      * specified coordinates.</p>
      * <p>The coordinate system is based on the active pixel array,
      * with (0,0) being the top-left pixel in the active pixel array, and
-     * (android.sensor.info.activeArraySize.width - 1,
-     * android.sensor.info.activeArraySize.height - 1) being the
+     * ({@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.width - 1,
+     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.height - 1) being the
      * bottom-right pixel in the active pixel array. The weight
      * should be nonnegative.</p>
      * <p>If all regions have 0 weight, then no specific metering area
      * needs to be used by the HAL. If the metering region is
-     * outside the current android.scaler.cropRegion, the HAL
+     * outside the current {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion}, the HAL
      * should ignore the sections outside the region and output the
      * used sections in the frame metadata</p>
+     *
+     * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
+     * @see CaptureRequest#SCALER_CROP_REGION
      */
     public static final Key<int[]> CONTROL_AWB_REGIONS =
             new Key<int[]>("android.control.awbRegions", int[].class);
@@ -568,7 +639,9 @@
      * <p>Information to 3A routines about the purpose
      * of this capture, to help decide optimal 3A
      * strategy</p>
-     * <p>Only used if android.control.mode != OFF.</p>
+     * <p>Only used if {@link CaptureRequest#CONTROL_MODE android.control.mode} != OFF.</p>
+     *
+     * @see CaptureRequest#CONTROL_MODE
      * @see #CONTROL_CAPTURE_INTENT_CUSTOM
      * @see #CONTROL_CAPTURE_INTENT_PREVIEW
      * @see #CONTROL_CAPTURE_INTENT_STILL_CAPTURE
@@ -581,7 +654,9 @@
 
     /**
      * <p>Whether any special color effect is in use.
-     * Only used if android.control.mode != OFF</p>
+     * Only used if {@link CaptureRequest#CONTROL_MODE android.control.mode} != OFF</p>
+     *
+     * @see CaptureRequest#CONTROL_MODE
      * @see #CONTROL_EFFECT_MODE_OFF
      * @see #CONTROL_EFFECT_MODE_MONO
      * @see #CONTROL_EFFECT_MODE_NEGATIVE
@@ -602,12 +677,14 @@
      * by the HAL is disabled. The application must set the fields for
      * capture parameters itself.</p>
      * <p>When set to AUTO, the individual algorithm controls in
-     * android.control.* are in effect, such as android.control.afMode.</p>
+     * android.control.* are in effect, such as {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode}.</p>
      * <p>When set to USE_SCENE_MODE, the individual controls in
      * android.control.* are mostly disabled, and the HAL implements
      * one of the scene mode settings (such as ACTION, SUNSET, or PARTY)
      * as it wishes. The HAL scene mode 3A settings are provided by
      * android.control.sceneModeOverrides.</p>
+     *
+     * @see CaptureRequest#CONTROL_AF_MODE
      * @see #CONTROL_MODE_OFF
      * @see #CONTROL_MODE_AUTO
      * @see #CONTROL_MODE_USE_SCENE_MODE
@@ -617,7 +694,9 @@
 
     /**
      * <p>Which scene mode is active when
-     * android.control.mode = SCENE_MODE</p>
+     * {@link CaptureRequest#CONTROL_MODE android.control.mode} = SCENE_MODE</p>
+     *
+     * @see CaptureRequest#CONTROL_MODE
      * @see #CONTROL_SCENE_MODE_UNSUPPORTED
      * @see #CONTROL_SCENE_MODE_FACE_PRIORITY
      * @see #CONTROL_SCENE_MODE_ACTION
@@ -643,8 +722,10 @@
      * <p>Whether video stabilization is
      * active</p>
      * <p>If enabled, video stabilization can modify the
-     * android.scaler.cropRegion to keep the video stream
+     * {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion} to keep the video stream
      * stabilized</p>
+     *
+     * @see CaptureRequest#SCALER_CROP_REGION
      */
     public static final Key<Boolean> CONTROL_VIDEO_STABILIZATION_MODE =
             new Key<Boolean>("android.control.videoStabilizationMode", boolean.class);
@@ -792,7 +873,6 @@
      * <p>An application-specified ID for the current
      * request. Must be maintained unchanged in output
      * frame</p>
-     *
      * @hide
      */
     public static final Key<Integer> REQUEST_ID =
@@ -868,7 +948,9 @@
      * <p>Whether face detection is enabled, and whether it
      * should output just the basic fields or the full set of
      * fields. Value must be one of the
-     * android.statistics.info.availableFaceDetectModes.</p>
+     * {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES android.statistics.info.availableFaceDetectModes}.</p>
+     *
+     * @see CameraCharacteristics#STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES
      * @see #STATISTICS_FACE_DETECT_MODE_OFF
      * @see #STATISTICS_FACE_DETECT_MODE_SIMPLE
      * @see #STATISTICS_FACE_DETECT_MODE_FULL
@@ -880,8 +962,10 @@
      * <p>Whether the HAL needs to output the lens
      * shading map in output result metadata</p>
      * <p>When set to ON,
-     * android.statistics.lensShadingMap must be provided in
+     * {@link CaptureResult#STATISTICS_LENS_SHADING_MAP android.statistics.lensShadingMap} must be provided in
      * the output result metadata.</p>
+     *
+     * @see CaptureResult#STATISTICS_LENS_SHADING_MAP
      * @see #STATISTICS_LENS_SHADING_MAP_MODE_OFF
      * @see #STATISTICS_LENS_SHADING_MAP_MODE_ON
      */
@@ -892,8 +976,11 @@
      * <p>Table mapping blue input values to output
      * values</p>
      * <p>Tonemapping / contrast / gamma curve for the blue
-     * channel, to use when android.tonemap.mode is CONTRAST_CURVE.</p>
-     * <p>See android.tonemap.curveRed for more details.</p>
+     * channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is CONTRAST_CURVE.</p>
+     * <p>See {@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed} for more details.</p>
+     *
+     * @see CaptureRequest#TONEMAP_MODE
+     * @see CaptureRequest#TONEMAP_CURVE_RED
      */
     public static final Key<float[]> TONEMAP_CURVE_BLUE =
             new Key<float[]>("android.tonemap.curveBlue", float[].class);
@@ -902,8 +989,11 @@
      * <p>Table mapping green input values to output
      * values</p>
      * <p>Tonemapping / contrast / gamma curve for the green
-     * channel, to use when android.tonemap.mode is CONTRAST_CURVE.</p>
-     * <p>See android.tonemap.curveRed for more details.</p>
+     * channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is CONTRAST_CURVE.</p>
+     * <p>See {@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed} for more details.</p>
+     *
+     * @see CaptureRequest#TONEMAP_MODE
+     * @see CaptureRequest#TONEMAP_CURVE_RED
      */
     public static final Key<float[]> TONEMAP_CURVE_GREEN =
             new Key<float[]>("android.tonemap.curveGreen", float[].class);
@@ -912,7 +1002,7 @@
      * <p>Table mapping red input values to output
      * values</p>
      * <p>Tonemapping / contrast / gamma curve for the red
-     * channel, to use when android.tonemap.mode is CONTRAST_CURVE.</p>
+     * channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is CONTRAST_CURVE.</p>
      * <p>Since the input and output ranges may vary depending on
      * the camera pipeline, the input and output pixel values
      * are represented by normalized floating-point values
@@ -923,6 +1013,8 @@
      * 0.3, 0.5, 1.0, 1.0], then the input-&gt;output mapping
      * for a few sample points would be: 0 -&gt; 0, 0.15 -&gt;
      * 0.25, 0.3 -&gt; 0.5, 0.5 -&gt; 0.64</p>
+     *
+     * @see CaptureRequest#TONEMAP_MODE
      */
     public static final Key<float[]> TONEMAP_CURVE_RED =
             new Key<float[]>("android.tonemap.curveRed", float[].class);
@@ -946,7 +1038,6 @@
      * data is stored locally on the device.</p>
      * <p>The LED <em>may</em> be off if a trusted application is using the data that
      * doesn't violate the above rules.</p>
-     *
      * @hide
      */
     public static final Key<Boolean> LED_TRANSMIT =
diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java
index dab4bcf..3b5d6b0 100644
--- a/core/java/android/hardware/camera2/CaptureResult.java
+++ b/core/java/android/hardware/camera2/CaptureResult.java
@@ -122,16 +122,19 @@
      * modify the comment blocks at the start or end.
      *~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~*/
 
+
     /**
      * <p>A color transform matrix to use to transform
      * from sensor RGB color space to output linear sRGB color space</p>
      * <p>This matrix is either set by HAL when the request
-     * android.colorCorrection.mode is not TRANSFORM_MATRIX, or
+     * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} is not TRANSFORM_MATRIX, or
      * directly by the application in the request when the
-     * android.colorCorrection.mode is TRANSFORM_MATRIX.</p>
+     * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} is TRANSFORM_MATRIX.</p>
      * <p>In the latter case, the HAL may round the matrix to account
      * for precision issues; the final rounded matrix should be
      * reported back in this matrix result metadata.</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_MODE
      */
     public static final Key<Rational[]> COLOR_CORRECTION_TRANSFORM =
             new Key<Rational[]>("android.colorCorrection.transform", Rational[].class);
@@ -147,11 +150,13 @@
      * it should use the G_even value,and write G_odd equal to
      * G_even in the output result metadata.</p>
      * <p>This array is either set by HAL when the request
-     * android.colorCorrection.mode is not TRANSFORM_MATRIX, or
+     * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} is not TRANSFORM_MATRIX, or
      * directly by the application in the request when the
-     * android.colorCorrection.mode is TRANSFORM_MATRIX.</p>
+     * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} is TRANSFORM_MATRIX.</p>
      * <p>The ouput should be the gains actually applied by the HAL to
      * the current frame.</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_MODE
      */
     public static final Key<float[]> COLOR_CORRECTION_GAINS =
             new Key<float[]>("android.colorCorrection.gains", float[].class);
@@ -163,13 +168,49 @@
      * CAMERA2_TRIGGER_PRECAPTURE_METERING trigger received yet
      * by HAL. Always updated even if AE algorithm ignores the
      * trigger</p>
-     *
      * @hide
      */
     public static final Key<Integer> CONTROL_AE_PRECAPTURE_ID =
             new Key<Integer>("android.control.aePrecaptureId", int.class);
 
     /**
+     * <p>The desired mode for the camera device's
+     * auto-exposure routine.</p>
+     * <p>This control is only effective if {@link CaptureRequest#CONTROL_MODE android.control.mode} is
+     * AUTO.</p>
+     * <p>When set to any of the ON modes, the camera device's
+     * auto-exposure routine is enabled, overriding the
+     * application's selected exposure time, sensor sensitivity,
+     * and frame duration ({@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime},
+     * {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}, and
+     * {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration}). If one of the FLASH modes
+     * is selected, the camera device's flash unit controls are
+     * also overridden.</p>
+     * <p>The FLASH modes are only available if the camera device
+     * has a flash unit ({@link CameraCharacteristics#FLASH_INFO_AVAILABLE android.flash.info.available} is <code>true</code>).</p>
+     * <p>If flash TORCH mode is desired, this field must be set to
+     * ON or OFF, and {@link CaptureRequest#FLASH_MODE android.flash.mode} set to TORCH.</p>
+     * <p>When set to any of the ON modes, the values chosen by the
+     * camera device auto-exposure routine for the overridden
+     * fields for a given capture will be available in its
+     * CaptureResult.</p>
+     *
+     * @see CaptureRequest#SENSOR_EXPOSURE_TIME
+     * @see CaptureRequest#SENSOR_FRAME_DURATION
+     * @see CaptureRequest#SENSOR_SENSITIVITY
+     * @see CaptureRequest#FLASH_MODE
+     * @see CameraCharacteristics#FLASH_INFO_AVAILABLE
+     * @see CaptureRequest#CONTROL_MODE
+     * @see #CONTROL_AE_MODE_OFF
+     * @see #CONTROL_AE_MODE_ON
+     * @see #CONTROL_AE_MODE_ON_AUTO_FLASH
+     * @see #CONTROL_AE_MODE_ON_ALWAYS_FLASH
+     * @see #CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE
+     */
+    public static final Key<Integer> CONTROL_AE_MODE =
+            new Key<Integer>("android.control.aeMode", int.class);
+
+    /**
      * <p>List of areas to use for
      * metering</p>
      * <p>Each area is a rectangle plus weight: xmin, ymin,
@@ -177,15 +218,18 @@
      * specified coordinates.</p>
      * <p>The coordinate system is based on the active pixel array,
      * with (0,0) being the top-left pixel in the active pixel array, and
-     * (android.sensor.info.activeArraySize.width - 1,
-     * android.sensor.info.activeArraySize.height - 1) being the
+     * ({@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.width - 1,
+     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.height - 1) being the
      * bottom-right pixel in the active pixel array. The weight
      * should be nonnegative.</p>
      * <p>If all regions have 0 weight, then no specific metering area
      * needs to be used by the HAL. If the metering region is
-     * outside the current android.scaler.cropRegion, the HAL
+     * outside the current {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion}, the HAL
      * should ignore the sections outside the region and output the
      * used sections in the frame metadata</p>
+     *
+     * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
+     * @see CaptureRequest#SCALER_CROP_REGION
      */
     public static final Key<int[]> CONTROL_AE_REGIONS =
             new Key<int[]>("android.control.aeRegions", int[].class);
@@ -208,10 +252,13 @@
     /**
      * <p>Whether AF is currently enabled, and what
      * mode it is set to</p>
-     * <p>Only effective if android.control.mode = AUTO.</p>
+     * <p>Only effective if {@link CaptureRequest#CONTROL_MODE android.control.mode} = AUTO.</p>
      * <p>If lens is controlled by HAL auto-focus algorithm, the HAL should
-     * report the current AF status in android.control.afState in
+     * report the current AF status in {@link CaptureResult#CONTROL_AF_STATE android.control.afState} in
      * result metadata.</p>
+     *
+     * @see CaptureRequest#CONTROL_MODE
+     * @see CaptureResult#CONTROL_AF_STATE
      * @see #CONTROL_AF_MODE_OFF
      * @see #CONTROL_AF_MODE_AUTO
      * @see #CONTROL_AF_MODE_MACRO
@@ -230,15 +277,18 @@
      * specified coordinates.</p>
      * <p>The coordinate system is based on the active pixel array,
      * with (0,0) being the top-left pixel in the active pixel array, and
-     * (android.sensor.info.activeArraySize.width - 1,
-     * android.sensor.info.activeArraySize.height - 1) being the
+     * ({@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.width - 1,
+     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.height - 1) being the
      * bottom-right pixel in the active pixel array. The weight
      * should be nonnegative.</p>
      * <p>If all regions have 0 weight, then no specific focus area
      * needs to be used by the HAL. If the focusing region is
-     * outside the current android.scaler.cropRegion, the HAL
+     * outside the current {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion}, the HAL
      * should ignore the sections outside the region and output the
      * used sections in the frame metadata</p>
+     *
+     * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
+     * @see CaptureRequest#SCALER_CROP_REGION
      */
     public static final Key<int[]> CONTROL_AF_REGIONS =
             new Key<int[]>("android.control.afRegions", int[].class);
@@ -265,7 +315,6 @@
      * <p>Must be 0 if no CAMERA2_TRIGGER_AUTOFOCUS trigger
      * received yet by HAL. Always updated even if AF algorithm
      * ignores the trigger</p>
-     *
      * @hide
      */
     public static final Key<Integer> CONTROL_AF_TRIGGER_ID =
@@ -276,7 +325,9 @@
      * transform fields, and what its illumination target
      * is</p>
      * <p>[BC - AWB lock,AWB modes]</p>
-     * <p>Only effective if android.control.mode = AUTO.</p>
+     * <p>Only effective if {@link CaptureRequest#CONTROL_MODE android.control.mode} = AUTO.</p>
+     *
+     * @see CaptureRequest#CONTROL_MODE
      * @see #CONTROL_AWB_MODE_OFF
      * @see #CONTROL_AWB_MODE_AUTO
      * @see #CONTROL_AWB_MODE_INCANDESCENT
@@ -299,15 +350,18 @@
      * specified coordinates.</p>
      * <p>The coordinate system is based on the active pixel array,
      * with (0,0) being the top-left pixel in the active pixel array, and
-     * (android.sensor.info.activeArraySize.width - 1,
-     * android.sensor.info.activeArraySize.height - 1) being the
+     * ({@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.width - 1,
+     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.height - 1) being the
      * bottom-right pixel in the active pixel array. The weight
      * should be nonnegative.</p>
      * <p>If all regions have 0 weight, then no specific metering area
      * needs to be used by the HAL. If the metering region is
-     * outside the current android.scaler.cropRegion, the HAL
+     * outside the current {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion}, the HAL
      * should ignore the sections outside the region and output the
      * used sections in the frame metadata</p>
+     *
+     * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
+     * @see CaptureRequest#SCALER_CROP_REGION
      */
     public static final Key<int[]> CONTROL_AWB_REGIONS =
             new Key<int[]>("android.control.awbRegions", int[].class);
@@ -332,12 +386,14 @@
      * by the HAL is disabled. The application must set the fields for
      * capture parameters itself.</p>
      * <p>When set to AUTO, the individual algorithm controls in
-     * android.control.* are in effect, such as android.control.afMode.</p>
+     * android.control.* are in effect, such as {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode}.</p>
      * <p>When set to USE_SCENE_MODE, the individual controls in
      * android.control.* are mostly disabled, and the HAL implements
      * one of the scene mode settings (such as ACTION, SUNSET, or PARTY)
      * as it wishes. The HAL scene mode 3A settings are provided by
      * android.control.sceneModeOverrides.</p>
+     *
+     * @see CaptureRequest#CONTROL_AF_MODE
      * @see #CONTROL_MODE_OFF
      * @see #CONTROL_MODE_AUTO
      * @see #CONTROL_MODE_USE_SCENE_MODE
@@ -525,9 +581,7 @@
      * in any order relative to other frames, but all PARTIAL buffers for a given
      * capture must arrive before the FINAL buffer for that capture. This entry may
      * only be used by the HAL if quirks.usePartialResult is set to 1.</p>
-     *
-     * <b>Optional</b> - This value may be null on some devices.
-     *
+     * <p><b>Optional</b> - This value may be null on some devices.</p>
      * @hide
      */
     public static final Key<Boolean> QUIRKS_PARTIAL_RESULT =
@@ -546,7 +600,6 @@
      * <p>An application-specified ID for the current
      * request. Must be maintained unchanged in output
      * frame</p>
-     *
      * @hide
      */
     public static final Key<Integer> REQUEST_ID =
@@ -630,12 +683,6 @@
      * exposure began for this frame.</p>
      * <p>The thermal diode being queried should be inside the sensor PCB, or
      * somewhere close to it.</p>
-     *
-     * <b>Optional</b> - This value may be null on some devices.
-     *
-     * <b>{@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL}</b> -
-     * Present on all devices that report being FULL level hardware devices in the
-     * {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL HARDWARE_LEVEL} key.
      */
     public static final Key<Float> SENSOR_TEMPERATURE =
             new Key<Float>("android.sensor.temperature", float.class);
@@ -646,7 +693,9 @@
      * <p>Whether face detection is enabled, and whether it
      * should output just the basic fields or the full set of
      * fields. Value must be one of the
-     * android.statistics.info.availableFaceDetectModes.</p>
+     * {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES android.statistics.info.availableFaceDetectModes}.</p>
+     *
+     * @see CameraCharacteristics#STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES
      * @see #STATISTICS_FACE_DETECT_MODE_OFF
      * @see #STATISTICS_FACE_DETECT_MODE_SIMPLE
      * @see #STATISTICS_FACE_DETECT_MODE_FULL
@@ -658,7 +707,6 @@
      * <p>List of unique IDs for detected
      * faces</p>
      * <p>Only available if faceDetectMode == FULL</p>
-     *
      * @hide
      */
     public static final Key<int[]> STATISTICS_FACE_IDS =
@@ -668,7 +716,6 @@
      * <p>List of landmarks for detected
      * faces</p>
      * <p>Only available if faceDetectMode == FULL</p>
-     *
      * @hide
      */
     public static final Key<int[]> STATISTICS_FACE_LANDMARKS =
@@ -678,7 +725,6 @@
      * <p>List of the bounding rectangles for detected
      * faces</p>
      * <p>Only available if faceDetectMode != OFF</p>
-     *
      * @hide
      */
     public static final Key<android.graphics.Rect[]> STATISTICS_FACE_RECTANGLES =
@@ -689,7 +735,6 @@
      * detected faces</p>
      * <p>Only available if faceDetectMode != OFF. The value should be
      * meaningful (for example, setting 100 at all times is illegal).</p>
-     *
      * @hide
      */
     public static final Key<byte[]> STATISTICS_FACE_SCORES =
@@ -701,7 +746,7 @@
      * Bayer color channel.</p>
      * <p>The least shaded section of the image should have a gain factor
      * of 1; all other sections should have gains above 1.</p>
-     * <p>When android.colorCorrection.mode = TRANSFORM_MATRIX, the map
+     * <p>When {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} = TRANSFORM_MATRIX, the map
      * must take into account the colorCorrection settings.</p>
      * <p>The shading map is for the entire active pixel array, and is not
      * affected by the crop region specified in the request. Each shading map
@@ -714,18 +759,18 @@
      * <p>The channel order is [R, Geven, Godd, B], where Geven is the green
      * channel for the even rows of a Bayer pattern, and Godd is the odd rows.
      * The shading map is stored in a fully interleaved format, and its size
-     * is provided in the camera static metadata by android.lens.info.shadingMapSize.</p>
+     * is provided in the camera static metadata by {@link CameraCharacteristics#LENS_INFO_SHADING_MAP_SIZE android.lens.info.shadingMapSize}.</p>
      * <p>The shading map should have on the order of 30-40 rows and columns,
      * and must be smaller than 64x64.</p>
      * <p>As an example, given a very small map defined as:</p>
-     * <pre><code>android.lens.info.shadingMapSize = [ 4, 3 ]
-     * android.statistics.lensShadingMap =
+     * <pre><code>{@link CameraCharacteristics#LENS_INFO_SHADING_MAP_SIZE android.lens.info.shadingMapSize} = [ 4, 3 ]
+     * {@link CaptureResult#STATISTICS_LENS_SHADING_MAP android.statistics.lensShadingMap} =
      * [ 1.3, 1.2, 1.15, 1.2,  1.2, 1.2, 1.15, 1.2,
-     *     1.1, 1.2, 1.2, 1.2,  1.3, 1.2, 1.3, 1.3,
-     *   1.2, 1.2, 1.25, 1.1,  1.1, 1.1, 1.1, 1.0,
-     *     1.0, 1.0, 1.0, 1.0,  1.2, 1.3, 1.25, 1.2,
-     *   1.3, 1.2, 1.2, 1.3,   1.2, 1.15, 1.1, 1.2,
-     *     1.2, 1.1, 1.0, 1.2,  1.3, 1.15, 1.2, 1.3 ]
+     * 1.1, 1.2, 1.2, 1.2,  1.3, 1.2, 1.3, 1.3,
+     * 1.2, 1.2, 1.25, 1.1,  1.1, 1.1, 1.1, 1.0,
+     * 1.0, 1.0, 1.0, 1.0,  1.2, 1.3, 1.25, 1.2,
+     * 1.3, 1.2, 1.2, 1.3,   1.2, 1.15, 1.1, 1.2,
+     * 1.2, 1.1, 1.0, 1.2,  1.3, 1.15, 1.2, 1.3 ]
      * </code></pre>
      * <p>The low-resolution scaling map images for each channel are
      * (displayed using nearest-neighbor interpolation):</p>
@@ -736,6 +781,10 @@
      * <p>As a visualization only, inverting the full-color map to recover an
      * image of a gray wall (using bicubic interpolation for visual quality) as captured by the sensor gives:</p>
      * <p><img alt="Image of a uniform white wall (inverse shading map)" src="../../../../images/camera2/metadata/android.statistics.lensShadingMap/inv_shading.png" /></p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_MODE
+     * @see CaptureResult#STATISTICS_LENS_SHADING_MAP
+     * @see CameraCharacteristics#LENS_INFO_SHADING_MAP_SIZE
      */
     public static final Key<float[]> STATISTICS_LENS_SHADING_MAP =
             new Key<float[]>("android.statistics.lensShadingMap", float[].class);
@@ -748,9 +797,11 @@
      * typically completes after the transform has already been
      * applied to that frame.</p>
      * <p>The 4 channel gains are defined in Bayer domain,
-     * see android.colorCorrection.gains for details.</p>
+     * see {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} for details.</p>
      * <p>This value should always be calculated by the AWB block,
      * regardless of the android.control.* current values.</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_GAINS
      */
     public static final Key<float[]> STATISTICS_PREDICTED_COLOR_GAINS =
             new Key<float[]>("android.statistics.predictedColorGains", float[].class);
@@ -791,8 +842,11 @@
      * <p>Table mapping blue input values to output
      * values</p>
      * <p>Tonemapping / contrast / gamma curve for the blue
-     * channel, to use when android.tonemap.mode is CONTRAST_CURVE.</p>
-     * <p>See android.tonemap.curveRed for more details.</p>
+     * channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is CONTRAST_CURVE.</p>
+     * <p>See {@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed} for more details.</p>
+     *
+     * @see CaptureRequest#TONEMAP_MODE
+     * @see CaptureRequest#TONEMAP_CURVE_RED
      */
     public static final Key<float[]> TONEMAP_CURVE_BLUE =
             new Key<float[]>("android.tonemap.curveBlue", float[].class);
@@ -801,8 +855,11 @@
      * <p>Table mapping green input values to output
      * values</p>
      * <p>Tonemapping / contrast / gamma curve for the green
-     * channel, to use when android.tonemap.mode is CONTRAST_CURVE.</p>
-     * <p>See android.tonemap.curveRed for more details.</p>
+     * channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is CONTRAST_CURVE.</p>
+     * <p>See {@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed} for more details.</p>
+     *
+     * @see CaptureRequest#TONEMAP_MODE
+     * @see CaptureRequest#TONEMAP_CURVE_RED
      */
     public static final Key<float[]> TONEMAP_CURVE_GREEN =
             new Key<float[]>("android.tonemap.curveGreen", float[].class);
@@ -811,7 +868,7 @@
      * <p>Table mapping red input values to output
      * values</p>
      * <p>Tonemapping / contrast / gamma curve for the red
-     * channel, to use when android.tonemap.mode is CONTRAST_CURVE.</p>
+     * channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is CONTRAST_CURVE.</p>
      * <p>Since the input and output ranges may vary depending on
      * the camera pipeline, the input and output pixel values
      * are represented by normalized floating-point values
@@ -822,6 +879,8 @@
      * 0.3, 0.5, 1.0, 1.0], then the input-&gt;output mapping
      * for a few sample points would be: 0 -&gt; 0, 0.15 -&gt;
      * 0.25, 0.3 -&gt; 0.5, 0.5 -&gt; 0.64</p>
+     *
+     * @see CaptureRequest#TONEMAP_MODE
      */
     public static final Key<float[]> TONEMAP_CURVE_RED =
             new Key<float[]>("android.tonemap.curveRed", float[].class);
@@ -845,7 +904,6 @@
      * data is stored locally on the device.</p>
      * <p>The LED <em>may</em> be off if a trusted application is using the data that
      * doesn't violate the above rules.</p>
-     *
      * @hide
      */
     public static final Key<Boolean> LED_TRANSMIT =
@@ -855,9 +913,11 @@
      * <p>Whether black-level compensation is locked
      * to its current values, or is free to vary.</p>
      * <p>Whether the black level offset was locked for this frame.  Should be
-     * ON if android.blackLevel.lock was ON in the capture request, unless
+     * ON if {@link CaptureRequest#BLACK_LEVEL_LOCK android.blackLevel.lock} was ON in the capture request, unless
      * a change in other capture settings forced the camera device to
      * perform a black level reset.</p>
+     *
+     * @see CaptureRequest#BLACK_LEVEL_LOCK
      */
     public static final Key<Boolean> BLACK_LEVEL_LOCK =
             new Key<Boolean>("android.blackLevel.lock", boolean.class);