session = conference->floor_holder->session;
switch_core_session_read_lock(session);
switch_mutex_unlock(conference->mutex);
- status = switch_core_session_read_video_frame(session, &vid_frame, SWITCH_IO_FLAG_NONE, 0);
+ if (!switch_channel_ready(switch_core_session_get_channel(session))) {
+ status = SWITCH_STATUS_FALSE;
+ } else {
+ status = switch_core_session_read_video_frame(session, &vid_frame, SWITCH_IO_FLAG_NONE, 0);
+ }
switch_mutex_lock(conference->mutex);
switch_core_session_rwunlock(session);
if (!SWITCH_READ_ACCEPTABLE(status)) {
+ yield = 100000;
goto do_continue;
}
if (switch_test_flag(imember, MFLAG_RUNNING) && imember->session) {
switch_channel_t *channel = switch_core_session_get_channel(imember->session);
- if ((imember->score_iir > SCORE_IIR_SPEAKING_MAX && (!floor_holder || floor_holder->score_iir < SCORE_IIR_SPEAKING_MIN)) &&
+ if ((!floor_holder || (imember->score_iir > SCORE_IIR_SPEAKING_MAX && (floor_holder->score_iir < SCORE_IIR_SPEAKING_MIN))) &&
(!switch_test_flag(conference, CFLAG_VID_FLOOR) || switch_channel_test_flag(channel, CF_VIDEO))) {
floor_holder = imember;
}
}
switch_mutex_unlock(imember->audio_in_mutex);
}
-
+
if (floor_holder != conference->floor_holder) {