From d4998689668ee1f03f2c4daf2dbee2aefc1a070a Mon Sep 17 00:00:00 2001 From: dvossel Date: Mon, 11 Jul 2011 18:44:06 +0000 Subject: Updates follow_talker video_mode in confbridge application. follow_talker mode originally echoed the same video stream to all participants. As the primary talker switched around, the video stream would result in the talker seeing themselves. Now the primary talker sees the last person who was talking rather than themselves. git-svn-id: http://svn.digium.com/svn/asterisk/trunk@327640 f38db490-d61c-443f-a65b-d21fe96a405b --- bridges/bridge_softmix.c | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) (limited to 'bridges') diff --git a/bridges/bridge_softmix.c b/bridges/bridge_softmix.c index 8828d640a..00b0556d0 100644 --- a/bridges/bridge_softmix.c +++ b/bridges/bridge_softmix.c @@ -435,13 +435,30 @@ static void softmix_pass_dtmf(struct ast_bridge *bridge, struct ast_bridge_chann } } -static void softmix_pass_video(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, struct ast_frame *frame) +static void softmix_pass_video_top_priority(struct ast_bridge *bridge, struct ast_frame *frame) { struct ast_bridge_channel *tmp; AST_LIST_TRAVERSE(&bridge->channels, tmp, entry) { if (tmp->suspended) { continue; } + if (ast_bridge_is_video_src(bridge, tmp->chan) == 1) { + ast_write(tmp->chan, frame); + break; + } + } +} + +static void softmix_pass_video_all(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, struct ast_frame *frame, int echo) +{ + struct ast_bridge_channel *tmp; + AST_LIST_TRAVERSE(&bridge->channels, tmp, entry) { + if (tmp->suspended) { + continue; + } + if ((tmp->chan == bridge_channel->chan) && !echo) { + continue; + } ast_write(tmp->chan, frame); } } @@ -472,20 +489,26 @@ static enum ast_bridge_write_result softmix_bridge_write(struct ast_bridge *brid /* Determine if this video frame should be distributed or not */ if (frame->frametype == AST_FRAME_VIDEO) { + int num_src = ast_bridge_number_video_src(bridge); + int video_src_priority = ast_bridge_is_video_src(bridge, bridge_channel->chan); + switch (bridge->video_mode.mode) { case AST_BRIDGE_VIDEO_MODE_NONE: break; case AST_BRIDGE_VIDEO_MODE_SINGLE_SRC: - if (ast_bridge_is_video_src(bridge, bridge_channel->chan)) { - softmix_pass_video(bridge, bridge_channel, frame); + if (video_src_priority == 1) { + softmix_pass_video_all(bridge, bridge_channel, frame, 1); } break; case AST_BRIDGE_VIDEO_MODE_TALKER_SRC: ast_mutex_lock(&sc->lock); ast_bridge_update_talker_src_video_mode(bridge, bridge_channel->chan, sc->video_talker.energy_average, ast_format_get_video_mark(&frame->subclass.format)); ast_mutex_unlock(&sc->lock); - if (ast_bridge_is_video_src(bridge, bridge_channel->chan)) { - softmix_pass_video(bridge, bridge_channel, frame); + if (video_src_priority == 1) { + int echo = num_src > 1 ? 0 : 1; + softmix_pass_video_all(bridge, bridge_channel, frame, echo); + } else if (video_src_priority == 2) { + softmix_pass_video_top_priority(bridge, frame); } break; } -- cgit v1.2.3 From e73cab2f3f7846300e1d8a340f8261b16c718226 Mon Sep 17 00:00:00 2001 From: lmadsen Date: Thu, 14 Jul 2011 20:28:54 +0000 Subject: Merged revisions 328247 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.10 ................ r328247 | lmadsen | 2011-07-14 16:25:31 -0400 (Thu, 14 Jul 2011) | 14 lines Merged revisions 328209 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r328209 | lmadsen | 2011-07-14 16:13:06 -0400 (Thu, 14 Jul 2011) | 6 lines Introduce tags in MODULEINFO. This change introduces MODULEINFO into many modules in Asterisk in order to show the community support level for those modules. This is used by changes committed to menuselect by Russell Bryant recently (r917 in menuselect). More information about the support level types and what they mean is available on the wiki at https://wiki.asterisk.org/wiki/display/AST/Asterisk+Module+Support+States ........ ................ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@328259 f38db490-d61c-443f-a65b-d21fe96a405b --- bridges/bridge_builtin_features.c | 4 ++++ bridges/bridge_multiplexed.c | 4 ++++ bridges/bridge_simple.c | 4 ++++ bridges/bridge_softmix.c | 4 ++++ 4 files changed, 16 insertions(+) (limited to 'bridges') diff --git a/bridges/bridge_builtin_features.c b/bridges/bridge_builtin_features.c index 2b21933e2..802e9ae30 100644 --- a/bridges/bridge_builtin_features.c +++ b/bridges/bridge_builtin_features.c @@ -25,6 +25,10 @@ * \ingroup bridges */ +/*** MODULEINFO + core + ***/ + #include "asterisk.h" ASTERISK_FILE_VERSION(__FILE__, "$Revision$") diff --git a/bridges/bridge_multiplexed.c b/bridges/bridge_multiplexed.c index 5a3de43d8..e004dfd40 100644 --- a/bridges/bridge_multiplexed.c +++ b/bridges/bridge_multiplexed.c @@ -25,6 +25,10 @@ * \ingroup bridges */ +/*** MODULEINFO + core + ***/ + #include "asterisk.h" ASTERISK_FILE_VERSION(__FILE__, "$Revision$") diff --git a/bridges/bridge_simple.c b/bridges/bridge_simple.c index 72b91087a..14864df4d 100644 --- a/bridges/bridge_simple.c +++ b/bridges/bridge_simple.c @@ -25,6 +25,10 @@ * \ingroup bridges */ +/*** MODULEINFO + core + ***/ + #include "asterisk.h" ASTERISK_FILE_VERSION(__FILE__, "$Revision$") diff --git a/bridges/bridge_softmix.c b/bridges/bridge_softmix.c index 00b0556d0..7632f36ee 100644 --- a/bridges/bridge_softmix.c +++ b/bridges/bridge_softmix.c @@ -27,6 +27,10 @@ * \ingroup bridges */ +/*** MODULEINFO + core + ***/ + #include "asterisk.h" ASTERISK_FILE_VERSION(__FILE__, "$Revision$") -- cgit v1.2.3