Skip to content
Snippets Groups Projects
Commit 8ba77637 authored by Nicolas Pope's avatar Nicolas Pope
Browse files

Merge branch 'feature/operatorparams' into 'master'

Allow constructor parameters to operators

See merge request nicolas.pope/ftl!217
parents c2113d36 42cbf4ba
No related branches found
No related tags found
1 merge request!217Allow constructor parameters to operators
Pipeline #18395 passed
......@@ -72,6 +72,20 @@ struct ConstructionHelper : public ConstructionHelperBase {
}
};
template <typename T, typename... ARGS>
struct ConstructionHelper2 : public ConstructionHelperBase {
explicit ConstructionHelper2(ftl::Configurable *cfg, ARGS... args) : ConstructionHelperBase(cfg) {
arguments_ = std::make_tuple(args...);
}
~ConstructionHelper2() {}
ftl::operators::Operator *make() override {
return new T(config, arguments_);
}
private:
std::tuple<ARGS...> arguments_;
};
struct OperatorNode {
ConstructionHelperBase *maker;
std::vector<ftl::operators::Operator*> instances;
......@@ -92,6 +106,9 @@ class Graph : public ftl::Configurable {
template <typename T>
ftl::Configurable *append(const std::string &name);
template <typename T, typename... ARGS>
ftl::Configurable *append(const std::string &name, ARGS...);
bool apply(ftl::rgbd::Frame &in, ftl::rgbd::Frame &out, cudaStream_t stream=0);
bool apply(ftl::rgbd::FrameSet &in, ftl::rgbd::FrameSet &out, cudaStream_t stream=0);
bool apply(ftl::rgbd::FrameSet &in, ftl::rgbd::Frame &out, cudaStream_t stream=0);
......@@ -115,4 +132,12 @@ ftl::Configurable *ftl::operators::Graph::append(const std::string &name) {
return _append(new ftl::operators::detail::ConstructionHelper<T>(configs_[name]));
}
template <typename T, typename... ARGS>
ftl::Configurable *ftl::operators::Graph::append(const std::string &name, ARGS... args) {
if (configs_.find(name) == configs_.end()) {
configs_[name] = ftl::create<ftl::Configurable>(this, name);
}
return _append(new ftl::operators::detail::ConstructionHelper2<T, ARGS...>(configs_[name], args...));
}
#endif // _FTL_OPERATORS_OPERATOR_HPP_
......@@ -13,6 +13,7 @@ namespace operators {
class NVOpticalFlow : public ftl::operators::Operator {
public:
explicit NVOpticalFlow(ftl::Configurable*);
NVOpticalFlow(ftl::Configurable*, const std::tuple<ftl::codecs::Channel,ftl::codecs::Channel> &channels);
~NVOpticalFlow();
inline Operator::Type type() const override { return Operator::Type::OneToOne; }
......@@ -26,8 +27,8 @@ class NVOpticalFlow : public ftl::operators::Operator {
cv::Size size_;
// TODO: Colour to Flow always assumed, could also calculate something else?
const ftl::codecs::Channel channel_in_ = ftl::codecs::Channel::Colour;
const ftl::codecs::Channel channel_out_ = ftl::codecs::Channel::Flow;
ftl::codecs::Channel channel_in_;
ftl::codecs::Channel channel_out_;
cv::Ptr<cv::cuda::NvidiaOpticalFlow_1_0> nvof_;
cv::cuda::GpuMat left_gray_;
......
......@@ -10,10 +10,15 @@ using cv::Size;
using cv::cuda::GpuMat;
NVOpticalFlow::NVOpticalFlow(ftl::Configurable* cfg) :
ftl::operators::Operator(cfg) {
ftl::operators::Operator(cfg), channel_in_(ftl::codecs::Channel::Colour), channel_out_(ftl::codecs::Channel::Flow) {
size_ = Size(0, 0);
}
NVOpticalFlow::NVOpticalFlow(ftl::Configurable*cfg, const std::tuple<ftl::codecs::Channel,ftl::codecs::Channel> &channels) : ftl::operators::Operator(cfg) {
channel_in_ = std::get<0>(channels);
channel_out_ = std::get<1>(channels);
}
NVOpticalFlow::~NVOpticalFlow() {
}
......
......@@ -76,7 +76,7 @@ void StereoVideoSource::init(const string &file) {
pipeline_input_ = ftl::config::create<ftl::operators::Graph>(host_, "input");
#ifdef HAVE_OPTFLOW
pipeline_input_->append<ftl::operators::NVOpticalFlow>("optflow");
pipeline_input_->append<ftl::operators::NVOpticalFlow>("optflow", Channel::Colour, Channel::Flow);
#endif
calib_ = ftl::create<Calibrate>(host_, "calibration", cv::Size(lsrc_->fullWidth(), lsrc_->fullHeight()), stream_);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment