Skip to content
Snippets Groups Projects
Commit 1fcb6b1b authored by Joshua C. Colp's avatar Joshua C. Colp Committed by Joshua Colp
Browse files

bridge_channel: Don't queue unmapped frames.

If a frame is written to a channel in a bridge we
would normally queue this frame up and the channel
thread would then act upon it. If this frame had no
stream mapping on the channel it would then be
discarded.

This change adds a check before the queueing occurs
to determine if a mapping exists. If it does not
exist then the frame is not even queued at all. This
stops a frame duplication from happening and from
the channel thread having to wake up and deal with
it.

Change-Id: I17189b9b1dec45fc7e4490e8081d444a25a00bda
parent d2500c62
No related branches found
No related tags found
No related merge requests found
......@@ -1043,6 +1043,23 @@ int ast_bridge_channel_queue_frame(struct ast_bridge_channel *bridge_channel, st
return 0;
}
if ((fr->frametype == AST_FRAME_VOICE || fr->frametype == AST_FRAME_VIDEO ||
fr->frametype == AST_FRAME_TEXT || fr->frametype == AST_FRAME_IMAGE ||
fr->frametype == AST_FRAME_RTCP) && fr->stream_num > -1) {
int num = -1;
ast_bridge_channel_lock(bridge_channel);
if (fr->stream_num < (int)AST_VECTOR_SIZE(&bridge_channel->stream_map.to_channel)) {
num = AST_VECTOR_GET(&bridge_channel->stream_map.to_channel, fr->stream_num);
}
ast_bridge_channel_unlock(bridge_channel);
if (num == -1) {
/* We don't have a mapped stream so just discard this frame. */
return 0;
}
}
dup = ast_frdup(fr);
if (!dup) {
return -1;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment