summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Kuron <m.kuron@gmx.de>2016-10-15 11:58:05 +0200
committerMichael Kuron <m.kuron@gmx.de>2016-10-15 05:17:54 -0500
commite9315791b3df34f90910c57395e37c52bb1ac562 (patch)
tree12ab356316454178b3edaec9b635321f4886f3e6
parent5df575e16a11a906cd76b21205173da743305777 (diff)
chan_sip: Only send video on outgoing channel if incoming channel supports it
Previously, the settings videosupport=always and videosupport=yes behaved identically and unconditionally caused a video offer to be sent in the SDP on an outgoing call. This was a regression introduced with commit 5a1d90e1fbfc4b48927aad55311f3b38efbf1f54 in Asterisk 1.6.1. This commit restores correct behavior: videosupport=always causes a video offer to be sent unconditionally, while videosupport=yes will only offer video on an outbound channel if the incoming channel it is bridged to also supports video. That way, the device receiving the outgoing call can display the correct user interface elements for audio or video and will not unnecessarily show a blank video window on an audio-only call. ASTERISK-17470 #close Change-Id: I782f4409d436114dbc97061c3570c0cd24f7c3ae
-rw-r--r--channels/chan_sip.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 47b90d724..780168181 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -8153,12 +8153,17 @@ static struct ast_channel *sip_new(struct sip_pvt *i, int state, const char *tit
We also check for vrtp. If it's not there, we are not allowed do any video anyway.
*/
if (i->vrtp) {
- if (ast_test_flag(&i->flags[1], SIP_PAGE2_VIDEOSUPPORT))
+ if (ast_test_flag(&i->flags[1], SIP_PAGE2_VIDEOSUPPORT_ALWAYS))
needvideo = 1;
else if (ast_format_cap_count(i->prefcaps))
needvideo = ast_format_cap_has_type(i->prefcaps, AST_MEDIA_TYPE_VIDEO); /* Outbound call */
else
needvideo = ast_format_cap_has_type(i->jointcaps, AST_MEDIA_TYPE_VIDEO); /* Inbound call */
+
+ if (!needvideo) {
+ ast_rtp_instance_destroy(i->vrtp);
+ i->vrtp = NULL;
+ }
}
if (i->trtp) {