@@ -866,7 +866,7 @@ int sb_encode(void *state, void *vin, SpeexBits *bits)
866
866
if (st -> subframeSize == 80 )
867
867
gc = MULT16_16_P14 (QCONST16 (1.4142f ,14 ), gc );
868
868
869
- scale = SHL32 (MULT16_16 (PDIV32_16 (SHL32 (EXTEND32 (gc ),SIG_SHIFT - 6 ),filter_ratio ),(1 + el )),6 );
869
+ scale = SHL32 (MULT16_16 (PDIV32_16 (SHL32 (EXTEND32 (gc ),SIG_SHIFT - 6 ),MAX16 ( EPSILON , filter_ratio ) ),(1 + el )),6 );
870
870
871
871
compute_impulse_response (st -> interp_qlpc , bw_lpc1 , bw_lpc2 , syn_resp , st -> subframeSize , st -> lpcSize , stack );
872
872
@@ -1370,7 +1370,8 @@ int sb_decode(void *state, SpeexBits *bits, void *vout)
1370
1370
quant = speex_bits_unpack_unsigned (bits , 5 );
1371
1371
g = spx_exp (MULT16_16 (QCONST16 (.125f ,11 ),(quant - 10 )));
1372
1372
1373
- g = PDIV32 (g , filter_ratio );
1373
+ /* Clamp to a minimum of epsilon to avoid division by 0 */
1374
+ g = PDIV32 (g , MAX16 (EPSILON ,filter_ratio ));
1374
1375
1375
1376
for (i = 0 ;i < st -> subframeSize ;i += 2 )
1376
1377
{
@@ -1389,7 +1390,7 @@ int sb_decode(void *state, SpeexBits *bits, void *vout)
1389
1390
if (st -> subframeSize == 80 )
1390
1391
gc = MULT16_16_P14 (QCONST16 (1.4142f ,14 ),gc );
1391
1392
1392
- scale = SHL32 (PDIV32 (SHL32 (MULT16_16 (gc , el ),3 ), filter_ratio ),SIG_SHIFT - 3 );
1393
+ scale = SHL32 (PDIV32 (SHL32 (MULT16_16 (gc , el ),3 ), MAX16 ( EPSILON , filter_ratio ) ),SIG_SHIFT - 3 );
1393
1394
SUBMODE (innovation_unquant )(exc , SUBMODE (innovation_params ), st -> subframeSize ,
1394
1395
bits , stack , & st -> seed );
1395
1396
0 commit comments