mirror of
https://github.com/asterisk/asterisk.git
synced 2026-07-27 16:07:15 -07:00
Merge "Confbridge: Add "sfu" video mode to bridge profile options."
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user