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