[libcamera-devel] [PATCH 2/9] libcamera: timer: Don't reset deadline after time out

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sun Oct 6 07:32:19 CEST 2019


Users of the Timer class may benefit from retrieving the timer deadline
after it times out. This is currently not possible as the deadline is
reset to 0 when the timer times out or is stopped. Fix this by not
resetting the deadline, and adding a new running_ field to the Timer
class to implement isRunning().

Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 include/libcamera/timer.h | 1 +
 src/libcamera/timer.cpp   | 8 ++++----
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/include/libcamera/timer.h b/include/libcamera/timer.h
index 09f426a59993..3540efb41b6f 100644
--- a/include/libcamera/timer.h
+++ b/include/libcamera/timer.h
@@ -39,6 +39,7 @@ private:
 	void registerTimer();
 	void unregisterTimer();
 
+	bool running_;
 	std::chrono::steady_clock::time_point deadline_;
 };
 
diff --git a/src/libcamera/timer.cpp b/src/libcamera/timer.cpp
index 34410bab0fb0..8c74e1015e43 100644
--- a/src/libcamera/timer.cpp
+++ b/src/libcamera/timer.cpp
@@ -43,7 +43,7 @@ LOG_DEFINE_CATEGORY(Timer)
  * \param[in] parent The parent Object
  */
 Timer::Timer(Object *parent)
-	: Object(parent)
+	: Object(parent), running_(false)
 {
 }
 
@@ -89,17 +89,17 @@ void Timer::start(std::chrono::milliseconds duration)
 void Timer::stop()
 {
 	unregisterTimer();
-
-	deadline_ = utils::time_point();
 }
 
 void Timer::registerTimer()
 {
 	thread()->eventDispatcher()->registerTimer(this);
+	running_ = true;
 }
 
 void Timer::unregisterTimer()
 {
+	running_ = false;
 	thread()->eventDispatcher()->unregisterTimer(this);
 }
 
@@ -109,7 +109,7 @@ void Timer::unregisterTimer()
  */
 bool Timer::isRunning() const
 {
-	return deadline_ != utils::time_point();
+	return running_;
 }
 
 /**
-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list