From: Anthony Minessale Date: Wed, 2 Jul 2014 17:57:23 +0000 (+0500) Subject: only count unmuted channels in positioning X-Git-Tag: v1.5.13~60 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9e0d1d68419a53dada94bff51d460f238dff0c7d;p=thirdparty%2Ffreeswitch.git only count unmuted channels in positioning --- diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index 35a412fcdf..65e633b40e 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -641,16 +641,22 @@ static void gen_arc(conference_obj_t *conference, switch_stream_handle_t *stream float x, z; float div = 3.14159f / 180; conference_member_t *member; + uint32_t count = 0; if (!conference->count) { return; } switch_mutex_lock(conference->member_mutex); + for (member = conference->members; member; member = member->next) { + if (member->channel && switch_test_flag(member, MFLAG_CAN_SPEAK) && !switch_test_flag(member, MFLAG_NO_POSITIONAL)) { + count++; + } + } - if (conference->count < 3) { + if (count < 3) { for (member = conference->members; member; member = member->next) { - if (member->al) { + if (member->channel && !switch_test_flag(member, MFLAG_NO_POSITIONAL) && member->al) { member->al->pos_x = 0; member->al->pos_y = 0; member->al->pos_z = 0; @@ -668,15 +674,15 @@ static void gen_arc(conference_obj_t *conference, switch_stream_handle_t *stream goto end; } - offset = 180 / (conference->count - 1); + offset = 180 / (count - 1); - radius = 2.0f;//3.0f; //(float)conference->count / 2.0f; //3.0f; + radius = 2.0f;//3.0f; //(float)count / 2.0f; //3.0f; pos = -90.0f;// + (offset / 2.0f); for (member = conference->members; member; member = member->next) { - if (!member->channel || switch_test_flag(member, MFLAG_NO_POSITIONAL)) { + if (!member->channel || switch_test_flag(member, MFLAG_NO_POSITIONAL) || !switch_test_flag(member, MFLAG_CAN_SPEAK)) { continue; } @@ -6019,6 +6025,10 @@ static switch_status_t conf_api_sub_mute(conference_member_t *member, switch_str switch_event_fire(&event); } + if (switch_test_flag(member->conference, CFLAG_POSITIONAL)) { + gen_arc(member->conference, NULL); + } + member_update_status_field(member); return SWITCH_STATUS_SUCCESS; @@ -6107,6 +6117,10 @@ static switch_status_t conf_api_sub_unmute(conference_member_t *member, switch_s switch_event_fire(&event); } + if (switch_test_flag(member->conference, CFLAG_POSITIONAL)) { + gen_arc(member->conference, NULL); + } + member_update_status_field(member); return SWITCH_STATUS_SUCCESS; @@ -6129,6 +6143,10 @@ static switch_status_t conf_api_sub_deaf(conference_member_t *member, switch_str switch_event_fire(&event); } + if (switch_test_flag(member->conference, CFLAG_POSITIONAL)) { + gen_arc(member->conference, NULL); + } + return SWITCH_STATUS_SUCCESS; } @@ -6149,6 +6167,10 @@ static switch_status_t conf_api_sub_undeaf(conference_member_t *member, switch_s switch_event_fire(&event); } + if (switch_test_flag(member->conference, CFLAG_POSITIONAL)) { + gen_arc(member->conference, NULL); + } + return SWITCH_STATUS_SUCCESS; }