diff --git a/components/rgbd-sources/src/net.cpp b/components/rgbd-sources/src/net.cpp index c9256adc6ff6afcdf4f0a292723631a35502b597..84c882ae3840081aa58e376efa2deb8a4facd3be 100644 --- a/components/rgbd-sources/src/net.cpp +++ b/components/rgbd-sources/src/net.cpp @@ -121,6 +121,12 @@ void NetSource::_recvChunk(int64_t frame, int chunk, bool delta, const vector<un int cx = (chunk % chunks_dim_) * chunk_width_; int cy = (chunk / chunks_dim_) * chunk_height_; + // Make certain last frame has finished decoding before swap + while (frame > current_frame_ && chunk_count_ < 16 && chunk_count_ > 0) { + LOG(WARNING) << "Previous frame not complete: " << frame; + std::this_thread::yield(); + } + // Lock host to prevent grab UNIQUE_LOCK(host_->mutex(),lk); @@ -129,6 +135,8 @@ void NetSource::_recvChunk(int64_t frame, int chunk, bool delta, const vector<un // Lock host to prevent grab //UNIQUE_LOCK(host_->mutex(),lk); + chunk_count_ = 0; + // Swap the double buffers cv::Mat tmp; tmp = rgb_; @@ -176,6 +184,7 @@ void NetSource::_recvChunk(int64_t frame, int chunk, bool delta, const vector<un } } + ++chunk_count_; if (chunk == 0) { N_--; } @@ -232,6 +241,7 @@ void NetSource::_updateURI() { chunks_dim_ = ftl::rgbd::kChunkDim; chunk_width_ = params_.width / chunks_dim_; chunk_height_ = params_.height / chunks_dim_; + chunk_count_ = 0; rgb_ = cv::Mat(cv::Size(params_.width, params_.height), CV_8UC3, cv::Scalar(0,0,0)); depth_ = cv::Mat(cv::Size(params_.width, params_.height), CV_32FC1, 0.0f); d_rgb_ = cv::Mat(cv::Size(params_.width, params_.height), CV_8UC3, cv::Scalar(0,0,0)); diff --git a/components/rgbd-sources/src/net.hpp b/components/rgbd-sources/src/net.hpp index 766053faa3616f11a02efec16bd63642dd3a682d..453ebe76696e8243c1b2b26bc2530724809a5702 100644 --- a/components/rgbd-sources/src/net.hpp +++ b/components/rgbd-sources/src/net.hpp @@ -48,6 +48,7 @@ class NetSource : public detail::Source { int default_quality_; ftl::rgbd::channel_t prev_chan_; int64_t current_frame_; + int chunk_count_; // Double buffering cv::Mat d_depth_;