Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 706804e2 authored by Eino-Ville Talvala's avatar Eino-Ville Talvala Committed by Android (Google) Code Review
Browse files

Merge "Add auto-white balance locking to the Camera API."

parents b6aabcf6 d9c2601a
Loading
Loading
Loading
Loading
+115 −18
Original line number Diff line number Diff line
@@ -1181,6 +1181,8 @@ public class Camera {
        private static final String KEY_EXPOSURE_COMPENSATION_STEP = "exposure-compensation-step";
        private static final String KEY_AUTO_EXPOSURE_LOCK = "auto-exposure-lock";
        private static final String KEY_AUTO_EXPOSURE_LOCK_SUPPORTED = "auto-exposure-lock-supported";
        private static final String KEY_AUTO_WHITEBALANCE_LOCK = "auto-whitebalance-lock";
        private static final String KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED = "auto-whitebalance-lock-supported";
        private static final String KEY_METERING_AREAS = "metering-areas";
        private static final String KEY_MAX_NUM_METERING_AREAS = "max-num-metering-areas";
        private static final String KEY_ZOOM = "zoom";
@@ -2468,37 +2470,47 @@ public class Camera {
        }

        /**
         * Sets the auto-exposure lock state. Applications should check
         * {@link #isAutoExposureLockSupported} before using this method.
         * <p>Sets the auto-exposure lock state. Applications should check
         * {@link #isAutoExposureLockSupported} before using this method.</p>
         *
         * If set to true, the camera auto-exposure routine will pause until the
         * lock is set to false. Exposure compensation settings changes will
         * still take effect while auto-exposure is locked. Stopping preview
         * with {@link #stopPreview()}, or triggering still image capture with
         * {@link #takePicture(Camera.ShutterCallback, Camera.PictureCallback,
         * Camera.PictureCallback)}, will automatically set the lock to
         * false. However, the lock can be re-enabled before preview is
         * re-started to keep the same AE parameters. Exposure compensation, in
         * conjunction with re-enabling the AE lock after each still capture,
         * can be used to capture an exposure-bracketed burst of images, for
         * example. Auto-exposure state, including the lock state, will not be
         * <p>If set to true, the camera auto-exposure routine will immediately
         * pause until the lock is set to false. Exposure compensation settings
         * changes will still take effect while auto-exposure is locked.</p>
         *
         * <p>If auto-exposure is already locked, setting this to true again has
         * no effect (the driver will not recalculate exposure values).</p>
         *
         * <p>Stopping preview with {@link #stopPreview()}, or triggering still
         * image capture with {@link #takePicture(Camera.ShutterCallback,
         * Camera.PictureCallback, Camera.PictureCallback)}, will automatically
         * set the lock to false. However, the lock can be re-enabled before
         * preview is re-started to keep the same AE parameters.</p>
         *
         * <p>Exposure compensation, in conjunction with re-enabling the AE and
         * AWB locks after each still capture, can be used to capture an
         * exposure-bracketed burst of images, for example.</p>
         *
         * <p>Auto-exposure state, including the lock state, will not be
         * maintained after camera {@link #release()} is called.  Locking
         * auto-exposure after {@link #open()} but before the first call to
         * {@link #startPreview()} will not allow the auto-exposure routine to
         * run at all, and may result in severely over- or under-exposed images.
         * run at all, and may result in severely over- or under-exposed
         * images.</p>
         *
         * The driver may also independently lock auto-exposure after auto-focus
         * completes. If this is undesirable, be sure to always set the
         * auto-exposure lock to false after the
         * <p>The driver may also independently lock auto-exposure after
         * auto-focus completes. If this is undesirable, be sure to always set
         * the auto-exposure lock to false after the
         * {@link AutoFocusCallback#onAutoFocus(boolean, Camera)} callback is
         * received. The {@link #getAutoExposureLock()} method can be used after
         * the callback to determine if the camera has locked auto-exposure
         * independently.
         * independently.</p>
         *
         * @param toggle new state of the auto-exposure lock. True means that
         *        auto-exposure is locked, false means that the auto-exposure
         *        routine is free to run normally.
         *
         * @see #getAutoExposureLock()
         *
         * @hide
         */
        public void setAutoExposureLock(boolean toggle) {
@@ -2541,6 +2553,91 @@ public class Camera {
            return TRUE.equals(str);
        }

        /**
         * <p>Sets the auto-white balance lock state. Applications should check
         * {@link #isAutoWhiteBalanceLockSupported} before using this
         * method.</p>
         *
         * <p>If set to true, the camera auto-white balance routine will
         * immediately pause until the lock is set to false.</p>
         *
         * <p>If auto-white balance is already locked, setting this to true
         * again has no effect (the driver will not recalculate white balance
         * values).</p>
         *
         * <p>Stopping preview with {@link #stopPreview()}, or triggering still
         * image capture with {@link #takePicture(Camera.ShutterCallback,
         * Camera.PictureCallback, Camera.PictureCallback)}, will automatically
         * set the lock to false. However, the lock can be re-enabled before
         * preview is re-started to keep the same white balance parameters.</p>
         *
         * <p>Exposure compensation, in conjunction with re-enabling the AE and
         * AWB locks after each still capture, can be used to capture an
         * exposure-bracketed burst of images, for example. Auto-white balance
         * state, including the lock state, will not be maintained after camera
         * {@link #release()} is called.  Locking auto-white balance after
         * {@link #open()} but before the first call to {@link #startPreview()}
         * will not allow the auto-white balance routine to run at all, and may
         * result in severely incorrect color in captured images.</p>
         *
         * <p>The driver may also independently lock auto-white balance after
         * auto-focus completes. If this is undesirable, be sure to always set
         * the auto-white balance lock to false after the
         * {@link AutoFocusCallback#onAutoFocus(boolean, Camera)} callback is
         * received. The {@link #getAutoWhiteBalanceLock()} method can be used
         * after the callback to determine if the camera has locked auto-white
         * balance independently.</p>
         *
         * @param toggle new state of the auto-white balance lock. True means
         *        that auto-white balance is locked, false means that the
         *        auto-white balance routine is free to run normally.
         *
         * @see #getAutoWhiteBalanceLock()
         *
         * @hide
         */
        public void setAutoWhiteBalanceLock(boolean toggle) {
            set(KEY_AUTO_WHITEBALANCE_LOCK, toggle ? TRUE : FALSE);
        }

        /**
         * Gets the state of the auto-white balance lock. Applications should
         * check {@link #isAutoWhiteBalanceLockSupported} before using this
         * method. See {@link #setAutoWhiteBalanceLock} for details about the
         * lock.
         *
         * @return State of the auto-white balance lock. Returns true if
         *         auto-white balance is currently locked, and false
         *         otherwise. The auto-white balance lock may be independently
         *         enabled by the camera subsystem when auto-focus has
         *         completed. This method can be used after the
         *         {@link AutoFocusCallback#onAutoFocus(boolean, Camera)}
         *         callback to determine if the camera has locked AWB.
         *
         * @see #setAutoWhiteBalanceLock(boolean)
         *
         * @hide
         */
        public boolean getAutoWhiteBalanceLock() {
            String str = get(KEY_AUTO_WHITEBALANCE_LOCK);
            return TRUE.equals(str);
        }

        /**
         * Returns true if auto-white balance locking is supported. Applications
         * should call this before trying to lock auto-white balance. See
         * {@link #setAutoWhiteBalanceLock} for details about the lock.
         *
         * @return true if auto-white balance lock is supported.
         * @see #setAutoWhiteBalanceLock(boolean)
         *
         * @hide
         */
        public boolean isAutoWhiteBalanceLockSupported() {
            String str = get(KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED);
            return TRUE.equals(str);
        }

        /**
         * Gets current zoom value. This also works when smooth zoom is in
         * progress. Applications should check {@link #isZoomSupported} before
+44 −15
Original line number Diff line number Diff line
@@ -309,25 +309,54 @@ public:
    // 0.3333, EV is -2.
    // Example value: "0.333333333" or "0.5". Read only.
    static const char KEY_EXPOSURE_COMPENSATION_STEP[];
    // The state of the auto-exposure lock. "true" means that auto-exposure is
    // locked to its current value and will not change. "false" means the
    // auto-exposure routine is free to change exposure settings. Changing
    // exposure compensation settings will still affect the exposure settings
    // while auto-exposure is locked. Stopping preview or taking a still image
    // will release the lock. However, the lock can be re-enabled prior to
    // preview being re-started, to keep the exposure values from the previous
    // lock. In conjunction with exposure compensation, this allows for
    // capturing multi-exposure brackets with known relative exposure
    // values. Locking auto-exposure after open but before the first cal to
    // startPreview may result in severly over- or under-exposed images.  The
    // driver may independently enable the AE lock after auto-focus
    // completes. If it does so, this key must have its value updated to reflect
    // the lock's existence. Applications are free to release such a lock, to
    // re-enable AE without restarting preview.
    // The state of the auto-exposure lock. "true" means that
    // auto-exposure is locked to its current value and will not
    // change. "false" means the auto-exposure routine is free to
    // change exposure values. If auto-exposure is already locked,
    // setting this to true again has no effect (the driver will not
    // recalculate exposure values). Changing exposure compensation
    // settings will still affect the exposure settings while
    // auto-exposure is locked. Stopping preview or taking a still
    // image will release the lock. However, the lock can be
    // re-enabled prior to preview being re-started, to keep the
    // exposure values from the previous lock. In conjunction with
    // exposure compensation, this allows for capturing multi-exposure
    // brackets with known relative exposure values. Locking
    // auto-exposure after open but before the first call to
    // startPreview may result in severely over- or under-exposed
    // images.  The driver may independently enable the AE lock after
    // auto-focus completes. If it does so, this key must have its
    // value updated to reflect the lock's existence. Applications are
    // free to release such a lock, to re-enable AE without restarting
    // preview.
    static const char KEY_AUTO_EXPOSURE_LOCK[];
    // Whether locking the auto-exposure is supported. "true" means it is, and
    // "false" or this key not existing means it is not supported.
    static const char KEY_AUTO_EXPOSURE_LOCK_SUPPORTED[];
    // The state of the auto-white balance lock. "true" means that
    // auto-white balance is locked to its current value and will not
    // change. "false" means the auto-white balance routine is free to
    // change white balance values. If auto-white balance is already
    // locked, setting this to true again has no effect (the driver
    // will not recalculate white balance values). Stopping preview or
    // taking a still image will release the lock. However, the lock
    // can be re-enabled prior to preview being re-started, to keep
    // the white balance values from the previous lock. In conjunction
    // with exposure compensation, this allows for capturing
    // multi-exposure brackets with fixed white balance. Locking
    // auto-white balance after open but before the first call to
    // startPreview may result in severely incorrect color.  The
    // driver may independently enable the AWB lock after auto-focus
    // completes. If it does so, this key must have its value updated
    // to reflect the lock's existence. Applications are free to
    // release such a lock, to re-enable AWB without restarting
    // preview.
    static const char KEY_AUTO_WHITEBALANCE_LOCK[];
    // Whether locking the auto-white balance is supported. "true"
    // means it is, and "false" or this key not existing means it is
    // not supported.
    static const char KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED[];

    // The maximum number of metering areas supported. This is the maximum
    // length of KEY_METERING_AREAS.
    // Example value: "0" or "2". Read only.
+2 −0
Original line number Diff line number Diff line
@@ -70,6 +70,8 @@ const char CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION[] = "min-exposure-com
const char CameraParameters::KEY_EXPOSURE_COMPENSATION_STEP[] = "exposure-compensation-step";
const char CameraParameters::KEY_AUTO_EXPOSURE_LOCK[] = "auto-exposure-lock";
const char CameraParameters::KEY_AUTO_EXPOSURE_LOCK_SUPPORTED[] = "auto-exposure-lock-supported";
const char CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK[] = "auto-whitebalance-lock";
const char CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED[] = "auto-whitebalance-lock-supported";
const char CameraParameters::KEY_MAX_NUM_METERING_AREAS[] = "max-num-metering-areas";
const char CameraParameters::KEY_METERING_AREAS[] = "metering-areas";
const char CameraParameters::KEY_ZOOM[] = "zoom";