diff options
author | Sean Bright <sean.bright@gmail.com> | 2017-03-20 17:27:24 -0400 |
---|---|---|
committer | Sean Bright <sean.bright@gmail.com> | 2017-03-20 15:31:35 -0600 |
commit | fc794de75658a26383dd93278f2b04b13bc3f65b (patch) | |
tree | 94e7fd67ebb094c1ddf42eca8c2444866290c100 | |
parent | f5603cb1ece5001d1288004c9bc6ed51448deb81 (diff) |
bridge_softmix: Ignore non-voice frames from translator
Some codecs - codec_speex specifically - take voice frames and return
other types of frames, like CNG. If we subsequently treat those as
voice frames, we'll run into trouble when destroying the frame because
of the requirement that each voice frame have an associated format.
ASTERISK-26880 #close
Reported by: Kirsty Tyerman
Change-Id: I43f8450c48fb276ad8b99db8512be82949c1ca7c
-rw-r--r-- | bridges/bridge_softmix.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/bridges/bridge_softmix.c b/bridges/bridge_softmix.c index 7bac4fcb2..94dfc5714 100644 --- a/bridges/bridge_softmix.c +++ b/bridges/bridge_softmix.c @@ -222,7 +222,8 @@ static void softmix_process_write_audio(struct softmix_translate_helper *trans_h if (entry->trans_pvt && !entry->out_frame) { entry->out_frame = ast_translate(entry->trans_pvt, &sc->write_frame, 0); } - if (entry->out_frame && (entry->out_frame->datalen < MAX_DATALEN)) { + if (entry->out_frame && entry->out_frame->frametype == AST_FRAME_VOICE + && entry->out_frame->datalen < MAX_DATALEN) { ao2_replace(sc->write_frame.subclass.format, entry->out_frame->subclass.format); memcpy(sc->final_buf, entry->out_frame->data.ptr, entry->out_frame->datalen); sc->write_frame.datalen = entry->out_frame->datalen; |