diff --git a/applications/reconstruct/src/main.cpp b/applications/reconstruct/src/main.cpp index 09791e3f16d87222f2b9edb4b3b18d8daeff2076..1f6201403f44ca4922e306e6355ec353c9403d35 100644 --- a/applications/reconstruct/src/main.cpp +++ b/applications/reconstruct/src/main.cpp @@ -426,7 +426,7 @@ static void run() { ftl::rgbd::Streamer stream(config, &net); stream.add(virt); - stream.run(); + //stream.run(); unsigned char frameCount = 0; bool paused = false; @@ -472,7 +472,9 @@ static void run() { frameCount++; + stream.poll(); display.update(); + //sleep_for(milliseconds(10)); } } diff --git a/components/renderers/cpp/src/rgbd_display.cpp b/components/renderers/cpp/src/rgbd_display.cpp index 473878548586a5508e97622fe31bbf1b55f7fe55..edc8ada98a93542256f212994df230391427a907 100644 --- a/components/renderers/cpp/src/rgbd_display.cpp +++ b/components/renderers/cpp/src/rgbd_display.cpp @@ -123,7 +123,7 @@ void Display::update() { source_->setPose(viewPose); Mat rgb, depth; - source_->grab(); + //source_->grab(); source_->getRGBD(rgb, depth); if (rgb.rows > 0) cv::imshow(name_, rgb); wait(1); diff --git a/components/rgbd-sources/include/ftl/rgbd_streamer.hpp b/components/rgbd-sources/include/ftl/rgbd_streamer.hpp index 8eb7460c77d41415a2a2051a7593597037119c52..8218518edfed0efd68db8c13f8b4ac579d7aff75 100644 --- a/components/rgbd-sources/include/ftl/rgbd_streamer.hpp +++ b/components/rgbd-sources/include/ftl/rgbd_streamer.hpp @@ -51,6 +51,7 @@ class Streamer : public ftl::Configurable { void run(bool block=false); void stop(); + void poll(); RGBDSource *get(const std::string &uri); diff --git a/components/rgbd-sources/src/rgbd_streamer.cpp b/components/rgbd-sources/src/rgbd_streamer.cpp index b4e256169d598587a637e35624750d8ed3370f90..06d40fd2edcd89bfad54239ff2665d4fb2e1c9da 100644 --- a/components/rgbd-sources/src/rgbd_streamer.cpp +++ b/components/rgbd-sources/src/rgbd_streamer.cpp @@ -113,34 +113,30 @@ void Streamer::stop() { active_ = false; } +void Streamer::poll() { + double wait = 1.0f / 25.0f; + auto start = std::chrono::high_resolution_clock::now(); + // Create frame jobs at correct FPS interval + _schedule(); + + std::chrono::duration<double> elapsed = + std::chrono::high_resolution_clock::now() - start; + + sleep_for(milliseconds((long long)((wait - elapsed.count()) * 1000.0f))); +} + void Streamer::run(bool block) { active_ = true; if (block) { while (active_) { - double wait = 1.0f / 25.0f; - auto start = std::chrono::high_resolution_clock::now(); - // Create frame jobs at correct FPS interval - _schedule(); - - std::chrono::duration<double> elapsed = - std::chrono::high_resolution_clock::now() - start; - - sleep_for(milliseconds((long long)((wait - elapsed.count()) * 1000.0f))); + poll(); } } else { // Create thread job for frame ticking pool_.push([this](int id) { while (active_) { - double wait = 1.0f / 25.0f; - auto start = std::chrono::high_resolution_clock::now(); - // Create frame jobs at correct FPS interval - _schedule(); - - std::chrono::duration<double> elapsed = - std::chrono::high_resolution_clock::now() - start; - - sleep_for(milliseconds((long long)((wait - elapsed.count()) * 1000.0f))); + poll(); } }); }