diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-06-16 19:34:39 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-06-16 19:34:39 +0000 |
commit | ead89445f73e8edaeb9b99299cf42e41a291f71f (patch) | |
tree | 75740195043cd9c6649193c994d42ff06f34b9ed /main/file.c | |
parent | 6821d6b8031c8a0912bff41d68822ce36a8ccfa4 (diff) |
Merged revisions 201056,201090 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
................
r201056 | kpfleming | 2009-06-16 13:54:30 -0500 (Tue, 16 Jun 2009) | 18 lines
Merged revisions 200991 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r200991 | kpfleming | 2009-06-16 12:05:38 -0500 (Tue, 16 Jun 2009) | 11 lines
Improve support for media paths that can generate multiple frames at once.
There are various media paths in Asterisk (codec translators and UDPTL, primarily)
that can generate more than one frame to be generated when the application calling
them expects only a single frame. This patch addresses a number of those cases,
at least the primary ones to solve the known problems. In addition it removes the
broken TRACE_FRAMES support, fixes a number of bugs in various frame-related API
functions, and cleans up various code paths affected by these changes.
https://reviewboard.asterisk.org/r/175/
........
................
r201090 | kpfleming | 2009-06-16 14:27:12 -0500 (Tue, 16 Jun 2009) | 5 lines
Another minor fix to compiler attribute checking.
Defaulting to 'static' for the function scope was bad... so remove it.
................
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@201093 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/file.c')
-rw-r--r-- | main/file.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/main/file.c b/main/file.c index 799410b59..67c8c77c5 100644 --- a/main/file.c +++ b/main/file.c @@ -186,14 +186,20 @@ int ast_writestream(struct ast_filestream *fs, struct ast_frame *f) struct ast_frame *trf; fs->lastwriteformat = f->subclass; /* Get the translated frame but don't consume the original in case they're using it on another stream */ - trf = ast_translate(fs->trans, f, 0); - if (trf) { - res = fs->fmt->write(fs, trf); + if ((trf = ast_translate(fs->trans, f, 0))) { + struct ast_frame *cur; + + /* the translator may have returned multiple frames, so process them */ + for (cur = trf; cur; cur = AST_LIST_NEXT(cur, frame_list)) { + if ((res = fs->fmt->write(fs, trf))) { + ast_log(LOG_WARNING, "Translated frame write failed\n"); + break; + } + } ast_frfree(trf); - if (res) - ast_log(LOG_WARNING, "Translated frame write failed\n"); - } else + } else { res = 0; + } } } return res; |