From 98dff063f2f497434978a46f9a676307365fd878 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Sat, 14 Sep 2019 03:35:12 +0300 Subject: libcamera: utils: Add clock helpers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Niklas Söderlund --- src/libcamera/include/utils.h | 10 +++++++++ src/libcamera/utils.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) (limited to 'src') diff --git a/src/libcamera/include/utils.h b/src/libcamera/include/utils.h index 47a42258..52eee8ac 100644 --- a/src/libcamera/include/utils.h +++ b/src/libcamera/include/utils.h @@ -8,7 +8,10 @@ #define __LIBCAMERA_UTILS_H__ #include +#include #include +#include +#include #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)); } +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 libcamera */ diff --git a/src/libcamera/utils.cpp b/src/libcamera/utils.cpp index afbdd834..928db254 100644 --- a/src/libcamera/utils.cpp +++ b/src/libcamera/utils.cpp @@ -7,6 +7,8 @@ #include "utils.h" +#include +#include #include #include #include @@ -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 */ +/** + * \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(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(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 libcamera */ -- cgit v1.2.1