From fccf654919ebfb4652af87044ff51b09df6add69 Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nwpope@utu.fi> Date: Fri, 21 Jun 2019 11:26:53 +0300 Subject: [PATCH] Use cached left for rgb --- components/rgbd-sources/src/local.cpp | 20 ++++++++++---------- components/rgbd-sources/src/local.hpp | 3 +++ components/rgbd-sources/src/stereovideo.cpp | 7 +++---- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/components/rgbd-sources/src/local.cpp b/components/rgbd-sources/src/local.cpp index 28ba2b410..410cb9f96 100644 --- a/components/rgbd-sources/src/local.cpp +++ b/components/rgbd-sources/src/local.cpp @@ -232,14 +232,14 @@ bool LocalSource::get(cv::cuda::GpuMat &l_out, cv::cuda::GpuMat &r_out, cv::cuda high_resolution_clock::now().time_since_epoch()).count(); // Limit max framerate - if (timestamp - timestamp_ < tps_) { - sleep_for(milliseconds((int)std::round((tps_ - (timestamp - timestamp_))*1000))); - } + //if (timestamp - timestamp_ < tps_) { + // sleep_for(milliseconds((int)std::round((tps_ - (timestamp - timestamp_))*1000))); + //} timestamp_ = timestamp; if (camera_b_ || !stereo_) { - if (!camera_a_->retrieve(l)) { + if (!camera_a_->retrieve(left_)) { LOG(ERROR) << "Unable to read frame from camera A"; return false; } @@ -257,9 +257,9 @@ bool LocalSource::get(cv::cuda::GpuMat &l_out, cv::cuda::GpuMat &r_out, cv::cuda int resx = frame.cols / 2; if (flip_) { r = Mat(frame, Rect(0, 0, resx, frame.rows)); - l = Mat(frame, Rect(resx, 0, frame.cols-resx, frame.rows)); + left_ = Mat(frame, Rect(resx, 0, frame.cols-resx, frame.rows)); } else { - l = Mat(frame, Rect(0, 0, resx, frame.rows)); + left_ = Mat(frame, Rect(0, 0, resx, frame.rows)); r = Mat(frame, Rect(resx, 0, frame.cols-resx, frame.rows)); } } @@ -267,7 +267,7 @@ bool LocalSource::get(cv::cuda::GpuMat &l_out, cv::cuda::GpuMat &r_out, cv::cuda if (downsize_ != 1.0f) { // cv::cuda::resize() - cv::resize(l, l, cv::Size((int)(l.cols * downsize_), (int)(l.rows * downsize_)), + cv::resize(left_, left_, cv::Size((int)(left_.cols * downsize_), (int)(left_.rows * downsize_)), 0, 0, cv::INTER_LINEAR); cv::resize(r, r, cv::Size((int)(r.cols * downsize_), (int)(r.rows * downsize_)), 0, 0, cv::INTER_LINEAR); @@ -281,13 +281,13 @@ bool LocalSource::get(cv::cuda::GpuMat &l_out, cv::cuda::GpuMat &r_out, cv::cuda if (flip_v_) { Mat tl, tr; - cv::flip(l, tl, 0); + cv::flip(left_, tl, 0); cv::flip(r, tr, 0); - l = tl; + left_ = tl; r = tr; } - l_out.upload(l, stream); + l_out.upload(left_, stream); r_out.upload(r, stream); return true; diff --git a/components/rgbd-sources/src/local.hpp b/components/rgbd-sources/src/local.hpp index 9526f0d2d..e3fcb91bd 100644 --- a/components/rgbd-sources/src/local.hpp +++ b/components/rgbd-sources/src/local.hpp @@ -26,6 +26,8 @@ class LocalSource : public Configurable { unsigned int width() const { return width_; } unsigned int height() const { return height_; } + + cv::Mat &cachedLeft() { return left_; } //void setFramerate(float fps); //float getFramerate() const; @@ -47,6 +49,7 @@ class LocalSource : public Configurable { cv::VideoCapture *camera_b_; unsigned int width_; unsigned int height_; + cv::Mat left_; }; } diff --git a/components/rgbd-sources/src/stereovideo.cpp b/components/rgbd-sources/src/stereovideo.cpp index 41716ab2b..b75380746 100644 --- a/components/rgbd-sources/src/stereovideo.cpp +++ b/components/rgbd-sources/src/stereovideo.cpp @@ -105,12 +105,11 @@ bool StereoVideoSource::grab() { calib_->rectifyStereo(left_, right_, stream_); disp_->compute(left_, right_, disp_tmp_, stream_); disparityToDepth(disp_tmp_, depth_tmp_, calib_->getQ(), stream_); - left_.download(rgb_, stream_); // TODO original left RGB image could be stored in host memory + //left_.download(rgb_, stream_); + rgb_ = lsrc_->cachedLeft(); depth_tmp_.download(depth_, stream_); - // TODO(Nick) Could potentially leave this until getFrames? - stream_.waitForCompletion(); - + stream_.waitForCompletion(); return true; } -- GitLab