diff --git a/daemon/src/audio/audiortp/audio_rtp_session.cpp b/daemon/src/audio/audiortp/audio_rtp_session.cpp index d1bfd4516725cbbc9647185bdad7e850f0e46660..473db11a7565d038fa543a6d3be03e3cdf9a2af8 100644 --- a/daemon/src/audio/audiortp/audio_rtp_session.cpp +++ b/daemon/src/audio/audiortp/audio_rtp_session.cpp @@ -45,6 +45,7 @@ AudioRtpSession::AudioRtpSession(SIPCall &call, ost::RTPDataQueue &queue, ost::T , call_(call) , timestamp_(0) , timestampIncrement_(0) + , transportRate_(20) , queue_(queue) , isStarted_(false) , remote_ip_() @@ -98,6 +99,12 @@ void AudioRtpSession::setSessionMedia(AudioCodec &audioCodec) else queue_.setPayloadFormat(ost::StaticPayloadFormat(static_cast<ost::StaticPayloadType>(payloadType))); } + + call_.setRecordingSmplRate(getCodecSampleRate()); + + int transportRate = getCodecFrameSize() / (getCodecSampleRate() / 1000); + transportRate_ = (transportRate > 0)?transportRate:20; + DEBUG("Switching to a transport rate of %d ms",transportRate_); } void AudioRtpSession::sendDtmfEvent() diff --git a/daemon/src/audio/audiortp/audio_rtp_session.h b/daemon/src/audio/audiortp/audio_rtp_session.h index ca4f406bba6496a76dd83537d9b4cf3b962c0338..f62687da32ad4ba9c7c1b8ad6ce72e76d76c0dd6 100644 --- a/daemon/src/audio/audiortp/audio_rtp_session.h +++ b/daemon/src/audio/audiortp/audio_rtp_session.h @@ -80,7 +80,7 @@ class AudioRtpSession : public AudioRtpRecordHandler { /** * Set the audio codec for this RTP session */ - virtual void setSessionMedia(AudioCodec &codec) = 0; + void setSessionMedia(AudioCodec &codec); bool onRTPPacketRecv(ost::IncomingRTPPkt&); @@ -111,6 +111,12 @@ class AudioRtpSession : public AudioRtpRecordHandler { */ int timestampIncrement_; + /** + * Rate at which the transport layer handle packets, should be + * synchronized with codec requirements. + */ + unsigned int transportRate_; + ost::RTPDataQueue &queue_; bool isStarted_; diff --git a/daemon/src/audio/audiortp/audio_symmetric_rtp_session.cpp b/daemon/src/audio/audiortp/audio_symmetric_rtp_session.cpp index e7b6326121c3559f05a52a05bf75c3b00837cef4..84f37720860918de263c46fa6c3f9429503e372c 100644 --- a/daemon/src/audio/audiortp/audio_symmetric_rtp_session.cpp +++ b/daemon/src/audio/audiortp/audio_symmetric_rtp_session.cpp @@ -43,7 +43,6 @@ AudioSymmetricRtpSession::AudioSymmetricRtpSession(SIPCall &call) : , ost::SymmetricRTPSession(ost::InetHostAddress(call.getLocalIp().c_str()), call.getLocalAudioPort()) , AudioRtpSession(call, *this, *this) , rtpThread_(*this) - , transportRate_(20) { DEBUG("Setting new RTP session with destination %s:%d", call_.getLocalIp().c_str(), call_.getLocalAudioPort()); @@ -78,16 +77,6 @@ void AudioSymmetricRtpSession::AudioRtpThread::run() } } -void AudioSymmetricRtpSession::setSessionMedia(AudioCodec &audioCodec) -{ - AudioRtpSession::setSessionMedia(audioCodec); - call_.setRecordingSmplRate(getCodecSampleRate()); - - int transportRate = audioCodec.getFrameSize() / (audioCodec.getClockRate()/1000); - transportRate_ = (transportRate > 0)?transportRate:20; - DEBUG("Switching to a transport rate of %d ms",transportRate_); -} - int AudioSymmetricRtpSession::startRtpThread(AudioCodec &audiocodec) { DEBUG("Starting main thread"); diff --git a/daemon/src/audio/audiortp/audio_symmetric_rtp_session.h b/daemon/src/audio/audiortp/audio_symmetric_rtp_session.h index ba364a16a5ad71a81073afbfc0dd408441c822b2..b7b9e58f57542fa9e82e868d77618459cc2389a1 100644 --- a/daemon/src/audio/audiortp/audio_symmetric_rtp_session.h +++ b/daemon/src/audio/audiortp/audio_symmetric_rtp_session.h @@ -96,11 +96,9 @@ class AudioSymmetricRtpSession : public ost::TimerPort, public ost::SymmetricRTP NON_COPYABLE(AudioRtpThread); AudioSymmetricRtpSession &rtpSession_; }; - void setSessionMedia(AudioCodec &codec); int startRtpThread(AudioCodec &audiocodec); - AudioRtpThread rtpThread_ ; - unsigned int transportRate_; + AudioRtpThread rtpThread_; }; } diff --git a/daemon/src/audio/audiortp/audio_zrtp_session.cpp b/daemon/src/audio/audiortp/audio_zrtp_session.cpp index 0a109bb0e6b406661e463fef4703dbe6bfcf9dbb..469e04e44583888be24a26ee040e67d36e9110eb 100644 --- a/daemon/src/audio/audiortp/audio_zrtp_session.cpp +++ b/daemon/src/audio/audiortp/audio_zrtp_session.cpp @@ -126,12 +126,9 @@ AudioZrtpSession::AudioZrtpThread::AudioZrtpThread(AudioZrtpSession &session) : void AudioZrtpSession::AudioZrtpThread::run() { - // Set recording sampling rate - int threadSleep = 20; - DEBUG("Entering Audio zrtp thread main loop %s", running_ ? "running" : "not running"); - TimerPort::setTimer(threadSleep); + TimerPort::setTimer(zrtpSession_.transportRate_); while (running_) { // Send session @@ -142,7 +139,7 @@ void AudioZrtpSession::AudioZrtpThread::run() Thread::sleep(TimerPort::getTimer()); - TimerPort::incTimer(threadSleep); + TimerPort::incTimer(zrtpSession_.transportRate_); } DEBUG("Leaving audio rtp thread loop"); @@ -153,11 +150,6 @@ int AudioZrtpSession::getIncrementForDTMF() const return 160; } -void AudioZrtpSession::setSessionMedia(AudioCodec &audioCodec) -{ - AudioRtpSession::setSessionMedia(audioCodec); -} - int AudioZrtpSession::startRtpThread(AudioCodec &audiocodec) { if(isStarted_) diff --git a/daemon/src/audio/audiortp/audio_zrtp_session.h b/daemon/src/audio/audiortp/audio_zrtp_session.h index 8ddb53d7e10b152c2a1df26e93c499b68d744089..827ce72741bec5f9f4f5d4e9506dbcfe623e3a5b 100644 --- a/daemon/src/audio/audiortp/audio_zrtp_session.h +++ b/daemon/src/audio/audiortp/audio_zrtp_session.h @@ -96,7 +96,6 @@ class AudioZrtpSession : void sendMicData(); void initializeZid(); std::string zidFilename_; - void setSessionMedia(AudioCodec &codec); int startRtpThread(AudioCodec &audiocodec); virtual int getIncrementForDTMF() const;