]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
add simple fix for SDP to report proper sample rate for G.722 media sessions
authorKevin P. Fleming <kpfleming@digium.com>
Wed, 8 Nov 2006 18:07:16 +0000 (18:07 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Wed, 8 Nov 2006 18:07:16 +0000 (18:07 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@47333 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index ff915c70ff09dd3a95d0de840d8ef54436d8f528..2064fe6ff76edea8a4681742ce22f83f2de28dfd 100644 (file)
@@ -5976,6 +5976,8 @@ static void add_noncodec_to_sdp(const struct sip_pvt *p, int format, int sample_
                ast_build_string(a_buf, a_size, "a=fmtp:%d 0-16\r\n", rtp_code);
 }
 
+#define SDP_SAMPLE_RATE(x) (x == AST_FORMAT_G722) ? 16000 : 8000
+
 /*! \brief Add Session Description Protocol message */
 static enum sip_result add_sdp(struct sip_request *resp, struct sip_pvt *p)
 {
@@ -6119,31 +6121,33 @@ static enum sip_result add_sdp(struct sip_request *resp, struct sip_pvt *p)
                Note that p->prefcodec can include video codecs, so mask them out
         */
        if (capability & p->prefcodec) {
-               add_codec_to_sdp(p, p->prefcodec & AST_FORMAT_AUDIO_MASK, 8000,
+               int codec = p->prefcodec & AST_FORMAT_AUDIO_MASK;
+
+               add_codec_to_sdp(p, codec, SDP_SAMPLE_RATE(codec),
                                 &m_audio_next, &m_audio_left,
                                 &a_audio_next, &a_audio_left,
                                 debug, &min_audio_packet_size);
-               alreadysent |= p->prefcodec & AST_FORMAT_AUDIO_MASK;
+               alreadysent |= codec;
        }
 
        /* Start by sending our preferred audio codecs */
        for (x = 0; x < 32; x++) {
-               int pref_codec;
+               int codec;
 
-               if (!(pref_codec = ast_codec_pref_index(&p->prefs, x)))
+               if (!(codec = ast_codec_pref_index(&p->prefs, x)))
                        break; 
 
-               if (!(capability & pref_codec))
+               if (!(capability & codec))
                        continue;
 
-               if (alreadysent & pref_codec)
+               if (alreadysent & codec)
                        continue;
 
-               add_codec_to_sdp(p, pref_codec, 8000,
+               add_codec_to_sdp(p, codec, SDP_SAMPLE_RATE(codec),
                                 &m_audio_next, &m_audio_left,
                                 &a_audio_next, &a_audio_left,
                                 debug, &min_audio_packet_size);
-               alreadysent |= pref_codec;
+               alreadysent |= codec;
        }
 
        /* Now send any other common audio and video codecs, and non-codec formats: */
@@ -6155,7 +6159,7 @@ static enum sip_result add_sdp(struct sip_request *resp, struct sip_pvt *p)
                        continue;
 
                if (x <= AST_FORMAT_MAX_AUDIO)
-                       add_codec_to_sdp(p, x, 8000,
+                       add_codec_to_sdp(p, x, SDP_SAMPLE_RATE(x),
                                         &m_audio_next, &m_audio_left,
                                         &a_audio_next, &a_audio_left,
                                         debug, &min_audio_packet_size);