]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-10107
authorAnthony Minessale <anthm@freeswitch.org>
Sat, 11 Mar 2017 03:20:24 +0000 (21:20 -0600)
committerAnthony Minessale <anthm@freeswitch.org>
Sat, 11 Mar 2017 03:20:58 +0000 (21:20 -0600)
src/mod/applications/mod_conference/conference_video.c

index ea79596d2386eb0e5a904803b22485caf9e3ad7b..97020133880112cd97fc1dee0dbca52c50d3021c 100644 (file)
@@ -2577,6 +2577,13 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
                                continue;
                        }
 
+                       //VIDFLOOR
+                       if (conference->video_mode == CONF_VIDEO_MODE_MUX &&
+                               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);
@@ -3677,6 +3684,17 @@ void conference_video_set_floor_holder(conference_obj_t *conference, conference_
                                conference->last_video_floor_holder = conference->video_floor_holder;
                        }
 
+                       if (conference->video_mode == CONF_VIDEO_MODE_MUX &&
+                               conference->last_video_floor_holder && (imember = conference_member_get(conference, conference->last_video_floor_holder))) {
+                               switch_core_session_request_video_refresh(imember->session);
+                               conference_video_clear_managed_kps(imember);
+                               if (conference_utils_member_test_flag(imember, MFLAG_VIDEO_BRIDGE)) {
+                                       conference_utils_set_flag(conference, CFLAG_VID_FLOOR_LOCK);
+                               }
+                               switch_thread_rwlock_unlock(imember->rwlock);
+                               imember = NULL;
+                       }
+
                        old_member = conference->video_floor_holder;
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "Dropping video floor %d\n", old_member);
                }