bridge_softmix: Fix sporadic incorrect video stream mapping.

When an externally initiated renegotiation occurred it was
possible for video streams to be incorrectly remapped,
resulting in no video flowing to some receivers.

This change ensures that only the video source sets up
mappings and also that removed streams do not have mappings
set up.

Change-Id: Iab05f2254df3606670774844bb0935f833d3a9b0
This commit is contained in:
Joshua Colp
2018-04-20 12:40:01 +00:00
parent a9c74fdc04
commit de9c0ede4a

View File

@@ -2148,12 +2148,13 @@ static void softmix_bridge_stream_topology_changed(struct ast_bridge *bridge, st
AST_VECTOR_SIZE(&media_types) - 1, &bridge->channels); AST_VECTOR_SIZE(&media_types) - 1, &bridge->channels);
ast_bridge_channel_lock(participant); ast_bridge_channel_lock(participant);
ast_channel_lock(participant->chan); ast_channel_lock(participant->chan);
} else if (is_video_dest(stream, NULL, NULL)) { } else if (ast_stream_get_type(stream) == AST_MEDIA_TYPE_VIDEO) {
/* We expect to never read media from video destination channels, but just /* Video stream mapping occurs directly when a video source stream
* in case, we should set their to_bridge value to -1. * is found on a channel. Video streams should otherwise remain
* unmapped.
*/ */
AST_VECTOR_REPLACE(&participant->stream_map.to_bridge, i, -1); AST_VECTOR_REPLACE(&participant->stream_map.to_bridge, i, -1);
} else { } else if (ast_stream_get_state(stream) != AST_STREAM_STATE_REMOVED) {
/* XXX This is copied from ast_stream_topology_map(). This likely could /* XXX This is copied from ast_stream_topology_map(). This likely could
* be factored out in some way * be factored out in some way
*/ */