From patchwork Sat Sep 14 11:06:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 1967 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 0BD0260BB0 for ; Sat, 14 Sep 2019 13:06:32 +0200 (CEST) Received: from pendragon.lan (bl10-204-24.dsl.telepac.pt [85.243.204.24]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id D3F4823F for ; Sat, 14 Sep 2019 13:06:30 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1568459191; bh=ld3KQjRs/cuBqAj1qCZazqmBMF8jmGfvEidrHcu8Uwk=; h=From:To:Subject:Date:From; b=WQGAMnJofQgDl73Ymz5bAIYAbpwjktnmt3wwj7tMTcEbJrCY4QUetDrBxX2LZC4xX 77wagARuCRtpJ/TQxlSPVVpL51dCLvKDLTVbcTaCIO7ov5/i/H3YWuctrfGcq0BAFd W/aQaB2RHuoh2kXM8QtofVjL3DNzk1bB4/UEWvOc= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Sat, 14 Sep 2019 14:06:19 +0300 Message-Id: <20190914110620.23290-1-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 1/2] libcamera: utils: Add clock helpers X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Sep 2019 11:06:32 -0000 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(+) 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 +#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 afbdd8349790..fe7ec53302a3 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 (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(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 */