20 for (uint32_t i = old_count; i < new_count; ++i) {
37 buffer->resize(new_buffer_size);
62 : m_default_audio_token(default_audio_token)
63 , m_default_graphics_token(default_graphics_token)
77 return inserted_it->second;
86 error<std::out_of_range>(
89 std::source_location::current(),
90 "Audio unit not found for token {}",
91 static_cast<int>(
token));
100 throw std::out_of_range(
"Audio unit not found for token");
108 if (channel >= unit.channel_count) {
121 std::vector<ProcessingToken> tokens;
123 if (!unit.root_buffers.empty()) {
124 tokens.push_back(
token);
141 inserted_it->second.initialize(
token);
144 "Created new graphics unit for token {}",
static_cast<int>(
token));
146 return inserted_it->second;
155 throw std::out_of_range(
"Graphics unit not found for token");
164 throw std::out_of_range(
"Graphics unit not found for token");
176 std::vector<ProcessingToken> tokens;
178 if (unit.get_buffer() && !unit.get_buffer()->get_child_buffers().empty()) {
179 tokens.push_back(
token);
191 uint32_t channel_count)
194 if (channel_count > unit.channel_count) {
196 unit.resize_channels(channel_count, unit.buffer_size,
token);
204 unit.resize_buffers(buffer_size);
210 return (it !=
m_audio_units.end()) ? it->second.channel_count : 0;
216 return (it !=
m_audio_units.end()) ? it->second.buffer_size : 512;
#define MF_INFO(comp, ctx,...)
static MayaFlux::Nodes::ProcessingToken token
Advanced pipeline manager for multi-stage buffer transformations with backend optimization.
Root container for GPU buffer lifecycle management and batch processing.
std::vector< ProcessingToken > get_active_audio_tokens() const
Gets all active audio processing tokens.
void resize_audio_buffers(ProcessingToken token, uint32_t buffer_size)
Resizes all buffers in an audio unit to the specified size.
uint32_t get_audio_channel_count(ProcessingToken token) const
Gets the number of channels in an audio unit.
void ensure_audio_channels(ProcessingToken token, uint32_t channel_count)
Ensures an audio unit exists and resizes it to the specified channel count.
RootGraphicsUnit & get_graphics_unit_mutable(ProcessingToken token)
Gets an existing graphics unit without creating if missing (mutable)
const RootAudioUnit & get_audio_unit(ProcessingToken token) const
Gets an existing audio unit without creating if missing.
bool has_audio_unit(ProcessingToken token) const
Checks if an audio unit exists for the given token.
RootAudioUnit & get_audio_unit_mutable(ProcessingToken token)
Gets an existing audio unit without creating if missing (mutable)
std::mutex m_manager_mutex
Mutex for thread-safe access to all unit maps.
RootGraphicsUnit & get_or_create_graphics_unit(ProcessingToken token)
Gets or creates a root graphics unit for the specified token.
std::unordered_map< ProcessingToken, RootGraphicsUnit > m_graphics_units
Token-based map of root graphics buffer units.
std::vector< ProcessingToken > get_active_graphics_tokens() const
Gets all active graphics processing tokens.
TokenUnitManager(ProcessingToken default_token, uint32_t default_out_channels, uint32_t default_buffer_size)
Creates a new unit manager with initial audio unit configuration.
std::unordered_map< ProcessingToken, RootAudioUnit > m_audio_units
Token-based map of root audio buffer units Maps: ProcessingToken -> channel -> {root_buffers,...
RootAudioUnit & ensure_and_get_audio_unit(ProcessingToken token, uint32_t channel)
Ensures a root audio unit exists for a specific token and channel.
const RootGraphicsUnit & get_graphics_unit(ProcessingToken token) const
Gets an existing graphics unit without creating if missing.
RootAudioUnit & get_or_create_audio_unit(ProcessingToken token)
Gets or creates a root audio unit for the specified token.
uint32_t get_audio_buffer_size(ProcessingToken token) const
Gets the buffer size for an audio unit.
bool has_graphics_unit(ProcessingToken token) const
Checks if a graphics unit exists for the given token.
ProcessingToken
Bitfield enum defining processing characteristics and backend requirements for buffer operations.
@ GRAPHICS_BACKEND
Standard graphics processing backend configuration.
@ STRICT
Strictly enforces token assignment with no cross-token sharing.
@ FILTERED
Filters processors through token enumeration, allowing compatible combinations.
@ BufferManagement
Buffer Management (Buffers::BufferManager, creating buffers)
@ Core
Core engine, backend, subsystems.
std::vector< std::shared_ptr< BufferProcessingChain > > processing_chains
std::vector< std::shared_ptr< RootAudioBuffer > > root_buffers
void resize_buffers(uint32_t new_buffer_size)
void resize_channels(uint32_t new_count, uint32_t new_buffer_size, ProcessingToken token)
Represents a root audio unit containing buffers and processing chains for multiple channels.
std::shared_ptr< RootGraphicsBuffer > root_buffer
void initialize(ProcessingToken token)
std::shared_ptr< BufferProcessingChain > processing_chain
Represents a root graphics unit containing a buffer and processing chain.