diff --git a/src/media/audio/opensl/audio_player.cpp b/src/media/audio/opensl/audio_player.cpp index 4946290eacfd27fbc5be4eaea3098824499adc7f..57acc75d7e9f54dcbb5805fa2e52c26e802d4861 100644 --- a/src/media/audio/opensl/audio_player.cpp +++ b/src/media/audio/opensl/audio_player.cpp @@ -41,10 +41,13 @@ bqPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void* ctx) { (static_cast<AudioPlayer*>(ctx))->processSLCallback(bq); } + void AudioPlayer::processSLCallback(SLAndroidSimpleBufferQueueItf bq) { - std::lock_guard<std::mutex> lk(m_); + std::unique_lock<std::mutex> lk(m_, std::defer_lock); + if (!lk.try_lock()) + return; // retrieve the finished device buf and put onto the free queue // so recorder could re-use it