From cf8ebc25c4762323d447220e28d76290a4b508e2 Mon Sep 17 00:00:00 2001 From: russell Date: Wed, 18 Feb 2009 19:12:49 +0000 Subject: 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/trunk@177101 f38db490-d61c-443f-a65b-d21fe96a405b --- apps/app_meetme.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/app_meetme.c b/apps/app_meetme.c index d4cc236c9..67ab09635 100644 --- a/apps/app_meetme.c +++ b/apps/app_meetme.c @@ -502,6 +502,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), @@ -546,6 +548,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 ), @@ -2481,7 +2484,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; } @@ -2852,7 +2855,7 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c 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) { @@ -2897,7 +2900,7 @@ 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); } } @@ -3163,10 +3166,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)) { -- cgit v1.2.3