Merge "Confbridge: Add "sfu" video mode to bridge profile options."

This commit is contained in:
Joshua Colp
2017-06-06 07:05:13 -05:00
committed by Gerrit Code Review
5 changed files with 34 additions and 5 deletions
+5 -1
View File
@@ -1483,6 +1483,8 @@ static struct confbridge_conference *join_conference_bridge(const char *conferen
if (ast_test_flag(&conference->b_profile, BRIDGE_OPT_VIDEO_SRC_FOLLOW_TALKER)) {
ast_bridge_set_talker_src_video_mode(conference->bridge);
} else if (ast_test_flag(&conference->b_profile, BRIDGE_OPT_VIDEO_SRC_SFU)) {
ast_bridge_set_sfu_video_mode(conference->bridge);
}
/* Link it into the conference bridges container */
@@ -2841,7 +2843,9 @@ static int execute_menu_entry(struct confbridge_conference *conference,
break;
case MENU_ACTION_SET_SINGLE_VIDEO_SRC:
ao2_lock(conference);
ast_bridge_set_single_src_video_mode(conference->bridge, bridge_channel->chan);
if (!ast_test_flag(&conference->b_profile, BRIDGE_OPT_VIDEO_SRC_SFU)) {
ast_bridge_set_single_src_video_mode(conference->bridge, bridge_channel->chan);
}
ao2_unlock(conference);
break;
case MENU_ACTION_RELEASE_SINGLE_VIDEO_SRC:
+15 -4
View File
@@ -1952,25 +1952,36 @@ static int video_mode_handler(const struct aco_option *opt, struct ast_variable
ast_set_flags_to(b_profile,
BRIDGE_OPT_VIDEO_SRC_FIRST_MARKED
| BRIDGE_OPT_VIDEO_SRC_LAST_MARKED
| BRIDGE_OPT_VIDEO_SRC_FOLLOW_TALKER,
| BRIDGE_OPT_VIDEO_SRC_FOLLOW_TALKER
| BRIDGE_OPT_VIDEO_SRC_SFU,
BRIDGE_OPT_VIDEO_SRC_FIRST_MARKED);
} else if (!strcasecmp(var->value, "last_marked")) {
ast_set_flags_to(b_profile,
BRIDGE_OPT_VIDEO_SRC_FIRST_MARKED
| BRIDGE_OPT_VIDEO_SRC_LAST_MARKED
| BRIDGE_OPT_VIDEO_SRC_FOLLOW_TALKER,
| BRIDGE_OPT_VIDEO_SRC_FOLLOW_TALKER
| BRIDGE_OPT_VIDEO_SRC_SFU,
BRIDGE_OPT_VIDEO_SRC_LAST_MARKED);
} else if (!strcasecmp(var->value, "follow_talker")) {
ast_set_flags_to(b_profile,
BRIDGE_OPT_VIDEO_SRC_FIRST_MARKED
| BRIDGE_OPT_VIDEO_SRC_LAST_MARKED
| BRIDGE_OPT_VIDEO_SRC_FOLLOW_TALKER,
| BRIDGE_OPT_VIDEO_SRC_FOLLOW_TALKER
| BRIDGE_OPT_VIDEO_SRC_SFU,
BRIDGE_OPT_VIDEO_SRC_FOLLOW_TALKER);
} else if (!strcasecmp(var->value, "none")) {
ast_clear_flag(b_profile,
BRIDGE_OPT_VIDEO_SRC_FIRST_MARKED
| BRIDGE_OPT_VIDEO_SRC_LAST_MARKED
| BRIDGE_OPT_VIDEO_SRC_FOLLOW_TALKER);
| BRIDGE_OPT_VIDEO_SRC_FOLLOW_TALKER
| BRIDGE_OPT_VIDEO_SRC_SFU);
} else if (!strcasecmp(var->value, "sfu")) {
ast_set_flags_to(b_profile,
BRIDGE_OPT_VIDEO_SRC_FIRST_MARKED
| BRIDGE_OPT_VIDEO_SRC_LAST_MARKED
| BRIDGE_OPT_VIDEO_SRC_FOLLOW_TALKER
| BRIDGE_OPT_VIDEO_SRC_SFU,
BRIDGE_OPT_VIDEO_SRC_SFU);
} else {
return -1;
}
+1
View File
@@ -72,6 +72,7 @@ enum bridge_profile_flags {
BRIDGE_OPT_RECORD_FILE_APPEND = (1 << 4), /*!< Set if the record file should be appended to between start/stops. */
BRIDGE_OPT_RECORD_FILE_TIMESTAMP = (1 << 5), /*< Set if the record file should have a timestamp appended */
BRIDGE_OPT_BINAURAL_ACTIVE = (1 << 6), /*< Set if binaural convolution is activated */
BRIDGE_OPT_VIDEO_SRC_SFU = (1 << 7), /*< Selective forwarding unit */
};
enum conf_menu_action_id {
+5
View File
@@ -897,6 +897,11 @@ void ast_bridge_set_single_src_video_mode(struct ast_bridge *bridge, struct ast_
*/
void ast_bridge_set_talker_src_video_mode(struct ast_bridge *bridge);
/*!
* \brief Set the bridge to be a selective forwarding unit
*/
void ast_bridge_set_sfu_video_mode(struct ast_bridge *bridge);
/*!
* \brief Update information about talker energy for talker src video mode.
*/
+8
View File
@@ -3807,6 +3807,14 @@ void ast_bridge_set_talker_src_video_mode(struct ast_bridge *bridge)
ast_bridge_unlock(bridge);
}
void ast_bridge_set_sfu_video_mode(struct ast_bridge *bridge)
{
ast_bridge_lock(bridge);
cleanup_video_mode(bridge);
bridge->softmix.video_mode.mode = AST_BRIDGE_VIDEO_MODE_SFU;
ast_bridge_unlock(bridge);
}
void ast_bridge_update_talker_src_video_mode(struct ast_bridge *bridge, struct ast_channel *chan, int talker_energy, int is_keyframe)
{
struct ast_bridge_video_talker_src_data *data;