From ecd6a63a0f89da09cbb0583b4d107bbd56b0e312 Mon Sep 17 00:00:00 2001 From: Johannes Lorenz Date: Mon, 7 Apr 2025 22:13:59 +0200 Subject: [PATCH] m_inputFrameBuffer: Use vector of SampleFrame Also, refactor buffer resizing into one function, and avoid useless static method. --- include/AudioJack.h | 4 ++-- src/core/audio/AudioJack.cpp | 28 ++++++++++++++++++---------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/include/AudioJack.h b/include/AudioJack.h index 2875084c5..55113d6a4 100644 --- a/include/AudioJack.h +++ b/include/AudioJack.h @@ -96,6 +96,7 @@ private slots: private: bool initJackClient(); + void resizeInputBuffer(jack_nframes_t nframes); void startProcessing() override; void stopProcessing() override; @@ -106,7 +107,6 @@ private: int processCallback(jack_nframes_t nframes); - static int setBufferSizeCallback(jack_nframes_t nframes, void* udata); static int staticProcessCallback(jack_nframes_t nframes, void* udata); static void shutdownCallback(void* _udata); @@ -119,7 +119,7 @@ private: std::vector m_outputPorts; std::vector m_inputPorts; jack_default_audio_sample_t** m_tempOutBufs; - std::vector m_inputFrameBuffer; + std::vector m_inputFrameBuffer; SampleFrame* m_outBuf; SampleFrame* m_inBuf; diff --git a/src/core/audio/AudioJack.cpp b/src/core/audio/AudioJack.cpp index ab8df9ee5..95ad9c0a5 100644 --- a/src/core/audio/AudioJack.cpp +++ b/src/core/audio/AudioJack.cpp @@ -158,9 +158,15 @@ bool AudioJack::initJackClient() clientName.toLatin1().constData(), jack_get_client_name(m_client)); } - m_inputFrameBuffer.resize(channels() * jack_get_buffer_size(m_client)); + resizeInputBuffer(jack_get_buffer_size(m_client)); - jack_set_buffer_size_callback(m_client, setBufferSizeCallback, this); + // set buffer-size callback + jack_set_buffer_size_callback(m_client, + [](jack_nframes_t nframes, void* udata) -> int { + static_cast(udata)->resizeInputBuffer(nframes); + return 0; + }, + this); // set process-callback jack_set_process_callback(m_client, staticProcessCallback, this); @@ -192,6 +198,14 @@ bool AudioJack::initJackClient() +void AudioJack::resizeInputBuffer(jack_nframes_t nframes) +{ + m_inputFrameBuffer.resize(nframes); +} + + + + void AudioJack::startProcessing() { if (m_active || m_client == nullptr) @@ -298,12 +312,6 @@ void AudioJack::renamePort(AudioBusHandle* port) } -int AudioJack::setBufferSizeCallback(jack_nframes_t nframes, void* udata) -{ - auto thisClass = static_cast(udata); - thisClass->m_inputFrameBuffer.resize(thisClass->channels() * nframes); - return 0; -} int AudioJack::processCallback(jack_nframes_t nframes) @@ -379,10 +387,10 @@ int AudioJack::processCallback(jack_nframes_t nframes) for (jack_nframes_t frame = 0; frame < nframes; frame++) { - m_inputFrameBuffer[frame * channels() + c] = jack_input_buffer[frame]; + m_inputFrameBuffer[frame][c] = static_cast(jack_input_buffer[frame]); } } - audioEngine()->pushInputFrames ((SampleFrame*) m_inputFrameBuffer.data(), nframes); + audioEngine()->pushInputFrames (m_inputFrameBuffer.data(), nframes); return 0; }