Camera: Correct ae regions request for metering area
The size of ae regions may be zero by rounding error.
But it should be at least 1 if metering area size is not zero.
This problem causes CTS fail for
android.hardware.cts.CameraTest#testMeteringAreas on
the device which has the active array width less than 3556
if the preview size is 1920x1080.
Bug: 63795820
Test: ran Camera CTS
Change-Id: Ie3995e40aedba193393df8fd05d95f740a25ef3d
diff --git a/services/camera/libcameraservice/api1/client2/Parameters.cpp b/services/camera/libcameraservice/api1/client2/Parameters.cpp
index 9a7839b..ae6abb7 100644
--- a/services/camera/libcameraservice/api1/client2/Parameters.cpp
+++ b/services/camera/libcameraservice/api1/client2/Parameters.cpp
@@ -2108,6 +2108,14 @@
normalizedXToArray(meteringAreas[j].right);
reqMeteringAreas[i + 3] =
normalizedYToArray(meteringAreas[j].bottom);
+ // Requested size may be zero by rounding error with/without zooming.
+ // The ae regions should be at least 1 if metering width/height is not zero.
+ if (reqMeteringAreas[i + 0] == reqMeteringAreas[i + 2]) {
+ reqMeteringAreas[i + 2]++;
+ }
+ if (reqMeteringAreas[i + 1] == reqMeteringAreas[i + 3]) {
+ reqMeteringAreas[i + 3]++;
+ }
} else {
reqMeteringAreas[i + 0] = 0;
reqMeteringAreas[i + 1] = 0;