DummyBackend: allow changing SPP
authorRobin Gareus <robin@gareus.org>
Fri, 4 Aug 2017 01:39:27 +0000 (03:39 +0200)
committerRobin Gareus <robin@gareus.org>
Fri, 4 Aug 2017 01:53:51 +0000 (03:53 +0200)
libs/backends/dummy/dummy_audiobackend.cc

index 9e0583e97de246ace4c16f00ceff94c50d45b92f..9d33d96636eff5b9c3871e16c357881e9b1d7d1c 100644 (file)
@@ -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<DummyAudioPort*>::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<DummyAudioPort*>::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: