From: David Vossel Date: Tue, 2 Mar 2010 19:20:05 +0000 (+0000) Subject: Merged revisions 249893 via svnmerge from X-Git-Tag: 1.6.0.26-rc1~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=03012c23250ed443e046ecdf5b2bf9f20fc2260a;p=thirdparty%2Fasterisk.git Merged revisions 249893 via svnmerge from https://origsvn.digium.com/svn/asterisk/trunk ........ r249893 | dvossel | 2010-03-02 13:08:38 -0600 (Tue, 02 Mar 2010) | 11 lines fixes adaptive jitterbuffer configuration When configuring the adaptive jitterbuffer, the target_extra value not only could not be set from the configuration, but was not even being set to its proper default. This value is required in order for the adaptive jitterbuffer to work correctly. To resolve this a config option has been added to expose this value to the conf files, and a default value is provided when no config specific value is present. ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.0@249907 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- 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); }