[libcamera-devel] [PATCH v2 11/17] android: Filter preview streams on FPS
Jacopo Mondi
jacopo at jmondi.org
Tue Sep 7 21:41:01 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>
Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>
---
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 c6791b9d6238..e5cfe67f9b73 100644
--- a/src/android/camera_capabilities.cpp
+++ b/src/android/camera_capabilities.cpp
@@ -1259,6 +1259,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);
@@ -1271,6 +1286,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