MayaFlux 0.1.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
MayaFlux::Buffers::BufferManager Class Reference

Token-based multimodal buffer management system for unified data stream processing. More...

#include <BufferManager.hpp>

+ Collaboration diagram for MayaFlux::Buffers::BufferManager:

Public Member Functions

 BufferManager (uint32_t default_out_channels=2, uint32_t default_in_channels=0, uint32_t default_buffer_size=512, ProcessingToken default_audio_token=ProcessingToken::AUDIO_BACKEND, ProcessingToken default_graphics_token=ProcessingToken::GRAPHICS_BACKEND)
 Creates a new multimodal buffer manager.
 
 ~BufferManager ()
 
void process_token (ProcessingToken token, uint32_t processing_units)
 Processes all buffers for a specific token.
 
void process_all_tokens ()
 Processes all active tokens with their configured processing units.
 
void process_channel (ProcessingToken token, uint32_t channel, uint32_t processing_units, const std::vector< double > &node_output_data={})
 Processes a specific channel within a token domain.
 
std::vector< ProcessingTokenget_active_tokens () const
 Gets all currently active processing tokens.
 
void register_audio_token_processor (ProcessingToken token, RootAudioProcessingFunction processor)
 Registers a custom processor for an audio token domain.
 
ProcessingToken get_default_audio_token () const
 Gets the default processing token used by the manager.
 
std::shared_ptr< RootAudioBufferget_root_audio_buffer (ProcessingToken token, uint32_t channel=0)
 Gets a root buffer for a specific token and channel (audio-specific due to channels)
 
std::shared_ptr< RootGraphicsBufferget_root_graphics_buffer (ProcessingToken token)
 Gets a root graphics buffer for a specific token.
 
std::vector< double > & get_buffer_data (ProcessingToken token, uint32_t channel)
 Gets data from a specific token and channel (audio-specific)
 
const std::vector< double > & get_buffer_data (ProcessingToken token, uint32_t channel) const
 
uint32_t get_num_channels (ProcessingToken token) const
 Gets the number of channels for a token (audio-specific)
 
uint32_t get_buffer_size (ProcessingToken token) const
 Gets the buffer size for a token.
 
void resize_buffers (ProcessingToken token, uint32_t buffer_size)
 Resizes buffers for a token.
 
void ensure_channels (ProcessingToken token, uint32_t channel_count)
 Ensures minimum number of channels exist for an audio token.
 
void validate_num_channels (ProcessingToken token, uint32_t num_channels, uint32_t buffer_size)
 Validates the number of channels and resizes buffers if necessary (audio-specific)
 
std::shared_ptr< BufferProcessingChainget_processing_chain (ProcessingToken token, uint32_t channel)
 Gets the processing chain for a token and channel (audio-specific)
 
std::shared_ptr< BufferProcessingChainget_global_processing_chain ()
 Gets the global processing chain (applied to all tokens)
 
void add_buffer (const std::shared_ptr< Buffer > &buffer, ProcessingToken token, uint32_t channel=0)
 Adds a buffer to a token and channel.
 
void remove_buffer (const std::shared_ptr< Buffer > &buffer, ProcessingToken token, uint32_t channel=0)
 Removes a buffer from a token.
 
const std::vector< std::shared_ptr< AudioBuffer > > & get_buffers (ProcessingToken token, uint32_t channel) const
 Gets buffers for a token (audio-specific due to channels)
 
const std::vector< std::shared_ptr< VKBuffer > > & get_graphics_buffers (ProcessingToken token) const
 Gets graphics buffers for a token.
 
std::vector< std::shared_ptr< VKBuffer > > get_buffers_by_usage (VKBuffer::Usage usage, ProcessingToken token) const
 Gets graphics buffers filtered by usage.
 
template<typename BufferType , typename... Args>
std::shared_ptr< BufferType > create_audio_buffer (ProcessingToken token, uint32_t channel, Args &&... args)
 Creates a specialized audio buffer and adds it to the specified token/channel.
 
template<typename BufferType , typename... Args>
std::shared_ptr< BufferType > create_graphics_buffer (ProcessingToken token, Args &&... args)
 Creates a specialized vulkan buffer and adds it to the specified token/channel.
 
void add_processor (const std::shared_ptr< BufferProcessor > &processor, const std::shared_ptr< Buffer > &buffer, ProcessingToken token=ProcessingToken::AUDIO_BACKEND)
 Adds a processor to a buffer.
 
void add_processor (const std::shared_ptr< BufferProcessor > &processor, ProcessingToken token, uint32_t channel)
 Adds a processor to a token and channel (audio-specific)
 
