From 3a7415b27f5b9dda350ea23abcda449396a7ef1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Wed, 16 Apr 2014 16:06:19 -0400 Subject: [PATCH] sdp: put local codecs on the top of the list Issue: #45447 --- daemon/src/audio/audiortp/audio_rtp_stream.cpp | 18 ++++++++++-------- daemon/src/audio/audiortp/audio_rtp_stream.h | 6 ++++++ daemon/src/sip/sipvoiplink.cpp | 2 +- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/daemon/src/audio/audiortp/audio_rtp_stream.cpp b/daemon/src/audio/audiortp/audio_rtp_stream.cpp index 25936d2c1d..f3279b2a82 100644 --- a/daemon/src/audio/audiortp/audio_rtp_stream.cpp +++ b/daemon/src/audio/audiortp/audio_rtp_stream.cpp @@ -241,16 +241,18 @@ void AudioRtpStream::setRtpMedia(const std::vector<AudioCodec*> &audioCodecs) return; } - AudioFormat f = Manager::instance().getMainBuffer().getInternalAudioFormat(); - audioCodecs[0]->setOptimalFormat(f.sample_rate, f.nb_channels); // FIXME: assuming right encoder/decoder are first? currentEncoderIndex_ = currentDecoderIndex_ = 0; - // FIXME: this is probably not the right payload type - const int pt = audioCodecs[0]->getPayloadType(); + AudioCodec& codec = *audioCodecs[currentEncoderIndex_]; + + AudioFormat f = Manager::instance().getMainBuffer().getInternalAudioFormat(); + codec.setOptimalFormat(f.sample_rate, f.nb_channels); + + const int pt = encoder.getPayloadType(); encoder_.payloadType = decoder_.payloadType = pt; - encoder_.frameSize = decoder_.frameSize = audioCodecs[0]->getFrameSize(); + encoder_.frameSize = decoder_.frameSize = codec.getFrameSize(); - AudioFormat codecFormat(audioCodecs[0]->getCurrentClockRate(), audioCodecs[0]->getCurrentChannels()); + AudioFormat codecFormat(codec.getCurrentClockRate(), codec.getCurrentChannels()); if (codecFormat != decoder_.format or codecFormat != encoder_.format) { encoder_.format = decoder_.format = codecFormat; #if HAVE_SPEEXDSP @@ -258,10 +260,10 @@ void AudioRtpStream::setRtpMedia(const std::vector<AudioCodec*> &audioCodecs) #endif } Manager::instance().audioFormatUsed(codecFormat); - hasDynamicPayloadType_ = audioCodecs[0]->hasDynamicPayload(); + hasDynamicPayloadType_ = codec.hasDynamicPayload(); codecEncMutex_.unlock(); - resetDecoderPLC(audioCodecs[0]); + resetDecoderPLC(audioCodecs[currentDecoderIndex_]); codecDecMutex_.unlock(); } diff --git a/daemon/src/audio/audiortp/audio_rtp_stream.h b/daemon/src/audio/audiortp/audio_rtp_stream.h index 229ef42d69..0debd2be6f 100644 --- a/daemon/src/audio/audiortp/audio_rtp_stream.h +++ b/daemon/src/audio/audiortp/audio_rtp_stream.h @@ -93,7 +93,13 @@ class AudioRtpStream { AudioRtpStream(const std::string &id); virtual ~AudioRtpStream(); void initBuffers(); + + /** + * Set the list of codecs supported by this stream. + * The codec used for encoding must be first. + */ void setRtpMedia(const std::vector<AudioCodec*> &codecs); + /** * Decode audio data received from peer */ diff --git a/daemon/src/sip/sipvoiplink.cpp b/daemon/src/sip/sipvoiplink.cpp index 2b3f8eb66a..1a3acd452c 100644 --- a/daemon/src/sip/sipvoiplink.cpp +++ b/daemon/src/sip/sipvoiplink.cpp @@ -1964,8 +1964,8 @@ void sdp_media_update_cb(pjsip_inv_session *inv, pj_status_t status) DEBUG("Local active SDP Session:\n%s", buffer); // Set active SDP sessions - sdpSession->setActiveRemoteSdpSession(remoteSDP); sdpSession->setActiveLocalSdpSession(local_sdp); + sdpSession->setActiveRemoteSdpSession(remoteSDP); // Update internal field for sdpSession->setMediaTransportInfoFromRemoteSdp(); -- GitLab