float sdiv = 0;
int fdiv = 0;
int force_w = 0, force_h = 0;
-
-
- if (!conference_utils_test_flag(conference, CFLAG_MINIMIZE_VIDEO_ENCODING)) {
- stream->write_function(stream, "-ERR Bandwidth control not available.\n");
- return SWITCH_STATUS_SUCCESS;
- }
-
+ conference_member_t *imember;
+
if (!argv[2]) {
stream->write_function(stream, "-ERR Invalid input\n");
return SWITCH_STATUS_SUCCESS;
}
switch_mutex_lock(conference->member_mutex);
+
+ for (imember = conference->members; imember; imember = imember->next) {
+
+ if (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO_READY)) {
+ continue;
+ }
+
+ switch_core_media_set_outgoing_bitrate(imember->session, SWITCH_MEDIA_TYPE_VIDEO, video_write_bandwidth);
+
+ stream->write_function(stream, "+OK Set Bandwidth %d kps for member %s\n", video_write_bandwidth, switch_channel_get_name(imember->channel));
+ }
+
for (i = 0; i <= conference->canvas_count; i++) {
if (i > -1 && i != id - 1) {
continue;
conference_video_reset_member_codec_index(member);
if (has_video) {
+ int bitrate = conference->video_codec_settings.video.bandwidth;
+
if ((var = switch_channel_get_variable_dup(member->channel, "video_mute_png", SWITCH_FALSE, -1))) {
member->video_mute_png = switch_core_strdup(member->pool, var);
member->video_mute_img = switch_img_read_png(member->video_mute_png, SWITCH_IMG_FMT_I420);
if (member->max_bw_out < conference->video_codec_settings.video.bandwidth) {
conference_utils_member_set_flag_locked(member, MFLAG_NO_MINIMIZE_ENCODING);
- switch_core_media_set_outgoing_bitrate(member->session, SWITCH_MEDIA_TYPE_VIDEO, member->max_bw_out);
+ bitrate = member->max_bw_out;
}
}
+
+ if (bitrate) {
+ switch_core_media_set_outgoing_bitrate(member->session, SWITCH_MEDIA_TYPE_VIDEO, bitrate);
+ }
+
}
+
switch_channel_set_variable_printf(channel, "conference_member_id", "%d", member->id);
switch_channel_set_variable_printf(channel, "conference_moderator", "%s", conference_utils_member_test_flag(member, MFLAG_MOD) ? "true" : "false");
switch_channel_set_variable_printf(channel, "conference_ghost", "%s", conference_utils_member_test_flag(member, MFLAG_GHOST) ? "true" : "false");
switch_image_t *img = *imgP;
int size = 0;
void *pop;
- int half;
//if (member->avatar_png_img && switch_channel_test_flag(member->channel, CF_VIDEO_READY) && conference_utils_member_test_flag(member, MFLAG_ACK_VIDEO)) {
// switch_img_free(&member->avatar_png_img);
//}
- if ((half = switch_queue_size(member->video_queue) / 2) < 1) {
- half = 1;
- }
-
+
if (switch_channel_test_flag(member->channel, CF_VIDEO_READY)) {
do {
pop = NULL;
break;
}
size = switch_queue_size(member->video_queue);
- } while(size > half);
+ } while(size > 1);
if (conference_utils_member_test_flag(member, MFLAG_CAN_BE_SEEN) &&
member->video_layer_id > -1 &&
layout_group_t *lg = NULL;
video_layout_t *vlayout = NULL;
conference_member_t *omember;
-
+
if (video_key_freq && (now - last_key_time) > video_key_freq) {
send_keyframe = SWITCH_TRUE;
last_key_time = now;
}
+ switch_core_timer_next(&canvas->timer);
+
switch_mutex_lock(conference->member_mutex);
for (imember = conference->members; imember; imember = imember->next) {
switch_thread_rwlock_unlock(omember->rwlock);
}
}
-
-
+
for (omember = conference->members; omember; omember = omember->next) {
mcu_layer_t *layer = NULL;
switch_image_t *use_img = NULL;
}
if (layer && use_img) {
- switch_img_copy(use_img, &layer->cur_img);
- conference_video_scale_and_patch(layer, NULL, SWITCH_FALSE);
+ //switch_img_copy(use_img, &layer->cur_img);
+ conference_video_scale_and_patch(layer, use_img, SWITCH_FALSE);
}
}
switch_img_free(&layer->banner_img);
switch_img_free(&layer->logo_img);
layer->member_id = -1;
- switch_img_copy(img, &layer->cur_img);
- conference_video_scale_and_patch(layer, NULL, SWITCH_FALSE);
+ //switch_img_copy(img, &layer->cur_img);
+ conference_video_scale_and_patch(layer, img, SWITCH_FALSE);
}
}