diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c index f87206be01e35176d50da316777963fe9ff60d52..d1bf035968d4411f05e90c0fdea0ec5a0e461871 100644 --- a/sflphone-client-gnome/src/contacts/calltree.c +++ b/sflphone-client-gnome/src/contacts/calltree.c @@ -412,8 +412,6 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c) void calltree_add_history_entry (callable_obj_t * c) { - printf("calltree_add_history_entry\n"); - if (dbus_get_history_enabled () == 0) return; @@ -473,8 +471,6 @@ void calltree_add_history_entry (callable_obj_t * c) void calltree_add_call (calltab_t* tab, callable_obj_t * c) { - printf("calltree_add_call\n"); - if (tab == history) { calltree_add_history_entry (c); diff --git a/sflphone-common/src/audio/audiortp.cpp b/sflphone-common/src/audio/audiortp.cpp index cd9906b0ac370f6f068a001a5211330f43c2ea0b..80731ac081f03ee950a4aca5e6f32151a977c4ed 100644 --- a/sflphone-common/src/audio/audiortp.cpp +++ b/sflphone-common/src/audio/audiortp.cpp @@ -98,7 +98,7 @@ AudioRtp::closeRtpSession () { throw; } AudioLayer* audiolayer = Manager::instance().getAudioDriver(); - audiolayer->stopStream(); + // audiolayer->stopStream(); return true; } @@ -398,52 +398,6 @@ AudioRtpRTX::sendSessionFromMic(int timestamp) int compSize = processDataEncode(audiolayer); - /* - // compute codec framesize in ms - float fixed_codec_framesize = computeCodecFrameSize(_audiocodec->getFrameSize(), _audiocodec->getClockRate()); - - // compute nb of byte to get coresponding to 20 ms at audio layer frame size (44.1 khz) - int maxBytesToGet = computeNbByteAudioLayer(fixed_codec_framesize); - - // available bytes inside ringbuffer - int availBytesFromMic = audiolayer->canGetMic(); - - // set available byte to maxByteToGet - int bytesAvail = (availBytesFromMic < maxBytesToGet) ? availBytesFromMic : maxBytesToGet; - - if (bytesAvail == 0) - return; - - // Get bytes from micRingBuffer to data_from_mic - int nbSample = audiolayer->getMic( micData , bytesAvail ) / sizeof(SFLDataFormat); - - // nb bytes to be sent over RTP - int compSize = 0; - - // test if resampling is required - if (_audiocodec->getClockRate() != _layerSampleRate) { - - int nb_sample_up = nbSample; - // _debug("_nbSample audiolayer->getMic(): %i \n", nbSample); - - // Store the length of the mic buffer in samples for recording - _nSamplesMic = nbSample; - - - // int nbSamplesMax = _layerFrameSize * _audiocodec->getClockRate() / 1000; - nbSample = reSampleData(micData , micDataConverted, _audiocodec->getClockRate(), nb_sample_up, DOWN_SAMPLING); - - compSize = _audiocodec->codecEncode( micDataEncoded, micDataConverted, nbSample*sizeof(int16)); - - } else { - // no resampling required - - // int nbSamplesMax = _codecFrameSize; - compSize = _audiocodec->codecEncode( micDataEncoded, micData, nbSample*sizeof(int16)); - - } - */ - // putData put the data on RTP queue, sendImmediate bypass this queue if (!_sym) { // _sessionSend->putData(timestamp, micDataEncoded, compSize); @@ -483,54 +437,10 @@ AudioRtpRTX::receiveSessionForSpkr (int& countTime) unsigned int size = adu->getSize(); // size in char processDataDecode(audiolayer, spkrData, size, countTime); - /* - if (_audiocodec != NULL) { - - // Return the size of data in bytes - int expandedSize = _audiocodec->codecDecode( spkrDataDecoded , spkrData , size ); - - // buffer _receiveDataDecoded ----> short int or int16, coded on 2 bytes - int nbSample = expandedSize / sizeof(SFLDataFormat); - - // test if resampling is required - if (_audiocodec->getClockRate() != _layerSampleRate) { - - // Do sample rate conversion - int nb_sample_down = nbSample; - nbSample = reSampleData(spkrDataDecoded , spkrDataConverted, _codecSampleRate , nb_sample_down, UP_SAMPLING); - - // Store the number of samples for recording - _nSamplesSpkr = nbSample; - - // put data in audio layer, size in byte - audiolayer->putMain (spkrDataConverted, nbSample * sizeof(SFLDataFormat)); - - } else { - - // Stor the number of samples for recording - _nSamplesSpkr = nbSample; - - // put data in audio layer, size in byte - audiolayer->putMain (spkrDataDecoded, nbSample * sizeof(SFLDataFormat)); - } - - // Notify (with a beep) an incoming call when there is already a call - countTime += time->getSecond(); - if (Manager::instance().incomingCallWaiting() > 0) { - countTime = countTime % 500; // more often... - if (countTime == 0) { - Manager::instance().notificationIncomingCall(); - } - } - - } else { - countTime += time->getSecond(); - } - delete adu; adu = NULL; - */ - + } + int AudioRtpRTX::reSampleData(SFLDataFormat *input, SFLDataFormat *output, int sampleRate_codec, int nbSamples, int status) { @@ -634,7 +544,7 @@ AudioRtpRTX::run () { } - audiolayer->stopStream(); + // audiolayer->stopStream(); _debug("- ARTP Action: Stop call %s\n",_ca->getCallId().c_str()); //} catch(std::exception &e) { //_start.post(); diff --git a/sflphone-common/src/audio/audiostream.cpp b/sflphone-common/src/audio/audiostream.cpp index 08587fdb310803fe561ae208c025869f6b7ab86b..abfb5ab34f92f598d327899751a6f7ed609d88e7 100644 --- a/sflphone-common/src/audio/audiostream.cpp +++ b/sflphone-common/src/audio/audiostream.cpp @@ -49,10 +49,6 @@ AudioStream::connectStream() if(!_audiostream) _audiostream = createStream( _context ); - else { - disconnectStream(); - _audiostream = createStream( _context ); - } return true; } diff --git a/sflphone-common/src/audio/pulselayer.cpp b/sflphone-common/src/audio/pulselayer.cpp index a5b07f277b2280da0b5fea1ad6131ae5849b73e8..c8410651b536ddddecb21dc5ce513700295430fd 100644 --- a/sflphone-common/src/audio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulselayer.cpp @@ -166,12 +166,15 @@ bool PulseLayer::createStreams( pa_context* c ) pa_threaded_mainloop_signal(m , 0); + isCorked = true; + return true; } bool PulseLayer::openDevice(int indexIn UNUSED, int indexOut UNUSED, int sampleRate, int frameSize , int stream UNUSED, std::string plugin UNUSED) { + _debug("PulseLayer::openDevice \n"); _sampleRate = sampleRate; _frameSize = frameSize; @@ -225,35 +228,46 @@ int PulseLayer::getMic(void *buffer, int toCopy) void PulseLayer::startStream (void) { // flushMic(); + if (isCorked) { - _urgentRingBuffer.flush(); - _micRingBuffer.flush(); - _voiceRingBuffer.flush(); + _urgentRingBuffer.flush(); + _micRingBuffer.flush(); + _voiceRingBuffer.flush(); - _debug("PulseLayer::Start stream\n"); - pa_threaded_mainloop_lock(m); + _debug("PulseLayer::Start stream\n"); + pa_threaded_mainloop_lock(m); - pa_stream_cork( playback->pulseStream(), 0, NULL, NULL); - pa_stream_cork( record->pulseStream(), 0, NULL, NULL); + pa_stream_cork( playback->pulseStream(), 0, NULL, NULL); + pa_stream_cork( record->pulseStream(), 0, NULL, NULL); - pa_threaded_mainloop_unlock(m); + pa_threaded_mainloop_unlock(m); + + isCorked = false; + } } void PulseLayer::stopStream (void) { - _debug("PulseLayer::Stop stream\n"); - pa_stream_flush( playback->pulseStream(), NULL, NULL ); - pa_stream_flush( record->pulseStream(), NULL, NULL ); + + if (!isCorked) { + + _debug("PulseLayer::Stop stream\n"); + pa_stream_flush( playback->pulseStream(), NULL, NULL ); + pa_stream_flush( record->pulseStream(), NULL, NULL ); - flushMic(); - flushMain(); - flushUrgent(); + flushMic(); + flushMain(); + flushUrgent(); - pa_stream_cork( playback->pulseStream(), 1, NULL, NULL); - pa_stream_cork( record->pulseStream(), 1, NULL, NULL); + pa_stream_cork( playback->pulseStream(), 1, NULL, NULL); + pa_stream_cork( record->pulseStream(), 1, NULL, NULL); + isCorked = true; + + } + } diff --git a/sflphone-common/src/audio/pulselayer.h b/sflphone-common/src/audio/pulselayer.h index beae9eacc2b5b7400aca9ccd6d25a79b98dcd1c8..698cc9bf6b68b6ff7009b35efcccba3c664d2729 100644 --- a/sflphone-common/src/audio/pulselayer.h +++ b/sflphone-common/src/audio/pulselayer.h @@ -189,6 +189,8 @@ class PulseLayer : public AudioLayer { */ AudioStream* record; + bool isCorked; + int spkrVolume; int micVolume; diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index e6551144cdc6fd4b65b85582e5d3a5cca64af9d7..28239c5303e4db4c8fa7a5d9c7a5f7e9ec1af6d9 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -143,7 +143,7 @@ ManagerImpl::init() } if (audiolayer == 0) - audiolayer->stopStream(); + audiolayer->stopStream(); // Load the history @@ -326,7 +326,14 @@ ManagerImpl::hangupCall(const CallID& id) _debug("Stop audio stream\n"); audiolayer = getAudioDriver(); - audiolayer->stopStream(); + + int nbCalls = getCallList().size(); + + _debug("nbCalls %i \n", nbCalls); + + // stop stream + if (!(nbCalls > 1)) + audiolayer->stopStream(); /* Direct IP to IP call */ if (getConfigFromCall (id) == Call::IPtoIP) { @@ -952,11 +959,12 @@ void ManagerImpl::stopTone (bool stopAudio=true) hasToPlayTone = getConfigInt(SIGNALISATION, PLAY_TONES); if (!hasToPlayTone) return; - + if (stopAudio) { audiolayer = getAudioDriver(); if (audiolayer) audiolayer->stopStream(); } + _toneMutex.enterMutex(); if (_telephoneTone != 0) {