libcamera: utils: Add clock helpers
In preparation for standardisation of the std::chrono::steady_clock as the libcamera default clock, define aliases for the clock, duration and time point, and add helper functions to convert a duration to a timespec and a time point to a string. More helpers will be added later as needed. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
parent
304574420d
commit
98dff063f2
2 changed files with 60 additions and 0 deletions
|
@ -8,7 +8,10 @@
|
||||||
#define __LIBCAMERA_UTILS_H__
|
#define __LIBCAMERA_UTILS_H__
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <chrono>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <string>
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
|
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
|
||||||
|
|
||||||
|
@ -53,6 +56,13 @@ const T& clamp(const T& v, const T& lo, const T& hi)
|
||||||
return std::max(lo, std::min(v, hi));
|
return std::max(lo, std::min(v, hi));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
using clock = std::chrono::steady_clock;
|
||||||
|
using duration = std::chrono::steady_clock::duration;
|
||||||
|
using time_point = std::chrono::steady_clock::time_point;
|
||||||
|
|
||||||
|
struct timespec duration_to_timespec(const duration &value);
|
||||||
|
std::string time_point_to_string(const time_point &time);
|
||||||
|
|
||||||
} /* namespace utils */
|
} /* namespace utils */
|
||||||
|
|
||||||
} /* namespace libcamera */
|
} /* namespace libcamera */
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
|
#include <iomanip>
|
||||||
|
#include <sstream>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
@ -93,6 +95,54 @@ char *secure_getenv(const char *name)
|
||||||
* \return lo if v is less than lo, hi if v is greater than hi, otherwise v
|
* \return lo if v is less than lo, hi if v is greater than hi, otherwise v
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \typedef clock
|
||||||
|
* \brief The libcamera clock (monotonic)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \typedef duration
|
||||||
|
* \brief The libcamera duration related to libcamera::utils::clock
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \typedef time_point
|
||||||
|
* \brief The libcamera time point related to libcamera::utils::clock
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Convert a duration to a timespec
|
||||||
|
* \param[in] value The duration
|
||||||
|
* \return A timespec expressing the duration
|
||||||
|
*/
|
||||||
|
struct timespec duration_to_timespec(const duration &value)
|
||||||
|
{
|
||||||
|
uint64_t nsecs = std::chrono::duration_cast<std::chrono::nanoseconds>(value).count();
|
||||||
|
struct timespec ts;
|
||||||
|
ts.tv_sec = nsecs / 1000000000ULL;
|
||||||
|
ts.tv_nsec = nsecs % 1000000000ULL;
|
||||||
|
return ts;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Convert a time point to a string representation
|
||||||
|
* \param[in] time The time point
|
||||||
|
* \return A string representing the time point in hh:mm:ss.nanoseconds format
|
||||||
|
*/
|
||||||
|
std::string time_point_to_string(const time_point &time)
|
||||||
|
{
|
||||||
|
uint64_t nsecs = std::chrono::duration_cast<std::chrono::nanoseconds>(time.time_since_epoch()).count();
|
||||||
|
unsigned int secs = nsecs / 1000000000ULL;
|
||||||
|
|
||||||
|
std::ostringstream ossTimestamp;
|
||||||
|
ossTimestamp.fill('0');
|
||||||
|
ossTimestamp << secs / (60 * 60) << ":"
|
||||||
|
<< std::setw(2) << (secs / 60) % 60 << ":"
|
||||||
|
<< std::setw(2) << secs % 60 << "."
|
||||||
|
<< std::setw(9) << nsecs % 1000000000ULL;
|
||||||
|
return ossTimestamp.str();
|
||||||
|
}
|
||||||
|
|
||||||
} /* namespace utils */
|
} /* namespace utils */
|
||||||
|
|
||||||
} /* namespace libcamera */
|
} /* namespace libcamera */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue