From 739c458942ac7d41d547b88af4e779e2d17a84be Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nwpope@utu.fi> Date: Sun, 2 Jun 2019 13:40:45 +0300 Subject: [PATCH] Virtual stream to GUI works --- applications/reconstruct/src/main.cpp | 4 ++- components/renderers/cpp/src/rgbd_display.cpp | 2 +- .../include/ftl/rgbd_streamer.hpp | 1 + components/rgbd-sources/src/rgbd_streamer.cpp | 32 ++++++++----------- 4 files changed, 19 insertions(+), 20 deletions(-) diff --git a/applications/reconstruct/src/main.cpp b/applications/reconstruct/src/main.cpp index 09791e3f1..1f6201403 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 473878548..edc8ada98 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 8eb7460c7..8218518ed 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 b4e256169..06d40fd2e 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(); } }); } -- GitLab