From 5055ca747c4c0d635ed8f2ab272f493748c2f50a Mon Sep 17 00:00:00 2001 From: Naushir Patuck Date: Tue, 8 Jun 2021 12:03:32 +0100 Subject: libcamera: utils: Add helper class for std::chrono::duration A new utils::Duration class is defined to represent a std::chrono::duration type with double precision nanosecond timebase. Using a double minimises the loss of precision when converting timebases. This helper class may be used by IPAs to represent variables such as frame durations and exposure times. An operator << overload is defined to help with displaying utils::Duration value in stream objects. Currently, this will display the duration value in microseconds. Signed-off-by: Naushir Patuck Reviewed-by: David Plowman Reviewed-by: Jacopo Mondi Reviewed-by: Laurent Pinchart Signed-off-by: Laurent Pinchart --- test/utils.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'test') diff --git a/test/utils.cpp b/test/utils.cpp index 7e24c71e..f170ae4c 100644 --- a/test/utils.cpp +++ b/test/utils.cpp @@ -20,6 +20,7 @@ using namespace std; using namespace libcamera; +using namespace std::literals::chrono_literals; class UtilsTest : public Test { @@ -128,6 +129,46 @@ protected: return TestPass; } + int testDuration() + { + std::ostringstream os; + utils::Duration exposure; + double ratio; + + exposure = 25ms + 25ms; + if (exposure.get() != 50000.0) { + cerr << "utils::Duration failed to return microsecond count"; + return TestFail; + } + + exposure = 1.0s / 4; + if (exposure != 250ms) { + cerr << "utils::Duration failed scalar divide test"; + return TestFail; + } + + exposure = 5000.5us; + if (!exposure) { + cerr << "utils::Duration failed boolean test"; + return TestFail; + } + + os << exposure; + if (os.str() != "5000.50us") { + cerr << "utils::Duration operator << failed"; + return TestFail; + } + + exposure = 100ms; + ratio = exposure / 25ms; + if (ratio != 4.0) { + cerr << "utils::Duration failed ratio test"; + return TestFail; + } + + return TestPass; + } + int run() { /* utils::hex() test. */ @@ -236,6 +277,10 @@ protected: if (testEnumerate() != TestPass) return TestFail; + /* utils::Duration test. */ + if (testDuration() != TestPass) + return TestFail; + return TestPass; } }; -- cgit v1.2.1