From 4f3ccc26aa83b5b7bf8bbd6b7e45289eaa1771f7 Mon Sep 17 00:00:00 2001 From: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com> Date: Wed, 26 Jun 2019 09:27:12 -0400 Subject: [PATCH] sipcall: fix the order of playbackqueue to make DTMF ring tone correct Change-Id: Ib3755c563cb9928f25aee285510e367774d18389 --- src/media/audio/audiolayer.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/media/audio/audiolayer.cpp b/src/media/audio/audiolayer.cpp index d0d5583909..a9eede4a15 100644 --- a/src/media/audio/audiolayer.cpp +++ b/src/media/audio/audiolayer.cpp @@ -56,7 +56,7 @@ void AudioLayer::hardwareFormatAvailable(AudioFormat playback) std::lock_guard<std::mutex> lock(mutex_); JAMI_DBG("Hardware audio format available : %s", playback.toString().c_str()); audioFormat_ = Manager::instance().hardwareAudioFormatChanged(playback); - urgentRingBuffer_.setFormat(playback); + urgentRingBuffer_.setFormat(audioFormat_); } void AudioLayer::hardwareInputFormatAvailable(AudioFormat capture) @@ -142,13 +142,6 @@ AudioLayer::getToPlay(AudioFormat format, size_t writableSamples) notifyIncomingCall(); auto& bufferPool = Manager::instance().getRingBufferPool(); - if (auto urgentSamples = urgentRingBuffer_.get(RingBufferPool::DEFAULT_ID)) { - bufferPool.discard(1, RingBufferPool::DEFAULT_ID); - return urgentSamples; - } - // flush remaining samples in _urgentRingBuffer - flushUrgent(); - if (not playbackQueue_) playbackQueue_.reset(new AudioFrameResizer(format, writableSamples)); else @@ -156,7 +149,10 @@ AudioLayer::getToPlay(AudioFormat format, size_t writableSamples) std::shared_ptr<AudioFrame> playbackBuf {}; while (!(playbackBuf = playbackQueue_->dequeue())) { - if (auto toneToPlay = Manager::instance().getTelephoneTone()) { + if (auto urgentSamples = urgentRingBuffer_.get(RingBufferPool::DEFAULT_ID)) { + bufferPool.discard(1, RingBufferPool::DEFAULT_ID); + playbackQueue_->enqueue(std::move(urgentSamples)); + } else if (auto toneToPlay = Manager::instance().getTelephoneTone()) { playbackQueue_->enqueue(resampler_->resample(toneToPlay->getNext(), format)); } else if (auto buf = bufferPool.getData(RingBufferPool::DEFAULT_ID)) { playbackQueue_->enqueue(resampler_->resample(std::move(buf), format)); @@ -164,7 +160,7 @@ AudioLayer::getToPlay(AudioFormat format, size_t writableSamples) break; } } - + return playbackBuf; } -- GitLab