MayaFlux 0.4.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 624 of file SoundFileReader.cpp.

626{
627 if (!container) {
628 set_error("Invalid container");
629 return false;
630 }
631
632 auto sc = std::dynamic_pointer_cast<Kakshya::SoundFileContainer>(container);
633 if (!sc) {
634 set_error("Container is not a SoundFileContainer");
635 return false;
636 }
637
638 std::shared_ptr<AudioStreamContext> audio;
639 {
640 std::shared_lock lock(m_context_mutex);
641 if (!m_demux || !m_audio) {
642 set_error("File not open");
643 return false;
644 }
645 audio = m_audio;
646 }
647
648 sc->set_source_path(m_filepath);
649 if (m_demux && m_demux->format_context)
650 sc->set_source_format(m_demux->format_context->iformat->name);
651
652 sc->setup(audio->total_frames, audio->sample_rate, audio->channels);
653
655 sc->get_structure().organization = planar
658
659 auto data = read_all();
660 if (data.empty()) {
661 set_error("Failed to read audio data");
662 return false;
663 }
664
665 sc->set_raw_data(data);
666
667 auto regions = get_regions();
668 auto region_groups = regions_to_groups(regions);
669 for (const auto& [name, group] : region_groups)
670 sc->add_region_group(group);
671
672 sc->create_default_processor();
673 sc->mark_ready_for_processing(true);
674 return true;
675}
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::string m_filepath
Path to the currently open file.
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, m_filepath, 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: