[libcamera-devel] [PATCH v1 1/3] utils: timer: Allow Timer::start to use utils::Duration

Naushir Patuck naush at raspberrypi.com
Tue Mar 22 14:16:33 CET 2022


Add an overload of the Timer::start member function to accept a utils::Duration
type for the timer duration.

Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
---
 include/libcamera/base/timer.h |  2 ++
 src/libcamera/base/timer.cpp   | 14 ++++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/include/libcamera/base/timer.h b/include/libcamera/base/timer.h
index 09f1d3229bd5..f42a8cfd4d6d 100644
--- a/include/libcamera/base/timer.h
+++ b/include/libcamera/base/timer.h
@@ -14,6 +14,7 @@
 
 #include <libcamera/base/object.h>
 #include <libcamera/base/signal.h>
+#include <libcamera/base/utils.h>
 
 namespace libcamera {
 
@@ -27,6 +28,7 @@ public:
 
 	void start(unsigned int msec) { start(std::chrono::milliseconds(msec)); }
 	void start(std::chrono::milliseconds duration);
+	void start(utils::Duration duration);
 	void start(std::chrono::steady_clock::time_point deadline);
 	void stop();
 	bool isRunning() const;
diff --git a/src/libcamera/base/timer.cpp b/src/libcamera/base/timer.cpp
index 187336e3a1a4..3ff526aea8ae 100644
--- a/src/libcamera/base/timer.cpp
+++ b/src/libcamera/base/timer.cpp
@@ -85,6 +85,20 @@ void Timer::start(std::chrono::milliseconds duration)
 	start(utils::clock::now() + duration);
 }
 
+/**
+ * \brief Start or restart the timer with a timeout of \a duration
+ * \param[in] duration The timer duration given by \a utils::Duration
+ *
+ * If the timer is already running it will be stopped and restarted.
+ *
+ * \context This function is \threadbound.
+ */
+void Timer::start(utils::Duration duration)
+{
+	auto msec = std::chrono::duration_cast<std::chrono::milliseconds>(duration);
+	start(utils::clock::now() + msec);
+}
+
 /**
  * \brief Start or restart the timer with a \a deadline
  * \param[in] deadline The timer deadline
-- 
2.25.1



More information about the libcamera-devel mailing list