diff --git a/daemon/src/audio/audiortp/audio_rtp_factory.cpp b/daemon/src/audio/audiortp/audio_rtp_factory.cpp index 246aa520027ee83c3f410f7adb68aec05c3d1a10..0f3e7eb4a66fc6869fc425f24c587c771f5686a9 100644 --- a/daemon/src/audio/audiortp/audio_rtp_factory.cpp +++ b/daemon/src/audio/audiortp/audio_rtp_factory.cpp @@ -142,7 +142,7 @@ int AudioRtpFactory::getSessionMedia() if (rtpSession_ == NULL) throw AudioRtpFactoryException("RTP session was null when trying to get session media type"); - return rtpSession_->getCodecPayloadType(); + return rtpSession_->getEncoderPayloadType(); } void AudioRtpFactory::updateSessionMedia(const std::vector<AudioCodec*> &audioCodecs) diff --git a/daemon/src/audio/audiortp/audio_rtp_record_handler.cpp b/daemon/src/audio/audiortp/audio_rtp_record_handler.cpp index cbc6f456e3647306e9f75174da20bf1060706e68..6fcf3737201acfdba9ea8ffc86ed83360ef8662e 100644 --- a/daemon/src/audio/audiortp/audio_rtp_record_handler.cpp +++ b/daemon/src/audio/audiortp/audio_rtp_record_handler.cpp @@ -92,7 +92,8 @@ AudioRtpRecord::AudioRtpRecord() : , dtmfQueue_() , audioCodecs_() , audioCodecMutex_() - , codecPayloadType_(0) + , encoderPayloadType_(0) + , decoderPayloadType_(0) , hasDynamicPayloadType_(false) , decData_() // std::tr1::arrays will be 0-initialized , resampledData_() @@ -144,7 +145,7 @@ bool AudioRtpRecord::tryToSwitchPayloadTypes(int newPt) { for (std::vector<AudioCodec *>::iterator i = audioCodecs_.begin(); i != audioCodecs_.end(); ++i) if (*i and (*i)->getPayloadType() == newPt) { - codecPayloadType_ = (*i)->getPayloadType(); + decoderPayloadType_ = (*i)->getPayloadType(); codecSampleRate_ = (*i)->getClockRate(); codecFrameSize_ = (*i)->getFrameSize(); hasDynamicPayloadType_ = (*i)->hasDynamicPayload(); @@ -204,7 +205,7 @@ void AudioRtpRecordHandler::setRtpMedia(const std::vector<AudioCodec*> &audioCod audioRtpRecord_.audioCodecs_ = audioCodecs; audioRtpRecord_.currentCodecIndex_ = 0; - audioRtpRecord_.codecPayloadType_ = audioCodecs[0]->getPayloadType(); + audioRtpRecord_.encoderPayloadType_ = audioRtpRecord_.decoderPayloadType_ = audioCodecs[0]->getPayloadType(); audioRtpRecord_.codecSampleRate_ = audioCodecs[0]->getClockRate(); audioRtpRecord_.codecFrameSize_ = audioCodecs[0]->getFrameSize(); audioRtpRecord_.hasDynamicPayloadType_ = audioCodecs[0]->hasDynamicPayload(); @@ -316,12 +317,12 @@ void AudioRtpRecordHandler::processDataDecode(unsigned char *spkrData, size_t si { if (audioRtpRecord_.isDead()) return; - if (audioRtpRecord_.codecPayloadType_ != payloadType) { + if (audioRtpRecord_.decoderPayloadType_ != payloadType) { const bool switched = audioRtpRecord_.tryToSwitchPayloadTypes(payloadType); if (not switched) { if (!warningInterval_) { warningInterval_ = 250; - WARN("Invalid payload type %d, expected %d", payloadType, audioRtpRecord_.codecPayloadType_); + WARN("Invalid payload type %d, expected %d", payloadType, audioRtpRecord_.decoderPayloadType_); } warningInterval_--; return; diff --git a/daemon/src/audio/audiortp/audio_rtp_record_handler.h b/daemon/src/audio/audiortp/audio_rtp_record_handler.h index 98695bf922ab65affea95c9abc776f2f4dceedb4..c055842060a93589147daff3f13ff57b285c9d25 100644 --- a/daemon/src/audio/audiortp/audio_rtp_record_handler.h +++ b/daemon/src/audio/audiortp/audio_rtp_record_handler.h @@ -82,7 +82,10 @@ class AudioRtpRecord { private: std::vector<AudioCodec*> audioCodecs_; ost::Mutex audioCodecMutex_; - int codecPayloadType_; + // these will have the same value unless we are sending + // a different codec than we are receiving (asymmetric RTP) + int encoderPayloadType_; + int decoderPayloadType_; bool hasDynamicPayloadType_; std::tr1::array<SFLDataFormat, DEC_BUFFER_SIZE> decData_; // FIXME: resampledData should be resized as needed @@ -132,8 +135,8 @@ class AudioRtpRecordHandler { return audioRtpRecord_.audioCodecs_[0]; } - int getCodecPayloadType() const { - return audioRtpRecord_.codecPayloadType_; + int getEncoderPayloadType() const { + return audioRtpRecord_.encoderPayloadType_; } int getCodecSampleRate() const { diff --git a/daemon/src/audio/audiortp/audio_rtp_session.cpp b/daemon/src/audio/audiortp/audio_rtp_session.cpp index e7eb4fbbaeb3d32265e3e0add7c3ec44fe4cfdf9..721f5dd547f1be716cec4b6f47b49f824a77a10c 100644 --- a/daemon/src/audio/audiortp/audio_rtp_session.cpp +++ b/daemon/src/audio/audiortp/audio_rtp_session.cpp @@ -84,7 +84,7 @@ void AudioRtpSession::setSessionMedia(const std::vector<AudioCodec*> &audioCodec setRtpMedia(audioCodecs); // G722 requires timestamp to be incremented at 8kHz - const ost::PayloadType payloadType = getCodecPayloadType(); + const ost::PayloadType payloadType = getEncoderPayloadType(); if (payloadType == ost::sptG722) { const int G722_RTP_TIME_INCREMENT = 160; timestampIncrement_ = G722_RTP_TIME_INCREMENT; @@ -134,7 +134,7 @@ void AudioRtpSession::sendDtmfEvent() } // restore the payload to audio - const ost::StaticPayloadFormat pf(static_cast<ost::StaticPayloadType>(getCodecPayloadType())); + const ost::StaticPayloadFormat pf(static_cast<ost::StaticPayloadType>(getEncoderPayloadType())); queue_.setPayloadFormat(pf); // decrease length remaining to process for this event diff --git a/daemon/test/sdptest.cpp b/daemon/test/sdptest.cpp index baa1e35284aa54204ab3f7f910e6d776c10079a1..6020471f802997ab038b195c2aedeef968ef1ff7 100644 --- a/daemon/test/sdptest.cpp +++ b/daemon/test/sdptest.cpp @@ -287,7 +287,9 @@ void SDPTest::testReinvite() CPPUNIT_ASSERT(session_->getLocalIP() == LOCALHOST); CPPUNIT_ASSERT(session_->getRemoteIP() == "host.example.com"); - sfl::AudioCodec *codec = session_->getSessionAudioMedia(); + std::vector<sfl::AudioCodec*> codecs; + session_->getSessionAudioMedia(codecs); + sfl::AudioCodec *codec = codecs[0]; CPPUNIT_ASSERT(codec and codec->getMimeSubtype() == "PCMU"); pjmedia_sdp_session *reinviteOffer;