From 2efc60fde8ef12c126ff6fada59ac0fedbee92f0 Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nwpope@utu.fi> Date: Fri, 28 Jun 2019 13:31:08 +0300 Subject: [PATCH] Working snapshot stream record --- applications/gui/src/media_panel.cpp | 27 ++++++++++++++++++------ applications/gui/src/media_panel.hpp | 6 ++++++ applications/gui/src/src_window.cpp | 2 +- components/rgbd-sources/src/snapshot.cpp | 13 ++++++++---- 4 files changed, 37 insertions(+), 11 deletions(-) diff --git a/applications/gui/src/media_panel.cpp b/applications/gui/src/media_panel.cpp index 83bad8511..2e0f5fae2 100644 --- a/applications/gui/src/media_panel.cpp +++ b/applications/gui/src/media_panel.cpp @@ -17,6 +17,7 @@ MediaPanel::MediaPanel(ftl::gui::Screen *screen) : nanogui::Window(screen, ""), using namespace nanogui; paused_ = false; + writer_ = nullptr; setLayout(new BoxLayout(Orientation::Horizontal, Alignment::Middle, 5, 10)); @@ -54,8 +55,24 @@ MediaPanel::MediaPanel(ftl::gui::Screen *screen) : nanogui::Window(screen, ""), button = new Button(this, "", ENTYPO_ICON_CONTROLLER_RECORD); button->setFlags(Button::ToggleButton); button->setChangeCallback([this,button](bool state) { - if (state) button->setTextColor(nanogui::Color(1.0f,0.1f,0.1f,1.0f)); - else button->setTextColor(nanogui::Color(1.0f,1.0f,1.0f,1.0f)); + if (state){ + auto *cam = screen_->activeCamera(); + + button->setTextColor(nanogui::Color(1.0f,0.1f,0.1f,1.0f)); + char timestamp[18]; + std::time_t t=std::time(NULL); + std::strftime(timestamp, sizeof(timestamp), "%F-%H%M%S", std::localtime(&t)); + writer_ = new ftl::rgbd::SnapshotStreamWriter(std::string(timestamp) + ".tar.gz", 1000 / 25); + writer_->addSource(cam->source()); + writer_->start(); + } else { + button->setTextColor(nanogui::Color(1.0f,1.0f,1.0f,1.0f)); + if (writer_) { + writer_->stop(); + delete writer_; + writer_ = nullptr; + } + } //if (state) ... start //else ... stop }); @@ -92,12 +109,10 @@ MediaPanel::MediaPanel(ftl::gui::Screen *screen) : nanogui::Window(screen, ""), auto writer = ftl::rgbd::SnapshotWriter(std::string(timestamp) + ".tar.gz"); cv::Mat rgb, depth; cam->source()->getFrames(rgb, depth); - if (!writer.addCameraRGBD( + if (!writer.addCameraParams("0", cam->source()->getPose(), cam->source()->parameters()) || !writer.addCameraRGBD( "0", // TODO rgb, - depth, - cam->source()->getPose(), - cam->source()->parameters() + depth )) { LOG(ERROR) << "Snapshot failed"; } diff --git a/applications/gui/src/media_panel.hpp b/applications/gui/src/media_panel.hpp index 0f17bd340..c65c48770 100644 --- a/applications/gui/src/media_panel.hpp +++ b/applications/gui/src/media_panel.hpp @@ -4,6 +4,11 @@ #include <nanogui/window.h> namespace ftl { + +namespace rgbd { +class SnapshotStreamWriter; +} + namespace gui { class Screen; @@ -16,6 +21,7 @@ class MediaPanel : public nanogui::Window { private: ftl::gui::Screen *screen_; bool paused_; + ftl::rgbd::SnapshotStreamWriter *writer_; }; } diff --git a/applications/gui/src/src_window.cpp b/applications/gui/src/src_window.cpp index 010ef2392..124285573 100644 --- a/applications/gui/src/src_window.cpp +++ b/applications/gui/src/src_window.cpp @@ -102,7 +102,7 @@ SourceWindow::SourceWindow(ftl::gui::Screen *screen) this->src_->parameters() )) { LOG(ERROR) << "Snapshot failed"; - }*/ + } } catch(std::runtime_error) { LOG(ERROR) << "Snapshot failed (file error)"; diff --git a/components/rgbd-sources/src/snapshot.cpp b/components/rgbd-sources/src/snapshot.cpp index b45ea4f93..b4ea2aac4 100644 --- a/components/rgbd-sources/src/snapshot.cpp +++ b/components/rgbd-sources/src/snapshot.cpp @@ -143,7 +143,11 @@ bool SnapshotWriter::addCameraRGBD(const string &name, const Mat &rgb, const Mat } SnapshotStreamWriter::SnapshotStreamWriter(const string &filename, int delay) : - writer_(filename), delay_(delay) {} + run_(false), finished_(false), writer_(filename), delay_(delay) {} + +SnapshotStreamWriter::~SnapshotStreamWriter() { + +} void SnapshotStreamWriter::addSource(ftl::rgbd::Source *src) { writer_.addCameraParams(std::to_string(sources_.size()), src->getPose(), src->parameters()); @@ -151,7 +155,7 @@ void SnapshotStreamWriter::addSource(ftl::rgbd::Source *src) { } void SnapshotStreamWriter::run() { - vector<Mat> rgb;(sources_.size()); + vector<Mat> rgb(sources_.size()); vector<Mat> depth(sources_.size()); while(run_) { @@ -164,7 +168,7 @@ void SnapshotStreamWriter::run() { } for(size_t i = 0; i < sources_.size(); ++i) { - writer_.addCameraRGBD(ms + "-" + std::to_string(i), rgb[i], depth[i]); + writer_.addCameraRGBD(std::to_string(ms) + "-" + std::to_string(i), rgb[i], depth[i]); } std::this_thread::sleep_for(std::chrono::microseconds(delay_)); @@ -182,8 +186,9 @@ void SnapshotStreamWriter::start() { void SnapshotStreamWriter::stop() { + bool wasrunning = run_; run_ = false; - thread_.join(); + if (wasrunning) thread_.join(); } -- GitLab