MCPcopy Create free account
hub / github.com/0xShug0/audio.cpp / deinterleave_to_planar_channels

Function deinterleave_to_planar_channels

src/framework/audio/conversion.cpp:59–80  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

57}
58
59std::vector<float> deinterleave_to_planar_channels(
60 const std::vector<float> & interleaved_samples,
61 int channel_count) {
62 if (channel_count <= 0) {
63 throw std::runtime_error("audio channel count must be positive");
64 }
65 if (interleaved_samples.size() % static_cast<size_t>(channel_count) != 0) {
66 throw std::runtime_error("interleaved audio sample count must be divisible by channel count");
67 }
68 const int64_t frames = static_cast<int64_t>(interleaved_samples.size() / static_cast<size_t>(channel_count));
69 std::vector<float> planar(static_cast<size_t>(frames * channel_count), 0.0F);
70#ifdef _OPENMP
71#pragma omp parallel for collapse(2) if(frames * channel_count >= 1 << 14)
72#endif
73 for (int64_t frame = 0; frame < frames; ++frame) {
74 for (int channel = 0; channel < channel_count; ++channel) {
75 planar[static_cast<size_t>(channel * frames + frame)] =
76 interleaved_samples[static_cast<size_t>(frame * channel_count + channel)];
77 }
78 }
79 return planar;
80}
81
82std::vector<float> interleave_planar_channels(
83 const std::vector<float> & planar_samples,

Callers 1

runMethod · 0.85

Calls 1

sizeMethod · 0.45

Tested by

no test coverage detected