* 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
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)
#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,
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 ),
}
/* 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");
}