]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-10107: [mod_conference] Reduce contention on layer floor changes #resolve
authorAnthony Minessale <anthm@freeswitch.org>
Wed, 8 Mar 2017 19:03:10 +0000 (13:03 -0600)
committerAnthony Minessale <anthm@freeswitch.org>
Wed, 8 Mar 2017 21:42:07 +0000 (15:42 -0600)
src/mod/applications/mod_conference/conference_video.c

index 2ea8032968f0ab5d5edb081a124e3a2c1bce558d..fde8db631510ebb4af3fd8de2cdae4363f106d93 100644 (file)
@@ -2733,12 +2733,6 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
                                continue;
                        }
 
-                       //VIDFLOOR
-                       if (conference->canvas_count == 1 && canvas->layout_floor_id > -1 && imember->id == conference->video_floor_holder &&
-                               imember->video_layer_id != canvas->layout_floor_id) {
-                               conference_video_attach_video_layer(imember, canvas, canvas->layout_floor_id);
-                       }
-
                        if (conference->playing_video_file) {
                                switch_img_free(&img);
                                switch_core_session_rwunlock(imember->session);
@@ -2750,6 +2744,11 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
 
                        switch_mutex_lock(canvas->mutex);
 
+                       if (canvas->layout_floor_id > -1 && imember->id == conference->video_floor_holder &&
+                               imember->video_layer_id != canvas->layout_floor_id) {
+                               conference_video_attach_video_layer(imember, canvas, canvas->layout_floor_id);
+                       }
+                       
                        //printf("MEMBER %d layer_id %d canvas: %d/%d\n", imember->id, imember->video_layer_id,
                        //         canvas->layers_used, canvas->total_layers);
 
@@ -3874,15 +3873,6 @@ void conference_video_set_floor_holder(conference_obj_t *conference, conference_
 
        //VIDFLOOR
        if (member) {
-               mcu_canvas_t *canvas = NULL;
-
-               if ((canvas = conference_video_get_canvas_locked(member))) {
-                       if (canvas->layout_floor_id > -1) {
-                               conference_video_attach_video_layer(member, canvas, canvas->layout_floor_id);
-                       }
-                       conference_video_release_canvas(&canvas);
-               }
-
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "Adding video floor %s\n",
                                                  switch_channel_get_name(member->channel));