[Speex-dev] Bug in vbr_analysis
Aymeric Moizard
jack at atosc.org
Tue Feb 14 08:20:18 PST 2006
Hi Jean-Marc,
I used the following code after init of the encoder to
get the frame size of my RTP packets.
char pcm_data[3200];
char speex_data[3200];
SpeexBits bits;
memset(pcm_data, '\0', 3200);
memset(speex_data, '\0', 3200);
speex_bits_init(&bits);
speex_bits_reset(&bits);
speex_encode_int(codec_info->enc, (short*)pcm_data, &bits);
codec->enc_frame_size = speex_bits_write(&bits, speex_data, frame_size);
I never run into problems using either speex on linux or windows until one
used my dll and speex through delphi on windows: he gets division by zero.
I found that "ener" is 0 around line 253: (version 1.1.11)
if (ener<60000)
{
if (vbr->consec_noise>2)
qual-=0.5*(log(3.0 + vbr->consec_noise)-log(3));
if (ener<10000&&vbr->consec_noise>2)
qual-=0.5*(log(3.0 + vbr->consec_noise)-log(3));
if (qual<0)
qual=0;
qual += .3*log(ener/60000.0);
}
I think this is a side effect of the fact that my pcm_data is
initialized to '\0'....
I have no fix except something like: (which is working!)
if (ener!=0) qual += .3*log(ener/60000.0);
I still don't understand why this seems to happen only when
running inside a delphi program...
I hope to get a better fix!
Thanks for all.
Aymeric
http://www.antisip.com
http://sip.antisip.com -- Free Telephony account.
More information about the Speex-dev
mailing list