diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index 4e5a2b60ed0dbdc08ef75df0d6addc78f1f7b766..108fb725882007485c4df7fc62e49b5e62fb868e 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;