MFLAG_GHOST = (1 << 24),
MFLAG_JOIN_ONLY = (1 << 25),
MFLAG_POSITIONAL = (1 << 26),
- MFLAG_NO_POSITIONAL = (1 << 27)
+ MFLAG_NO_POSITIONAL = (1 << 27),
+ MFLAG_JOIN_VID_FLOOR = (1 << 28)
} member_flag_t;
typedef enum {
static conference_obj_t *conference_find(char *name, char *domain);
static void member_bind_controls(conference_member_t *member, const char *controls);
static void conference_send_presence(conference_obj_t *conference);
+static void conference_set_video_floor_holder(conference_obj_t *conference, conference_member_t *member, switch_bool_t force);
SWITCH_STANDARD_API(conf_api_main);
switch_mutex_lock(conference->mutex);
if (conference->video_floor_holder) {
switch_core_session_refresh_video(conference->video_floor_holder->session);
+ // there's already someone hold the floor, tell the core thread start to read video
+ switch_channel_clear_flag(member->channel, CF_VIDEO_PASSIVE);
}
switch_mutex_unlock(conference->mutex);
}
}
}
+
unlock_member(member);
switch_mutex_unlock(member->audio_out_mutex);
switch_mutex_unlock(member->audio_in_mutex);
switch_mutex_unlock(conference->mutex);
status = SWITCH_STATUS_SUCCESS;
+ if (switch_test_flag(member, MFLAG_JOIN_VID_FLOOR)) {
+ conference_set_video_floor_holder(conference, member, SWITCH_TRUE);
+ switch_set_flag(member->conference, CFLAG_VID_FLOOR_LOCK);
-
+ if (test_eflag(conference, EFLAG_FLOOR_CHANGE)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "conference %s OK video floor %d %s\n",
+ conference->name, member->id, switch_channel_get_name(member->channel));
+ }
+ }
return status;
}
count++;
}
+ if (member == member->conference->video_floor_holder) {
+ stream->write_function(stream, "%s%s", count ? "|" : "", "vid-floor");
+ count++;
+ }
+
if (switch_test_flag(member, MFLAG_MOD)) {
stream->write_function(stream, "%s%s", count ? "|" : "", "moderator");
count++;
*f |= MFLAG_POSITIONAL;
} else if (!strcasecmp(argv[i], "no-positional")) {
*f |= MFLAG_NO_POSITIONAL;
+ } else if (!strcasecmp(argv[i], "join-vid-floor")) {
+ *f |= MFLAG_JOIN_VID_FLOOR;
}
}