diff options
Diffstat (limited to 'channels/chan_sip.c')
-rw-r--r-- | channels/chan_sip.c | 41 |
1 files changed, 8 insertions, 33 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 037c6a339..039cc5092 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -147,6 +147,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/abstract_jb.h" #include "asterisk/compiler.h" #include "asterisk/threadstorage.h" +#include "asterisk/translate.h" #ifndef FALSE #define FALSE 0 @@ -924,7 +925,7 @@ static struct sip_pvt { unsigned int sipoptions; /*!< Supported SIP options on the other end */ struct ast_codec_pref prefs; /*!< codec prefs */ int capability; /*!< Special capability (codec) */ - int jointcapability; /*!< Supported capability at both ends (codecs ) */ + int jointcapability; /*!< Supported capability at both ends (codecs) */ int peercapability; /*!< Supported peer capability */ int prefcodec; /*!< Preferred codec (outbound only) */ int noncodeccapability; /*!< DTMF RFC2833 telephony-event */ @@ -6023,15 +6024,13 @@ static int add_sdp(struct sip_request *resp, struct sip_pvt *p) if (p->redirip.sin_addr.s_addr) { dest.sin_port = p->redirip.sin_port; dest.sin_addr = p->redirip.sin_addr; - if (p->redircodecs) - capability = p->redircodecs; } else { dest.sin_addr = p->ourip; dest.sin_port = sin.sin_port; } /* Ok, let's start working with codec selection here */ - capability = p->jointcapability; + capability = ast_translate_available_formats(p->jointcapability, p->prefcodec); if (option_debug > 1) { char codecbuf[BUFSIZ]; @@ -6039,26 +6038,25 @@ static int add_sdp(struct sip_request *resp, struct sip_pvt *p) ast_log(LOG_DEBUG, "** Our prefcodec: %s \n", ast_getformatname_multiple(codecbuf, sizeof(codecbuf), p->prefcodec)); } - if ((ast_test_flag(&p->t38.t38support, SIP_PAGE2_T38SUPPORT_RTP))) { + if (ast_test_flag(&p->t38.t38support, SIP_PAGE2_T38SUPPORT_RTP)) { ast_build_string(&m_audio_next, &m_audio_left, " %d", 191); ast_build_string(&a_audio_next, &a_audio_left, "a=rtpmap:%d %s/%d\r\n", 191, "t38", 8000); } /* Check if we need video in this call */ - if((capability & AST_FORMAT_VIDEO_MASK) && !ast_test_flag(&p->flags[0], SIP_NOVIDEO)) { + if ((capability & AST_FORMAT_VIDEO_MASK) && !ast_test_flag(&p->flags[0], SIP_NOVIDEO)) { if (p->vrtp) { needvideo = TRUE; if (option_debug > 1) - ast_log(LOG_DEBUG, "This call needs video offers! \n"); + ast_log(LOG_DEBUG, "This call needs video offers!\n"); } else if (option_debug > 1) - ast_log(LOG_DEBUG, "This call needs video offers, but there's no video support enabled ! \n"); + ast_log(LOG_DEBUG, "This call needs video offers, but there's no video support enabled!\n"); } /* Ok, we need video. Let's add what we need for video and set codecs. Video is handled differently than audio since we can not transcode. */ if (needvideo) { - /* Determine video destination */ if (p->vredirip.sin_addr.s_addr) { vdest.sin_addr = p->vredirip.sin_addr; @@ -6074,31 +6072,8 @@ static int add_sdp(struct sip_request *resp, struct sip_pvt *p) snprintf(bandwidth, sizeof(bandwidth), "b=CT:%d\r\n", p->maxcallbitrate); if (debug) ast_verbose("Video is at %s port %d\n", ast_inet_ntoa(p->ourip), ntohs(vsin.sin_port)); - - /* For video, we can't negotiate video offers. Let's compare the incoming call with what we got. */ - if (p->prefcodec) { - int videocapability = (capability & p->prefcodec) & AST_FORMAT_VIDEO_MASK; /* Outbound call */ - - /*! \todo XXX We need to select one codec, not many, since there's no transcoding */ - - /* Now, merge this video capability into capability while removing unsupported codecs */ - if (!videocapability) { - needvideo = FALSE; - if (option_debug > 2) - ast_log(LOG_DEBUG, "** No compatible video codecs... Disabling video.\n"); - } - - /* Replace video capabilities with the new videocapability */ - capability = (capability & AST_FORMAT_AUDIO_MASK) | videocapability; - - if (option_debug > 4) { - char codecbuf[BUFSIZ]; - if (videocapability) - ast_log(LOG_DEBUG, "** Our video codec selection is: %s \n", ast_getformatname_multiple(codecbuf, sizeof(codecbuf), videocapability)); - ast_log(LOG_DEBUG, "** Capability now set to : %s \n", ast_getformatname_multiple(codecbuf, sizeof(codecbuf), capability)); - } - } } + if (debug) ast_verbose("Audio is at %s port %d\n", ast_inet_ntoa(p->ourip), ntohs(sin.sin_port)); |