diff --git a/components/rgbd-sources/src/frameset.cpp b/components/rgbd-sources/src/frameset.cpp index 8064aaff0734e5b8a90d015f903c1541aef58614..a2d3f57da7fb2ad3573dca4c373091d4acc907b6 100644 --- a/components/rgbd-sources/src/frameset.cpp +++ b/components/rgbd-sources/src/frameset.cpp @@ -124,6 +124,15 @@ size_t Builder::size() { } void Builder::onFrameSet(const std::function<bool(ftl::rgbd::FrameSet &)> &cb) { + if (!cb) { + main_id_.cancel(); + return; + } + + if (main_id_.id() != -1) { + main_id_.cancel(); + } + // 3. Issue IO retrieve ad compute jobs before finding a valid // frame at required latency to pass to callback. main_id_ = ftl::timer::add(ftl::timer::kTimerMain, [this,cb](int64_t ts) { diff --git a/components/streams/src/receiver.cpp b/components/streams/src/receiver.cpp index cba34010bf08fa1ec931695b26d274c52373bb69..88bb1e858e978352c2007aae1a908a75d13e9f17 100644 --- a/components/streams/src/receiver.cpp +++ b/components/streams/src/receiver.cpp @@ -25,6 +25,7 @@ Receiver::~Receiver() { //if (stream_) { // stream_->onPacket(nullptr); //} + builder_.onFrameSet(nullptr); } diff --git a/components/streams/test/receiver_unit.cpp b/components/streams/test/receiver_unit.cpp index 86ce60b6c118eec5d8ff08789feed5d437723ed8..faee6add4a30f4195a4d135db900413976913833 100644 --- a/components/streams/test/receiver_unit.cpp +++ b/components/streams/test/receiver_unit.cpp @@ -215,5 +215,7 @@ TEST_CASE( "Receiver generating onFrameSet" ) { } ftl::timer::stop(true); + //while (ftl::pool.n_idle() != ftl::pool.size()) std::this_thread::sleep_for(std::chrono::milliseconds(10)); delete receiver; + //ftl::config::cleanup(); }