diff options
-rw-r--r-- | src/libcamera/include/utils.h | 10 | ||||
-rw-r--r-- | src/libcamera/utils.cpp | 50 |
2 files changed, 60 insertions, 0 deletions
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 <algorithm> +#include <chrono> #include <memory> +#include <string> +#include <sys/time.h> #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 <iomanip> +#include <sstream> #include <stdlib.h> #include <string.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 */ +/** + * \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 libcamera */ |