diff --git a/src/media/audio/opensl/audio_player.cpp b/src/media/audio/opensl/audio_player.cpp index 6de31b0711545e9d244941bcf14497bbcac7a41e..4946290eacfd27fbc5be4eaea3098824499adc7f 100644 --- a/src/media/audio/opensl/audio_player.cpp +++ b/src/media/audio/opensl/audio_player.cpp @@ -67,7 +67,8 @@ AudioPlayer::processSLCallback(SLAndroidSimpleBufferQueueItf bq) } } - callback_(); + if (callback_) + callback_(); while (playQueue_->front(&buf) && devShadowQueue_.push(buf)) { if ((*bq)->Enqueue(bq, buf->buf_, buf->size_) != SL_RESULT_SUCCESS) { @@ -230,6 +231,7 @@ AudioPlayer::stop() { JAMI_DBG("OpenSL playback stop"); std::lock_guard<std::mutex> lk(m_); + callback_ = {}; SLuint32 state; SLresult result = (*playItf_)->GetPlayState(playItf_, &state); diff --git a/src/media/audio/opensl/audio_recorder.cpp b/src/media/audio/opensl/audio_recorder.cpp index 97d0416a2532992c1e744a6f8e05c489ec02bc79..3f00df441ff48953778d47610d24c7ba0a429080 100644 --- a/src/media/audio/opensl/audio_recorder.cpp +++ b/src/media/audio/opensl/audio_recorder.cpp @@ -54,7 +54,8 @@ AudioRecorder::processSLCallback(SLAndroidSimpleBufferQueueItf bq) /*if (devShadowQueue_.size() == 0) { (*recItf_)->SetRecordState(recItf_, SL_RECORDSTATE_STOPPED); }*/ - callback_(); + if (callback_) + callback_(); } catch (const std::exception& e) { JAMI_ERR("processSLCallback exception: %s", e.what()); } @@ -250,6 +251,8 @@ AudioRecorder::stop() result = (*recItf_)->SetRecordState(recItf_, SL_RECORDSTATE_STOPPED); SLASSERT(result); + callback_ = {}; + result = (*recBufQueueItf_)->Clear(recBufQueueItf_); SLASSERT(result);