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
This commit is contained in:
Richard Mudgett 2014-07-22 17:10:36 +00:00
parent bb87796f67
commit 197f06bed1
1 changed files with 13 additions and 8 deletions

View File

@ -306,16 +306,21 @@ static struct ast_frame *lintospeex_frameout(struct ast_trans_pvt *pvt)
if (tmp->silent_state) {
return NULL;
} else {
tmp->silent_state = 1;
speex_bits_reset(&tmp->bits);
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;
/* 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);
}
}