From a6dbc2c6f883f9cdbb09e893751117519a83409d Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 30 Jan 2015 17:48:24 -0600 Subject: [PATCH] FS-7513: fix overlap --- .../mod_conference/mod_conference.c | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index d2361eaa9b..46f1ab7e31 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -1121,14 +1121,21 @@ static void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread int i; remaining += switch_queue_size(imember->video_queue); + + switch_mutex_lock(conference->canvas->mutex); if (imember->video_layer_id > -1) { - layer = &conference->canvas->layers[imember->video_layer_id]; + if (imember->video_layer_id >= conference->canvas->total_layers) { + conference->canvas->layers[imember->video_layer_id].member_id = 0; + imember->video_layer_id = -1; + conference->canvas->layers_used--; + } else { + layer = &conference->canvas->layers[imember->video_layer_id]; + } } - - if (!layer) { + + if (!layer && conference->canvas->layers_used < conference->canvas->total_layers) { /* find an empty layer */ - switch_mutex_lock(conference->canvas->mutex); for (i = 0; i < conference->canvas->total_layers; i++) { layer = &conference->canvas->layers[i]; if (!layer->member_id) { @@ -1138,8 +1145,8 @@ static void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread break; } } - switch_mutex_unlock(conference->canvas->mutex); } + switch_mutex_unlock(conference->canvas->mutex); if (layer) { scale_and_patch(conference->canvas->img, img, layer); @@ -1153,6 +1160,9 @@ static void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread } } + if (remaining) goto top; + + for (imember = conference->members; imember; imember = imember->next) { switch_channel_t *ichannel = switch_core_session_get_channel(imember->session); @@ -1176,8 +1186,6 @@ static void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread } } - if (remaining) goto top; - switch_mutex_unlock(conference->member_mutex); switch_mutex_lock(conference->canvas->cond2_mutex);