diff --git a/components/operators/include/ftl/operators/disparity.hpp b/components/operators/include/ftl/operators/disparity.hpp index 54cfa1c8846f4c38327a06406905f9fbfdfe597b..2f9a807cdc0119ee9efc51dae6db69d17a47e3b2 100644 --- a/components/operators/include/ftl/operators/disparity.hpp +++ b/components/operators/include/ftl/operators/disparity.hpp @@ -29,6 +29,8 @@ class FixstarsSGM : public ftl::operators::Operator { ~FixstarsSGM(); inline Operator::Type type() const override { return Operator::Type::OneToOne; } bool apply(ftl::rgbd::Frame &in, ftl::rgbd::Frame &out, cudaStream_t stream) override; + + bool isMemoryHeavy() const override { return true; } private: bool init(); diff --git a/components/operators/include/ftl/operators/operator.hpp b/components/operators/include/ftl/operators/operator.hpp index 8dee5f7b987aba6e87364a277d53ffe1e0b2d901..399adddd4656f1a76476b93de074a6eb55983739 100644 --- a/components/operators/include/ftl/operators/operator.hpp +++ b/components/operators/include/ftl/operators/operator.hpp @@ -54,6 +54,8 @@ class Operator { */ virtual void wait(cudaStream_t) {} + virtual bool isMemoryHeavy() const { return false; } + inline ftl::Configurable *config() const { return config_; } private: diff --git a/components/operators/src/operator.cpp b/components/operators/src/operator.cpp index 1f000e9a7c57f35da967287f258fd73f78a44be7..617514afdfa3542846415001b085422a01f1bbea 100644 --- a/components/operators/src/operator.cpp +++ b/components/operators/src/operator.cpp @@ -59,14 +59,15 @@ bool Graph::apply(FrameSet &in, FrameSet &out, cudaStream_t stream) { //while (i.instances.size() < in.frames.size()) { //i.instances.push_back(i.maker->make()); //} - if (in.frames.size() > 1 && i.instances.size() < 2) { + if (in.frames.size() > 1 && i.instances.size() < 2 && !i.instances[0]->isMemoryHeavy()) { i.instances.push_back(i.maker->make()); } for (size_t j=0; j<in.frames.size(); ++j) { if (!in.hasFrame(j)) continue; - auto *instance = i.instances[j&0x1]; + int iix = (i.instances[0]->isMemoryHeavy()) ? 0 : j&0x1; + auto *instance = i.instances[iix]; if (instance->enabled()) { try {