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

◆ load_into_container()

bool MayaFlux::IO::SoundFileReader::load_into_container ( std::shared_ptr< Kakshya::SignalSourceContainer container)
overridevirtual

Load file data into an existing SignalSourceContainer.

Parameters
containerTarget container.
Returns
True if loading succeeded.

Implements MayaFlux::IO::FileReader.

Definition at line 542 of file SoundFileReader.cpp.

544{
545 if (!container) {
546 set_error("Invalid container");
547 return false;
548 }
549
550 auto sc = std::dynamic_pointer_cast<Kakshya::SoundFileContainer>(container);
551 if (!sc) {
552 set_error("Container is not a SoundFileContainer");
553 return false;
554 }
555
556 std::shared_ptr<AudioStreamContext> audio;
557 {
558 std::shared_lock lock(m_context_mutex);
559 if (!m_demux || !m_audio) {
560 set_error("File not open");
561 return false;
562 }
563 audio = m_audio;
564 }
565
566 sc->setup(audio->total_frames, audio->sample_rate, audio->channels);
567
569 sc->get_structure().organization = planar
572
573 auto data = read_all();
574 if (data.empty()) {
575 set_error("Failed to read audio data");
576 return false;
577 }
578
579 sc->set_raw_data(data);
580
581 auto regions = get_regions();
582 auto region_groups = regions_to_groups(regions);
583 for (const auto& [name, group] : region_groups)
584 sc->add_region_group(group);
585
586 sc->create_default_processor();
587 sc->mark_ready_for_processing(true);
588 return true;
589}
static std::unordered_map< std::string, Kakshya::RegionGroup > regions_to_groups(const std::vector< FileRegion > &regions)
Convert file regions to region groups.
std::vector< Kakshya::DataVariant > read_all() override
Read the entire audio file into memory.
std::shared_ptr< AudioStreamContext > m_audio
Codec + resampler state.
std::shared_mutex m_context_mutex
Guards both context pointers.
void set_error(const std::string &error) const
Set the last error message.
AudioReadOptions m_audio_options
Audio-specific read options.
std::shared_ptr< FFmpegDemuxContext > m_demux
Container / format state.
std::vector< FileRegion > get_regions() const override
Get all regions (markers, loops, etc.) from the file.
@ DEINTERLEAVE
Output planar (per-channel) doubles instead of interleaved.
void add_region_group(std::unordered_map< std::string, RegionGroup > &groups, const RegionGroup &group)
Add a RegionGroup to a group map.
@ PLANAR
Separate DataVariant per logical unit (LLL...RRR for stereo)
@ INTERLEAVED
Single DataVariant with interleaved data (LRLRLR for stereo)

References MayaFlux::IO::DEINTERLEAVE, get_regions(), MayaFlux::Kakshya::INTERLEAVED, m_audio, m_audio_options, m_context_mutex, m_demux, MayaFlux::IO::NONE, MayaFlux::Kakshya::PLANAR, read_all(), MayaFlux::IO::FileReader::regions_to_groups(), and set_error().

Referenced by MayaFlux::IO::VideoFileReader::load_into_container().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: