diff --git a/src/media/audio/opensl/opensllayer.cpp b/src/media/audio/opensl/opensllayer.cpp index 9766ff94699496e6cc3be9ebac03e438064a7c8a..e687ad4bf55356221dac0dd5fa21d527b95a5ebe 100644 --- a/src/media/audio/opensl/opensllayer.cpp +++ b/src/media/audio/opensl/opensllayer.cpp @@ -44,7 +44,6 @@ namespace jami { OpenSLLayer::OpenSLLayer(const AudioPreference& pref) : AudioLayer(pref) { - initAudioEngine(); } // Destructor @@ -57,8 +56,12 @@ void OpenSLLayer::startStream(AudioDeviceType stream) { using namespace std::placeholders; + if (engineObject_) + initAudioEngine(); + std::lock_guard<std::mutex> lock(mutex_); JAMI_WARN("Start OpenSL audio layer"); + if (stream == AudioDeviceType::PLAYBACK) { if (not player_) { try { @@ -181,8 +184,6 @@ OpenSLLayer::shutdownAudioEngine() { JAMI_DBG("Stopping OpenSL"); stopAudioCapture(); - freeRecBufQueue_.clear(); - recBufQueue_.clear(); if (player_) { player_->stop(); @@ -192,10 +193,6 @@ OpenSLLayer::shutdownAudioEngine() ringtone_->stop(); ringtone_.reset(); } - freePlayBufQueue_.clear(); - playBufQueue_.clear(); - freeRingBufQueue_.clear(); - ringBufQueue_.clear(); // destroy engine object, and invalidate all associated interfaces JAMI_DBG("Shutdown audio engine"); @@ -205,6 +202,13 @@ OpenSLLayer::shutdownAudioEngine() engineInterface_ = nullptr; } + freeRecBufQueue_.clear(); + recBufQueue_.clear(); + freePlayBufQueue_.clear(); + playBufQueue_.clear(); + freeRingBufQueue_.clear(); + ringBufQueue_.clear(); + startedCv_.notify_all(); bufs_.clear(); }