libcamera: timer: Fix 32 bit wrap
The msec parameter was multiplied as a 32 bit value when converting to
nanosecond resolution. This wraps at 4.2949 seconds, and causes timers
longer than this to fail.
Fix the multiplication to upcast to 64 bit using an unsigned long long
specifier on the multiplier.
While we're here, initialise the two integer class members in the
constructor initialiser list.
Fixes: 1a57bcb8d1 ("libcamera: Add event notification infrastructure")
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
@@ -36,6 +36,7 @@ namespace libcamera {
|
||||
* \brief Construct a timer
|
||||
*/
|
||||
Timer::Timer()
|
||||
: interval_(0), deadline_(0)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -51,7 +52,7 @@ void Timer::start(unsigned int msec)
|
||||
clock_gettime(CLOCK_MONOTONIC, &tp);
|
||||
|
||||
interval_ = msec;
|
||||
deadline_ = tp.tv_sec * 1000000000ULL + tp.tv_nsec + msec * 1000000;
|
||||
deadline_ = tp.tv_sec * 1000000000ULL + tp.tv_nsec + msec * 1000000ULL;
|
||||
|
||||
LOG(Debug) << "Starting timer " << this << " with interval " << msec
|
||||
<< ": deadline " << deadline_;
|
||||
|
||||
Reference in New Issue
Block a user