From 4ec72b5c76341c4f2dc0ef1759c248e6769796f3 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 4 Aug 2017 03:39:27 +0200 Subject: DummyBackend: allow changing SPP --- libs/backends/dummy/dummy_audiobackend.cc | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/libs/backends/dummy/dummy_audiobackend.cc b/libs/backends/dummy/dummy_audiobackend.cc index 9e0583e97d..9d33d96636 100644 --- a/libs/backends/dummy/dummy_audiobackend.cc +++ b/libs/backends/dummy/dummy_audiobackend.cc @@ -184,7 +184,7 @@ DummyAudioBackend::available_output_channel_count (const std::string&) const bool DummyAudioBackend::can_change_sample_rate_when_running () const { - return true; + return false; } bool @@ -457,8 +457,6 @@ DummyAudioBackend::_start (bool /*for_latency_measurement*/) engine.sample_rate_change (_samplerate); engine.buffer_size_change (_samples_per_period); - _dsp_load_calc.set_max_time (_samplerate, _samples_per_period); - if (engine.reestablish_ports ()) { PBD::error << _("DummyAudioBackend: Could not re-establish ports.") << endmsg; stop (); @@ -1307,6 +1305,7 @@ DummyAudioBackend::main_process_thread () int64_t clock1; clock1 = -1; while (_running) { + const size_t samples_per_period = _samples_per_period; if (_freewheeling != _freewheel) { _freewheel = _freewheeling; @@ -1321,17 +1320,17 @@ DummyAudioBackend::main_process_thread () (*it)->next_period(); } - if (engine.process_callback (_samples_per_period)) { + if (engine.process_callback (samples_per_period)) { return 0; } - _processed_samples += _samples_per_period; + _processed_samples += samples_per_period; if (_device == _("Loopback") && _midi_mode != MidiToAudio) { int opn = 0; int opc = _system_outputs.size(); for (std::vector::const_iterator it = _system_inputs.begin (); it != _system_inputs.end (); ++it, ++opn) { DummyAudioPort* op = _system_outputs[(opn % opc)]; - (*it)->fill_wavetable ((const float*)op->get_buffer (_samples_per_period), _samples_per_period); + (*it)->fill_wavetable ((const float*)op->get_buffer (samples_per_period), samples_per_period); } } @@ -1350,11 +1349,12 @@ DummyAudioBackend::main_process_thread () for (std::vector::const_iterator it = _system_inputs.begin (); it != _system_inputs.end (); ++it, ++opn) { DummyMidiPort* op = _system_midi_out[(opn % opc)]; op->get_buffer(0); // mix-down - (*it)->midi_to_wavetable (op->const_buffer(), _samples_per_period); + (*it)->midi_to_wavetable (op->const_buffer(), samples_per_period); } } if (!_freewheel) { + _dsp_load_calc.set_max_time (_samplerate, samples_per_period); _dsp_load_calc.set_start_timestamp_us (clock1); _dsp_load_calc.set_stop_timestamp_us (_x_get_monotonic_usec()); _dsp_load = _dsp_load_calc.get_dsp_load_unbound (); @@ -1987,7 +1987,8 @@ void DummyAudioPort::generate (const pframes_t n_samples) } break; case Loopback: - _gen_period = n_samples; // XXX DummyBackend::_samples_per_period; + memcpy((void*)_buffer, (void*)_wavetable, n_samples * sizeof(Sample)); + break; case SineWave: case SineWaveOctaves: case SineSweep: -- cgit v1.2.3