From 00714357576b0775c7d8d39d500c9dff20368093 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 14 Mar 2018 13:40:08 -0500 Subject: [PATCH] FS-11031: [mod_conference] refresh and keyframes sent too often in multi-canvas mode #resolve --- .../mod_conference/conference_video.c | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/mod/applications/mod_conference/conference_video.c b/src/mod/applications/mod_conference/conference_video.c index c1bd8ff425..a324cb504f 100644 --- a/src/mod/applications/mod_conference/conference_video.c +++ b/src/mod/applications/mod_conference/conference_video.c @@ -2667,10 +2667,25 @@ switch_status_t conference_video_find_layer(conference_obj_t *conference, mcu_ca void conference_video_next_canvas(conference_member_t *imember) { - if (imember->canvas_id == (int)imember->conference->canvas_count - 1) { - imember->canvas_id = 0; - } else { - imember->canvas_id++; + int x = 0, y = 0; + + if (imember->conference->canvas_count < 2) { + return; + } + + y = imember->canvas_id; + + for (x = 0; x < imember->conference->canvas_count; x++) { + if (y == (int)imember->conference->canvas_count - 1) { + y = 0; + } else { + y++; + } + + if (imember->conference->canvases[y]->video_count < imember->conference->canvases[y]->total_layers) { + imember->canvas_id = y; + break; + } } imember->layer_timeout = DEFAULT_LAYER_TIMEOUT;