]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-7940 #resolve
authorAnthony Minessale <anthm@freeswitch.org>
Wed, 5 Aug 2015 15:21:23 +0000 (10:21 -0500)
committerBrian West <brian@freeswitch.org>
Wed, 5 Aug 2015 15:21:23 +0000 (10:21 -0500)
src/mod/applications/mod_conference/conference_api.c
src/mod/applications/mod_conference/conference_video.c

index 88ec4f076803deab36a396406e49f65642a95115..844bb245487b428b501c2cd1f02eb12cddce63c4 100644 (file)
@@ -701,7 +701,7 @@ switch_status_t conference_api_sub_canvas(conference_member_t *member, switch_st
 {
        int index;
        char *val = (char *) data;
-       mcu_canvas_t *canvas = NULL;
+       //mcu_canvas_t *canvas = NULL;
 
        if (member->conference->canvas_count == 1) {
                stream->write_function(stream, "-ERR Only 1 Canvas\n");
@@ -722,8 +722,8 @@ switch_status_t conference_api_sub_canvas(conference_member_t *member, switch_st
        member->canvas_id = index;
        member->layer_timeout = DEFAULT_LAYER_TIMEOUT;
 
-       canvas = member->conference->canvases[member->canvas_id];
-       conference_video_attach_video_layer(member, canvas, index);
+       //canvas = member->conference->canvases[member->canvas_id];
+       //conference_video_attach_video_layer(member, canvas, index);
        conference_video_reset_member_codec_index(member);
        switch_mutex_unlock(member->conference->canvas_mutex);
 
index a6ac6d5624360b640c6dd7ee744265e0697eab5d..c3dc4ddd029eda02b076ddd0f50af502a5246166 100644 (file)
@@ -1720,7 +1720,7 @@ switch_status_t conference_video_find_layer(conference_obj_t *conference, mcu_ca
                                }
                        } else if ((!xlayer->member_id || (!member->avatar_png_img &&
                                                                                           xlayer->is_avatar &&
-                                                                                          xlayer->member_id != conference->video_floor_holder)) &&
+                                                                                          (conference->canvas_count > 1 || xlayer->member_id != conference->video_floor_holder))) &&
                                           !xlayer->fnode && !xlayer->geometry.fileonly) {
                                switch_status_t lstatus;
 
@@ -2099,11 +2099,12 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
                                switch_img_free(&img);
                        }
 
-                       if (!layer) {
+                       if (!layer && (!conference_utils_test_flag(imember->conference, CFLAG_VIDEO_REQUIRED_FOR_CANVAS) || (switch_channel_test_flag(imember->channel, CF_VIDEO) && !imember->video_flow == SWITCH_MEDIA_FLOW_SENDONLY))) {
                                if (conference_video_find_layer(conference, canvas, imember, &layer) == SWITCH_STATUS_SUCCESS) {
                                        imember->layer_timeout = 0;
                                } else {
                                        if (--imember->layer_timeout <= 0) {
+
                                                conference_video_next_canvas(imember);
                                        }
                                }
@@ -2516,7 +2517,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
                                                }
                                        }
                                }
-                               
+
                                if (!x) break;
 
                                switch_thread_rwlock_wrlock(canvas->video_rwlock);