[libcamera-devel] [PATCH 1/4] ipa: raspberrypi: Add helper macros for std::chrono::duration

Naushir Patuck naush at raspberrypi.com
Tue May 18 12:07:03 CEST 2021


A new RPiController::Duration typedef is defined to represent a
std::chrono::duration type with double precision nanosecond timebase
that will be used throughout. This minimises the loss of precision when
converting timebases. A function for returning the duration count in any
timebase is also provided.

An operator << overload is define to help with displaying
RPiController::Duration value in stream objects.

Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
---
 src/ipa/raspberrypi/controller/duration.hpp | 33 +++++++++++++++++++++
 1 file changed, 33 insertions(+)
 create mode 100644 src/ipa/raspberrypi/controller/duration.hpp

diff --git a/src/ipa/raspberrypi/controller/duration.hpp b/src/ipa/raspberrypi/controller/duration.hpp
new file mode 100644
index 000000000000..98aa3d78f52f
--- /dev/null
+++ b/src/ipa/raspberrypi/controller/duration.hpp
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+/*
+ * Copyright (C) 2021, Raspberry Pi (Trading) Limited
+ *
+ * duration.hpp - Helper macros for std::chrono::duration handling.
+ */
+#pragma once
+
+#include <chrono>
+#include <iomanip>
+#include <iostream>
+
+namespace RPiController {
+
+using Duration = std::chrono::duration<double, std::nano>;
+
+// Helper to convert and return the count of any std::chrono::duration type to
+// another timebase.  Use a double rep type to try and preserve precision.
+template <typename P, typename T>
+static constexpr double DurationValue(T const &d)
+{
+	return std::chrono::duration_cast<std::chrono::duration<double, P>>(d).count();
+};
+
+static inline std::ostream &operator<<(std::ostream &os, const Duration &duration)
+{
+        std::streamsize ss = os.precision();
+        os << std::fixed << std::setprecision(2) << DurationValue<std::micro>(duration) << " us";
+        os << std::setprecision(ss) << std::defaultfloat;
+        return os;
+}
+
+} // namespace RPiController
-- 
2.25.1



More information about the libcamera-devel mailing list