MayaFlux 0.3.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 774 of file NodeGraphManager.cpp.

775{
776 std::vector<std::pair<std::shared_ptr<Node>, uint32_t>> nodes_to_remove;
777
778 for (const auto& [id, node] : m_Node_registry) {
779 if (!node->needs_channel_routing())
780 continue;
781
782 auto& state = node->get_routing_state();
783
784 if (state.phase == RoutingState::COMPLETED) {
785 for (uint32_t ch = 0; ch < 32; ch++) {
786 if ((state.from_channels & (1 << ch)) && !(state.to_channels & (1 << ch))) {
787 nodes_to_remove.emplace_back(node, ch);
788 }
789 }
790 state = RoutingState {};
791 }
792 }
793
794 for (auto& [node, channel] : nodes_to_remove) {
795 remove_from_root(node, token, channel);
796 }
797
798 std::vector<std::pair<std::shared_ptr<Network::NodeNetwork>, uint32_t>> networks_to_cleanup;
799
800 for (const auto& network : get_all_networks(token)) {
801 if (!network || !network->needs_channel_routing())
802 continue;
803
804 auto& state = network->get_routing_state();
805
806 if (state.phase == RoutingState::COMPLETED) {
807 network->set_channel_mask(state.to_channels);
808
809 for (uint32_t ch = 0; ch < 32; ch++) {
810 if ((state.from_channels & (1 << ch)) && !(state.to_channels & (1 << ch))) {
811 networks_to_cleanup.emplace_back(network, ch);
812 }
813 }
814 state = RoutingState {};
815 }
816 }
817
818 for (auto& [network, channel] : networks_to_cleanup) {
819 network->remove_channel_usage(channel);
820
821 if (network->get_channel_mask() == 0) {
822 auto& networks = m_audio_networks[token];
823 std::erase_if(networks, [&](const auto& n) { return n == network; });
825 }
826 }
827}
std::unordered_map< std::string, 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:82

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

+ Here is the call graph for this function: