[svn-commits] branch oej/sdpcleanup r32280 -
/team/oej/sdpcleanup/channels/chan_sip.c
svn-commits at lists.digium.com
svn-commits at lists.digium.com
Mon Jun 5 06:22:53 MST 2006
Author: oej
Date: Mon Jun 5 08:22:53 2006
New Revision: 32280
URL: http://svn.digium.com/view/asterisk?rev=32280&view=rev
Log:
Whoaa. Video calls are working
Modified:
team/oej/sdpcleanup/channels/chan_sip.c
Modified: team/oej/sdpcleanup/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/oej/sdpcleanup/channels/chan_sip.c?rev=32280&r1=32279&r2=32280&view=diff
==============================================================================
--- team/oej/sdpcleanup/channels/chan_sip.c (original)
+++ team/oej/sdpcleanup/channels/chan_sip.c Mon Jun 5 08:22:53 2006
@@ -5022,6 +5022,7 @@
return 0;
}
+/*! \brief Add codec offer to SDP offer/answer body in INVITE or 200 OK */
static void add_codec_to_sdp(const struct sip_pvt *p, int codec, int sample_rate,
char **m_buf, size_t *m_size, char **a_buf, size_t *a_size,
int debug)
@@ -5042,6 +5043,7 @@
ast_build_string(a_buf, a_size, "a=fmtp:%d annexb=no\r\n", rtp_code);
}
+/*! \brief Add RFC 2833 DTMF offer to SDP */
static void add_noncodec_to_sdp(const struct sip_pvt *p, int format, int sample_rate,
char **m_buf, size_t *m_size, char **a_buf, size_t *a_size,
int debug)
@@ -5066,7 +5068,6 @@
static int add_sdp(struct sip_request *resp, struct sip_pvt *p)
{
int len = 0;
- int pref_codec;
int alreadysent = 0;
struct sockaddr_in sin;
struct sockaddr_in vsin;
@@ -5096,7 +5097,6 @@
struct sockaddr_in vdest = { 0, };
int debug;
int needvideo = FALSE;
- int videocapability = 0;
debug = sip_debug_test_pvt(p);
@@ -5157,15 +5157,26 @@
if (debug)
ast_verbose("Video is at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(vsin.sin_port));
/* For video, we can't negotiate video offers. Let's compare the incoming call with what we got. */
- videocapability = (capability & p->prefcodec) & AST_FORMAT_VIDEO_MASK;
+ 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 */
- capability = (capability & AST_FORMAT_AUDIO_MASK) | videocapability;
- if (option_debug > 2) {
- char codecbuf[BUFSIZ];
- 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));
+ /*! \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 > 2) {
+ 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)
@@ -5195,11 +5206,15 @@
&m_audio_next, &m_audio_left,
&a_audio_next, &a_audio_left,
debug);
- alreadysent |= p->prefcodec;
- }
+ alreadysent |= p->prefcodec & AST_FORMAT_AUDIO_MASK;
+ }
+
+ ast_log(LOG_DEBUG, "****** ONE ************************\n");
/* Start by sending our preferred audio codecs */
for (x = 0; x < 32; x++) {
+ int pref_codec;
+
if (!(pref_codec = ast_codec_pref_index(&p->prefs, x)))
break;
@@ -5215,11 +5230,14 @@
debug);
alreadysent |= pref_codec;
}
+ ast_log(LOG_DEBUG, "****** TWO ************************\n");
/* Now send any other common audio and video codecs, and non-codec formats: */
for (x = 1; x <= (needvideo ? AST_FORMAT_MAX_VIDEO : AST_FORMAT_MAX_AUDIO); x <<= 1) {
if (!(capability & x)) /* Codec not requested */
continue;
+
+ ast_log(LOG_DEBUG, "--- Checking codec ... %d\n", x);
if (alreadysent & x) /* Already added to SDP */
continue;
@@ -5229,12 +5247,17 @@
&m_audio_next, &m_audio_left,
&a_audio_next, &a_audio_left,
debug);
- else
+ else {
add_codec_to_sdp(p, x, 90000,
&m_video_next, &m_video_left,
&a_video_next, &a_video_left,
debug);
- }
+ if (option_debug > 2)
+ ast_log(LOG_DEBUG, "Adding video codec to SDP... %d\n", x);
+ }
+ }
+
+ ast_log(LOG_DEBUG, "****** THREE ************************\n");
/* Now add DTMF RFC2833 telephony-event as a codec */
for (x = 1; x <= AST_RTP_MAX; x <<= 1) {
More information about the svn-commits
mailing list