diff --git a/src/mod/applications/mod_conference/conference_api.c b/src/mod/applications/mod_conference/conference_api.c index 88ec4f0768..844bb24548 100644 --- a/src/mod/applications/mod_conference/conference_api.c +++ b/src/mod/applications/mod_conference/conference_api.c @@ -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); diff --git a/src/mod/applications/mod_conference/conference_video.c b/src/mod/applications/mod_conference/conference_video.c index a6ac6d5624..c3dc4ddd02 100644 --- a/src/mod/applications/mod_conference/conference_video.c +++ b/src/mod/applications/mod_conference/conference_video.c @@ -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);