[libcamera-devel] [PATCH v3 08/16] android: capabilties: Assume controls::FrameDurationLimits is supported
Jacopo Mondi
jacopo at jmondi.org
Mon Oct 11 17:11:46 CEST 2021
As we now collect the per-stream frame durations at
initializeStreamConfigurations() times, the Camera is now guaranteed to
support the controls::FrameDurationLimits control.
Remove the check for its presence when populating the
ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES static metadata.
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>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
src/android/camera_capabilities.cpp | 85 ++++++++++++++---------------
1 file changed, 41 insertions(+), 44 deletions(-)
diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp
index b69c9f1025b7..a8eec2a77a7b 100644
--- a/src/android/camera_capabilities.cpp
+++ b/src/android/camera_capabilities.cpp
@@ -871,55 +871,52 @@ int CameraCapabilities::initializeStaticMetadata()
staticMetadata_->addEntry(ANDROID_CONTROL_AE_AVAILABLE_MODES,
aeAvailableModes);
- int64_t minFrameDurationNsec = -1;
- int64_t maxFrameDurationNsec = -1;
+ /* Initialize the AE frame duration limits. */
const auto frameDurationsInfo = controlsInfo.find(&controls::FrameDurationLimits);
- if (frameDurationsInfo != controlsInfo.end()) {
- minFrameDurationNsec = frameDurationsInfo->second.min().get<int64_t>() * 1000;
- maxFrameDurationNsec = frameDurationsInfo->second.max().get<int64_t>() * 1000;
+ int64_t minFrameDurationNsec = frameDurationsInfo->second.min().get<int64_t>() * 1000;
+ int64_t maxFrameDurationNsec = frameDurationsInfo->second.max().get<int64_t>() * 1000;
- /*
- * Adjust the minimum frame duration to comply with Android
- * requirements. The camera service mandates all preview/record
- * streams to have a minimum frame duration < 33,366 milliseconds
- * (see MAX_PREVIEW_RECORD_DURATION_NS in the camera service
- * implementation).
- *
- * If we're close enough (+ 500 useconds) to that value, round
- * the minimum frame duration of the camera to an accepted
- * value.
- */
- static constexpr int64_t MAX_PREVIEW_RECORD_DURATION_NS = 1e9 / 29.97;
- if (minFrameDurationNsec > MAX_PREVIEW_RECORD_DURATION_NS &&
- minFrameDurationNsec < MAX_PREVIEW_RECORD_DURATION_NS + 500000)
- minFrameDurationNsec = MAX_PREVIEW_RECORD_DURATION_NS - 1000;
+ /*
+ * Adjust the minimum frame duration to comply with Android
+ * requirements. The camera service mandates all preview/record
+ * streams to have a minimum frame duration < 33,366 milliseconds
+ * (see MAX_PREVIEW_RECORD_DURATION_NS in the camera service
+ * implementation).
+ *
+ * If we're close enough (+ 500 useconds) to that value, round
+ * the minimum frame duration of the camera to an accepted
+ * value.
+ */
+ static constexpr int64_t MAX_PREVIEW_RECORD_DURATION_NS = 1e9 / 29.97;
+ if (minFrameDurationNsec > MAX_PREVIEW_RECORD_DURATION_NS &&
+ minFrameDurationNsec < MAX_PREVIEW_RECORD_DURATION_NS + 500000)
+ minFrameDurationNsec = MAX_PREVIEW_RECORD_DURATION_NS - 1000;
- /*
- * The AE routine frame rate limits are computed using the frame
- * duration limits, as libcamera clips the AE routine to the
- * frame durations.
- */
- int32_t maxFps = std::round(1e9 / minFrameDurationNsec);
- int32_t minFps = std::round(1e9 / maxFrameDurationNsec);
- minFps = std::max(1, minFps);
+ /*
+ * The AE routine frame rate limits are computed using the frame
+ * duration limits, as libcamera clips the AE routine to the
+ * frame durations.
+ */
+ int32_t maxFps = std::round(1e9 / minFrameDurationNsec);
+ int32_t minFps = std::round(1e9 / maxFrameDurationNsec);
+ minFps = std::max(1, minFps);
- /*
- * Force rounding errors so that we have the proper frame
- * durations for when we reuse these variables later
- */
- minFrameDurationNsec = 1e9 / maxFps;
- maxFrameDurationNsec = 1e9 / minFps;
+ /*
+ * Force rounding errors so that we have the proper frame
+ * durations for when we reuse these variables later
+ */
+ minFrameDurationNsec = 1e9 / maxFps;
+ maxFrameDurationNsec = 1e9 / minFps;
- /*
- * Register to the camera service {min, max} and {max, max}
- * intervals as requested by the metadata documentation.
- */
- int32_t availableAeFpsTarget[] = {
- minFps, maxFps, maxFps, maxFps
- };
- staticMetadata_->addEntry(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES,
- availableAeFpsTarget);
- }
+ /*
+ * Register to the camera service {min, max} and {max, max}
+ * intervals as requested by the metadata documentation.
+ */
+ int32_t availableAeFpsTarget[] = {
+ minFps, maxFps, maxFps, maxFps
+ };
+ staticMetadata_->addEntry(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES,
+ availableAeFpsTarget);
std::vector<int32_t> aeCompensationRange = {
0, 0,
--
2.33.0
More information about the libcamera-devel
mailing list