void add_processor (const std::shared_ptr< BufferProcessor > &processor, ProcessingToken token)
 Adds a processor to all channels in a token (audio-specific)
 
void remove_processor (const std::shared_ptr< BufferProcessor > &processor, const std::shared_ptr< Buffer > &buffer)
 Removes a processor from a buffer.
 
void remove_processor_from_channel (const std::shared_ptr< BufferProcessor > &processor, ProcessingToken token, uint32_t channel)
 Removes a processor from a token and channel (audio-specific)
 
void remove_processor_from_token (const std::shared_ptr< BufferProcessor > &processor, ProcessingToken token)
 Removes a processor from all channels in a token (audio-specific)
 
void set_final_processor (const std::shared_ptr< BufferProcessor > &processor, ProcessingToken token)
 Sets a final processor for a token (audio-specific)
 
std::shared_ptr< BufferProcessorattach_quick_process (BufferProcessingFunction processor, const std::shared_ptr< Buffer > &buffer, ProcessingToken token=ProcessingToken::AUDIO_BACKEND)
 
std::shared_ptr< BufferProcessorattach_quick_process (BufferProcessingFunction processor, ProcessingToken token, uint32_t channel)
 
std::shared_ptr< BufferProcessorattach_quick_process (BufferProcessingFunction processor, ProcessingToken token)
 
void connect_node_to_channel (const std::shared_ptr< Nodes::Node > &node, ProcessingToken token, uint32_t channel, float mix=0.5F, bool clear_before=false)
 
void connect_node_to_buffer (const std::shared_ptr< Nodes::Node > &node, const std::shared_ptr< AudioBuffer > &buffer, float mix=0.5F, bool clear_before=true)
 
void fill_from_interleaved (const double *interleaved_data, uint32_t num_frames, ProcessingToken token, uint32_t num_channels)
 
void fill_interleaved (double *interleaved_data, uint32_t num_frames, ProcessingToken token, uint32_t num_channels) const
 
std::vector< std::shared_ptr< AudioBuffer > > clone_buffer_for_channels (const std::shared_ptr< AudioBuffer > &buffer, const std::vector< uint32_t > &channels, ProcessingToken token)
 
void process_input (double *input_data, uint32_t num_channels, uint32_t num_frames)
 
void register_input_listener (const std::shared_ptr< AudioBuffer > &buffer, uint32_t channel)
 
void unregister_input_listener (const std::shared_ptr< AudioBuffer > &buffer, uint32_t channel)
 
bool supply_buffer_to (const std::shared_ptr< AudioBuffer > &buffer, ProcessingToken token, uint32_t channel, double mix=1.0)
 
bool remove_supplied_buffer (const std::shared_ptr< AudioBuffer > &buffer, ProcessingToken token, uint32_t channel)
 
void initialize_buffer_service ()
 
void terminate_active_buffers ()
 Terminates all active buffers, clearing their data.
 

Private Member Functions

void process_audio_token_default (ProcessingToken token, uint32_t processing_units)
 
void process_graphics_token_default (ProcessingToken token, uint32_t processing_units)
 

Private Attributes

std::unique_ptr< TokenUnitManagerm_unit_manager
 Token/unit storage and lifecycle.
 
std::unique_ptr< BufferAccessControlm_access_control
 Buffer and unit access operations.
 
std::unique_ptr< BufferProcessingControlm_processor_control
 Processor attachment/removal operations.
 
std::unique_ptr< BufferInputControlm_input_control
 Audio input management.
 
std::unique_ptr< BufferSupplyMixingm_supply_mixing
 Buffer supply and mixing operations.
 
std::shared_ptr< BufferProcessingChainm_global_processing_chain
 Global processing chain applied to all tokens.
 

Detailed Description

Token-based multimodal buffer management system for unified data stream processing.

BufferManager serves as the central orchestrator for buffer processing in the MayaFlux engine, implementing a token-based architecture that enables seamless integration of different processing domains while maintaining proven audio processing patterns.

Architecture:

  • Token-Based Routing: Operations use tokens to route to appropriate units
  • Unified Interface: Most operations work generically across domains, no audio_/graphics_ prefixes needed
  • Delegating Facade: Thin delegation layer over functional helper classes
  • Functional Helpers: Encapsulate specific concerns (TokenUnitManager, BufferAccessControl, etc.)

This design scales to new domains without API explosion—just add token support.

Definition at line 36 of file BufferManager.hpp.


The documentation for this class was generated from the following files: