From 89498c037407c82dfb84fdc47783a527ac80abdc Mon Sep 17 00:00:00 2001 From: jonnew Date: Tue, 3 May 2016 23:42:15 -0400 Subject: [PATCH] Accurate frame period reporting in oat-framserve wcam - Controlling frame rate of webcams is not worth it. - Instead, I have choosen to send the measured frame period along with each frame --- src/frameserver/FileReader.cpp | 2 -- src/frameserver/WebCam.cpp | 10 ++++++---- src/frameserver/WebCam.h | 4 ++++ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/frameserver/FileReader.cpp b/src/frameserver/FileReader.cpp index aec3cdd..943c10c 100644 --- a/src/frameserver/FileReader.cpp +++ b/src/frameserver/FileReader.cpp @@ -46,8 +46,6 @@ FileReader::FileReader(const std::string &image_sink_address, void FileReader::connectToNode() { - // TODO: bind without using example frame from video stream. See PGGigECam.cpp - // for example cv::Mat example_frame; file_reader_ >> example_frame; diff --git a/src/frameserver/WebCam.cpp b/src/frameserver/WebCam.cpp index 1640eaa..2a9b12b 100644 --- a/src/frameserver/WebCam.cpp +++ b/src/frameserver/WebCam.cpp @@ -53,9 +53,6 @@ void WebCam::connectToNode() { shared_frame_ = frame_sink_.retrieve( example_frame.rows, example_frame.cols, example_frame.type()); - - // TODO: this does not appear to be very accurate/work - shared_frame_.sample().set_rate_hz(cv_camera_->get(CV_CAP_PROP_FPS)); } bool WebCam::serveFrame() { @@ -81,7 +78,12 @@ bool WebCam::serveFrame() { } // Increment sample count - shared_frame_.sample().incrementCount(); + if (shared_frame_.sample().count() == 0) + start_ = clock_.now(); + + auto period = + std::chrono::duration_cast(clock_.now() - start_); + shared_frame_.sample().incrementCount(period); // Tell sources there is new data frame_sink_.post(); diff --git a/src/frameserver/WebCam.h b/src/frameserver/WebCam.h index ba5848b..02bef5f 100644 --- a/src/frameserver/WebCam.h +++ b/src/frameserver/WebCam.h @@ -51,6 +51,10 @@ class WebCam : public FrameServer { // The webcam object int64_t index_; std::unique_ptr cv_camera_; + + // frame generation clock + std::chrono::steady_clock clock_; + std::chrono::steady_clock::time_point start_; }; } /* namespace oat */