From a4a9be041636a08ad45f2917f26159fbf0096ab5 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
Date: Fri, 22 Apr 2011 11:41:05 -0400
Subject: [PATCH] [#5564] Fix audio recording resampling for g722

---
 sflphone-common/src/audio/audiorecord.cpp     |  7 ++---
 .../audio/audiortp/AudioRtpRecordHandler.cpp  |  1 -
 .../src/audio/audiortp/AudioRtpSession.cpp    |  2 --
 sflphone-common/src/audio/mainbuffer.cpp      |  3 +-
 .../src/audio/pulseaudio/audiostream.cpp      |  2 +-
 sflphone-common/src/managerimpl.cpp           | 30 ++++++++-----------
 6 files changed, 17 insertions(+), 28 deletions(-)

diff --git a/sflphone-common/src/audio/audiorecord.cpp b/sflphone-common/src/audio/audiorecord.cpp
index ab9751d992..343b65aa60 100644
--- a/sflphone-common/src/audio/audiorecord.cpp
+++ b/sflphone-common/src/audio/audiorecord.cpp
@@ -291,7 +291,7 @@ bool AudioRecord::setRawFile()
     fp = fopen (savePath_.c_str(), "wb");
 
     if (!fp) {
-        _warn ("AudioRecord::setRawFile() : could not create RAW file!");
+        _warn ("AudioRecord: Could not create RAW file!");
         return false;
     }
 
@@ -308,7 +308,7 @@ bool AudioRecord::setRawFile()
 
 bool AudioRecord::setWavFile()
 {
-    _debug ("AudioRecord: Create wave file %s", savePath_.c_str());
+    _debug ("AudioRecord: Create new wave file %s, sampling rate: %d", savePath_.c_str(), sndSmplRate_);
 
     fp = fopen (savePath_.c_str(), "wb");
 
@@ -322,11 +322,8 @@ bool AudioRecord::setWavFile()
     };
 
     hdr.riff[3] = 'F';
-
     hdr.wave[3] = 'E';
-
     hdr.fmt[3]  = ' ';
-
     hdr.data[3] = 'a';
 
     hdr.num_chans = channels_;
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.cpp b/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.cpp
index d5514b66c0..2d9167c258 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.cpp
@@ -158,7 +158,6 @@ void AudioRtpRecordHandler::updateRtpMedia (AudioCodec *audioCodec)
 
     _audioRtpRecord.audioCodecMutex.leave();
 
-    // Manager::instance().getMainBuffer()->setInternalSamplingRate (_audioRtpRecord._codecSampleRate);
     Manager::instance().audioSamplingRateChanged(_audioRtpRecord._codecSampleRate);
 
     if (lastSamplingRate != _audioRtpRecord._codecSampleRate)
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioRtpSession.cpp
index 6feaee0628..7ad415b7a1 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpSession.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.cpp
@@ -123,7 +123,6 @@ void AudioRtpSession::setSessionMedia (AudioCodec *audioCodec)
         }
     }
 
-    // Set recording sampling rate
     _ca->setRecordingSmplRate (getCodecSampleRate());
 }
 
@@ -164,7 +163,6 @@ void AudioRtpSession::updateSessionMedia (AudioCodec *audioCodec)
     }
 
 
-    // Set recording sampling rate
     _ca->setRecordingSmplRate (getCodecSampleRate());
 
     _timestamp = getCurrentTimestamp();
diff --git a/sflphone-common/src/audio/mainbuffer.cpp b/sflphone-common/src/audio/mainbuffer.cpp
index 01a5dd87a8..6bdc431d89 100644
--- a/sflphone-common/src/audio/mainbuffer.cpp
+++ b/sflphone-common/src/audio/mainbuffer.cpp
@@ -49,10 +49,11 @@ MainBuffer::~MainBuffer()
 
 void MainBuffer::setInternalSamplingRate (int sr)
 {
+	_debug("MainBuffer: ------------------------------------- Set internal sampling rate");
 
     if (sr > _internalSamplingRate) {
 
-        _debug ("MainBuffer: Internal sampling rate changed %d", sr);
+        _debug ("MainBuffer: ---------------------------------- Internal sampling rate changed %d", sr);
 
         // This call takes the mutex
         flushAllBuffers();
diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp
index 86f12f3dc7..63e7e166d3 100644
--- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp
+++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp
@@ -198,7 +198,7 @@ AudioStream::createStream (pa_context* c, std::string *deviceName)
     assert (pa_sample_spec_valid (&_sample_spec));
     assert (pa_channel_map_valid (&channel_map));
 
-    _info ("Audio: Create pulseaudio stream");
+    _info ("Audio: Create pulseaudio stream: %d", _sample_spec.rate);
 
     pa_buffer_attr* attributes = (pa_buffer_attr*) malloc (sizeof (pa_buffer_attr));
 
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index d7c013bcf6..5b6d84f537 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -3072,22 +3072,25 @@ void ManagerImpl::audioSamplingRateChanged (int samplerate)
     int type, currentSamplerate, framesize, numCardIn, numCardOut, numCardRing;
     std::string alsaPlugin;
 
-    _debug ("Manager: Audio sampling rate changed");
-
-    if (!_audiodriver)
+    if (!_audiodriver) {
+    	_debug("Manager: No Audio driver set");
         return;
+    }
 
     // Only modify internal sampling rate if new sampling rate is higher
     currentSamplerate = _mainBuffer.getInternalSamplingRate();
-    if(currentSamplerate <= samplerate)
+    if(currentSamplerate >= samplerate) {
+    	_debug("Manager: No need to update audio layer sampling rate");
     	return;
+    }
+    else {
+        _debug ("Manager: Audio sampling rate changed");
+    }
 
     type = _audiodriver->getLayerType();
-
-    // samplerate = _mainBuffer.getInternalSamplingRate();
     framesize = audioPreference.getFramesize();
 
-    _debug ("Manager: new samplerate: %d, new framesize %d", samplerate, framesize);
+    _debug ("Manager: New samplerate: %d, New framesize %d", samplerate, framesize);
 
     alsaPlugin = audioPreference.getPlugin();
 
@@ -3152,18 +3155,9 @@ void ManagerImpl::audioSamplingRateChanged (int samplerate)
         _dtmfKey = new DTMF (sampleRate);
     }
 
-    if (hasCurrentCall())
+    if (hasCurrentCall()) {
         _audiodriver->startStream();
-
-    // ost::MutexLock unlock (*getAudioLayerMutex());
-    // getAudioLayerMutex()->leave();
-
-    // need to stop audio streams if there is currently no call
-    // if ( (type != PULSEAUDIO) && (!hasCurrentCall())) {
-    // _debug("There is currently a call!!");
-    // _audiodriver->stopStream();
-
-    // }
+    }
 }
 
 /**
-- 
GitLab