From 4e396e063c8b0fa6201b47166f547a98abfd6038 Mon Sep 17 00:00:00 2001 From: Eino-Ville Talvala Date: Thu, 21 Apr 2011 09:23:15 -0700 Subject: [PATCH] Clarify the meaning of weight in the focus and metering area HAL. Weigh values must be less than 1000, but have no restriction on their sum. Weights should be interpreted as per-pixel values, meaning larger areas will have more influence over focus/metering than smaller areas of the same weight. Change-Id: I988b74f988ddba2ff0c49d078ff3174b47cbae18 --- core/java/android/hardware/Camera.java | 19 +++++++++++-------- include/camera/CameraParameters.h | 21 ++++++++++++--------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java index 6c6a72d800e2d..767069469209c 100644 --- a/core/java/android/hardware/Camera.java +++ b/core/java/android/hardware/Camera.java @@ -2600,10 +2600,12 @@ public class Camera { * (1000, 1000) is the lower right point. The length and width of focus * areas cannot be 0 or negative. * - * The weight ranges from 1 to 1000. The sum of the weights of all focus - * areas must be 1000. Focus areas can partially overlap and the driver - * will add the weights in the overlap region. But apps should not set - * two focus areas that have identical coordinates. + * The weight must range from 1 to 1000. The weight should be + * interpreted as a per-pixel weight - all pixels in the area have the + * specified weight. This means a small area with the same weight as a + * larger area will have less influence on the focusing than the larger + * area. Focus areas can partially overlap and the driver will add the + * weights in the overlap region. * * A special case of all-zero single focus area means driver to decide * the focus area. For example, the driver may use more signals to @@ -2668,10 +2670,11 @@ public class Camera { * point. (1000, 1000) is the lower right point. The length and width of * metering areas cannot be 0 or negative. * - * The weight ranges from 1 to 1000. The sum of the weights of all - * metering areas must be 1000. Metering areas can partially overlap and - * the driver will add the weights in the overlap region. But apps - * should not set two metering areas that have identical coordinates. + * The weight must range from 1 to 1000, and represents a weight for + * every pixel in the area. This means that a large metering area with + * the same weight as a smaller area will have more effect in the + * metering result. Metering areas can partially overlap and the driver + * will add the weights in the overlap region. * * A special case of all-zero single metering area means driver to * decide the metering area. For example, the driver may use more diff --git a/include/camera/CameraParameters.h b/include/camera/CameraParameters.h index e272839151c83..db81721aa2870 100644 --- a/include/camera/CameraParameters.h +++ b/include/camera/CameraParameters.h @@ -265,11 +265,12 @@ public: // (-1000,-1000) is the upper left point. (1000, 1000) is the lower right // point. The length and width of focus areas cannot be 0 or negative. // - // The fifth element is the weight. The weight ranges from 1 to 1000. - // The sum of the weights of all focus areas must be 1000. Focus areas - // can partially overlap and the driver will add the weights in the - // overlap region. But apps should not set two focus areas that have - // identical coordinates. + // The fifth element is the weight. Values for weight must range from 1 to + // 1000. The weight should be interpreted as a per-pixel weight - all + // pixels in the area have the specified weight. This means a small area + // with the same weight as a larger area will have less influence on the + // focusing than the larger area. Focus areas can partially overlap and the + // driver will add the weights in the overlap region. // // A special case of single focus area (0,0,0,0,0) means driver to decide // the focus area. For example, the driver may use more signals to decide @@ -327,10 +328,12 @@ public: // is the lower right point. The length and width of metering areas cannot // be 0 or negative. // - // The weight ranges from 1 to 1000. The sum of the weights of all metering - // areas must be 1000. Metering areas can partially overlap and the driver - // will add the weights in the overlap region. But apps should not set two - // metering areas that have identical coordinates. + // The fifth element is the weight. Values for weight must range from 1 to + // 1000. The weight should be interpreted as a per-pixel weight - all + // pixels in the area have the specified weight. This means a small area + // with the same weight as a larger area will have less influence on the + // metering than the larger area. Metering areas can partially overlap and + // the driver will add the weights in the overlap region. // // A special case of all-zero single metering area means driver to decide // the metering area. For example, the driver may use more signals to decide