diff --git a/applications/gui/src/src_window.cpp b/applications/gui/src/src_window.cpp index 88700d146dd7a1dbd7486e83d1f5038f94d2f306..23e774f6430d242d933fed5fdbf73fa945965e3f 100644 --- a/applications/gui/src/src_window.cpp +++ b/applications/gui/src/src_window.cpp @@ -215,6 +215,8 @@ bool SourceWindow::_processFrameset(ftl::rgbd::FrameSet &fs, bool fromstream) { if (!fs.frames[i].isGPU(Channel::Colour)) fs.frames[i].upload(Channels<0>(Channel::Colour), pre_pipelines_[fs.id]->getStream()); } + fs.mask &= pre_pipelines_[fs.id]->value("frame_mask", 0xFFFF); + { FTL_Profile("Prepipe",0.020); pre_pipelines_[fs.id]->apply(fs, fs, 0); diff --git a/components/streams/include/ftl/streams/netstream.hpp b/components/streams/include/ftl/streams/netstream.hpp index 0db0013196f0fe8aa03adc74480223a004863c95..89330c34f20beb1516548e680c6c72b47ac97db1 100644 --- a/components/streams/include/ftl/streams/netstream.hpp +++ b/components/streams/include/ftl/streams/netstream.hpp @@ -76,6 +76,7 @@ class Net : public Stream { ftl::UUID peer_; int64_t last_frame_; int64_t frame_no_; + int64_t last_ping_; std::string uri_; bool host_; int tally_; diff --git a/components/streams/src/netstream.cpp b/components/streams/src/netstream.cpp index 030bc0dfe56648d99ec60a785749fd8627193c91..4969489908d95598af837e0a4468aac14ff66c12 100644 --- a/components/streams/src/netstream.cpp +++ b/components/streams/src/netstream.cpp @@ -22,7 +22,7 @@ float Net::sample_count__ = 0.0f; int64_t Net::last_msg__ = 0; MUTEX Net::msg_mtx__; -Net::Net(nlohmann::json &config, ftl::net::Universe *net) : Stream(config), active_(false), net_(net), clock_adjust_(0) { +Net::Net(nlohmann::json &config, ftl::net::Universe *net) : Stream(config), active_(false), net_(net), clock_adjust_(0), last_ping_(0) { // TODO: Install "find_stream" binding if not installed... if (!net_->isBound("find_stream")) { net_->bind("find_stream", [this](const std::string &uri) -> optional<ftl::UUID> { @@ -292,7 +292,7 @@ bool Net::_sendRequest(Channel c, uint8_t frameset, uint8_t frames, uint8_t coun clock_adjust_ = ftl::timer::get_time() - mastertime + (latency/2); //if (clock_adjust_ > 0) { - // LOG(INFO) << "Clock adjustment: " << clock_adjust_; + //LOG(INFO) << "LATENCY: " << latency; //} }); } catch (...) { @@ -357,25 +357,29 @@ bool Net::_processRequest(ftl::net::Peer &p, const ftl::codecs::Packet &pkt) { // Sync clocks! if (ftl::timer::isClockSlave() && p.id() == time_peer_) { auto start = std::chrono::high_resolution_clock::now(); + int64_t now = ftl::timer::get_time(); + if (last_ping_ < now-500) { + last_ping_ = now; - try { - net_->asyncCall<int64_t>(time_peer_, "__ping__", [this, start](const int64_t &mastertime) { - auto elapsed = std::chrono::high_resolution_clock::now() - start; - int64_t latency = std::chrono::duration_cast<std::chrono::milliseconds>(elapsed).count(); - auto clock_adjust = mastertime - (ftl::timer::get_time() + (latency/2)); - - if (clock_adjust > 0) { - LOG(INFO) << "Clock adjustment: " << clock_adjust; - //LOG(INFO) << "Latency: " << (latency / 2); - //LOG(INFO) << "Local: " << std::chrono::time_point_cast<std::chrono::milliseconds>(start).time_since_epoch().count() << ", master: " << mastertime; - ftl::timer::setClockAdjustment(clock_adjust); - } - }); - } catch (...) { - LOG(ERROR) << "Ping failed"; - // Reset time peer and remove timer - time_peer_ = ftl::UUID(0); - return false; + try { + net_->asyncCall<int64_t>(time_peer_, "__ping__", [this, start](const int64_t &mastertime) { + auto elapsed = std::chrono::high_resolution_clock::now() - start; + int64_t latency = std::chrono::duration_cast<std::chrono::milliseconds>(elapsed).count(); + auto clock_adjust = mastertime - (ftl::timer::get_time() + (latency/2)); + + if (clock_adjust != 0) { + LOG(INFO) << "Clock adjustment: " << clock_adjust << ", latency=" << latency/2; + //LOG(INFO) << "Latency: " << (latency / 2); + //LOG(INFO) << "Local: " << std::chrono::time_point_cast<std::chrono::milliseconds>(start).time_since_epoch().count() << ", master: " << mastertime; + ftl::timer::setClockAdjustment(clock_adjust); + } + }); + } catch (...) { + LOG(ERROR) << "Ping failed"; + // Reset time peer and remove timer + time_peer_ = ftl::UUID(0); + return false; + } } }