diff --git a/components/streams/include/ftl/streams/receiver.hpp b/components/streams/include/ftl/streams/receiver.hpp index 840af0388db917dbbf3c653edfbe138757d4a36d..5ca29947ae54d8a89cf16e04f1b05c8bf07d3158 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 ac61f171786ded4a1e2f2c54a4c2c3dacd881e2a..dfd8f0003bda646ae4588003c6339d219623192c 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;