diff --git a/channels/chan_alsa.c b/channels/chan_alsa.c index 5a375c5c0a..1975df0caf 100644 --- a/channels/chan_alsa.c +++ b/channels/chan_alsa.c @@ -62,7 +62,8 @@ static struct ast_jb_conf default_jbconf = { .flags = 0, .max_size = -1, .resync_threshold = -1, - .impl = "" + .impl = "", + .target_extra = -1, }; static struct ast_jb_conf global_jbconf; diff --git a/channels/chan_console.c b/channels/chan_console.c index 0d2d6360b9..935c081edf 100644 --- a/channels/chan_console.c +++ b/channels/chan_console.c @@ -175,7 +175,8 @@ static struct ast_jb_conf default_jbconf = { .flags = 0, .max_size = -1, .resync_threshold = -1, - .impl = "" + .impl = "", + .target_extra = -1, }; static struct ast_jb_conf global_jbconf; diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index cecbfa46bf..94a8995491 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -120,7 +120,8 @@ static struct ast_jb_conf default_jbconf = .flags = 0, .max_size = -1, .resync_threshold = -1, - .impl = "" + .impl = "", + .target_extra = -1, }; static struct ast_jb_conf global_jbconf; diff --git a/channels/chan_gtalk.c b/channels/chan_gtalk.c index 884438316f..0020feba67 100644 --- a/channels/chan_gtalk.c +++ b/channels/chan_gtalk.c @@ -78,7 +78,8 @@ static struct ast_jb_conf default_jbconf = .flags = 0, .max_size = -1, .resync_threshold = -1, - .impl = "" + .impl = "", + .target_extra = -1, }; static struct ast_jb_conf global_jbconf; diff --git a/channels/chan_h323.c b/channels/chan_h323.c index c44e0597f9..697b90d306 100644 --- a/channels/chan_h323.c +++ b/channels/chan_h323.c @@ -118,7 +118,8 @@ static struct ast_jb_conf default_jbconf = .flags = 0, .max_size = -1, .resync_threshold = -1, - .impl = "" + .impl = "", + .target_extra = -1, }; static struct ast_jb_conf global_jbconf; diff --git a/channels/chan_jingle.c b/channels/chan_jingle.c index b47679b0dd..ba463e9c78 100644 --- a/channels/chan_jingle.c +++ b/channels/chan_jingle.c @@ -77,7 +77,8 @@ static struct ast_jb_conf default_jbconf = .flags = 0, .max_size = -1, .resync_threshold = -1, - .impl = "" + .impl = "", + .target_extra = -1, }; static struct ast_jb_conf global_jbconf; diff --git a/channels/chan_local.c b/channels/chan_local.c index 3853444618..94893ebd0a 100644 --- a/channels/chan_local.c +++ b/channels/chan_local.c @@ -59,6 +59,7 @@ static struct ast_jb_conf g_jb_conf = { .max_size = -1, .resync_threshold = -1, .impl = "", + .target_extra = -1, }; static struct ast_channel *local_request(const char *type, int format, void *data, int *cause); diff --git a/channels/chan_mgcp.c b/channels/chan_mgcp.c index 067bc13d7f..07cf590bb9 100644 --- a/channels/chan_mgcp.c +++ b/channels/chan_mgcp.c @@ -92,7 +92,8 @@ static struct ast_jb_conf default_jbconf = .flags = 0, .max_size = -1, .resync_threshold = -1, - .impl = "" + .impl = "", + .target_extra = -1, }; static struct ast_jb_conf global_jbconf; diff --git a/channels/chan_oss.c b/channels/chan_oss.c index e6126d2643..cd87efea81 100644 --- a/channels/chan_oss.c +++ b/channels/chan_oss.c @@ -72,6 +72,7 @@ static struct ast_jb_conf default_jbconf = .max_size = -1, .resync_threshold = -1, .impl = "", + .target_extra = -1, }; static struct ast_jb_conf global_jbconf; diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 6e45b882cc..a009299019 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -252,7 +252,8 @@ static struct ast_jb_conf default_jbconf = .flags = 0, .max_size = -1, .resync_threshold = -1, - .impl = "" + .impl = "", + .target_extra = -1, }; static struct ast_jb_conf global_jbconf; /*!< Global jitterbuffer configuration */ diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c index 126c18bb74..a04a564937 100644 --- a/channels/chan_skinny.c +++ b/channels/chan_skinny.c @@ -151,7 +151,8 @@ static struct ast_jb_conf default_jbconf = .flags = 0, .max_size = -1, .resync_threshold = -1, - .impl = "" + .impl = "", + .target_extra = -1, }; static struct ast_jb_conf global_jbconf; diff --git a/channels/chan_unistim.c b/channels/chan_unistim.c index 90ed73b3cd..4480c9de18 100644 --- a/channels/chan_unistim.c +++ b/channels/chan_unistim.c @@ -188,10 +188,11 @@ static void dummy(char *dummy, ...) /*! \brief Global jitterbuffer configuration - by default, jb is disabled */ static struct ast_jb_conf default_jbconf = { - .flags = 0, + .flags = 0, .max_size = -1, .resync_threshold = -1, - .impl = "" + .impl = "", + .target_extra = -1, }; static struct ast_jb_conf global_jbconf; diff --git a/channels/chan_usbradio.c b/channels/chan_usbradio.c index 26d686a8ab..0092d76830 100644 --- a/channels/chan_usbradio.c +++ b/channels/chan_usbradio.c @@ -131,6 +131,7 @@ static struct ast_jb_conf default_jbconf = .max_size = -1, .resync_threshold = -1, .impl = "", + .target_extra = -1, }; static struct ast_jb_conf global_jbconf; diff --git a/channels/misdn_config.c b/channels/misdn_config.c index a3b956888e..f51c655a97 100644 --- a/channels/misdn_config.c +++ b/channels/misdn_config.c @@ -57,6 +57,7 @@ static struct ast_jb_conf default_jbconf = .max_size = -1, .resync_threshold = -1, .impl = "", + .target_extra = -1, }; static struct ast_jb_conf global_jbconf; diff --git a/configs/alsa.conf.sample b/configs/alsa.conf.sample index f550306185..fa2ff1d9bb 100644 --- a/configs/alsa.conf.sample +++ b/configs/alsa.conf.sample @@ -57,6 +57,13 @@ extension=s ; (with size always equals to jbmax-size) and "adaptive" (with ; variable size, actually the new jb of IAX2). Defaults to fixed. +; jbtargetextra = 40 ; This option only affects the jb when 'jbimpl = adaptive' is set. + ; The option represents the number of milliseconds by which the new + ; jitter buffer will pad its size. the default is 40, so without + ; modification, the new jitter buffer will set its size to the jitter + ; value plus 40 milliseconds. increasing this value may help if your + ; network normally has low jitter, but occasionally has spikes. + ; jblog = no ; Enables jitterbuffer frame logging. Defaults to "no". ;----------------------------------------------------------------------------------- diff --git a/configs/chan_dahdi.conf.sample b/configs/chan_dahdi.conf.sample index 9e6c34f9d8..942e0da355 100644 --- a/configs/chan_dahdi.conf.sample +++ b/configs/chan_dahdi.conf.sample @@ -763,6 +763,13 @@ pickupgroup=1 ; (with size always equals to jbmax-size) and "adaptive" (with ; variable size, actually the new jb of IAX2). Defaults to fixed. +; jbtargetextra = 40 ; This option only affects the jb when 'jbimpl = adaptive' is set. + ; The option represents the number of milliseconds by which the new + ; jitter buffer will pad its size. the default is 40, so without + ; modification, the new jitter buffer will set its size to the jitter + ; value plus 40 milliseconds. increasing this value may help if your + ; network normally has low jitter, but occasionally has spikes. + ; jblog = no ; Enables jitterbuffer frame logging. Defaults to "no". ;----------------------------------------------------------------------------------- ; diff --git a/configs/console.conf.sample b/configs/console.conf.sample index ff58605a38..7a40ed02e1 100644 --- a/configs/console.conf.sample +++ b/configs/console.conf.sample @@ -64,6 +64,13 @@ ; (with size always equals to jbmax-size) and "adaptive" (with ; variable size, actually the new jb of IAX2). Defaults to fixed. +; jbtargetextra = 40 ; This option only affects the jb when 'jbimpl = adaptive' is set. + ; The option represents the number of milliseconds by which the new + ; jitter buffer will pad its size. the default is 40, so without + ; modification, the new jitter buffer will set its size to the jitter + ; value plus 40 milliseconds. increasing this value may help if your + ; network normally has low jitter, but occasionally has spikes. + ; jblog = no ; Enables jitterbuffer frame logging. Defaults to "no". ;----------------------------------------------------------------------------------- diff --git a/configs/mgcp.conf.sample b/configs/mgcp.conf.sample index 104891e8a1..78ee42a3dc 100644 --- a/configs/mgcp.conf.sample +++ b/configs/mgcp.conf.sample @@ -35,6 +35,13 @@ ; (with size always equals to jbmax-size) and "adaptive" (with ; variable size, actually the new jb of IAX2). Defaults to fixed. +; jbtargetextra = 40 ; This option only affects the jb when 'jbimpl = adaptive' is set. + ; The option represents the number of milliseconds by which the new + ; jitter buffer will pad its size. the default is 40, so without + ; modification, the new jitter buffer will set its size to the jitter + ; value plus 40 milliseconds. increasing this value may help if your + ; network normally has low jitter, but occasionally has spikes. + ; jblog = no ; Enables jitterbuffer frame logging. Defaults to "no". ;----------------------------------------------------------------------------------- diff --git a/configs/misdn.conf.sample b/configs/misdn.conf.sample index 98fcd29c6f..deaede5cb3 100644 --- a/configs/misdn.conf.sample +++ b/configs/misdn.conf.sample @@ -158,6 +158,13 @@ crypt_keys=test,muh ; (with size always equals to jbmaxsize) and "adaptive" (with ; variable size, actually the new jb of IAX2). Defaults to fixed. +; jbtargetextra = 40 ; This option only affects the jb when 'jbimpl = adaptive' is set. + ; The option represents the number of milliseconds by which the new + ; jitter buffer will pad its size. the default is 40, so without + ; modification, the new jitter buffer will set its size to the jitter + ; value plus 40 milliseconds. increasing this value may help if your + ; network normally has low jitter, but occasionally has spikes. + ; jblog = no ; Enables jitterbuffer frame logging. Defaults to "no". ;----------------------------------------------------------------------------------- diff --git a/configs/oss.conf.sample b/configs/oss.conf.sample index 24b0b38ee1..e748124d2f 100644 --- a/configs/oss.conf.sample +++ b/configs/oss.conf.sample @@ -66,6 +66,13 @@ ; (with size always equals to jbmax-size) and "adaptive" (with ; variable size, actually the new jb of IAX2). Defaults to fixed. + ; jbtargetextra = 40 ; This option only affects the jb when 'jbimpl = adaptive' is set. + ; The option represents the number of milliseconds by which the new + ; jitter buffer will pad its size. the default is 40, so without + ; modification, the new jitter buffer will set its size to the jitter + ; value plus 40 milliseconds. increasing this value may help if your + ; network normally has low jitter, but occasionally has spikes. + ; jblog = no ; Enables jitterbuffer frame logging. Defaults to "no". ;----------------------------------------------------------------------------------- diff --git a/configs/sip.conf.sample b/configs/sip.conf.sample index f68361424e..141b296366 100644 --- a/configs/sip.conf.sample +++ b/configs/sip.conf.sample @@ -726,6 +726,13 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls ; (with size always equals to jbmaxsize) and "adaptive" (with ; variable size, actually the new jb of IAX2). Defaults to fixed. +; jbtargetextra = 40 ; This option only affects the jb when 'jbimpl = adaptive' is set. + ; The option represents the number of milliseconds by which the new jitter buffer + ; will pad its size. the default is 40, so without modification, the new + ; jitter buffer will set its size to the jitter value plus 40 milliseconds. + ; increasing this value may help if your network normally has low jitter, + ; but occasionally has spikes. + ; jblog = no ; Enables jitterbuffer frame logging. Defaults to "no". ;----------------------------------------------------------------------------------- diff --git a/configs/usbradio.conf.sample b/configs/usbradio.conf.sample index 5ba9815ca1..6af373e6d1 100644 --- a/configs/usbradio.conf.sample +++ b/configs/usbradio.conf.sample @@ -48,6 +48,13 @@ ; (with size always equals to jbmax-size) and "adaptive" (with ; variable size, actually the new jb of IAX2). Defaults to fixed. +; jbtargetextra = 40 ; This option only affects the jb when 'jbimpl = adaptive' is set. + ; The option represents the number of milliseconds by which the new + ; jitter buffer will pad its size. the default is 40, so without + ; modification, the new jitter buffer will set its size to the jitter + ; value plus 40 milliseconds. increasing this value may help if your + ; network normally has low jitter, but occasionally has spikes. + ; jblog = no ; Enables jitterbuffer frame logging. Defaults to "no". ;----------------------------------------------------------------------------------- diff --git a/include/asterisk/abstract_jb.h b/include/asterisk/abstract_jb.h index 2a1b89fd18..a1f3cdd9d8 100644 --- a/include/asterisk/abstract_jb.h +++ b/include/asterisk/abstract_jb.h @@ -57,9 +57,11 @@ struct ast_jb_conf /*! \brief Max size of the jitterbuffer implementation. */ long max_size; /*! \brief Resynchronization threshold of the jitterbuffer implementation. */ - long resync_threshold; + long resync_threshold; /*! \brief Name of the jitterbuffer implementation to be used. */ - char impl[AST_JB_IMPL_NAME_SIZE]; + char impl[AST_JB_IMPL_NAME_SIZE]; + /*! \brief amount of additional jitterbuffer adjustment */ + long target_extra; }; @@ -69,6 +71,7 @@ struct ast_jb_conf #define AST_JB_CONF_FORCE "force" #define AST_JB_CONF_MAX_SIZE "maxsize" #define AST_JB_CONF_RESYNCH_THRESHOLD "resyncthreshold" +#define AST_JB_CONF_TARGET_EXTRA "targetextra" #define AST_JB_CONF_IMPL "impl" #define AST_JB_CONF_LOG "log" diff --git a/main/abstract_jb.c b/main/abstract_jb.c index af5b61431b..8d78653ddb 100644 --- a/main/abstract_jb.c +++ b/main/abstract_jb.c @@ -584,6 +584,10 @@ int ast_jb_read_conf(struct ast_jb_conf *conf, const char *varname, const char * } else if (!strcasecmp(name, AST_JB_CONF_IMPL)) { if (!ast_strlen_zero(value)) snprintf(conf->impl, sizeof(conf->impl), "%s", value); + } else if (!strcasecmp(name, AST_JB_CONF_TARGET_EXTRA)) { + if (sscanf(value, "%30d", &tmp) == 1) { + conf->target_extra = tmp; + } } else if (!strcasecmp(name, AST_JB_CONF_LOG)) { ast_set2_flag(conf, ast_true(value), AST_JB_LOG); } else { @@ -730,6 +734,7 @@ static void *jb_create_adaptive(struct ast_jb_conf *general_config, long resynch jbconf.max_jitterbuf = general_config->max_size; jbconf.resync_threshold = general_config->resync_threshold; jbconf.max_contig_interp = 10; + jbconf.target_extra = general_config->target_extra; jb_setconf(adaptivejb, &jbconf); }