Camera: update preview size selection logic
To account for the fact that sometimes the preview size
of some fps range is larger than device display size.
Bug: 28680215
Change-Id: Idb09d9cf115e4128db790fb3660126e5970ce463
diff --git a/tests/camera/src/android/hardware/camera2/cts/CaptureRequestTest.java b/tests/camera/src/android/hardware/camera2/cts/CaptureRequestTest.java
index ffbe432..c3ac01d 100644
--- a/tests/camera/src/android/hardware/camera2/cts/CaptureRequestTest.java
+++ b/tests/camera/src/android/hardware/camera2/cts/CaptureRequestTest.java
@@ -2230,7 +2230,7 @@
// If unable to find a preview size, then log the failure, and skip this run.
if (previewSz == null) {
if (mStaticInfo.isCapabilitySupported(
- CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR)) {
+ CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR)) {
mCollector.addMessage(String.format(
"Unable to find a preview size supporting given fps range %s",
fpsRange));
diff --git a/tests/camera/src/android/hardware/camera2/cts/testcases/Camera2SurfaceViewTestCase.java b/tests/camera/src/android/hardware/camera2/cts/testcases/Camera2SurfaceViewTestCase.java
index b7287ae..ee2d5ea 100644
--- a/tests/camera/src/android/hardware/camera2/cts/testcases/Camera2SurfaceViewTestCase.java
+++ b/tests/camera/src/android/hardware/camera2/cts/testcases/Camera2SurfaceViewTestCase.java
@@ -100,6 +100,7 @@
protected Surface mPreviewSurface;
protected Size mPreviewSize;
protected List<Size> mOrderedPreviewSizes; // In descending order.
+ protected List<Size> m1080pBoundedOrderedPreviewSizes; // In descending order.
protected List<Size> mOrderedVideoSizes; // In descending order.
protected List<Size> mOrderedStillSizes; // In descending order.
protected HashMap<Size, Long> mMinPreviewFrameDurationMap;
@@ -567,6 +568,8 @@
if (mStaticInfo.isColorOutputSupported()) {
mOrderedPreviewSizes = getSupportedPreviewSizes(cameraId, mCameraManager,
getPreviewSizeBound(mWindowManager, PREVIEW_SIZE_BOUND));
+ m1080pBoundedOrderedPreviewSizes = getSupportedPreviewSizes(cameraId, mCameraManager,
+ PREVIEW_SIZE_BOUND);
mOrderedVideoSizes = getSupportedVideoSizes(cameraId, mCameraManager, PREVIEW_SIZE_BOUND);
mOrderedStillSizes = getSupportedStillSizes(cameraId, mCameraManager, null);
// Use ImageFormat.YUV_420_888 for now. TODO: need figure out what's format for preview
@@ -700,6 +703,22 @@
}
}
+ // Search again for sizes not bounded by display size
+ for (Size size : m1080pBoundedOrderedPreviewSizes) {
+ Long minDuration = mMinPreviewFrameDurationMap.get(size);
+ if (minDuration == null ||
+ minDuration == 0) {
+ if (mStaticInfo.isCapabilitySupported(
+ CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR)) {
+ throw new IllegalArgumentException(
+ "No min frame duration available for the size " + size);
+ }
+ continue;
+ }
+ if (minDuration <= (frameDurationRange[0] + MIN_FRAME_DURATION_ERROR_MARGIN)) {
+ return size;
+ }
+ }
return null;
}