diff --git a/depthai-core b/depthai-core index 5fff3904a..b4f28511e 160000 --- a/depthai-core +++ b/depthai-core @@ -1 +1 @@ -Subproject commit 5fff3904a6e85df50e99cda993fd72a0a88582a7 +Subproject commit b4f28511ef6f56ca0f7233d20311bc2b960e8f26 diff --git a/src/DataQueueBindings.cpp b/src/DataQueueBindings.cpp index d0761ee6a..528cd494e 100644 --- a/src/DataQueueBindings.cpp +++ b/src/DataQueueBindings.cpp @@ -31,6 +31,8 @@ void DataQueueBindings::bind(pybind11::module& m){ }; py::class_>(m, "DataOutputQueue", DOC(dai, DataOutputQueue)) .def("getName", &DataOutputQueue::getName, DOC(dai, DataOutputQueue, getName)) + .def("isClosed", &DataOutputQueue::isClosed, DOC(dai, DataOutputQueue, isClosed)) + .def("close", &DataOutputQueue::close, DOC(dai, DataOutputQueue, close)) .def("addCallback", addCallbackLambda, py::arg("callback"), DOC(dai, DataOutputQueue, addCallback)) .def("addCallback", addCallbackLambda, py::arg("callback"), DOC(dai, DataOutputQueue, addCallback, 2)) @@ -92,6 +94,8 @@ void DataQueueBindings::bind(pybind11::module& m){ // Bind DataInputQueue py::class_>(m, "DataInputQueue", DOC(dai, DataInputQueue)) + .def("isClosed", &DataInputQueue::isClosed, DOC(dai, DataInputQueue, isClosed)) + .def("close", &DataInputQueue::close, DOC(dai, DataInputQueue, close)) .def("getName", &DataInputQueue::getName, DOC(dai, DataInputQueue, getName)) .def("setBlocking", &DataInputQueue::setBlocking, py::arg("blocking"), DOC(dai, DataInputQueue, setBlocking)) .def("getBlocking", &DataInputQueue::getBlocking, DOC(dai, DataInputQueue, getBlocking)) diff --git a/src/pipeline/NodeBindings.cpp b/src/pipeline/NodeBindings.cpp index 226006c67..3f5213d9e 100644 --- a/src/pipeline/NodeBindings.cpp +++ b/src/pipeline/NodeBindings.cpp @@ -1,6 +1,7 @@ #include "NodeBindings.hpp" #include "depthai/pipeline/Node.hpp" +#include "depthai/pipeline/Pipeline.hpp" #include "depthai/pipeline/node/XLinkIn.hpp" #include "depthai/pipeline/node/XLinkOut.hpp" #include "depthai/pipeline/node/ColorCamera.hpp" @@ -29,23 +30,30 @@ void NodeBindings::bind(pybind11::module& m){ // Base 'Node' class binding py::class_> pyNode(m, "Node", DOC(dai, Node)); - pyNode - .def_readonly("id", &Node::id, DOC(dai, Node, id)) - .def("getName", &Node::getName, DOC(dai, Node, getName)) - .def("getOutputs", &Node::getOutputs, DOC(dai, Node, getOutputs)) - .def("getInputs", &Node::getInputs, DOC(dai, Node, getInputs)) - .def("getAssets", &Node::getAssets, DOC(dai, Node, getAssets)) - ; + // Node::Input bindings - py::class_(pyNode, "Input", DOC(dai, Node, Input)) + py::class_ pyInput(pyNode, "Input", DOC(dai, Node, Input)); + py::enum_(pyInput, "Type") + .value("SReceiver", Node::Input::Type::SReceiver) + .value("MReceiver", Node::Input::Type::MReceiver) + ; + pyInput + .def_property_readonly("name", [](const Node::Input& input){ return input.name; }) + .def_property_readonly("type", [](const Node::Input& input){ return input.type; }) .def("setBlocking", &Node::Input::setBlocking, py::arg("blocking"), DOC(dai, Node, Input, setBlocking)) .def("getBlocking", &Node::Input::getBlocking, DOC(dai, Node, Input, getBlocking)) .def("setQueueSize", &Node::Input::setQueueSize, py::arg("size"), DOC(dai, Node, Input, setQueueSize)) .def("getQueueSize", &Node::Input::getQueueSize, DOC(dai, Node, Input, getQueueSize)) ; + // Node::Output bindings - py::class_(pyNode, "Output", DOC(dai, Node, Output)) + py::class_ pyOutput(pyNode, "Output", DOC(dai, Node, Output)); + py::enum_(pyOutput, "Type") + .value("MSender", Node::Output::Type::MSender) + .value("SSender", Node::Output::Type::SSender) + ; + pyOutput .def("canConnect", &Node::Output::canConnect, py::arg("in"), DOC(dai, Node, Output, canConnect)) .def("link", &Node::Output::link, py::arg("in"), DOC(dai, Node, Output, link)) .def("unlink", &Node::Output::unlink, py::arg("in"), DOC(dai, Node, Output, unlink)) @@ -61,6 +69,21 @@ void NodeBindings::bind(pybind11::module& m){ .def_property("inputId", [](Node::Connection& conn) { return conn.inputId; }, [](Node::Connection& conn, Node::Id id) {conn.inputId = id; }, DOC(dai, Node, Connection, inputId)) .def_property("inputName", [](Node::Connection& conn) { return conn.inputName; }, [](Node::Connection& conn, std::string name) {conn.inputName = name; }, DOC(dai, Node, Connection, inputName)) ; + + pyNode + .def_readonly("id", &Node::id, DOC(dai, Node, id)) + .def("getName", &Node::getName, DOC(dai, Node, getName)) + .def("getOutputs", &Node::getOutputs, DOC(dai, Node, getOutputs)) + .def("getInputs", &Node::getInputs, DOC(dai, Node, getInputs)) + .def("getAssets", &Node::getAssets, DOC(dai, Node, getAssets)) + .def("getOutputRefs", static_cast (Node::*)()>(&Node::getOutputRefs), DOC(dai, Node, getOutputRefs), py::return_value_policy::reference_internal) + .def("getInputRefs", static_cast (Node::*)()>(&Node::getInputRefs), DOC(dai, Node, getInputRefs), py::return_value_policy::reference_internal) + .def("getOutputRefs", static_cast (Node::*)() const>(&Node::getOutputRefs), DOC(dai, Node, getOutputRefs), py::return_value_policy::reference_internal) + .def("getInputRefs", static_cast (Node::*)() const>(&Node::getInputRefs), DOC(dai, Node, getInputRefs), py::return_value_policy::reference_internal) + .def("getParentPipeline", py::overload_cast<>(&Node::getParentPipeline), DOC(dai, Node, getParentPipeline)) + .def("getParentPipeline", py::overload_cast<>(&Node::getParentPipeline, py::const_), DOC(dai, Node, getParentPipeline)) + ; + // MSVC errors out with: // Error C2326 'void NodeBindings::bind(pybind11::module &)': function cannot access 'dai::Node::Connection::outputId' // ...