diff --git a/app/node/block/clip/clip.cpp b/app/node/block/clip/clip.cpp index 2d3ac32cb..12d7f4a52 100644 --- a/app/node/block/clip/clip.cpp +++ b/app/node/block/clip/clip.cpp @@ -543,7 +543,7 @@ TimeRange ClipBlock::media_range() const MultiCamNode *ClipBlock::FindMulticam() { - auto v = FindInputNodesConnectedToInput(NodeInput(this, kBufferIn)); + auto v = FindInputNodesConnectedToInput(NodeInput(this, kBufferIn), 1); if (v.empty()) { return nullptr; } else { diff --git a/app/node/node.h b/app/node/node.h index 99e4239e2..fea4db863 100644 --- a/app/node/node.h +++ b/app/node/node.h @@ -859,7 +859,7 @@ public: * @brief Find nodes of a certain type that this Node takes inputs from */ template - static QVector FindInputNodesConnectedToInput(const NodeInput &input); + static QVector FindInputNodesConnectedToInput(const NodeInput &input, int maximum = 0); template /** @@ -1400,10 +1400,10 @@ private: * @brief Find nodes of a certain type that this Node takes inputs from */ template - static void FindInputNodesConnectedToInputInternal(const NodeInput &input, QVector& list); + static void FindInputNodesConnectedToInputInternal(const NodeInput &input, QVector& list, int maximum); template - static void FindInputNodeInternal(const Node* n, QVector& list); + static void FindInputNodeInternal(const Node* n, QVector& list, int maximum); template static void FindOutputNodeInternal(const Node* n, QVector& list); @@ -1512,7 +1512,7 @@ private slots: }; template -void Node::FindInputNodesConnectedToInputInternal(const NodeInput &input, QVector &list) +void Node::FindInputNodesConnectedToInputInternal(const NodeInput &input, QVector &list, int maximum) { Node* edge = input.GetConnectedOutput(); if (!edge) { @@ -1523,26 +1523,29 @@ void Node::FindInputNodesConnectedToInputInternal(const NodeInput &input, QVecto if (cast_test) { list.append(cast_test); + if (maximum != 0 && list.size() == maximum) { + return; + } } - FindInputNodeInternal(edge, list); + FindInputNodeInternal(edge, list, maximum); } template -QVector Node::FindInputNodesConnectedToInput(const NodeInput &input) +QVector Node::FindInputNodesConnectedToInput(const NodeInput &input, int maximum) { QVector list; - FindInputNodesConnectedToInputInternal(input, list); + FindInputNodesConnectedToInputInternal(input, list, maximum); return list; } template -void Node::FindInputNodeInternal(const Node* n, QVector &list) +void Node::FindInputNodeInternal(const Node* n, QVector &list, int maximum) { for (auto it=n->input_connections_.cbegin(); it!=n->input_connections_.cend(); it++) { - FindInputNodesConnectedToInputInternal(it->first, list); + FindInputNodesConnectedToInputInternal(it->first, list, maximum); } }