Message ID | 20190914110620.23290-1-laurent.pinchart@ideasonboard.com |
---|---|
State | Accepted |
Headers | show |
Series |
|
Related | show |
Hi Laurent, Thanks for your work. On 2019-09-14 14:06:19 +0300, Laurent Pinchart wrote: > 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> > --- > src/libcamera/include/utils.h | 10 +++++++ > src/libcamera/utils.cpp | 50 +++++++++++++++++++++++++++++++++++ > 2 files changed, 60 insertions(+) > > diff --git a/src/libcamera/include/utils.h b/src/libcamera/include/utils.h > index 47a422587338..52eee8ac2804 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 afbdd8349790..fe7ec53302a3 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 (monotonous) I would s/monotonous/monotonic/ but it's just bike shedding ;-) With or without this addressed, Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> > + */ > + > +/** > + * \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 */ > -- > Regards, > > Laurent Pinchart > > _______________________________________________ > libcamera-devel mailing list > libcamera-devel@lists.libcamera.org > https://lists.libcamera.org/listinfo/libcamera-devel
diff --git a/src/libcamera/include/utils.h b/src/libcamera/include/utils.h index 47a422587338..52eee8ac2804 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 afbdd8349790..fe7ec53302a3 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 (monotonous) + */ + +/** + * \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 */
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> --- src/libcamera/include/utils.h | 10 +++++++ src/libcamera/utils.cpp | 50 +++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+)