+// TODO: Can be SSSE3-optimized if need be.
+void AudioMixer::fill_audio_bus(const vector<float> *samples_card, const InputMapping::Bus &bus, unsigned num_samples, float *output)
+{
+ if (bus.input_source_type == InputSourceType::SILENCE) {
+ memset(output, 0, num_samples * sizeof(*output));
+ } else {
+ assert(bus.input_source_type == InputSourceType::CAPTURE_CARD);
+ const float *lsrc, *rsrc;
+ unsigned lstride, rstride;
+ float *dptr = output;
+ find_sample_src_from_capture_card(samples_card, bus.input_source_index, bus.source_channel[0], &lsrc, &lstride);
+ find_sample_src_from_capture_card(samples_card, bus.input_source_index, bus.source_channel[1], &rsrc, &rstride);
+ for (unsigned i = 0; i < num_samples; ++i) {
+ *dptr++ = *lsrc;
+ *dptr++ = *rsrc;
+ lsrc += lstride;
+ rsrc += rstride;
+ }
+ }
+}
+