From e76cc98bfef02056e8d35a1b84355aa3e723dfe0 Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nwpope@utu.fi> Date: Tue, 10 Mar 2020 18:28:59 +0200 Subject: [PATCH] Allow frame mask selection in receive --- components/streams/include/ftl/streams/receiver.hpp | 1 + components/streams/src/receiver.cpp | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/components/streams/include/ftl/streams/receiver.hpp b/components/streams/include/ftl/streams/receiver.hpp index 840af0388..5ca29947a 100644 --- a/components/streams/include/ftl/streams/receiver.hpp +++ b/components/streams/include/ftl/streams/receiver.hpp @@ -53,6 +53,7 @@ class Receiver : public ftl::Configurable, public ftl::rgbd::Generator { ftl::codecs::Channel second_channel_; int64_t timestamp_; SHARED_MUTEX mutex_; + unsigned int frame_mask_; struct InternalVideoStates { InternalVideoStates(); diff --git a/components/streams/src/receiver.cpp b/components/streams/src/receiver.cpp index ac61f1717..dfd8f0003 100644 --- a/components/streams/src/receiver.cpp +++ b/components/streams/src/receiver.cpp @@ -26,6 +26,7 @@ using ftl::codecs::definition_t; Receiver::Receiver(nlohmann::json &config) : ftl::Configurable(config), stream_(nullptr) { timestamp_ = 0; second_channel_ = Channel::Depth; + frame_mask_ = value("frame_mask", 0xFFFFFFFFu); size_t bsize = value("frameset_buffer_size", 3); for (size_t i=0; i<ftl::stream::kMaxStreams; ++i) { @@ -39,6 +40,10 @@ Receiver::Receiver(nlohmann::json &config) : ftl::Configurable(config), stream_( builder_[i].setBufferSize(bsize); } }); + + on("frame_mask", [this](const ftl::config::Event &e) { + frame_mask_ = value("frame_mask", 0xFFFFFFFFu); + }); } Receiver::~Receiver() { @@ -374,7 +379,8 @@ void Receiver::setStream(ftl::stream::Stream *s) { } // Too many frames, so ignore. - if (spkt.frameNumber() >= value("max_frames",32)) return; + //if (spkt.frameNumber() >= value("max_frames",32)) return; + if (spkt.frameNumber() >= 32 || ((1 << spkt.frameNumber()) & frame_mask_) == 0) return; // Dummy no data packet. if (pkt.data.size() == 0) return; -- GitLab