diff --git a/applications/player/src/main.cpp b/applications/player/src/main.cpp index 8d96c54adec1cf856089b9b28666546f2609435b..dc176ed03cff73170f639961e5d328cdf71fac18 100644 --- a/applications/player/src/main.cpp +++ b/applications/player/src/main.cpp @@ -26,6 +26,17 @@ static void createDecoder(const ftl::codecs::Packet &pkt) { decoder = ftl::codecs::allocateDecoder(pkt); } +static void visualizeDepthMap( const cv::Mat &depth, cv::Mat &out, + const float max_depth) +{ + depth.convertTo(out, CV_8U, 255.0f / max_depth); + out = 255 - out; + //cv::Mat mask = (depth >= 39.0f); // TODO (mask for invalid pixels) + + applyColorMap(out, out, cv::COLORMAP_JET); + //out.setTo(cv::Scalar(255, 255, 255), mask); +} + int main(int argc, char **argv) { std::string filename(argv[1]); LOG(INFO) << "Playing: " << filename; @@ -72,6 +83,9 @@ int main(int argc, char **argv) { } if (!frame.empty()) { + if (spkt.channel == 1) { + visualizeDepthMap(frame, frame, 8.0f); + } double time = (double)(spkt.timestamp - r.getStartTime()) / 1000.0; cv::putText(frame, std::string("Time: ") + std::to_string(time) + std::string("s"), cv::Point(10,20), cv::FONT_HERSHEY_PLAIN, 1, cv::Scalar(0,0,255)); cv::imshow("Player", frame); diff --git a/components/rgbd-sources/src/streamer.cpp b/components/rgbd-sources/src/streamer.cpp index 40cd7d71074fd3bb051a21792ace496b5963cde6..9d8f68898dc29dfc2d285a63a1c1daea7e26381e 100644 --- a/components/rgbd-sources/src/streamer.cpp +++ b/components/rgbd-sources/src/streamer.cpp @@ -424,6 +424,7 @@ void Streamer::_process(ftl::rgbd::FrameSet &fs) { // Receiver only waits for channel 1 by default // TODO: Each encode could be done in own thread if (hasChan2) { + // TODO: Stagger the reset between nodes... random phasing if (fs.timestamp % (10*ftl::timer::getInterval()) == 0) enc2->reset(); enc2->encode(fs.frames[j].get<cv::Mat>(fs.sources[j]->getChannel()), src->hq_bitrate, [this,src,hasChan2](const ftl::codecs::Packet &blk){ _transmitPacket(src, blk, 1, hasChan2, Quality::High); @@ -432,6 +433,7 @@ void Streamer::_process(ftl::rgbd::FrameSet &fs) { if (enc2) enc2->reset(); } + // TODO: Stagger the reset between nodes... random phasing if (fs.timestamp % (10*ftl::timer::getInterval()) == 0) enc1->reset(); enc1->encode(fs.frames[j].get<cv::Mat>(Channel::Colour), src->hq_bitrate, [this,src,hasChan2](const ftl::codecs::Packet &blk){ _transmitPacket(src, blk, 0, hasChan2, Quality::High);