+ }
+
+ // TODO: Move lo-cut etc. into each bus.
+ vector<float> samples_out;
+ samples_out.resize(num_samples * 2);
+ samples_bus.resize(num_samples * 2);
+ for (unsigned input_index = 0; input_index < input_mapping.inputs.size(); ++input_index) {
+ const InputMapping::Input &input = input_mapping.inputs[input_index];
+ if (input.input_source_type == InputSourceType::SILENCE) {
+ memset(&samples_bus[0], 0, samples_bus.size() * sizeof(samples_bus[0]));
+ } else {
+ // TODO: Move this into its own function. Can be SSSE3-optimized if need be.
+ assert(input.input_source_type == InputSourceType::CAPTURE_CARD);
+ const float *lsrc, *rsrc;
+ unsigned lstride, rstride;
+ float *dptr = &samples_bus[0];
+ find_sample_src_from_capture_card(samples_card, input.input_source_index, input.source_channel[0], &lsrc, &lstride);
+ find_sample_src_from_capture_card(samples_card, input.input_source_index, input.source_channel[1], &rsrc, &rstride);
+ for (unsigned i = 0; i < num_samples; ++i) {
+ *dptr++ = *lsrc;
+ *dptr++ = *rsrc;
+ lsrc += lstride;
+ rsrc += rstride;
+ }
+ }