From f4eac129545fd583d33d9e7ab05cc87f61079bb9 Mon Sep 17 00:00:00 2001 From: Eino-Ville Talvala Date: Fri, 5 Dec 2014 11:10:15 -0800 Subject: [PATCH] Camera2: Add HDR scene mode for backwards compatibility. To maximize backwards compatibility, support the HDR scene mode fully, as it was supported on Camera HAL1 / Camera API1. Bug: 18639933 Change-Id: I35c164563379f7f820b42c674bd91f706061170c --- api/current.txt | 1 + .../android/hardware/camera2/CameraMetadata.java | 38 +++++++++++++++++++--- .../android/hardware/camera2/CaptureRequest.java | 2 ++ .../android/hardware/camera2/CaptureResult.java | 2 ++ 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/api/current.txt b/api/current.txt index 5a17f6feb05b..98bfd50f72fa 100644 --- a/api/current.txt +++ b/api/current.txt @@ -12790,6 +12790,7 @@ package android.hardware.camera2 { field public static final int CONTROL_SCENE_MODE_DISABLED = 0; // 0x0 field public static final int CONTROL_SCENE_MODE_FACE_PRIORITY = 1; // 0x1 field public static final int CONTROL_SCENE_MODE_FIREWORKS = 12; // 0xc + field public static final int CONTROL_SCENE_MODE_HDR = 18; // 0x12 field public static final int CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO = 17; // 0x11 field public static final int CONTROL_SCENE_MODE_LANDSCAPE = 4; // 0x4 field public static final int CONTROL_SCENE_MODE_NIGHT = 5; // 0x5 diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java index 999de8a8d326..1b108589ef46 100644 --- a/core/java/android/hardware/camera2/CameraMetadata.java +++ b/core/java/android/hardware/camera2/CameraMetadata.java @@ -1648,11 +1648,41 @@ public abstract class CameraMetadata { public static final int CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO = 17; /** - *

Turn on custom high dynamic range (HDR) mode.

- *

This is intended for LEGACY mode devices only; - * HAL3+ camera devices should not implement this mode.

+ *

Turn on a device-specific high dynamic range (HDR) mode.

+ *

In this scene mode, the camera device captures images + * that keep a larger range of scene illumination levels + * visible in the final image. For example, when taking a + * picture of a object in front of a bright window, both + * the object and the scene through the window may be + * visible when using HDR mode, while in normal AUTO mode, + * one or the other may be poorly exposed. As a tradeoff, + * HDR mode generally takes much longer to capture a single + * image, has no user control, and may have other artifacts + * depending on the HDR method used.

+ *

Therefore, HDR captures operate at a much slower rate + * than regular captures.

+ *

In this mode, on LIMITED or FULL devices, when a request + * is made with a {@link CaptureRequest#CONTROL_CAPTURE_INTENT android.control.captureIntent} of + * STILL_CAPTURE, the camera device will capture an image + * using a high dynamic range capture technique. On LEGACY + * devices, captures that target a JPEG-format output will + * be captured with HDR, and the capture intent is not + * relevant.

+ *

The HDR capture may involve the device capturing a burst + * of images internally and combining them into one, or it + * may involve the device using specialized high dynamic + * range capture hardware. In all cases, a single image is + * produced in response to a capture request submitted + * while in HDR mode.

+ *

Since substantial post-processing is generally needed to + * produce an HDR image, only YUV and JPEG outputs are + * supported for LIMITED/FULL device HDR captures, and only + * JPEG outputs are supported for LEGACY HDR + * captures. Using a RAW output for HDR capture is not + * supported.

+ * + * @see CaptureRequest#CONTROL_CAPTURE_INTENT * @see CaptureRequest#CONTROL_SCENE_MODE - * @hide */ public static final int CONTROL_SCENE_MODE_HDR = 18; diff --git a/core/java/android/hardware/camera2/CaptureRequest.java b/core/java/android/hardware/camera2/CaptureRequest.java index e89a4023df69..0849df856646 100644 --- a/core/java/android/hardware/camera2/CaptureRequest.java +++ b/core/java/android/hardware/camera2/CaptureRequest.java @@ -1294,6 +1294,7 @@ public final class CaptureRequest extends CameraMetadata> *
  • {@link #CONTROL_SCENE_MODE_CANDLELIGHT CANDLELIGHT}
  • *
  • {@link #CONTROL_SCENE_MODE_BARCODE BARCODE}
  • *
  • {@link #CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO HIGH_SPEED_VIDEO}
  • + *
  • {@link #CONTROL_SCENE_MODE_HDR HDR}
  • *

    *

    Available values for this device:
    * {@link CameraCharacteristics#CONTROL_AVAILABLE_SCENE_MODES android.control.availableSceneModes}

    @@ -1322,6 +1323,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #CONTROL_SCENE_MODE_CANDLELIGHT * @see #CONTROL_SCENE_MODE_BARCODE * @see #CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO + * @see #CONTROL_SCENE_MODE_HDR */ @PublicKey public static final Key CONTROL_SCENE_MODE = diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java index 2c3b85fe04dd..1396940acacd 100644 --- a/core/java/android/hardware/camera2/CaptureResult.java +++ b/core/java/android/hardware/camera2/CaptureResult.java @@ -1910,6 +1910,7 @@ public class CaptureResult extends CameraMetadata> { *
  • {@link #CONTROL_SCENE_MODE_CANDLELIGHT CANDLELIGHT}
  • *
  • {@link #CONTROL_SCENE_MODE_BARCODE BARCODE}
  • *
  • {@link #CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO HIGH_SPEED_VIDEO}
  • + *
  • {@link #CONTROL_SCENE_MODE_HDR HDR}
  • *

    *

    Available values for this device:
    * {@link CameraCharacteristics#CONTROL_AVAILABLE_SCENE_MODES android.control.availableSceneModes}

    @@ -1938,6 +1939,7 @@ public class CaptureResult extends CameraMetadata> { * @see #CONTROL_SCENE_MODE_CANDLELIGHT * @see #CONTROL_SCENE_MODE_BARCODE * @see #CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO + * @see #CONTROL_SCENE_MODE_HDR */ @PublicKey public static final Key CONTROL_SCENE_MODE = -- 2.11.0