aboutsummaryrefslogtreecommitdiffstats
path: root/apps/app_meetme.c
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2009-02-18 19:30:18 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2009-02-18 19:30:18 +0000
commit67cf0ded6dba8e0f9b37e735d3b50405a0205b10 (patch)
tree748d96837257624daa56cf8af9662ca5d5a40df4 /apps/app_meetme.c
parent55230aea1e42f9fbfc24f5d004299ecba9cb44ba (diff)
Merged revisions 177101 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ........ r177101 | russell | 2009-02-18 13:12:49 -0600 (Wed, 18 Feb 2009) | 8 lines Re-add 'o' option to MeetMe, reverting rev 62297. Enabling this option by default proved to be a bad idea, as the talker detection is not very reliable. So, make it optional again, and off by default. (issue #13801) Reported by: justdave ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.1@177158 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_meetme.c')
-rw-r--r--apps/app_meetme.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index f1406d49a..0e5ea3e35 100644
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -143,6 +143,8 @@ enum {
CONFFLAG_EMPTY = (1 << 18),
CONFFLAG_EMPTYNOPIN = (1 << 19),
CONFFLAG_ALWAYSPROMPT = (1 << 20),
+ /*! If set, treat talking users as muted users */
+ CONFFLAG_OPTIMIZETALKER = (1 << 21),
/*! If set, won't speak the extra prompt when the first person
* enters the conference */
CONFFLAG_NOONLYPERSON = (1 << 22),
@@ -187,6 +189,7 @@ AST_APP_OPTIONS(meetme_opts, BEGIN_OPTIONS
AST_APP_OPTION('I', CONFFLAG_INTROUSERNOREVIEW ),
AST_APP_OPTION_ARG('M', CONFFLAG_MOH, OPT_ARG_MOH_CLASS ),
AST_APP_OPTION('m', CONFFLAG_STARTMUTED ),
+ AST_APP_OPTION('o', CONFFLAG_OPTIMIZETALKER ),
AST_APP_OPTION('P', CONFFLAG_ALWAYSPROMPT ),
AST_APP_OPTION_ARG('p', CONFFLAG_KEYEXIT, OPT_ARG_EXITKEYS ),
AST_APP_OPTION('q', CONFFLAG_QUIET ),
@@ -2147,7 +2150,7 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
x = 1;
ast_channel_setoption(chan, AST_OPTION_TONE_VERIFY, &x, sizeof(char), 0);
}
- if (!(confflags & CONFFLAG_MONITOR) && !(dsp = ast_dsp_new())) {
+ if ((confflags & CONFFLAG_OPTIMIZETALKER) && !(confflags & CONFFLAG_MONITOR) && !(dsp = ast_dsp_new())) {
ast_log(LOG_WARNING, "Unable to allocate DSP!\n");
res = -1;
}
@@ -2463,7 +2466,7 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
if (user->talk.actual)
ast_frame_adjust_volume(f, user->talk.actual);
- if (!(confflags & CONFFLAG_MONITOR)) {
+ if ((confflags & CONFFLAG_OPTIMIZETALKER) && !(confflags & CONFFLAG_MONITOR)) {
int totalsilence;
if (user->talking == -1)
@@ -2506,8 +2509,9 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
don't want to block, but we do want to at least *try*
to write out all the samples.
*/
- if (user->talking)
+ if (user->talking && !(confflags & CONFFLAG_OPTIMIZETALKER)) {
careful_write(fd, f->data.ptr, f->datalen, 0);
+ }
}
} else if (((f->frametype == AST_FRAME_DTMF) && (f->subclass == '*') && (confflags & CONFFLAG_STARMENU)) || ((f->frametype == AST_FRAME_DTMF) && menu_active)) {
if (confflags & CONFFLAG_PASS_DTMF)
@@ -2725,10 +2729,11 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
fr.samples = res / 2;
fr.data.ptr = buf;
fr.offset = AST_FRIENDLY_OFFSET;
- if (!user->listen.actual &&
- ((confflags & CONFFLAG_MONITOR) ||
+ if (!user->listen.actual &&
+ ((confflags & CONFFLAG_MONITOR) ||
(user->adminflags & (ADMINFLAG_MUTED | ADMINFLAG_SELFMUTED)) ||
- (!user->talking)) ) {
+ (!user->talking && (confflags & CONFFLAG_OPTIMIZETALKER))
+ )) {
int idx;
for (idx = 0; idx < AST_FRAME_BITS; idx++)
if (chan->rawwriteformat & (1 << idx))