Add jitterbuffer support for chan_local. To enable it, you use the 'j' option

in the Dial command.  The 'j' option _must_ be used in conjunction with the 'n'
option.

This feature will allow you to use the existing jitterbuffer implementation to
put a jitterbuffer on incoming SIP calls connecting to Asterisk applications by
putting a local channel in the middle.


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@85097 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Russell Bryant
2007-10-09 15:10:14 +00:00
parent d9909a0151
commit 46b9ca721b
2 changed files with 22 additions and 0 deletions

View File

@@ -66,6 +66,13 @@ static const char tdesc[] = "Local Proxy Channel Driver";
#define IS_OUTBOUND(a,b) (a == b->chan ? 1 : 0)
static struct ast_jb_conf g_jb_conf = {
.flags = 0,
.max_size = -1,
.resync_threshold = -1,
.impl = "",
};
static struct ast_channel *local_request(const char *type, int format, void *data, int *cause);
static int local_digit_begin(struct ast_channel *ast, char digit);
static int local_digit_end(struct ast_channel *ast, char digit, unsigned int duration);
@@ -108,6 +115,7 @@ struct local_pvt {
char context[AST_MAX_CONTEXT]; /* Context to call */
char exten[AST_MAX_EXTENSION]; /* Extension to call */
int reqformat; /* Requested format */
struct ast_jb_conf jb_conf; /*!< jitterbuffer configuration for this local channel */
struct ast_channel *owner; /* Master Channel */
struct ast_channel *chan; /* Outbound channel */
struct ast_module_user *u_owner; /*! reference to keep the module loaded while in use */
@@ -563,11 +571,21 @@ static struct local_pvt *local_alloc(const char *data, int format)
ast_mutex_init(&tmp->lock);
ast_copy_string(tmp->exten, data, sizeof(tmp->exten));
memcpy(&tmp->jb_conf, &g_jb_conf, sizeof(tmp->jb_conf));
/* Look for options */
if ((opts = strchr(tmp->exten, '/'))) {
*opts++ = '\0';
if (strchr(opts, 'n'))
ast_set_flag(tmp, LOCAL_NO_OPTIMIZATION);
if (strchr(opts, 'j')) {
if (ast_test_flag(tmp, LOCAL_NO_OPTIMIZATION))
ast_set_flag(&tmp->jb_conf, AST_JB_ENABLED);
else {
ast_log(LOG_ERROR, "You must use the 'n' option for chan_local "
"to use the 'j' option to enable the jitterbuffer\n");
}
}
}
/* Look for a context */
@@ -652,6 +670,8 @@ static struct ast_channel *local_new(struct local_pvt *p, int state)
tmp->priority = 1;
tmp2->priority = 1;
ast_jb_configure(tmp, &p->jb_conf);
return tmp;
}