channel = switch_core_session_get_channel(member->session);
- if (!switch_channel_test_flag(channel, CF_VIDEO) && !member->avatar_png_img) {
+ if (!switch_channel_test_flag(channel, CF_VIDEO_READY) && !member->avatar_png_img) {
return SWITCH_STATUS_FALSE;
}
continue;
}
- if (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO) ||
+ if (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO_READY) ||
switch_core_session_read_lock(imember->session) != SWITCH_STATUS_SUCCESS) {
continue;
}
canvas = conference_video_get_canvas_locked(member);
if (conference_utils_test_flag(member->conference, CFLAG_VIDEO_REQUIRED_FOR_CANVAS) &&
- (!switch_channel_test_flag(member->channel, CF_VIDEO) || switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_SENDONLY)) {
+ (!switch_channel_test_flag(member->channel, CF_VIDEO_READY) || switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_SENDONLY)) {
if (canvas) {
conference_video_release_canvas(&canvas);
}
member->avatar_patched = 0;
- if (!force && switch_channel_test_flag(member->channel, CF_VIDEO) && switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY) {
+ if (!force && switch_channel_test_flag(member->channel, CF_VIDEO_READY) && switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY) {
conference_utils_member_set_flag_locked(member, MFLAG_ACK_VIDEO);
} else {
if (member->conference->no_video_avatar) {
{
int flushed;
- if (!member->channel || !switch_channel_test_flag(member->channel, CF_VIDEO)) {
+ if (!member->channel || !switch_channel_test_flag(member->channel, CF_VIDEO_READY)) {
return;
}
int size = 0;
void *pop;
- if (!member->avatar_png_img && switch_channel_test_flag(member->channel, CF_VIDEO)) {
+ if (!member->avatar_png_img && switch_channel_test_flag(member->channel, CF_VIDEO_READY)) {
do {
if (switch_queue_trypop(member->video_queue, &pop) == SWITCH_STATUS_SUCCESS && pop) {
switch_img_free(&img);
member->max_bw_in = 0;
member->force_bw_in = kps;
member->managed_kps = 0;
- if (!conference_utils_test_flag(member->conference, CFLAG_MANAGE_INBOUND_VIDEO_BITRATE) && switch_channel_test_flag(member->channel, CF_VIDEO)) {
+ if (!conference_utils_test_flag(member->conference, CFLAG_MANAGE_INBOUND_VIDEO_BITRATE) && switch_channel_test_flag(member->channel, CF_VIDEO_READY)) {
conference_video_set_incoming_bitrate(member, kps);
}
}
void conference_video_check_auto_bitrate(conference_member_t *member, mcu_layer_t *layer)
{
+ switch_vid_params_t vid_params = { 0 };
+
+ switch_core_media_get_vid_params(member->session, &vid_params);
+
+ if (!switch_channel_test_flag(member->channel, CF_VIDEO_READY) || !vid_params.width || !vid_params.height) {
+ return;
+ }
if (switch_channel_test_flag(member->channel, CF_VIDEO_BITRATE_UNMANAGABLE)) {
member->managed_kps = 0;
switch_channel_get_name(member->channel), kps);
} else {
int max = 0;
- switch_vid_params_t vid_params = { 0 };
- switch_core_media_get_vid_params(member->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));
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "%s auto-setting bitrate to %dkps to accomodate %dx%d resolution\n",
switch_channel_get_name(member->channel), kps);
}
}
- conference_video_set_incoming_bitrate(member, kps);
+ if (kps) {
+ conference_video_set_incoming_bitrate(member, kps);
+ }
}
}
switch_mutex_lock(conference->member_mutex);
for (imember = conference->members; imember; imember = imember->next) {
- if (imember->channel && switch_channel_ready(imember->channel) && switch_channel_test_flag(imember->channel, CF_VIDEO) &&
+ if (imember->channel && switch_channel_ready(imember->channel) && switch_channel_test_flag(imember->channel, CF_VIDEO_READY) &&
conference_utils_member_test_flag(imember, MFLAG_RUNNING)
&& imember->canvas_id == canvas->canvas_id && imember->video_media_flow != SWITCH_MEDIA_FLOW_SENDONLY) {
canvas_count++;
for (imember = conference->members; imember; imember = imember->next) {
if (imember->canvas_id != canvas->canvas_id) continue;
- if (imember->session && switch_channel_test_flag(imember->channel, CF_VIDEO)) {
+ if (imember->session && switch_channel_test_flag(imember->channel, CF_VIDEO_READY)) {
switch_core_session_request_video_refresh(imember->session);
switch_core_media_gen_key_frame(imember->session);
}
switch_image_t *img = NULL;
int i;
- if (!imember->session || (!switch_channel_test_flag(imember->channel, CF_VIDEO) && !imember->avatar_png_img) ||
+ if (!imember->session || (!switch_channel_test_flag(imember->channel, CF_VIDEO_READY) && !imember->avatar_png_img) ||
conference_utils_test_flag(conference, CFLAG_PERSONAL_CANVAS) || switch_core_session_read_lock(imember->session) != SWITCH_STATUS_SUCCESS) {
continue;
}
!conference_utils_member_test_flag(imember, MFLAG_NO_MINIMIZE_ENCODING)) {
min_members++;
- if (switch_channel_test_flag(imember->channel, CF_VIDEO)) {
+ if (switch_channel_test_flag(imember->channel, CF_VIDEO_READY)) {
if (imember->video_codec_index < 0 && (check_codec = switch_core_session_get_video_write_codec(imember->session))) {
for (i = 0; write_codecs[i] && switch_core_codec_ready(&write_codecs[i]->codec) && i < MAX_MUX_CODECS; i++) {
if (check_codec->implementation->codec_id == write_codecs[i]->codec.implementation->codec_id) {
switch_img_free(&img);
}
- if (!layer && (!conference_utils_test_flag(imember->conference, CFLAG_VIDEO_REQUIRED_FOR_CANVAS) || ((switch_channel_test_flag(imember->channel, CF_VIDEO) && switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY)))) {
+ if (!layer && (!conference_utils_test_flag(imember->conference, CFLAG_VIDEO_REQUIRED_FOR_CANVAS) || ((switch_channel_test_flag(imember->channel, CF_VIDEO_READY) && switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY)))) {
if (conference_video_find_layer(conference, canvas, imember, &layer) == SWITCH_STATUS_SUCCESS) {
imember->layer_timeout = 0;
} else {
for (imember = conference->members; imember; imember = imember->next) {
- if (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO) ||
+ if (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO_READY) ||
switch_core_session_read_lock(imember->session) != SWITCH_STATUS_SUCCESS) {
continue;
}
mcu_layer_t *layer = NULL;
switch_image_t *use_img = NULL;
- if (!omember->session || !switch_channel_test_flag(omember->channel, CF_VIDEO) ||
+ if (!omember->session || !switch_channel_test_flag(omember->channel, CF_VIDEO_READY) ||
switch_core_session_media_flow(omember->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_SENDONLY) {
continue;
}
for (imember = conference->members; imember; imember = imember->next) {
switch_frame_t *dupframe;
- if (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO) ||
+ if (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO_READY) ||
switch_core_session_read_lock(imember->session) != SWITCH_STATUS_SUCCESS) {
continue;
}
continue;
}
- if (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO) ||
+ if (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO_READY) ||
switch_core_session_read_lock(imember->session) != SWITCH_STATUS_SUCCESS) {
continue;
}
for (imember = conference->members; imember; imember = imember->next) {
int i;
- if (!imember->session || (!switch_channel_test_flag(imember->channel, CF_VIDEO) && !imember->avatar_png_img) ||
+ if (!imember->session || (!switch_channel_test_flag(imember->channel, CF_VIDEO_READY) && !imember->avatar_png_img) ||
conference_utils_test_flag(conference, CFLAG_PERSONAL_CANVAS) || switch_core_session_read_lock(imember->session) != SWITCH_STATUS_SUCCESS) {
continue;
}
!conference_utils_member_test_flag(imember, MFLAG_NO_MINIMIZE_ENCODING)) {
min_members++;
- if (switch_channel_test_flag(imember->channel, CF_VIDEO)) {
+ if (switch_channel_test_flag(imember->channel, CF_VIDEO_READY)) {
if (imember->video_codec_index < 0 && (check_codec = switch_core_session_get_video_write_codec(imember->session))) {
for (i = 0; write_codecs[i] && switch_core_codec_ready(&write_codecs[i]->codec) && i < MAX_MUX_CODECS; i++) {
if (check_codec->implementation->codec_id == write_codecs[i]->codec.implementation->codec_id) {
}
- if (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO) ||
+ if (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO_READY) ||
switch_core_session_read_lock(imember->session) != SWITCH_STATUS_SUCCESS) {
continue;
}
continue;
}
- if (!switch_channel_test_flag(imember->channel, CF_VIDEO) && !imember->avatar_png_img) {
+ if (!switch_channel_test_flag(imember->channel, CF_VIDEO_READY) && !imember->avatar_png_img) {
continue;
}
if (!member) {
switch_mutex_lock(conference->member_mutex);
for (imember = conference->members; imember; imember = imember->next) {
- if (imember->id != conference->video_floor_holder && imember->channel && switch_channel_test_flag(imember->channel, CF_VIDEO)) {
+ if (imember->id != conference->video_floor_holder && imember->channel && switch_channel_test_flag(imember->channel, CF_VIDEO_READY)) {
member = imember;
break;
}
switch_mutex_lock(conference->member_mutex);
for (imember = conference->members; imember; imember = imember->next) {
- if (!imember->channel || !switch_channel_test_flag(imember->channel, CF_VIDEO)) {
+ if (!imember->channel || !switch_channel_test_flag(imember->channel, CF_VIDEO_READY)) {
continue;
}
switch_channel_clear_flag(imember->channel, CF_VIDEO_REFRESH_REQ);
}
- if (isession && switch_channel_test_flag(imember->channel, CF_VIDEO)) {
+ if (isession && switch_channel_test_flag(imember->channel, CF_VIDEO_READY)) {
int send_frame = 0;
if (conference->canvases[0] && conference_utils_test_flag(imember->conference, CFLAG_VIDEO_BRIDGE_FIRST_TWO)) {
- if (switch_channel_test_flag(imember->channel, CF_VIDEO) && (conference->members_with_video == 1 || imember != floor_holder)) {
+ if (switch_channel_test_flag(imember->channel, CF_VIDEO_READY) && (conference->members_with_video == 1 || imember != floor_holder)) {
send_frame = 1;
}
} else if (!conference_utils_member_test_flag(imember, MFLAG_RECEIVING_VIDEO) &&
continue;
}
- if (switch_channel_test_flag(imember->channel, CF_VIDEO) ) {
+ if (switch_channel_test_flag(imember->channel, CF_VIDEO_READY) ) {
switch_core_session_request_video_refresh(imember->session);
}