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

AudioBuffer implementation backed by a StreamContainer. More...

#include <ContainerBuffer.hpp>

+ Inheritance diagram for MayaFlux::Buffers::ContainerBuffer:
+ Collaboration diagram for MayaFlux::Buffers::ContainerBuffer:

Public Member Functions

 ContainerBuffer (uint32_t channel_id, uint32_t num_samples, std::shared_ptr< Kakshya::StreamContainer > container, uint32_t source_channel=0)
 Construct a ContainerBuffer for a specific channel and container.
 
void initialize ()
 Initialize the buffer after construction.
 
std::shared_ptr< Kakshya::StreamContainerget_container () const
 Get the backing StreamContainer.
 
uint32_t get_source_channel () const
 Get the source channel in the container.
 
void set_container (std::shared_ptr< Kakshya::StreamContainer > container)
 Update the container reference.
 
bool is_zero_copy () const
 Check if buffer data is directly mapped to container (zero-copy).
 
- Public Member Functions inherited from MayaFlux::Buffers::AudioBuffer
 AudioBuffer ()
 Creates a new uninitialized audio buffer.
 
 AudioBuffer (uint32_t channel_id, uint32_t num_samples=512)
 Creates a new audio buffer with specified channel and capacity.
 
virtual ~AudioBuffer () override=default
 Virtual destructor for proper resource management.
 
virtual void setup (uint32_t channel, uint32_t num_samples)
 Initializes the audio buffer with specified channel and capacity.
 
virtual void resize (uint32_t num_samples)
 Adjusts the audio buffer's sample capacity.
 
virtual void clear () override
 Resets all audio samples in the buffer to silence.
 
virtual uint32_t get_num_samples () const
 Gets the current capacity of the audio buffer.
 
virtual std::vector< double > & get_data ()
 Gets mutable access to the buffer's underlying audio data.
 
virtual const std::vector< double > & get_data () const
 Gets read-only access to the buffer's underlying audio data.
 
virtual void process_default () override
 Applies the default audio transformation to the buffer's data.
 
virtual uint32_t get_channel_id () const
 Gets the audio channel identifier for this buffer.
 
void set_channel_id (uint32_t id)
 Sets the audio channel identifier for this buffer.
 
virtual void set_num_samples (uint32_t num_samples)
 Sets the capacity of the audio buffer.
 
virtual void set_default_processor (std::shared_ptr< BufferProcessor > processor) override
 Sets the default audio transformation processor for this buffer.
 
virtual std::shared_ptr< BufferProcessorget_default_processor () const override
 Gets the current default audio transformation processor.
 
virtual std::shared_ptr< BufferProcessingChainget_processing_chain () override
 Gets the audio transformation chain attached to this buffer.
 
virtual void set_processing_chain (std::shared_ptr< BufferProcessingChain > chain, bool force=false) override
 Sets the audio transformation chain for this buffer.
 
virtual double & get_sample (uint32_t index)
 Gets a reference to a specific audio sample in the buffer.
 
virtual bool has_data_for_cycle () const override
 Checks if the audio buffer has data for the current processing cycle.
 
virtual bool needs_removal () const override
 Checks if the buffer should be removed from the processing chain This is relevant when using SignalSourceContainers.
 
virtual void mark_for_processing (bool has_data) override
 Marks the audio buffer for processing in the current cycle.
 
virtual void mark_for_removal () override
 Marks the audio buffer for removal from processing chains.
 
virtual void enforce_default_processing (bool should_process) override
 Controls whether the audio buffer should use default processing.
 
virtual bool needs_default_processing () override
 Checks if the audio buffer should undergo default processing.
 
bool try_acquire_processing () override
 Attempts to acquire processing rights for the buffer.
 
void release_processing () override
 Releases processing rights for the buffer.
 
bool is_processing () const override
 Checks if the buffer is currently being processed.
 
virtual std::shared_ptr< AudioBufferclone_to (uint32_t channel)
 Creates a clone of this audio buffer for a specific channel.
 
std::shared_ptr< Bufferclone_to (uint8_t dest_desc) override
 Creates a clone of this buffer for a specific channel or usage enum.
 
virtual bool read_once (std::shared_ptr< AudioBuffer > buffer, bool force=false)
 Reads audio data into the buffer from the audio backend.
 
void force_internal_usage (bool internal) override
 Marks the buffer as internal-only, preventing root aggregation.
 
bool is_internal_only () const override
 Checks if the buffer is marked as internal-only.
 
- Public Member Functions inherited from MayaFlux::Buffers::Buffer
virtual ~Buffer ()=default
 Virtual destructor for proper resource management.
 

Protected Member Functions

std::shared_ptr< BufferProcessorcreate_default_processor () override
 Create the default processor (ContainerToBufferAdapter) for this buffer.
 

Private Member Functions

void setup_zero_copy_if_possible ()
 Attempt to enable zero-copy operation if container layout allows.
 

Private Attributes

std::shared_ptr< Kakshya::StreamContainerm_container
 
uint32_t m_source_channel
 
std::shared_ptr< BufferProcessorm_pending_adapter
 
bool m_zero_copy_mode = false
 

Additional Inherited Members

- Protected Attributes inherited from MayaFlux::Buffers::AudioBuffer
uint32_t m_channel_id
 Audio channel identifier for this buffer.
 
uint32_t m_num_samples
 Capacity of the buffer in audio samples.
 
std::vector< double > m_data
 Vector storing the actual double-precision audio sample data.
 
std::shared_ptr< BufferProcessorm_default_processor
 Default audio transformation processor for this buffer.
 
std::shared_ptr< BufferProcessingChainm_processing_chain
 Audio transformation processing chain for this buffer.
 
bool m_has_data
 Whether the audio buffer has data to process this cycle.
 
bool m_should_remove
 Whether the audio buffer should be removed from processing chains.
 
bool m_process_default
 Whether the audio buffer should be processed using its default processor.
 

Detailed Description

AudioBuffer implementation backed by a StreamContainer.

ContainerBuffer provides a bridge between the digital-first container system and the traditional AudioBuffer interface. It enables zero-copy or efficient extraction of audio data from StreamContainers (such as SoundFileContainer) for use in block-based DSP, node networks, and hardware output.

Key responsibilities:

  • Maintains a reference to the backing StreamContainer and source channel.
  • Supports zero-copy operation when container memory layout matches buffer needs.
  • Falls back to cached extraction when zero-copy is not possible.
  • Integrates with ContainerToBufferAdapter for data extraction and state management.
  • Can be initialized and reconfigured at runtime for flexible routing.

While currently focused on audio, this pattern can be extended to other data types as more container reader processors are implemented.

See also
ContainerToBufferAdapter, StreamContainer, SoundFileContainer

Definition at line 146 of file ContainerBuffer.hpp.


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