Fixes problems with unstable filter detection
[opus.git] / silk / code_signs.c
index 65187e6..02a3aeb 100644 (file)
@@ -54,13 +54,13 @@ void silk_encode_signs(
 
     icdf[ 1 ] = 0;
     q_ptr = pulses;
-    i = silk_SMULBB( 6, silk_ADD_LSHIFT( quantOffsetType, signalType, 1 ) );
+    i = silk_SMULBB( 7, silk_ADD_LSHIFT( quantOffsetType, signalType, 1 ) );
     icdf_ptr = &silk_sign_iCDF[ i ];
     length = silk_RSHIFT( length + SHELL_CODEC_FRAME_LENGTH/2, LOG2_SHELL_CODEC_FRAME_LENGTH );
     for( i = 0; i < length; i++ ) {
         p = sum_pulses[ i ];
         if( p > 0 ) {
-            icdf[ 0 ] = icdf_ptr[ silk_min( p - 1, 5 ) ];
+            icdf[ 0 ] = icdf_ptr[ silk_min( p & 0x1F, 6 ) ];
             for( j = 0; j < SHELL_CODEC_FRAME_LENGTH; j++ ) {
                 if( q_ptr[ j ] != 0 ) {
                     ec_enc_icdf( psRangeEnc, silk_enc_map( q_ptr[ j ]), icdf, 8 );
@@ -88,13 +88,13 @@ void silk_decode_signs(
 
     icdf[ 1 ] = 0;
     q_ptr = pulses;
-    i = silk_SMULBB( 6, silk_ADD_LSHIFT( quantOffsetType, signalType, 1 ) );
+    i = silk_SMULBB( 7, silk_ADD_LSHIFT( quantOffsetType, signalType, 1 ) );
     icdf_ptr = &silk_sign_iCDF[ i ];
     length = silk_RSHIFT( length + SHELL_CODEC_FRAME_LENGTH/2, LOG2_SHELL_CODEC_FRAME_LENGTH );
     for( i = 0; i < length; i++ ) {
         p = sum_pulses[ i ];
         if( p > 0 ) {
-            icdf[ 0 ] = icdf_ptr[ silk_min( p - 1, 5 ) ];
+            icdf[ 0 ] = icdf_ptr[ silk_min( p & 0x1F, 6 ) ];
             for( j = 0; j < SHELL_CODEC_FRAME_LENGTH; j++ ) {
                 if( q_ptr[ j ] > 0 ) {
                     /* attach sign */