From 765ee4a8ba22e9627c88dc290882709ed1ca3e1e Mon Sep 17 00:00:00 2001 From: f4exb Date: Tue, 19 Feb 2019 08:41:23 +0100 Subject: [PATCH] Audio UDP/RTP: Opus: delete and re-create encoder state when changing its parameters --- sdrbase/audio/audioopus.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/sdrbase/audio/audioopus.cpp b/sdrbase/audio/audioopus.cpp index 1a964356f..4f9eaa082 100644 --- a/sdrbase/audio/audioopus.cpp +++ b/sdrbase/audio/audioopus.cpp @@ -45,16 +45,12 @@ void AudioOpus::setEncoder(int32_t fs, int nChannels) bool newInstance = true; QMutexLocker mutexLocker(&m_mutex); - if (m_encoderState) - { - error = opus_encoder_init(m_encoderState, fs, nChannels, OPUS_APPLICATION_AUDIO); - newInstance = false; - } - else - { - m_encoderState = opus_encoder_create(fs, nChannels, OPUS_APPLICATION_AUDIO, &error); + if (m_encoderState) { + opus_encoder_destroy(m_encoderState); } + m_encoderState = opus_encoder_create(fs, nChannels, OPUS_APPLICATION_AUDIO, &error); + if (error != OPUS_OK) { qWarning("AudioOpus::setEncoder: %s error: %s", newInstance ? "create" : "init", opus_strerror(error));