diff --git a/sflphone-gtk/src/actions.c b/sflphone-gtk/src/actions.c index 07f892264b1535111c388f9a2242c0ccb8c28cdf..bb4d6dbc644e0a408278aa7f9906da15b5408e84 100644 --- a/sflphone-gtk/src/actions.c +++ b/sflphone-gtk/src/actions.c @@ -208,10 +208,10 @@ sflphone_pick_up() { case CALL_STATE_DIALING: sflphone_place_call (selectedCall); - printf("accountID=%s\n",selectedCall->accountID); + //printf("accountID=%s\n",selectedCall->accountID); break; case CALL_STATE_INCOMING: - printf("CALL ID = %s\n", selectedCall->callID); + //printf("CALL ID = %s\n", selectedCall->callID); dbus_accept (selectedCall); break; case CALL_STATE_HOLD: @@ -435,7 +435,6 @@ sflphone_keypad( guint keyval, gchar * key) switch(c->state) { case CALL_STATE_DIALING: // Currently dialing => edit number - //dbus_play_dtmf(key); process_dialing(c, keyval, key); break; case CALL_STATE_CURRENT: @@ -454,7 +453,7 @@ sflphone_keypad( guint keyval, gchar * key) g_free(before); g_free(temp); //screen_set_call(c); - update_call_tree(c); + //update_call_tree(c); } break; } @@ -507,7 +506,8 @@ sflphone_keypad( guint keyval, gchar * key) switch (keyval) { case 65307: /* ESCAPE */ - dbus_hang_up(c); + //dbus_hang_up(c); + sflphone_hang_up(c); break; } break; diff --git a/src/audio/audiolayer.cpp b/src/audio/audiolayer.cpp index 38337dbc14f3af78dc1f7d4bd1b11855dd02a5aa..06583b3b01ce52bec8ed1bfb6c9f71a39d7927e5 100644 --- a/src/audio/audiolayer.cpp +++ b/src/audio/audiolayer.cpp @@ -43,7 +43,6 @@ , _CaptureHandle( NULL ) , deviceClosed( true ) , _urgentBuffer( SIZEBUF ) - , _fstream("/tmp/audio.dat") { _inChannel = 1; // don't put in stereo @@ -59,8 +58,6 @@ AudioLayer::~AudioLayer (void) closeCaptureStream(); closePlaybackStream(); deviceClosed = true; - _fstream.flush(); - _fstream.close(); } @@ -264,7 +261,6 @@ AudioLayer::playTones( void ) int spkrVol = _manager -> getSpkrVolume(); if( tone != 0 ){ tone -> getNext( out , frames , spkrVol ); - //_fstream.write( (char*)out, maxBytes ); write( out , maxBytes ); } else if( ( tone=_manager->getTelephoneFile() ) != 0 ){ @@ -413,7 +409,6 @@ AudioLayer::write(void* buffer, int length) //handle_xrun_playback(); //_debugAlsa("avail = %d - toWrite = %d\n" , snd_pcm_avail_update( _PlaybackHandle ) , length / 2); - snd_pcm_uframes_t frames = snd_pcm_bytes_to_frames( _PlaybackHandle, length); int err = snd_pcm_mmap_writei( _PlaybackHandle , buffer , frames ); switch(err) { @@ -444,7 +439,6 @@ AudioLayer::write(void* buffer, int length) int AudioLayer::read( void* buffer, int toCopy) { - if(deviceClosed || _CaptureHandle == NULL) return 0; int err; diff --git a/src/iaxvoiplink.cpp b/src/iaxvoiplink.cpp index faaa07e510db33966763aae8c04bee8503571cb0..af8038886f2f2ac922dce49441a0dadc0f8adb60 100644 --- a/src/iaxvoiplink.cpp +++ b/src/iaxvoiplink.cpp @@ -180,7 +180,6 @@ IAXVoIPLink::terminateIAXCall() iter++; } _callMap.clear(); - delete _audiocodec; } void @@ -204,6 +203,7 @@ IAXVoIPLink::getEvent() if (call) { // We know that call, deal with it iaxHandleCallEvent(event, call); + //_audiocodec = Manager::instance().getCodecDescriptorMap().getCodec( call -> getAudioCodec() ); } else if (event->session && event->session == _regSession) { // This is a registration session, deal with it @@ -235,12 +235,16 @@ IAXVoIPLink::getEvent() void IAXVoIPLink::sendAudioFromMic(void) { - IAXCall* currentCall = getIAXCall(Manager::instance().getCurrentCallId()); + IAXCall* currentCall = getIAXCall(Manager::instance().getCurrentCallId()); if (!currentCall) { // Let's mind our own business. return; } + + if( currentCall -> getAudioCodec() < 0 ) + return; + // Just make sure the currentCall is in state to receive audio right now. //_debug("Here we get: connectionState: %d state: %d \n", @@ -252,8 +256,9 @@ IAXVoIPLink::sendAudioFromMic(void) return; } - _audiocodec = Manager::instance().getCodecDescriptorMap().getCodec( currentCall -> getAudioCodec() ); - if (!_audiocodec) { + AudioCodec* ac = currentCall -> getCodecMap().getCodec( currentCall -> getAudioCodec() ); + _debug("Audiocodec name = %s\n" , ac->getCodecName().c_str()); + if (!ac) { // Audio codec still not determined. if (audiolayer) { // To keep latency low.. @@ -285,10 +290,9 @@ IAXVoIPLink::sendAudioFromMic(void) int nbSample = audiolayer->getMic(_dataAudioLayer, bytesAvail) / sizeof(SFLDataFormat); // Audio ici est PARFAIT - int16* toIAX = NULL; //if (audiolayer->getSampleRate() != audiocodec->getClockRate() && nbSample) { - if (audiolayer->getSampleRate() != _audiocodec->getClockRate() && nbSample) { + if (audiolayer->getSampleRate() != ac ->getClockRate() && nbSample) { SRC_DATA src_data; #ifdef DATAFORMAT_IS_FLOAT src_data.data_in = _dataAudioLayer; @@ -298,8 +302,7 @@ IAXVoIPLink::sendAudioFromMic(void) #endif // Audio parfait à ce point. - - double factord = (double) _audiocodec->getClockRate() / audiolayer->getSampleRate(); + double factord = (double) ac->getClockRate() / audiolayer->getSampleRate(); src_data.src_ratio = factord; src_data.input_frames = nbSample; @@ -312,12 +315,10 @@ IAXVoIPLink::sendAudioFromMic(void) nbSample = src_data.output_frames_gen; // Bon, l'audio en float 8000 est laid mais yé consistant. - src_float_to_short_array (_floatBuffer8000, _intBuffer8000, nbSample); toIAX = _intBuffer8000; // Audio bon ici aussi.. - } else { #ifdef DATAFORMAT_IS_FLOAT // convert _receiveDataDecoded to float inside _receiveData @@ -329,34 +330,8 @@ IAXVoIPLink::sendAudioFromMic(void) #endif } - // NOTE: L'audio ici est bon. - - // - // LE PROBLÈME est dans cette snippet de fonction: - // C'est une fonction destructrice ! On n'en veut pas! - //if ( nbSample < (IAX__20S_8KHZ_MAX - 10) ) { // if only 10 is missing, it's ok - // fill end with 0... - //_debug("begin: %p, nbSample: %d\n", toIAX, nbSample); - //_debug("has to fill: %d chars at %p\n", (IAX__20S_8KHZ_MAX-nbSample)*sizeof(int16), toIAX + nbSample); - //memset(toIAX + nbSample, 0, (IAX__20S_8KHZ_MAX-nbSample)*sizeof(int16)); - //nbSample = IAX__20S_8KHZ_MAX; - //} - - //_debug("AR: Nb sample: %d int, [0]=%d [1]=%d [2]=%d\n", nbSample, toIAX[0], toIAX[1], toIAX[2]); - // NOTE: Le son dans toIAX (nbSamle*sizeof(int16)) est mauvais, - // s'il passe par le snippet précédent. - - - // DEBUG - //_fstream.write((char *) toIAX, nbSample*sizeof(int16)); - //_fstream.flush(); - - // for the mono: range = 0 to IAX_FRAME2SEND * sizeof(int16) - int compSize = _audiocodec->codecEncode(_sendDataEncoded, toIAX, nbSample*sizeof(int16)); - - - + int compSize = ac->codecEncode(_sendDataEncoded, toIAX, nbSample*sizeof(int16)); // Send it out! _mutexIAX.enterMutex(); @@ -368,7 +343,6 @@ IAXVoIPLink::sendAudioFromMic(void) } _mutexIAX.leaveMutex(); } - //unloadCodec(audiocodec); } @@ -488,6 +462,7 @@ bool IAXVoIPLink::answer(const CallID& id) { IAXCall* call = getIAXCall(id); + call->setCodecMap(Manager::instance().getCodecDescriptorMap()); CHK_VALID_CALL; @@ -497,7 +472,6 @@ IAXVoIPLink::answer(const CallID& id) call->setState(Call::Active); call->setConnectionState(Call::Connected); - // Start audio audiolayer->startStream(); //audiolayer->flushMic(); @@ -769,16 +743,18 @@ IAXVoIPLink::iaxHandleVoiceEvent(iax_event* event, IAXCall* call) } if (audiolayer) { - _audiocodec = Manager::instance().getCodecDescriptorMap().getCodec( call -> getAudioCodec() ); + // _debug("codec = %i\n" , call->getFormat()); + // _debug("codec = %i\n" , _audiocodec->getPayload()); + //_debug("codec = %s\n" , _audiocodec->getCodecName().c_str()); // On-the-fly codec changing (normally, when we receive a full packet) // as per http://tools.ietf.org/id/draft-guy-iax-03.txt // - subclass holds the voiceformat property. if (event->subclass && event->subclass != call->getFormat()) { call->setFormat(event->subclass); } - //audiocodec = loadCodec(call->getAudioCodec()); //_debug("Receive: len=%d, format=%d, _receiveDataDecoded=%p\n", event->datalen, call->getFormat(), _receiveDataDecoded); - + AudioCodec* ac = call->getCodecMap().getCodec( call -> getAudioCodec() ); + unsigned char* data = (unsigned char*)event->data; unsigned int size = event->datalen; @@ -787,7 +763,7 @@ IAXVoIPLink::iaxHandleVoiceEvent(iax_event* event, IAXCall* call) size = IAX__20S_8KHZ_MAX; } - int expandedSize = _audiocodec->codecDecode(_receiveDataDecoded, data, size); + int expandedSize = ac->codecDecode(_receiveDataDecoded, data, size); int nbInt16 = expandedSize/sizeof(int16); if (nbInt16 > IAX__20S_8KHZ_MAX) { @@ -799,9 +775,9 @@ IAXVoIPLink::iaxHandleVoiceEvent(iax_event* event, IAXCall* call) int nbSample = nbInt16; int nbSampleMaxRate = nbInt16 * 6; - if ( audiolayer->getSampleRate() != _audiocodec->getClockRate() && nbSample ) { + if ( audiolayer->getSampleRate() != ac->getClockRate() && nbSample ) { // Do sample rate conversion - double factord = (double) audiolayer->getSampleRate() / _audiocodec->getClockRate(); + double factord = (double) audiolayer->getSampleRate() / ac->getClockRate(); // SRC_DATA from samplerate.h SRC_DATA src_data; src_data.data_in = _floatBuffer8000; @@ -837,7 +813,6 @@ IAXVoIPLink::iaxHandleVoiceEvent(iax_event* event, IAXCall* call) } else { _debug("IAX: incoming audio, but no sound card open"); } - //unloadCodec(audiocodec); } @@ -901,6 +876,7 @@ IAXVoIPLink::iaxHandlePrecallEvent(iax_event* event) id = Manager::instance().getNewCallID(); + call = new IAXCall(id, Call::Incoming); if (!call) { diff --git a/src/iaxvoiplink.h b/src/iaxvoiplink.h index 9043c2e4dbda99abf72e7ead305538a77bea1cf6..05f1a08735d3fe9350bd0a426f63f98db690ede2 100644 --- a/src/iaxvoiplink.h +++ b/src/iaxvoiplink.h @@ -211,11 +211,6 @@ private: /** libsamplerate error */ int _src_err; - /** Debugging output file - * @todo Remove this */ - //std::ofstream _fstream; - - AudioCodec* _audiocodec; }; #endif diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp index 17d38782c30d8d20b52aa241fdd0c77f657ff5a6..cd0b8da0eefbc22a0344fba0fb613d48faf2c79a 100644 --- a/src/managerimpl.cpp +++ b/src/managerimpl.cpp @@ -719,8 +719,8 @@ ManagerImpl::callBusy(const CallID& id) { void ManagerImpl::callFailure(const CallID& id) { - _debug("Call failed\n"); if (_dbus) _dbus->getCallManager()->callStateChanged(id, "FAILURE"); + _debug("CALL ID = %s\n" , id.c_str()); if (isCurrentCall(id) ) { playATone(Tone::TONE_BUSY); switchCall(""); diff --git a/src/sipvoiplink.cpp b/src/sipvoiplink.cpp index e61224cb931cfb2bccaa7309245b1e15ac5a679b..6b56befcb370fe8e427ed7850c6ecf7d5d2a6892 100644 --- a/src/sipvoiplink.cpp +++ b/src/sipvoiplink.cpp @@ -860,7 +860,7 @@ SIPVoIPLink::transfer(const CallID& id, const std::string& to) eXosip_unlock(); // shall we delete the call? - removeCall(id); + //removeCall(id); return true; }