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