mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-10 08:36:32 +01:00
Pass input and output audio buffers into PortaudioBackend blocking process function
This makes it possible to reuse the method for callback based processing
This commit is contained in:
parent
a6fb71022f
commit
77ce989dfa
3 changed files with 21 additions and 10 deletions
|
|
@ -39,6 +39,7 @@
|
|||
|
||||
#include "win_utils.h"
|
||||
#include "mmcss.h"
|
||||
#include "audio_utils.h"
|
||||
|
||||
#include "debug.h"
|
||||
|
||||
|
|
@ -1461,7 +1462,8 @@ PortAudioBackend::main_blocking_process_thread ()
|
|||
break;
|
||||
}
|
||||
|
||||
if (!blocking_process_main()) {
|
||||
if (!blocking_process_main(_pcmio->get_capture_buffer(),
|
||||
_pcmio->get_playback_buffer())) {
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
|
|
@ -1487,7 +1489,8 @@ PortAudioBackend::main_blocking_process_thread ()
|
|||
}
|
||||
|
||||
bool
|
||||
PortAudioBackend::blocking_process_main ()
|
||||
PortAudioBackend::blocking_process_main(const float* interleaved_input_data,
|
||||
float* interleaved_output_data)
|
||||
{
|
||||
uint32_t i = 0;
|
||||
uint64_t min_elapsed_us = 1000000;
|
||||
|
|
@ -1495,13 +1498,16 @@ PortAudioBackend::blocking_process_main ()
|
|||
|
||||
m_dsp_calc.set_start_timestamp_us (utils::get_microseconds());
|
||||
|
||||
/* get audio */
|
||||
i = 0;
|
||||
/* Copy input audio data into input port buffers */
|
||||
for (std::vector<PamPort*>::const_iterator it = _system_inputs.begin();
|
||||
it != _system_inputs.end();
|
||||
++it, ++i) {
|
||||
_pcmio->get_capture_channel(
|
||||
i, (float*)((*it)->get_buffer(_samples_per_period)), _samples_per_period);
|
||||
assert(_system_inputs.size() == _pcmio->n_capture_channels());
|
||||
uint32_t channels = _system_inputs.size();
|
||||
float* input_port_buffer = (float*)(*it)->get_buffer(_samples_per_period);
|
||||
deinterleave_audio_data(
|
||||
interleaved_input_data, input_port_buffer, _samples_per_period, i, channels);
|
||||
}
|
||||
|
||||
process_incoming_midi ();
|
||||
|
|
@ -1554,10 +1560,11 @@ PortAudioBackend::blocking_process_main ()
|
|||
for (std::vector<PamPort*>::const_iterator it = _system_outputs.begin();
|
||||
it != _system_outputs.end();
|
||||
++it, ++i) {
|
||||
_pcmio->set_playback_channel(
|
||||
i,
|
||||
(float const*)(*it)->get_buffer(_samples_per_period),
|
||||
_samples_per_period);
|
||||
assert(_system_outputs.size() == _pcmio->n_playback_channels());
|
||||
const uint32_t channels = _system_outputs.size();
|
||||
float* output_port_buffer = (float*)(*it)->get_buffer(_samples_per_period);
|
||||
interleave_audio_data(
|
||||
output_port_buffer, interleaved_output_data, _samples_per_period, i, channels);
|
||||
}
|
||||
|
||||
_processed_samples += _samples_per_period;
|
||||
|
|
|
|||
|
|
@ -324,7 +324,8 @@ class PortAudioBackend : public AudioBackend {
|
|||
bool start_blocking_process_thread ();
|
||||
bool stop_blocking_process_thread ();
|
||||
bool blocking_process_freewheel ();
|
||||
bool blocking_process_main ();
|
||||
bool blocking_process_main (const float* interleaved_input_data,
|
||||
float* interleaved_output_data);
|
||||
|
||||
void process_port_connection_changes ();
|
||||
void process_incoming_midi ();
|
||||
|
|
|
|||
|
|
@ -106,6 +106,9 @@ public:
|
|||
int get_capture_channel (uint32_t chn, float *input, uint32_t n_samples);
|
||||
int set_playback_channel (uint32_t chn, const float *input, uint32_t n_samples);
|
||||
|
||||
float* get_capture_buffer () { return _input_buffer; }
|
||||
float* get_playback_buffer () { return _output_buffer; }
|
||||
|
||||
private: // Methods
|
||||
|
||||
static bool pa_initialize();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue