diff --git a/applications/gui/src/camera.cpp b/applications/gui/src/camera.cpp index f12e38dbb02e1d4403eb3b951a678889779be06c..b735a5ea3372e08d23c464e1b0b65c54020bbd6f 100644 --- a/applications/gui/src/camera.cpp +++ b/applications/gui/src/camera.cpp @@ -437,6 +437,19 @@ void ftl::gui::Camera::_draw(std::vector<ftl::rgbd::FrameSet*> &fss) { record_sender_->post(fs2); record_stream_->select(0, Channels<0>(Channel::Colour)); f.swapTo(Channels<0>(Channel::Colour), frame_); + } else if (do_snapshot_) { + do_snapshot_ = false; + cv::Mat flipped; + cv::Mat im1; + + frame_.get<cv::cuda::GpuMat>(Channel::Colour).download(im1); + + { + //UNIQUE_LOCK(mutex_, lk); + cv::flip(im1, flipped, 0); + } + cv::cvtColor(flipped, flipped, cv::COLOR_BGRA2BGR); + cv::imwrite(snapshot_filename_, flipped); } } @@ -775,14 +788,16 @@ const void ftl::gui::Camera::captureFrame() { } void ftl::gui::Camera::snapshot(const std::string &filename) { - cv::Mat flipped; + /*cv::Mat flipped; { UNIQUE_LOCK(mutex_, lk); //cv::flip(im1_, flipped, 0); } cv::cvtColor(flipped, flipped, cv::COLOR_BGRA2BGR); - cv::imwrite(filename, flipped); + cv::imwrite(filename, flipped);*/ + snapshot_filename_ = filename; + do_snapshot_ = true; } void ftl::gui::Camera::startVideoRecording(const std::string &filename) { diff --git a/applications/gui/src/camera.hpp b/applications/gui/src/camera.hpp index 764a07b9509c08166c7c2e8839a3bc8f74f6dfea..be7b21476bce47b4d66fe5e1ee29012975cc5a45 100644 --- a/applications/gui/src/camera.hpp +++ b/applications/gui/src/camera.hpp @@ -147,6 +147,8 @@ class Camera { float lerpSpeed_; bool sdepth_; bool pause_; + bool do_snapshot_ = false; + std::string snapshot_filename_; ftl::codecs::Channel channel_; ftl::codecs::Channels<0> channels_;