From: Sean Bright Date: Mon, 20 Mar 2017 21:27:24 +0000 (-0400) Subject: bridge_softmix: Ignore non-voice frames from translator X-Git-Tag: 13.15.0-rc1~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7f34c11b6a33075749eff8c3f4197b56eeb55ec1;p=thirdparty%2Fasterisk.git 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 --- diff --git a/bridges/bridge_softmix.c b/bridges/bridge_softmix.c index 436fab7afc..486330af08 100644 --- a/bridges/bridge_softmix.c +++ b/bridges/bridge_softmix.c @@ -306,7 +306,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;