diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h index bf1a3cae31a075a4577e49537f8fd3a14541a396..d3e5981e3ef4d70ff5d1d39e95b7cf106ab8ce27 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h @@ -81,8 +81,8 @@ namespace sfl { inline float computeCodecFrameSize (int codecSamplePerFrame, int codecClockRate) { return ( (float) codecSamplePerFrame * 1000.0) / (float) codecClockRate; } - inline int computeNbByteAudioLayer (float codecFrameSize) { - return (int) ( (float) converterSamplingRate * codecFrameSize * (float) sizeof (SFLDataFormat) / 1000.0); + int computeNbByteAudioLayer (float codecFrameSize) { + return (int) ( ((float) converterSamplingRate * codecFrameSize * sizeof(SFLDataFormat))/ 1000.0); } void sendMicData(int timestamp); @@ -225,9 +225,9 @@ namespace sfl { // initialize SampleRate converter using AudioLayer's sampling rate // (internal buffers initialized with maximal sampling rate and frame size) - _converter = new SamplerateConverter (_layerSampleRate, _layerFrameSize); + _converter = new SamplerateConverter(_layerSampleRate, _layerFrameSize); - int nbSamplesMax = (int) (_codecSampleRate * _layerFrameSize /1000)*2; + int nbSamplesMax = (int)(_codecSampleRate * _layerFrameSize /1000)*2; _micData = new SFLDataFormat[nbSamplesMax]; _micDataConverted = new SFLDataFormat[nbSamplesMax]; _micDataEncoded = new unsigned char[nbSamplesMax]; @@ -309,19 +309,31 @@ namespace sfl { { assert(_audiocodec); assert(_audiolayer); - + + _debug("AudioRtpSession::processDataEncode %s\n", _ca->getCallId().c_str()); int _mainBufferSampleRate = _audiolayer->getMainBuffer()->getInternalSamplingRate(); - + + _debug(" _mainBufferSampleRate %i\n", _mainBufferSampleRate); + + _debug(" converterSamplingRate %i\n", converterSamplingRate); + + _debug(" _audiocodec->getFrameSize() %i, _audiocodec->getClockRate() %i\n", _audiocodec->getFrameSize(), _audiocodec->getClockRate()); + // compute codec framesize in ms float fixed_codec_framesize = computeCodecFrameSize (_audiocodec->getFrameSize(), _audiocodec->getClockRate()); + _debug(" fixed_codec_framesize %f\n", fixed_codec_framesize); // compute nb of byte to get coresponding to 20 ms at audio layer frame size (44.1 khz) int maxBytesToGet = computeNbByteAudioLayer (fixed_codec_framesize); + _debug(" maxBytesToGet %i\n", maxBytesToGet); + // available bytes inside ringbuffer int availBytesFromMic = _audiolayer->getMainBuffer()->availForGet(_ca->getCallId()); + _debug(" availBytesFromMic %i\n", availBytesFromMic); + // set available byte to maxByteToGet int bytesAvail = (availBytesFromMic < maxBytesToGet) ? availBytesFromMic : maxBytesToGet; @@ -331,6 +343,8 @@ namespace sfl { // Get bytes from micRingBuffer to data_from_mic int nbSample = _audiolayer->getMainBuffer()->getData(_micData , bytesAvail, 100, _ca->getCallId()) / sizeof (SFLDataFormat); + _debug(" nbSample %i\n", nbSample); + // nb bytes to be sent over RTP int compSize = 0; @@ -342,6 +356,8 @@ namespace sfl { compSize = _audiocodec->codecEncode (_micDataEncoded, _micDataConverted, nbSample*sizeof (int16)); + _debug(" nbSample(in resampling block) %i\n", nbSample); + } else { // no resampling required compSize = _audiocodec->codecEncode (_micDataEncoded, _micData, nbSample*sizeof (int16)); @@ -354,8 +370,11 @@ namespace sfl { void AudioRtpSession<D>::processDataDecode(unsigned char * spkrData, unsigned int size, int& countTime) { + _debug("AudioRtpSession::processDataDecode %s\n", _ca->getCallId().c_str()); + if (_audiocodec != NULL) { + int _mainBufferSampleRate = _audiolayer->getMainBuffer()->getInternalSamplingRate(); // Return the size of data in bytes @@ -364,6 +383,10 @@ namespace sfl { // buffer _receiveDataDecoded ----> short int or int16, coded on 2 bytes int nbSample = expandedSize / sizeof (SFLDataFormat); + _debug(" nbSample %i\n", nbSample); + + _debug(" _mainBufferSampleRate %i\n", _mainBufferSampleRate); + // test if resampling is required if (_audiocodec->getClockRate() != _mainBufferSampleRate) { @@ -375,6 +398,8 @@ namespace sfl { // Store the number of samples for recording _nSamplesSpkr = nbSample; + _debug(" nbSample (in resampling block) %i\n", nbSample); + // put data in audio layer, size in byte _audiolayer->getMainBuffer()->putData (_spkrDataConverted, nbSample * sizeof (SFLDataFormat), 100, _ca->getCallId()); @@ -383,6 +408,7 @@ namespace sfl { // Store the number of samples for recording _nSamplesSpkr = nbSample; + // put data in audio layer, size in byte _audiolayer->getMainBuffer()->putData (_spkrDataDecoded, expandedSize, 100, _ca->getCallId()); } @@ -503,6 +529,8 @@ namespace sfl { while (!testCancel()) { + converterSamplingRate = _audiolayer->getMainBuffer()->getInternalSamplingRate(); + // Send session sessionWaiting = static_cast<D*>(this)->isWaiting();