summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorGregory Nietsky <gregory@distrotech.co.za>2011-09-22 06:39:01 +0000
committerGregory Nietsky <gregory@distrotech.co.za>2011-09-22 06:39:01 +0000
commit3935595e4396ef1bd4581761c43a1846011b1988 (patch)
treef905bff74502edc278e2d92459bc308594d0cf32 /main
parent90a7ed99019b31c9537e8894aeae735f55a8b26f (diff)
Merged revisions 337431 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/10 ................ r337431 | irroot | 2011-09-22 08:29:09 +0200 (Thu, 22 Sep 2011) | 25 lines Merged revisions 337430 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r337430 | irroot | 2011-09-22 08:18:33 +0200 (Thu, 22 Sep 2011) | 19 lines Its possible to loose audio on ast_write when the channel is not transcoded correctly. in the case of DAHDI the channel is hungup. This patch tries to "fix" the problem and make the channel compatiable and warn the user of this problem. Please note there is a underlying problem with codec negotion this does not fix the problem it does try to rectify it and prevent loss of service. Review: https://reviewboard.asterisk.org/r/1442/ (closes issue ASTERISK-17541) (closes issue ASTERISK-18063) (issue ASTERISK-14384) (issue ASTERISK-17502) (issue ASTERISK-18325) (issue ASTERISK-18422) ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@337432 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main')
-rw-r--r--main/channel.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/main/channel.c b/main/channel.c
index 2393b6a04..7d8792b5b 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -4969,10 +4969,26 @@ int ast_write(struct ast_channel *chan, struct ast_frame *fr)
}
/* If the frame is in the raw write format, then it's easy... just use the frame - otherwise we will have to translate */
- if (ast_format_cmp(&fr->subclass.format, &chan->rawwriteformat) != AST_FORMAT_CMP_NOT_EQUAL)
+ if (ast_format_cmp(&fr->subclass.format, &chan->rawwriteformat) != AST_FORMAT_CMP_NOT_EQUAL) {
f = fr;
- else
+ } else {
+ /* XXX Something is not right we are not compatible with this frame bad things can happen
+ * problems range from no/one-way audio to unexplained line hangups as a last resort try adjust the format
+ * ideally we do not want to do this and this indicates a deeper problem for now we log these events to
+ * eliminate user impact and help identify the problem areas
+ * JIRA issues related to this :-
+ * ASTERISK-14384, ASTERISK-17502, ASTERISK-17541, ASTERISK-18063, ASTERISK-18325, ASTERISK-18422*/
+ if ((!ast_format_cap_iscompatible(chan->nativeformats, &fr->subclass.format)) &&
+ (ast_format_cmp(&chan->writeformat, &fr->subclass.format) != AST_FORMAT_CMP_EQUAL)) {
+ char nf[512];
+ ast_log(LOG_WARNING, "Codec mismatch on channel %s setting write format to %s from %s native formats %s\n",
+ chan->name, ast_getformatname(&fr->subclass.format), ast_getformatname(&chan->writeformat),
+ ast_getformatname_multiple(nf, sizeof(nf), chan->nativeformats));
+ ast_set_write_format_by_id(chan, fr->subclass.format.id);
+ }
+
f = (chan->writetrans) ? ast_translate(chan->writetrans, fr, 0) : fr;
+ }
if (!f) {
res = 0;