]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
bridge_softmix: Fix queueing VIDUPDATE control frames
authorGeorge Joseph <gjoseph@sangoma.com>
Wed, 17 Jul 2024 16:44:17 +0000 (10:44 -0600)
committerAsterisk Development Team <asteriskteam@digium.com>
Thu, 12 Sep 2024 18:46:27 +0000 (18:46 +0000)
softmix_bridge_write_control() now calls ast_bridge_queue_everyone_else()
with the bridge_channel so the VIDUPDATE control frame isn't echoed back.

softmix_bridge_write_control() was setting bridge_channel to NULL
when calling ast_bridge_queue_everyone_else() for VIDUPDATE control
frames.  This was causing the frame to be echoed back to the
channel it came from.  In certain cases, like when two channels or
bridges are being recorded, this can cause a ping-pong effect that
floods the system with VIDUPDATE control frames.

Resolves: #780
(cherry picked from commit 1272c28a0d9c140d28c35c444b45d49a5f99c711)

bridges/bridge_softmix.c

index 0165bb34774247a94ff952943c3f0804ce4e4e13..cdccc6796b233c920644383be435533600249e56 100644 (file)
@@ -1243,7 +1243,7 @@ static int softmix_bridge_write_control(struct ast_bridge *bridge, struct ast_br
        case AST_CONTROL_VIDUPDATE:
                if (!bridge->softmix.video_mode.video_update_discard ||
                        ast_tvdiff_ms(ast_tvnow(), softmix_data->last_video_update) > bridge->softmix.video_mode.video_update_discard) {
-                       ast_bridge_queue_everyone_else(bridge, NULL, frame);
+                       ast_bridge_queue_everyone_else(bridge, bridge_channel, frame);
                        softmix_data->last_video_update = ast_tvnow();
                }
                break;