From f2e40889b23293f543ba8b45c7b4a9ca29589389 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 22 Sep 2018 21:00:44 -0700 Subject: [PATCH] Performance tweaks to PortAudio renderer --- .../audio/renderers/portaudiorenderer.cpp | 19 +++++++++++-------- .../audio/renderers/portaudiorenderer.h | 2 +- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/app/streaming/audio/renderers/portaudiorenderer.cpp b/app/streaming/audio/renderers/portaudiorenderer.cpp index 05446526..de5d6c2f 100644 --- a/app/streaming/audio/renderers/portaudiorenderer.cpp +++ b/app/streaming/audio/renderers/portaudiorenderer.cpp @@ -70,14 +70,6 @@ bool PortAudioRenderer::prepareForPlayback(const OPUS_MULTISTREAM_CONFIGURATION* return false; } - error = Pa_StartStream(m_Stream); - if (error != paNoError) { - SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, - "Pa_StartStream() failed: %s", - Pa_GetErrorText(error)); - return false; - } - return true; } @@ -101,6 +93,17 @@ void PortAudioRenderer::submitAudio(short* audioBuffer, int audioSize) // race since we'll either read the original value of m_WriteIndex (which is safe, // we just won't consider this sample) or the new value of m_WriteIndex m_WriteIndex = (m_WriteIndex + 1) % CIRCULAR_BUFFER_SIZE; + + // Start the stream after we've written the first sample to it + if (Pa_IsStreamStopped(m_Stream) == 1) { + PaError error = Pa_StartStream(m_Stream); + if (error != paNoError) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "Pa_StartStream() failed: %s", + Pa_GetErrorText(error)); + return; + } + } } bool PortAudioRenderer::testAudio(int audioConfiguration) diff --git a/app/streaming/audio/renderers/portaudiorenderer.h b/app/streaming/audio/renderers/portaudiorenderer.h index f39e0e3d..e69bf506 100644 --- a/app/streaming/audio/renderers/portaudiorenderer.h +++ b/app/streaming/audio/renderers/portaudiorenderer.h @@ -4,7 +4,7 @@ #include "renderer.h" -#define CIRCULAR_BUFFER_SIZE 32 +#define CIRCULAR_BUFFER_SIZE 16 #define MAX_CHANNEL_COUNT 6 #define CIRCULAR_BUFFER_STRIDE (MAX_CHANNEL_COUNT * SAMPLES_PER_FRAME)