MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ cleanup_completed_routing()

void MayaFlux::Nodes::NodeGraphManager::cleanup_completed_routing ( ProcessingToken  token)

Cleans up completed routing transitions for a given token.

Parameters
tokenProcessing domain to clean up routing for

This method should be called after routing states have been updated to remove any nodes or networks that have completed their fade-out transitions and are no longer contributing to the output of their previous channels.

Definition at line 746 of file NodeGraphManager.cpp.

747{
748 std::vector<std::pair<std::shared_ptr<Node>, uint32_t>> nodes_to_remove;
749
750 for (const auto& node : m_node_registry) {
751 if (!node->needs_channel_routing())
752 continue;
753
754 auto& state = node->get_routing_state();
755
756 if (state.phase == RoutingState::COMPLETED) {
757 for (uint32_t ch = 0; ch < 32; ch++) {
758 if ((state.from_channels & (1 << ch)) && !(state.to_channels & (1 << ch))) {
759 nodes_to_remove.emplace_back(node, ch);
760 }
761 }
762 state = RoutingState {};
763 }
764 }
765
766 for (auto& [node, channel] : nodes_to_remove) {
767 remove_from_root(node, token, channel);
768 }
769
770 std::vector<std::pair<std::shared_ptr<Network::NodeNetwork>, uint32_t>> networks_to_cleanup;
771
772 for (const auto& network : get_all_networks(token)) {
773 if (!network || !network->needs_channel_routing())
774 continue;
775
776 auto& state = network->get_routing_state();
777
778 if (state.phase == RoutingState::COMPLETED) {
779 network->set_channel_mask(state.to_channels);
780
781 for (uint32_t ch = 0; ch < 32; ch++) {
782 if ((state.from_channels & (1 << ch)) && !(state.to_channels & (1 << ch))) {
783 networks_to_cleanup.emplace_back(network, ch);
784 }
785 }
786 state = RoutingState {};
787 }
788 }
789
790 for (auto& [network, channel] : networks_to_cleanup) {
791 network->remove_channel_usage(channel);
792
793 if (network->get_channel_mask() == 0) {
794 auto& networks = m_audio_networks[token];
795 std::erase_if(networks, [&](const auto& n) { return n == network; });
797 }
798 }
799}
Core::GlobalNetworkConfig network
Definition Config.cpp:43
std::unordered_set< std::shared_ptr< Node > > m_node_registry
Registry of all nodes by their string identifiers.
std::vector< std::shared_ptr< Network::NodeNetwork > > get_all_networks(ProcessingToken token) const
Get all networks for a specific token across all channels.
void remove_from_root(const std::shared_ptr< Node > &node, ProcessingToken token, unsigned int channel=0)
Remove node from a specific processing token and channel.
std::unordered_map< ProcessingToken, std::vector< std::shared_ptr< Network::NodeNetwork > > > m_audio_networks
Audio-sink networks Only populated for networks with OutputMode::AUDIO_SINK.
void unregister_network_global(const std::shared_ptr< Network::NodeNetwork > &network)
Unregister network globally.
@ COMPLETED
Routing transition has completed.
Definition NodeSpec.hpp:87

References MayaFlux::Nodes::RoutingState::COMPLETED, get_all_networks(), m_audio_networks, m_node_registry, network, remove_from_root(), and unregister_network_global().

+ Here is the call graph for this function: