From: Richard Mudgett Date: Tue, 22 Jul 2014 17:10:36 +0000 (+0000) Subject: codec_speex: Fix trashing normal static frame for AST_FRAME_CNG. X-Git-Tag: 13.0.0-beta1~83 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=197f06bed16cf1babf18a1c611b99ff98aa559e4;p=thirdparty%2Fasterisk.git codec_speex: Fix trashing normal static frame for AST_FRAME_CNG. Made use a local static frame to generate the AST_FRAME_CNG frame when silence starts. I don't think the handling of the AST_FRAME_CNG has ever really worked because there doesn't seem to be any consumers of it. Review: https://reviewboard.asterisk.org/r/3813/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@419206 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/codecs/codec_speex.c b/codecs/codec_speex.c index 8c2c3f3955..84ce07a5d5 100644 --- a/codecs/codec_speex.c +++ b/codecs/codec_speex.c @@ -306,16 +306,21 @@ static struct ast_frame *lintospeex_frameout(struct ast_trans_pvt *pvt) if (tmp->silent_state) { return NULL; } else { + struct ast_frame frm = { + .frametype = AST_FRAME_CNG, + .src = pvt->t->name, + }; + + /* + * XXX I don't think the AST_FRAME_CNG code has ever + * really worked for speex. There doesn't seem to be + * any consumers of the frame type. Everyone that + * references the type seems to pass the frame on. + */ tmp->silent_state = 1; - speex_bits_reset(&tmp->bits); -/* BUGBUG need to setup a new static frame to prevent destroying the translators normal static frame. */ - ao2_cleanup(pvt->f.subclass.format); - memset(&pvt->f, 0, sizeof(pvt->f)); - pvt->f.frametype = AST_FRAME_CNG; - pvt->f.samples = samples; /* XXX what now ? format etc... */ -/* BUGBUG should return ast_frisolate(setup local static frame) here */ + return ast_frisolate(&frm); } }