]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
bridge_softmix: Fix sporadic incorrect video stream mapping.
authorJoshua Colp <jcolp@digium.com>
Fri, 20 Apr 2018 12:40:01 +0000 (12:40 +0000)
committerJoshua Colp <jcolp@digium.com>
Fri, 20 Apr 2018 21:25:41 +0000 (21:25 +0000)
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

bridges/bridge_softmix.c

index f0a3fb42df45709f0f5c07ae87cec0b98412d528..b222dde0424364ea8cd581eadfc7212a941bf514 100644 (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_bridge_channel_lock(participant);
                                ast_channel_lock(participant->chan);
-                       } else if (is_video_dest(stream, NULL, NULL)) {
-                               /* We expect to never read media from video destination channels, but just
-                                * in case, we should set their to_bridge value to -1.
+                       } else if (ast_stream_get_type(stream) == AST_MEDIA_TYPE_VIDEO) {
+                               /* Video stream mapping occurs directly when a video source stream
+                                * is found on a channel. Video streams should otherwise remain
+                                * unmapped.
                                 */
                                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
                                 * be factored out in some way
                                 */