aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--channels/chan_misdn.c3
-rw-r--r--channels/misdn/chan_misdn_config.h2
-rw-r--r--channels/misdn_config.c20
-rw-r--r--configs/misdn.conf.sample26
4 files changed, 49 insertions, 2 deletions
diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c
index eaa96a8f3..9fac67d3e 100644
--- a/channels/chan_misdn.c
+++ b/channels/chan_misdn.c
@@ -75,6 +75,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/term.h"
#include "asterisk/sched.h"
#include "asterisk/stringfields.h"
+#include "asterisk/abstract_jb.h"
#include "asterisk/causes.h"
#include "chan_misdn_config.h"
@@ -3228,7 +3229,7 @@ static struct ast_channel *misdn_new(struct chan_list *chlist, int state, char
else
tmp->rings = 0;
-
+ ast_jb_configure(tmp, misdn_get_global_jbconf());
} else {
chan_misdn_log(-1, 0, "Unable to allocate channel structure\n");
}
diff --git a/channels/misdn/chan_misdn_config.h b/channels/misdn/chan_misdn_config.h
index eb2b50572..2708da4d3 100644
--- a/channels/misdn/chan_misdn_config.h
+++ b/channels/misdn/chan_misdn_config.h
@@ -147,4 +147,6 @@ char *misdn_cfg_get_next_group(char *group);
int misdn_cfg_get_next_port_in_group(int port, char *group);
#endif
+struct ast_jb_conf *misdn_get_global_jbconf(void);
+
#endif
diff --git a/channels/misdn_config.c b/channels/misdn_config.c
index 0aca65c80..bdd14370c 100644
--- a/channels/misdn_config.c
+++ b/channels/misdn_config.c
@@ -56,6 +56,17 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#define NUM_GEN_ELEMENTS (sizeof(gen_spec) / sizeof(struct misdn_cfg_spec))
#define NUM_PORT_ELEMENTS (sizeof(port_spec) / sizeof(struct misdn_cfg_spec))
+/*! Global jitterbuffer configuration - by default, jb is disabled */
+static struct ast_jb_conf default_jbconf =
+{
+ .flags = 0,
+ .max_size = -1,
+ .resync_threshold = -1,
+ .impl = "",
+};
+
+static struct ast_jb_conf global_jbconf;
+
enum misdn_cfg_type {
MISDN_CTYPE_STR,
MISDN_CTYPE_INT,
@@ -910,6 +921,8 @@ static void _build_general_config (struct ast_variable *v)
int pos;
for (; v; v = v->next) {
+ if (!ast_jb_read_conf(&global_jbconf, v->name, v->value))
+ continue;
if (((pos = get_cfg_position(v->name, GEN_CFG)) < 0) ||
(_parse(&general_cfg[pos], v->value, gen_spec[pos].type, gen_spec[pos].boolint_def) < 0))
CLI_ERROR(v->name, v->value, "general");
@@ -1084,6 +1097,9 @@ int misdn_cfg_init (int this_max_ports)
ast_mutex_init(&config_mutex);
+ /* Copy the default jb config over global_jbconf */
+ memcpy(&global_jbconf, &default_jbconf, sizeof(struct ast_jb_conf));
+
misdn_cfg_lock();
if (this_max_ports) {
@@ -1132,4 +1148,6 @@ int misdn_cfg_init (int this_max_ports)
return 0;
}
-
+struct ast_jb_conf *misdn_get_global_jbconf() {
+ return &global_jbconf;
+}
diff --git a/configs/misdn.conf.sample b/configs/misdn.conf.sample
index c99d86475..aafb6e93b 100644
--- a/configs/misdn.conf.sample
+++ b/configs/misdn.conf.sample
@@ -129,6 +129,32 @@ crypt_keys=test,muh
; which are inherited by group sections.
;
+;------------------------------ JITTER BUFFER CONFIGURATION --------------------------
+; jbenable = yes ; Enables the use of a jitterbuffer on the receiving side of a
+ ; SIP channel. Defaults to "no". An enabled jitterbuffer will
+ ; be used only if the sending side can create and the receiving
+ ; side can not accept jitter. The SIP channel can accept jitter,
+ ; thus a jitterbuffer on the receive SIP side will be used only
+ ; if it is forced and enabled.
+
+; jbforce = no ; Forces the use of a jitterbuffer on the receive side of a SIP
+ ; channel. Defaults to "no".
+
+; jbmaxsize = 200 ; Max length of the jitterbuffer in milliseconds.
+
+; jbresyncthreshold = 1000 ; Jump in the frame timestamps over which the jitterbuffer is
+ ; resynchronized. Useful to improve the quality of the voice, with
+ ; big jumps in/broken timestamps, usually sent from exotic devices
+ ; and programs. Defaults to 1000.
+
+; jbimpl = fixed ; Jitterbuffer implementation, used on the receiving side of a SIP
+ ; channel. Two implementations are currently available - "fixed"
+ ; (with size always equals to jbmaxsize) and "adaptive" (with
+ ; variable size, actually the new jb of IAX2). Defaults to fixed.
+
+; jblog = no ; Enables jitterbuffer frame logging. Defaults to "no".
+;-----------------------------------------------------------------------------------
+
[default]
; define your default context here