Merge "Add camera metering mode API." into kraken

This commit is contained in:
Wu-cheng Li
2010-06-03 22:32:05 -07:00
committed by Android (Google) Code Review
3 changed files with 79 additions and 0 deletions

View File

@@ -763,6 +763,7 @@ public class Camera {
private static final String KEY_ZOOM_SUPPORTED = "zoom-supported";
private static final String KEY_SMOOTH_ZOOM_SUPPORTED = "smooth-zoom-supported";
private static final String KEY_FOCUS_DISTANCES = "focus-distances";
private static final String KEY_METERING_MODE = "metering-mode";
// Parameter key suffix for supported values.
private static final String SUPPORTED_VALUES_SUFFIX = "-values";
@@ -965,6 +966,26 @@ public class Camera {
*/
public static final String FOCUS_MODE_CONTINUOUS = "continuous";
/**
* The camera determines the exposure by giving more weight to the
* central part of the scene.
* @hide
*/
public static final String METERING_MODE_CENTER_WEIGHTED = "center-weighted";
/**
* The camera determines the exposure by averaging the entire scene,
* giving no weighting to any particular area.
* @hide
*/
public static final String METERING_MODE_FRAME_AVERAGE = "frame-average";
/**
* The camera determines the exposure by a very small area of the scene,
* typically the center.
* @hide
*/
public static final String METERING_MODE_SPOT = "spot";
// Formats for setPreviewFormat and setPictureFormat.
private static final String PIXEL_FORMAT_YUV422SP = "yuv422sp";
@@ -1930,6 +1951,45 @@ public class Camera {
output[2] = distances.get(2);
}
/**
* Gets the supported metering modes.
*
* @return a list of supported metering modes. null if metering mode
* setting is not supported.
* @see #getMeteringMode()
* @hide
*/
public List<String> getSupportedMeteringModes() {
String str = get(KEY_METERING_MODE + SUPPORTED_VALUES_SUFFIX);
return split(str);
}
/**
* Gets the current metering mode, which affects how camera determines
* exposure.
*
* @return current metering mode. If the camera does not support
* metering setting, this should return null.
* @see #METERING_MODE_CENTER_WEIGHTED
* @see #METERING_MODE_FRAME_AVERAGE
* @see #METERING_MODE_SPOT
* @hide
*/
public String getMeteringMode() {
return get(KEY_METERING_MODE);
}
/**
* Sets the metering mode.
*
* @param value metering mode.
* @see #getMeteringMode()
* @hide
*/
public void setMeteringMode(String value) {
set(KEY_METERING_MODE, value);
}
// Splits a comma delimited string to an ArrayList of String.
// Return null if the passing string is null or the size is 0.
private ArrayList<String> split(String str) {

View File

@@ -250,6 +250,10 @@ public:
// Example value: "yuv420sp" or PIXEL_FORMAT_XXX constants. Read only.
static const char KEY_VIDEO_FRAME_FORMAT[];
// Metering mode. This affects how camera determines exposure.
// Example value: "spot" or METERING_MODE_XXX constants. Read/write.
static const char KEY_METERING_MODE[];
// Value for KEY_ZOOM_SUPPORTED or KEY_SMOOTH_ZOOM_SUPPORTED.
static const char TRUE[];
@@ -347,6 +351,15 @@ public:
// callback will be only called once as soon as the picture is in focus.
static const char FOCUS_MODE_CONTINUOUS[];
// The camera determines the exposure by giving more weight to the
// central part of the scene.
static const char METERING_MODE_CENTER_WEIGHTED[];
// The camera determines the exposure by averaging the entire scene,
// giving no weighting to any particular area.
static const char METERING_MODE_FRAME_AVERAGE[];
// The camera determines the exposure by a very small area of the scene,
// typically the center.
static const char METERING_MODE_SPOT[];
private:
DefaultKeyedVector<String8,String8> mMap;

View File

@@ -71,6 +71,7 @@ const char CameraParameters::KEY_ZOOM_SUPPORTED[] = "zoom-supported";
const char CameraParameters::KEY_SMOOTH_ZOOM_SUPPORTED[] = "smooth-zoom-supported";
const char CameraParameters::KEY_FOCUS_DISTANCES[] = "focus-distances";
const char CameraParameters::KEY_VIDEO_FRAME_FORMAT[] = "video-frame-format";
const char CameraParameters::KEY_METERING_MODE[] = "metering-mode";
const char CameraParameters::TRUE[] = "true";
const char CameraParameters::FOCUS_DISTANCE_INFINITY[] = "Infinity";
@@ -142,6 +143,11 @@ const char CameraParameters::FOCUS_MODE_FIXED[] = "fixed";
const char CameraParameters::FOCUS_MODE_EDOF[] = "edof";
const char CameraParameters::FOCUS_MODE_CONTINUOUS[] = "continuous";
// Values for metering mode settings.
const char METERING_MODE_CENTER_WEIGHTED[] = "center-weighted";
const char METERING_MODE_FRAME_AVERAGE[] = "frame-average";
const char METERING_MODE_SPOT[] = "spot";
CameraParameters::CameraParameters()
: mMap()
{