From a3a8065b2c36c005790ec1aeacc5fb71dc5ecb2e Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
Date: Tue, 24 Aug 2010 11:52:08 -0400
Subject: [PATCH] [#3926] Fix recording path problems

---
 sflphone-common/src/audio/audiorecord.cpp           | 1 +
 sflphone-common/src/audio/audiorecorder.cpp         | 8 +++++++-
 sflphone-common/src/audio/pulseaudio/pulselayer.cpp | 3 ++-
 sflphone-common/src/audio/recordable.cpp            | 2 +-
 sflphone-common/src/call.cpp                        | 9 +++++++--
 sflphone-common/src/managerimpl.cpp                 | 2 ++
 6 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/sflphone-common/src/audio/audiorecord.cpp b/sflphone-common/src/audio/audiorecord.cpp
index 588d82e3d4..88f9619edd 100644
--- a/sflphone-common/src/audio/audiorecord.cpp
+++ b/sflphone-common/src/audio/audiorecord.cpp
@@ -301,6 +301,7 @@ bool AudioRecord::setRawFile()
 
 bool AudioRecord::setWavFile()
 {
+    _debug ("AudioRecord: Create wave file %s", savePath_.c_str());
 
     fp = fopen (savePath_.c_str(), "wb");
 
diff --git a/sflphone-common/src/audio/audiorecorder.cpp b/sflphone-common/src/audio/audiorecorder.cpp
index d5763aaa3c..0adba9caa0 100644
--- a/sflphone-common/src/audio/audiorecorder.cpp
+++ b/sflphone-common/src/audio/audiorecorder.cpp
@@ -59,7 +59,9 @@ AudioRecorder::AudioRecorder (AudioRecord  *arec, MainBuffer *mb) : Thread()
  */
 void AudioRecorder::run (void)
 {
-    SFLDataFormat buffer[10000];
+
+    int bufferLength = 10000;
+    SFLDataFormat buffer[bufferLength];
 
     while (true) {
 
@@ -68,6 +70,10 @@ void AudioRecorder::run (void)
 
         int availBytes = mbuffer->availForGet (recorderId);
 
+        int toGet = (availBytes < bufferLength) ? availBytes : bufferLength;
+
+        mbuffer->getData (buffer, toGet, 100, recorderId);
+
         if (availBytes > 0) {
 
             arecord->recData (buffer, availBytes/sizeof (SFLDataFormat));
diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
index a4638126a4..0207643682 100644
--- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
+++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
@@ -76,13 +76,14 @@ static void latency_update_callback (pa_stream *p, void *userdata UNUSED)
 
     pa_stream_get_latency (p, &r_usec, NULL);
 
+    /*
     _debug ("Audio: Stream letency update %0.0f ms for device %s", (float) r_usec/1000, pa_stream_get_device_name (p));
     _debug ("Audio: maxlength %u", pa_stream_get_buffer_attr (p)->maxlength);
     _debug ("Audio: tlength %u", pa_stream_get_buffer_attr (p)->tlength);
     _debug ("Audio: prebuf %u", pa_stream_get_buffer_attr (p)->prebuf);
     _debug ("Audio: minreq %u", pa_stream_get_buffer_attr (p)->minreq);
     _debug ("Audio: fragsize %u", pa_stream_get_buffer_attr (p)->fragsize);
-
+    */
 }
 
 static void sink_input_info_callback (pa_context *c UNUSED, const pa_sink_info *i, int eol, void *userdata)
diff --git a/sflphone-common/src/audio/recordable.cpp b/sflphone-common/src/audio/recordable.cpp
index 799bb81453..87c3f2b302 100644
--- a/sflphone-common/src/audio/recordable.cpp
+++ b/sflphone-common/src/audio/recordable.cpp
@@ -36,7 +36,7 @@ Recordable::Recordable() : recorder (&recAudio, Manager::instance().getMainBuffe
     FILE_TYPE fileType = FILE_WAV;
     SOUND_FORMAT soundFormat = INT16;
 
-    recAudio.setRecordingOption (fileType, soundFormat, 8000, Manager::instance().getConfigString (AUDIO, RECORD_PATH));
+    recAudio.setRecordingOption (fileType, soundFormat, 8000, Manager::instance().audioPreference.getRecordpath());
 }
 
 
diff --git a/sflphone-common/src/call.cpp b/sflphone-common/src/call.cpp
index 51a3d45463..040d90c74c 100644
--- a/sflphone-common/src/call.cpp
+++ b/sflphone-common/src/call.cpp
@@ -189,6 +189,8 @@ Call::isAudioStarted()
 bool
 Call::setRecording()
 {
+    _debug ("Call: Set recording");
+
     bool recordStatus = Recordable::recAudio.isRecording();
 
     Recordable::recAudio.setRecording();
@@ -196,16 +198,21 @@ Call::setRecording()
     // Start recording
     if (!recordStatus) {
 
+        _debug ("Call: Call not recording yet, set ringbuffers");
+
         MainBuffer *mbuffer = Manager::instance().getMainBuffer();
         CallID process_id = Recordable::recorder.getRecorderID();
 
         mbuffer->bindHalfDuplexOut (process_id, _id);
         mbuffer->bindHalfDuplexOut (process_id);
 
+        Recordable::recorder.start();
     }
     // Stop recording
     else {
 
+        _debug ("Call: Stop recording");
+
         MainBuffer *mbuffer = Manager::instance().getMainBuffer();
         CallID process_id = Recordable::recorder.getRecorderID();
 
@@ -216,7 +223,5 @@ Call::setRecording()
 
     Manager::instance().getMainBuffer()->stateInfo();
 
-    Recordable::recorder.start();
-
     return recordStatus;
 }
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index 47e5f3c385..ed2d543c6b 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -2557,9 +2557,11 @@ void ManagerImpl::setRecordingCall (const CallID& id)
     Recordable* rec = NULL;
 
     if (!isConference (id)) {
+        _debug ("Manager: Set recording for call %s", id.c_str());
         AccountID accountid = getAccountFromCall (id);
         rec = (Recordable *) getAccountLink (accountid)->getCall (id);
     } else {
+        _debug ("Manager: Ser recording for conference %s", id.c_str());
         ConferenceMap::iterator it = _conferencemap.find (id);
         rec = (Recordable *) it->second;
     }
-- 
GitLab