@@ -866,7 +866,7 @@ int sb_encode(void *state, void *vin, SpeexBits *bits)
866866 if (st -> subframeSize == 80 )
867867 gc = MULT16_16_P14 (QCONST16 (1.4142f ,14 ), gc );
868868
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 );
870870
871871 compute_impulse_response (st -> interp_qlpc , bw_lpc1 , bw_lpc2 , syn_resp , st -> subframeSize , st -> lpcSize , stack );
872872
@@ -1370,7 +1370,8 @@ int sb_decode(void *state, SpeexBits *bits, void *vout)
13701370 quant = speex_bits_unpack_unsigned (bits , 5 );
13711371 g = spx_exp (MULT16_16 (QCONST16 (.125f ,11 ),(quant - 10 )));
13721372
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 ));
13741375
13751376 for (i = 0 ;i < st -> subframeSize ;i += 2 )
13761377 {
@@ -1389,7 +1390,7 @@ int sb_decode(void *state, SpeexBits *bits, void *vout)
13891390 if (st -> subframeSize == 80 )
13901391 gc = MULT16_16_P14 (QCONST16 (1.4142f ,14 ),gc );
13911392
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 );
13931394 SUBMODE (innovation_unquant )(exc , SUBMODE (innovation_params ), st -> subframeSize ,
13941395 bits , stack , & st -> seed );
13951396
0 commit comments