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

This commit is contained in:
Eino-Ville Talvala
2011-05-18 08:54:40 -07:00
committed by Android (Google) Code Review
3 changed files with 161 additions and 33 deletions

View File

@@ -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

View File

@@ -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.

View File

@@ -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";