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

◆ reorganize_data_layout()

void MayaFlux::Kakshya::SoundStreamContainer::reorganize_data_layout ( MemoryLayout  new_layout)
protected

Definition at line 747 of file SoundStreamContainer.cpp.

748{
749 if (new_layout == m_structure.memory_layout) {
750 return;
751 }
752
754 m_structure.memory_layout = new_layout;
756 return;
757 }
758
760 m_structure.memory_layout = new_layout;
762 return;
763 }
764
765 auto current_span = convert_variant<double>(m_data[0]);
766 std::vector<double> current_data(current_span.begin(), current_span.end());
767
768 auto channels = deinterleave_channels<double>(
769 std::span<const double>(current_data.data(), current_data.size()),
771
772 std::vector<double> reorganized_data;
773 if (new_layout == MemoryLayout::ROW_MAJOR) {
774 reorganized_data = interleave_channels(channels);
775 } else {
776 reorganized_data.reserve(current_data.size());
777 for (const auto& channel : channels) {
778 reorganized_data.insert(reorganized_data.end(), channel.begin(), channel.end());
779 }
780 }
781
782 m_data[0] = DataVariant(std::move(reorganized_data));
783
785 m_double_extraction_dirty.store(true, std::memory_order_release);
786
787 m_structure.memory_layout = new_layout;
789}
void invalidate_span_cache()
Invalidate the span cache when data or layout changes.
std::variant< std::vector< double >, std::vector< float >, std::vector< uint8_t >, std::vector< uint16_t >, std::vector< uint32_t >, std::vector< std::complex< float > >, std::vector< std::complex< double > >, std::vector< glm::vec2 >, std::vector< glm::vec3 >, std::vector< glm::vec4 >, std::vector< glm::mat4 > > DataVariant
Multi-type data storage for different precision needs.
Definition NDData.hpp:73
@ ROW_MAJOR
C/C++ style (last dimension varies fastest)
@ PLANAR
Separate DataVariant per logical unit (LLL...RRR for stereo)
@ INTERLEAVED
Single DataVariant with interleaved data (LRLRLR for stereo)
std::vector< T > interleave_channels(const std::vector< std::vector< T > > &channels)
Interleave multiple channels of data into a single vector.

References MayaFlux::Kakshya::interleave_channels(), MayaFlux::Kakshya::INTERLEAVED, invalidate_span_cache(), m_data, m_double_extraction_dirty, m_num_channels, m_structure, MayaFlux::Kakshya::ContainerDataStructure::memory_layout, MayaFlux::Kakshya::ContainerDataStructure::organization, MayaFlux::Kakshya::PLANAR, MayaFlux::Kakshya::ROW_MAJOR, and setup_dimensions().

Referenced by set_memory_layout().

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