summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Joseph <gjoseph@digium.com>2017-05-25 19:01:19 -0500
committerGerrit Code Review <gerrit2@gerrit.digium.api>2017-05-25 19:01:19 -0500
commita8f8c5d857a41e43b5ea0d8c9dd671336710ec05 (patch)
tree793a0b4f069113c244e9f774cc2cb49121aa5c1f
parenta2d15b93f156e6ecd00e5152858ae30ae4f0497e (diff)
parent90237dca11d0adf129198cef4a6a0716a52618b5 (diff)
Merge "res_agi: Allow configuration of audio format of EAGI pipe" into 13
-rw-r--r--CHANGES11
-rw-r--r--res/res_agi.c22
2 files changed, 30 insertions, 3 deletions
diff --git a/CHANGES b/CHANGES
index 7ae196c9f..94405bf4a 100644
--- a/CHANGES
+++ b/CHANGES
@@ -9,6 +9,17 @@
==============================================================================
------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 13.16.0 to Asterisk 13.17.0 ----------
+------------------------------------------------------------------------------
+
+res_agi
+------------------
+ * The EAGI() application will now look for a dialplan variable named
+ EAGI_AUDIO_FORMAT and use that format with the 'enhanced' audio pipe that
+ EAGI provides. If not specified, it will continue to use the default signed
+ linear (slin).
+
+------------------------------------------------------------------------------
--- Functionality changes from Asterisk 13.15.0 to Asterisk 13.16.0 ----------
------------------------------------------------------------------------------
diff --git a/res/res_agi.c b/res/res_agi.c
index 064d87938..e94c23cf7 100644
--- a/res/res_agi.c
+++ b/res/res_agi.c
@@ -4581,15 +4581,30 @@ static int eagi_exec(struct ast_channel *chan, const char *data)
{
int res;
struct ast_format *readformat;
+ struct ast_format *requested_format = NULL;
+ const char *requested_format_name;
if (ast_check_hangup(chan)) {
ast_log(LOG_ERROR, "EAGI cannot be run on a dead/hungup channel, please use AGI.\n");
return 0;
}
+
+ requested_format_name = pbx_builtin_getvar_helper(chan, "EAGI_AUDIO_FORMAT");
+ if (requested_format_name) {
+ requested_format = ast_format_cache_get(requested_format_name);
+ if (requested_format) {
+ ast_verb(3, "<%s> Setting EAGI audio pipe format to %s\n",
+ ast_channel_name(chan), ast_format_get_name(requested_format));
+ } else {
+ ast_log(LOG_ERROR, "Could not find requested format: %s\n", requested_format_name);
+ }
+ }
+
readformat = ao2_bump(ast_channel_readformat(chan));
- if (ast_set_read_format(chan, ast_format_slin)) {
+ if (ast_set_read_format(chan, requested_format ?: ast_format_slin)) {
ast_log(LOG_WARNING, "Unable to set channel '%s' to linear mode\n", ast_channel_name(chan));
- ao2_ref(readformat, -1);
+ ao2_cleanup(requested_format);
+ ao2_cleanup(readformat);
return -1;
}
res = agi_exec_full(chan, data, 1, 0);
@@ -4599,7 +4614,8 @@ static int eagi_exec(struct ast_channel *chan, const char *data)
ast_format_get_name(readformat));
}
}
- ao2_ref(readformat, -1);
+ ao2_cleanup(requested_format);
+ ao2_cleanup(readformat);
return res;
}