From 063badd045e1db5c98cf8db7f97a2e30918c234c Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 20 May 2010 11:04:11 -0400 Subject: [PATCH] [#1962] Use snd_pcm_avail_update to get number of byte to copy for ringtone --- sflphone-common/src/audio/alsa/alsalayer.cpp | 23 +++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index 4e5a2b60ed..108fb72588 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.cpp +++ b/sflphone-common/src/audio/alsa/alsalayer.cpp @@ -845,11 +845,12 @@ void AlsaLayer::audioCallback (void) spkrVolume = _manager->getSpkrVolume(); micVolume = _manager->getMicVolume(); + tone = _manager->getTelephoneTone(); + file_tone = _manager->getTelephoneFile(); + // AvailForGet tell the number of chars inside the buffer // framePerBuffer are the number of data for one channel (left) urgentAvailBytes = _urgentRingBuffer.AvailForGet(); - tone = _manager->getTelephoneTone(); - file_tone = _manager->getTelephoneFile(); toGet = framesPerBufferAlsa; maxBytes = toGet * sizeof (SFLDataFormat); @@ -973,18 +974,24 @@ void AlsaLayer::audioCallback (void) if (file_tone && _RingtoneHandle) { - out = (SFLDataFormat *) malloc (maxBytes); - file_tone->getNext (out, toGet, spkrVolume); - write (out, maxBytes, _RingtoneHandle); + int ringtoneAvailSmpl = snd_pcm_avail_update(_RingtoneHandle); + int ringtoneAvailBytes = ringtoneAvailSmpl*sizeof(SFLDataFormat); + + out = (SFLDataFormat *) malloc(ringtoneAvailBytes); + file_tone->getNext (out, ringtoneAvailSmpl, spkrVolume); + write (out, ringtoneAvailBytes, _RingtoneHandle); free (out); out = NULL; } else if (_RingtoneHandle) { - out = (SFLDataFormat *) malloc ( maxBytes); - memset(out, 0, maxBytes); - write(out, maxBytes, _RingtoneHandle); + int ringtoneAvailSmpl = snd_pcm_avail_update(_RingtoneHandle); + int ringtoneAvailBytes = ringtoneAvailSmpl*sizeof(SFLDataFormat); + + out = (SFLDataFormat *) malloc(ringtoneAvailBytes); + memset(out, 0, ringtoneAvailBytes); + write(out, ringtoneAvailBytes, _RingtoneHandle); free(out); out = NULL; -- GitLab