diff --git a/main/bridge.c b/main/bridge.c index 7a7b6f6cb5e2074203e446d8b069f7b94d350ccd..add586c3ca224300ba355fa265bdaad5047f2029 100644 --- a/main/bridge.c +++ b/main/bridge.c @@ -5163,6 +5163,7 @@ static char *handle_bridge_show_specific(struct ast_cli_entry *e, int cmd, struc ast_cli(a->fd, "Subclass: %s\n", snapshot->subclass); ast_cli(a->fd, "Creator: %s\n", snapshot->creator); ast_cli(a->fd, "Name: %s\n", snapshot->name); + ast_cli(a->fd, "Video-Mode: %s\n", ast_bridge_video_mode_to_string(snapshot->video_mode)); ast_cli(a->fd, "Video-Source-Id: %s\n", snapshot->video_source_id); ast_cli(a->fd, "Num-Channels: %u\n", snapshot->num_channels); ast_cli(a->fd, "Num-Active: %u\n", snapshot->num_active); diff --git a/res/res_stasis.c b/res/res_stasis.c index 64f05ef72670bee59856ef87f98e820412c1b608..f975386a186b2dd171ec40e5702404bcdff0ace6 100644 --- a/res/res_stasis.c +++ b/res/res_stasis.c @@ -808,22 +808,14 @@ static struct ast_bridge *bridge_create_common(const char *type, const char *nam return NULL; } - bridge = bridge_stasis_new(capabilities, flags, name, id); + bridge = bridge_stasis_new(capabilities, flags, name, id, video_mode); if (bridge) { - if (video_mode == AST_BRIDGE_VIDEO_MODE_SFU) { - ast_bridge_set_sfu_video_mode(bridge); - /* We require a minimum 5 seconds between video updates to stop floods from clients, - * this should rarely be changed but should become configurable in the future. - */ - ast_bridge_set_video_update_discard(bridge, 5); - } else { - ast_bridge_set_talker_src_video_mode(bridge); - } if (!ao2_link(app_bridges, bridge)) { ast_bridge_destroy(bridge, 0); bridge = NULL; } } + return bridge; } diff --git a/res/stasis/stasis_bridge.c b/res/stasis/stasis_bridge.c index d78e59cacd31964595caab1e688b2980240d2fc7..d5f70a0ad63150fee9e9f3be6eba5511808776a8 100644 --- a/res/stasis/stasis_bridge.c +++ b/res/stasis/stasis_bridge.c @@ -297,12 +297,26 @@ static void bridge_stasis_pull(struct ast_bridge *self, struct ast_bridge_channe ast_bridge_base_v_table.pull(self, bridge_channel); } -struct ast_bridge *bridge_stasis_new(uint32_t capabilities, unsigned int flags, const char *name, const char *id) +struct ast_bridge *bridge_stasis_new(uint32_t capabilities, unsigned int flags, const char *name, const char *id, enum ast_bridge_video_mode_type video_mode) { void *bridge; bridge = bridge_alloc(sizeof(struct ast_bridge), &bridge_stasis_v_table); bridge = bridge_base_init(bridge, capabilities, flags, "Stasis", name, id); + if (!bridge) { + return NULL; + } + + if (video_mode == AST_BRIDGE_VIDEO_MODE_SFU) { + ast_bridge_set_sfu_video_mode(bridge); + /* We require a minimum 5 seconds between video updates to stop floods from clients, + * this should rarely be changed but should become configurable in the future. + */ + ast_bridge_set_video_update_discard(bridge, 5); + } else { + ast_bridge_set_talker_src_video_mode(bridge); + } + bridge = bridge_register(bridge); return bridge; diff --git a/res/stasis/stasis_bridge.h b/res/stasis/stasis_bridge.h index 2590fd7996cad746f19238e2c63567ab2767a458..6e2a48bb3b7c0b57df3d0edf163c940bfc51e628 100644 --- a/res/stasis/stasis_bridge.h +++ b/res/stasis/stasis_bridge.h @@ -50,11 +50,12 @@ extern "C" { * \param flags Flags that will alter the behavior of the bridge * \param name Name given to the bridge by Stasis (optional) * \param id Unique ID given to the bridge by Stasis (optional) + * \param video_mode Video mode of the bridge * * \retval a pointer to a new bridge on success * \retval NULL on failure */ -struct ast_bridge *bridge_stasis_new(uint32_t capabilities, unsigned int flags, const char *name, const char *id); +struct ast_bridge *bridge_stasis_new(uint32_t capabilities, unsigned int flags, const char *name, const char *id, enum ast_bridge_video_mode_type video_mode); /*! * \internal