From: Anthony Minessale Date: Tue, 1 Dec 2015 18:24:57 +0000 (-0600) Subject: FS-8595 #resolve [Improve auto bitrate in personal canvas mode and do not let auto... X-Git-Tag: v1.6.6~1^2~77^2~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ca61d45412f9cf4c6186aadfb07a3454af390894;p=thirdparty%2Ffreeswitch.git FS-8595 #resolve [Improve auto bitrate in personal canvas mode and do not let auto bitrate exceed native picture size] --- diff --git a/src/mod/applications/mod_conference/conference_video.c b/src/mod/applications/mod_conference/conference_video.c index 451b6143d1..60b8f4a6cb 100644 --- a/src/mod/applications/mod_conference/conference_video.c +++ b/src/mod/applications/mod_conference/conference_video.c @@ -1921,6 +1921,14 @@ void conference_video_check_auto_bitrate(conference_member_t *member, mcu_layer_ switch_channel_get_name(member->channel), kps); } else { int max = 0; + switch_vid_params_t vid_params = { 0 }; + + switch_core_media_get_vid_params(imember->session, &vid_params); + + if (w > vid_params.width || h > vid_params.height) { + w = vid_params.width; + h = vid_params.height; + } if (layer) { kps = switch_calc_bitrate(w, h, member->conference->video_quality, (int)(member->conference->video_fps.fps)); @@ -2385,7 +2393,9 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr if (count_changed) { int total = conference->members_with_video; - + int kps; + switch_vid_params_t vid_params = { 0 }; + if (!conference_utils_test_flag(conference, CFLAG_VIDEO_REQUIRED_FOR_CANVAS)) { total += conference->members_with_avatar; } @@ -2405,6 +2415,13 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr conference_video_init_canvas_layers(conference, imember->canvas, vlayout); } } + + if (!switch_channel_test_flag(imember->channel, CF_VIDEO_BITRATE_UNMANAGABLE) && + conference_utils_test_flag(conference, CFLAG_MANAGE_INBOUND_VIDEO_BITRATE)) { + switch_core_media_get_vid_params(imember->session, &vid_params); + kps = switch_calc_bitrate(vid_params.width, vid_params.height, conference->video_quality, (int)(imember->conference->video_fps.fps)); + conference_video_set_incoming_bitrate(imember, kps); + } } if (switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY) { @@ -2554,8 +2571,6 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr conference_video_scale_and_patch(layer, use_img, SWITCH_FALSE); } } - - conference_video_check_auto_bitrate(omember, layer); } for (j = 0; j < file_count; j++) {