throw exception::InvalidOperation("Not supported.");
}
std::vector<std::shared_ptr<BaseDataType> > &getInputs() override;
- void setInferenceService(std::unique_ptr<inference::IInferenceServiceInterface> &&service) override
- {
- throw exception::InvalidOperation("Not supported.");
- }
- inference::IInferenceServiceInterface *getInferenceService() override
- {
- throw exception::InvalidOperation("Not supported.");
- }
- void setCb(const NodeCb &cb, void *user_data) override;
- NodeCb getCb() override;
- void setUserData(void *user_data) override;
- void *getUserData() override;
void addDependency(std::shared_ptr<INode> node) override;
std::vector<std::shared_ptr<INode> > &getDependencies() override;
-
void setOutput(std::shared_ptr<BaseDataType> output) override;
std::shared_ptr<BaseDataType> &getOutput() override;
void wait() override;
void wakeup() override;
+
+ void setCb(const NodeCb &cb, void *user_data);
+ NodeCb getCb();
+ void setUserData(void *user_data);
+ void *getUserData();
};
}
virtual std::string &getName() = 0;
virtual void addInput(std::shared_ptr<BaseDataType> input) = 0;
virtual std::vector<std::shared_ptr<BaseDataType> > &getInputs() = 0;
- virtual void setInferenceService(std::unique_ptr<inference::IInferenceServiceInterface> &&service) = 0;
- virtual inference::IInferenceServiceInterface *getInferenceService() = 0;
- virtual void setCb(const NodeCb &cb, void *user_data) = 0;
- virtual NodeCb getCb() = 0;
- virtual void setUserData(void *user_data) = 0;
- virtual void *getUserData() = 0;
virtual void addDependency(std::shared_ptr<INode> node) = 0;
virtual std::vector<std::shared_ptr<INode> > &getDependencies() = 0;
virtual void setOutput(std::shared_ptr<BaseDataType> output) = 0;
}
void addInput(std::shared_ptr<BaseDataType> input) override;
std::vector<std::shared_ptr<BaseDataType> > &getInputs() override;
- void setInferenceService(std::unique_ptr<inference::IInferenceServiceInterface> &&service) override;
- inference::IInferenceServiceInterface *getInferenceService() override;
- void setCb(const NodeCb &cb, void *user_data) override
- {
- throw exception::InvalidOperation("Not supported.");
- };
- NodeCb getCb() override
- {
- throw exception::InvalidOperation("Not supported.");
- };
- void setUserData(void *user_data) override
- {
- throw exception::InvalidOperation("Not supported.");
- };
- void *getUserData() override
- {
- throw exception::InvalidOperation("Not supported.");
- };
void addDependency(std::shared_ptr<INode> node) override;
std::vector<std::shared_ptr<INode> > &getDependencies() override;
void setOutput(std::shared_ptr<BaseDataType> output) override;
std::shared_ptr<BaseDataType> &getOutput() override;
void wait() override;
void wakeup() override;
+
+ void setInferenceService(std::unique_ptr<inference::IInferenceServiceInterface> &&service);
+ inference::IInferenceServiceInterface *getInferenceService();
};
}
#include "SingleoException.h"
#include "SingleoLog.h"
#include "TaskManager.h"
+#include "CallbackNode.h"
+#include "InferenceNode.h"
using namespace std;
using namespace singleo::exception;
for (auto &n : dependencies) {
// Add the result if dependency node is inference service not callback.
- if (n->getType() == NodeType::INFERENCE)
- results.push_back(&n->getInferenceService()->result());
+ if (n->getType() == NodeType::INFERENCE) {
+ auto inferenceNode = dynamic_pointer_cast<InferenceNode>(n);
+ results.push_back(&inferenceNode->getInferenceService()->result());
+ }
}
if (node->getType() == NodeType::INFERENCE) {
}
shared_ptr<ImageDataType> input;
+ auto inferenceNode = dynamic_pointer_cast<InferenceNode>(node);
// If no dependency then use input of current node as input source.
// Ps. In case of inference node, one of both - input from task manager
// inference_node_a -----
// |------ Callback_node ------- inference_node_c
// inference_node_b -----
- if (node->getDependencies().empty())
+ if (inferenceNode->getDependencies().empty())
// TODO. consider for multiple inputs later.
- input = dynamic_pointer_cast<ImageDataType>(node->getInputs()[0]);
+ input = dynamic_pointer_cast<ImageDataType>(inferenceNode->getInputs()[0]);
else // Else if dependency then use output of dependency node(callback node).
- input = dynamic_pointer_cast<ImageDataType>(node->getDependencies()[0]->getOutput());
+ input = dynamic_pointer_cast<ImageDataType>(inferenceNode->getDependencies()[0]->getOutput());
- node->getInferenceService()->invoke(*input);
+ inferenceNode->getInferenceService()->invoke(*input);
// Inference request has been completed so release input data if the data was internally allocated by callback node.
if (input->custom)
delete input->ptr;
// Service request to 'input' has been completed so clean up it.
- node->getInputs().clear();
+ inferenceNode->getInputs().clear();
} else if (node->getType() == NodeType::CB) {
- NodeCb cb = node->getCb();
- void *user_data = node->getUserData();
+ auto callbackNode = dynamic_pointer_cast<CallbackNode>(node);
+ NodeCb cb = callbackNode->getCb();
+ void *user_data = callbackNode->getUserData();
// Call the callback function registered in this callback node.
// In this callback, new data should be set by calling node->setOutput()
// Initialize inference service.
if (node->getType() == NodeType::INFERENCE) {
- node->getInferenceService()->configure();
- node->getInferenceService()->prepare();
+ auto inferenceNode = dynamic_pointer_cast<InferenceNode>(node);
+ inferenceNode->getInferenceService()->configure();
+ inferenceNode->getInferenceService()->prepare();
}
}
BaseResultType &TaskManager::output()
{
- auto service = _nodes[_nodes.size() - 1]->getInferenceService();
+ auto lastNode = _nodes[_nodes.size() - 1];
+
+ // TODO. consider for callback node support as last node.
+ if (lastNode->getType() != NodeType::INFERENCE) {
+ SINGLEO_LOGE("Last node is not an inference node.");
+ throw InvalidOperation("Last node is not an inference node.");
+ }
+
+ auto infereneNode = dynamic_pointer_cast<InferenceNode>(lastNode);
- return service->result();
+ return infereneNode->getInferenceService()->result();
}
void TaskManager::clear()