summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES8
-rw-r--r--apps/app_meetme.c14
2 files changed, 21 insertions, 1 deletions
diff --git a/CHANGES b/CHANGES
index 906efa54b..109f4f60d 100644
--- a/CHANGES
+++ b/CHANGES
@@ -73,6 +73,14 @@ Logging
* Added the 'queue_log_realtime_use_gmt' option to have timestamps in GMT
for realtime queue log entries.
+MeetMe
+-------------------
+* Added the 'n' option to MeetMe to prevent application of the DENOISE function
+ to a channel joining a conference. Some channel drivers that vary the number
+ of audio samples in a voice frame will experience significant quality problems
+ if a denoiser is attached to the channel; this option gives them the ability
+ to remove the denoiser without having to unload func_speex.
+
Queue
-------------------
* Add queue available hint. exten => 8501,hint,Queue:markq_avail
diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index 9fb0e06aa..c09e3c071 100644
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -148,6 +148,14 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
channel's currently set music class, or <literal>default</literal>.</para>
<argument name="class" required="true" />
</option>
+ <option name="n">
+ <para>Disable the denoiser. By default, if <literal>func_speex</literal> is loaded, Asterisk
+ will apply a denoiser to channels in the MeetMe conference. However, channel
+ drivers that present audio with a varying rate will experience degraded
+ performance with a denoiser attached. This parameter allows a channel joining
+ the conference to choose not to have a denoiser attached without having to
+ unload <literal>func_speex</literal>.</para>
+ </option>
<option name="o">
<para>Set talker optimization - treats talkers who aren't speaking as
being muted, meaning (a) No encode is done on transmission and (b)
@@ -657,6 +665,8 @@ enum {
#define CONFFLAG_INTROUSER_VMREC (1ULL << 33)
/*! If there's only one person left in a conference when someone leaves, kill the conference */
#define CONFFLAG_KILL_LAST_MAN_STANDING ((uint64_t)1 << 34)
+/*! If set, don't enable a denoiser for the channel */
+#define CONFFLAG_DONT_DENOISE (1ULL << 33)
enum {
OPT_ARG_WAITMARKED = 0,
@@ -687,6 +697,7 @@ AST_APP_OPTIONS(meetme_opts, BEGIN_OPTIONS
AST_APP_OPTION('k', CONFFLAG_KILL_LAST_MAN_STANDING ),
AST_APP_OPTION_ARG('M', CONFFLAG_MOH, OPT_ARG_MOH_CLASS ),
AST_APP_OPTION('m', CONFFLAG_STARTMUTED ),
+ AST_APP_OPTION('n', CONFFLAG_DONT_DENOISE ),
AST_APP_OPTION('o', CONFFLAG_OPTIMIZETALKER ),
AST_APP_OPTION('P', CONFFLAG_ALWAYSPROMPT ),
AST_APP_OPTION_ARG('p', CONFFLAG_KEYEXIT, OPT_ARG_EXITKEYS ),
@@ -3218,7 +3229,8 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc
}
/* Reduce background noise from each participant */
- if ((mod_speex = ast_module_helper("", "codec_speex", 0, 0, 0, 0))) {
+ if (!ast_test_flag64(confflags, CONFFLAG_DONT_DENOISE) &&
+ (mod_speex = ast_module_helper("", "func_speex", 0, 0, 0, 0))) {
ast_free(mod_speex);
ast_func_write(chan, "DENOISE(rx)", "on");
}