]> 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:44 +0000 (21:20 -0600)
src/mod/applications/mod_conference/conference_video.c

index 47858621f46cc507c184fcbb24b32a9e98833c4e..e5db850908bf57b3b21e30cb0b2345eed6fcf32a 100644 (file)
@@ -3039,6 +3039,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);
@@ -4170,6 +4177,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);
                }