[libcamera-devel] [PATCH 10/16] android: Filter preview streams on FPS

Jacopo Mondi jacopo at jmondi.org
Fri Aug 27 14:07:51 CEST 2021


Register as preview streams only streams capable of producing at least
30 FPS.

This requirement comes from inspecting the existing HAL implementation
on Intel IPU3 platform.

Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
---
 src/android/camera_capabilities.cpp | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp
index 388552963c47..c1ce63018aa8 100644
--- a/src/android/camera_capabilities.cpp
+++ b/src/android/camera_capabilities.cpp
@@ -1257,6 +1257,21 @@ int CameraCapabilities::initializeStaticMetadata()
 	std::vector<uint32_t> availableStreamConfigurations;
 	availableStreamConfigurations.reserve(streamConfigurations_.size() * 4);
 	for (const auto &entry : streamConfigurations_) {
+		/*
+		 * Filter out YUV streams not capable of running at 30 FPS.
+		 *
+		 * This requirement comes from inspecting the Intel IPU3
+		 * HAL implementation but no reference has been found in the
+		 * metadata documentation.
+		 *
+		 * Calculate FPS as CTS does: see
+		 * Camera2SurfaceViewTestCase.java:getSuitableFpsRangeForDuration()
+		 */
+		unsigned int fps = static_cast<unsigned int>
+				   (floor(1e9 / entry.minFrameDurationNsec + 0.05f));
+		if (entry.androidFormat != HAL_PIXEL_FORMAT_BLOB && fps < 30)
+			continue;
+
 		availableStreamConfigurations.push_back(entry.androidFormat);
 		availableStreamConfigurations.push_back(entry.resolution.width);
 		availableStreamConfigurations.push_back(entry.resolution.height);
@@ -1269,6 +1284,11 @@ int CameraCapabilities::initializeStaticMetadata()
 	std::vector<int64_t> minFrameDurations;
 	minFrameDurations.reserve(streamConfigurations_.size() * 4);
 	for (const auto &entry : streamConfigurations_) {
+		unsigned int fps = static_cast<unsigned int>
+				   (floor(1e9 / entry.minFrameDurationNsec + 0.05f));
+		if (entry.androidFormat != HAL_PIXEL_FORMAT_BLOB && fps < 30)
+			continue;
+
 		minFrameDurations.push_back(entry.androidFormat);
 		minFrameDurations.push_back(entry.resolution.width);
 		minFrameDurations.push_back(entry.resolution.height);
-- 
2.32.0



More information about the libcamera-devel mailing list