SILK update
authorKoen Vos <koen.vos@skype.net>
Thu, 3 Feb 2011 14:07:32 +0000 (09:07 -0500)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Thu, 3 Feb 2011 14:07:32 +0000 (09:07 -0500)
45 files changed:
Makefile.am
src_FIX/SKP_Silk_control_codec_FIX.c
src_FIX/SKP_Silk_encode_frame_FIX.c
src_FIX/SKP_Silk_noise_shape_analysis_FIX.c
src_FLP/SKP_Silk_control_codec_FLP.c
src_FLP/SKP_Silk_encode_frame_FLP.c
src_FLP/SKP_Silk_noise_shape_analysis_FLP.c
src_SigProc_FIX/SKP_Silk_SigProc_FIX.h
src_SigProc_FIX/SKP_Silk_biquad.c [deleted file]
src_SigProc_FIX/SKP_Silk_burg_modified.c
src_SigProc_FIX/SKP_Silk_debug.c [deleted file]
src_SigProc_FIX/SKP_Silk_decode_pitch.c
src_SigProc_FIX/SKP_Silk_pitch_analysis_core.c
src_SigProc_FIX/SKP_Silk_pitch_est_defines.h
src_SigProc_FIX/src_SigProc_FIX.vcxproj
src_SigProc_FIX/src_SigProc_FIX.vcxproj.filters
src_SigProc_FLP/SKP_Silk_burg_modified_FLP.c
src_SigProc_FLP/SKP_Silk_pitch_analysis_core_FLP.c
src_common/SKP_Silk_NSQ.c
src_common/SKP_Silk_NSQ_del_dec.c
src_common/SKP_Silk_code_signs.c
src_common/SKP_Silk_control_audio_bandwidth.c
src_common/SKP_Silk_create_init_destroy.c
src_common/SKP_Silk_dec_API.c
src_common/SKP_Silk_decode_core.c
src_common/SKP_Silk_decode_frame.c
src_common/SKP_Silk_decode_indices.c
src_common/SKP_Silk_decode_parameters.c
src_common/SKP_Silk_decode_pulses.c
src_common/SKP_Silk_decoder_set_fs.c
src_common/SKP_Silk_define.h
src_common/SKP_Silk_detect_SWB_input.c [deleted file]
src_common/SKP_Silk_enc_API.c
src_common/SKP_Silk_encode_indices.c
src_common/SKP_Silk_gain_quant.c
src_common/SKP_Silk_main.h
src_common/SKP_Silk_structs.h
src_common/SKP_Silk_tables.h
src_common/SKP_Silk_tables_gain.c
src_common/SKP_Silk_tables_other.c
src_common/SKP_Silk_tuning_parameters.h
src_common/src_common.vcxproj
src_common/src_common.vcxproj.filters
test/Decoder.c
test/Encoder.c

index 167f715..6556ee8 100644 (file)
@@ -35,7 +35,6 @@ src_common/SKP_Silk_decode_indices.c \
 src_common/SKP_Silk_decode_pulses.c \
 src_common/SKP_Silk_decoder_set_fs.c \
 src_common/SKP_Silk_dec_API.c \
-src_common/SKP_Silk_detect_SWB_input.c \
 src_common/SKP_Silk_enc_API.c \
 src_common/SKP_Silk_encode_indices.c \
 src_common/SKP_Silk_encode_pulses.c \
@@ -96,7 +95,6 @@ src_SigProc_FIX/SKP_Silk_apply_sine_window.c \
 src_SigProc_FIX/SKP_Silk_array_maxabs.c \
 src_SigProc_FIX/SKP_Silk_autocorr.c \
 src_SigProc_FIX/SKP_Silk_biquad_alt.c \
-src_SigProc_FIX/SKP_Silk_biquad.c \
 src_SigProc_FIX/SKP_Silk_burg_modified.c \
 src_SigProc_FIX/SKP_Silk_bwexpander_32.c \
 src_SigProc_FIX/SKP_Silk_bwexpander.c \
index 5c34fc1..e62e042 100644 (file)
@@ -278,14 +278,9 @@ SKP_INLINE SKP_int SKP_Silk_setup_fs(
             /* Unsupported number of frames */\r
             SKP_assert( 0 );\r
         }\r
-        if( psEnc->sCmn.fs_kHz == 24 ) {\r
-            psEnc->sCmn.mu_LTP_Q9 = SKP_FIX_CONST( MU_LTP_QUANT_SWB, 9 );\r
-            psEnc->sCmn.bitrate_threshold_up    = SKP_int32_MAX;\r
-            psEnc->sCmn.bitrate_threshold_down  = SWB2WB_BITRATE_BPS; \r
-            psEnc->sCmn.pitch_lag_low_bits_iCDF = SKP_Silk_uniform12_iCDF;\r
-        } else if( psEnc->sCmn.fs_kHz == 16 ) {\r
+        if( psEnc->sCmn.fs_kHz == 16 ) {\r
             psEnc->sCmn.mu_LTP_Q9 = SKP_FIX_CONST( MU_LTP_QUANT_WB, 9 );\r
-            psEnc->sCmn.bitrate_threshold_up    = WB2SWB_BITRATE_BPS;\r
+            psEnc->sCmn.bitrate_threshold_up    = SKP_int32_MAX;\r
             psEnc->sCmn.bitrate_threshold_down  = WB2MB_BITRATE_BPS; \r
             psEnc->sCmn.pitch_lag_low_bits_iCDF = SKP_Silk_uniform8_iCDF;\r
         } else if( psEnc->sCmn.fs_kHz == 12 ) {\r
@@ -332,7 +327,11 @@ SKP_INLINE SKP_int SKP_Silk_setup_rate(
         } else if( psEnc->sCmn.fs_kHz == 16 ) {\r
             rateTable = TargetRate_table_WB;\r
         } else {\r
-            rateTable = TargetRate_table_SWB;\r
+            SKP_assert( 0 );\r
+        }\r
+        /* Reduce bitrate for 10 ms modes in these calculations */\r
+        if( psEnc->sCmn.nb_subfr == 2 ) {\r
+            TargetRate_bps -= REDUCE_BITRATE_10_MS_BPS;\r
         }\r
         for( k = 1; k < TARGET_RATE_TAB_SZ; k++ ) {\r
             /* Find bitrate interval in table and interpolate */\r
index 1c93fd5..be42261 100644 (file)
@@ -205,7 +205,7 @@ TOC(ENCODE_PARAMS)
         frame_terminator = SKP_SILK_NO_LBRR;\r
 \r
         /* Add the frame termination info to stream */\r
-        ec_enc_icdf( psRangeEnc, frame_terminator, SKP_Silk_FrameTermination_iCDF, 8 );\r
+        ec_enc_icdf( psRangeEnc, frame_terminator, SKP_Silk_LBRR_Present_iCDF, 8 );\r
 \r
         /* Code excitation signal */\r
         for( i = 0; i < psEnc->sCmn.nFramesInPayloadBuf; i++ ) {\r
@@ -240,10 +240,6 @@ TOC(ENCODE_PARAMS)
     psEnc->BufferedInChannel_ms    = SKP_LIMIT_int( psEnc->BufferedInChannel_ms, 0, 100 );\r
     psEnc->sCmn.nBytesInPayloadBuf = nBytes;\r
 \r
-    if( psEnc->speech_activity_Q8 > SKP_FIX_CONST( WB_DETECT_ACTIVE_SPEECH_LEVEL_THRES, 8 ) ) {\r
-        psEnc->sCmn.sSWBdetect.ActiveSpeech_ms = SKP_ADD_POS_SAT32( psEnc->sCmn.sSWBdetect.ActiveSpeech_ms, SKP_SMULBB( SUB_FRAME_LENGTH_MS, psEnc->sCmn.nb_subfr ) ); \r
-    }\r
-\r
 TOC(ENCODE_FRAME)\r
 \r
 #ifdef SAVE_ALL_INTERNAL_DATA\r
@@ -338,8 +334,6 @@ void SKP_Silk_LBRR_encode_FIX(
             Rate_only_parameters = 15500;\r
         } else if( psEnc->sCmn.fs_kHz == 16 ) {\r
             Rate_only_parameters = 17500;\r
-        } else if( psEnc->sCmn.fs_kHz == 24 ) {\r
-            Rate_only_parameters = 19500;\r
         } else {\r
             SKP_assert( 0 );\r
         }\r
@@ -412,7 +406,7 @@ void SKP_Silk_LBRR_encode_FIX(
             frame_terminator = SKP_SILK_LAST_FRAME;\r
 \r
             /* Add the frame termination info to stream */\r
-            ec_enc_icdf( psRangeEnc, frame_terminator, SKP_Silk_FrameTermination_iCDF, 8 );\r
+            ec_enc_icdf( psRangeEnc, frame_terminator, SKP_Silk_LBRR_Present_iCDF, 8 );\r
 \r
             /*********************************************/\r
             /* Encode quantization indices of excitation */\r
@@ -452,7 +446,7 @@ void SKP_Silk_LBRR_encode_FIX(
 \r
             /* Encode that more frames follows */\r
             frame_terminator = SKP_SILK_MORE_FRAMES;\r
-            ec_enc_icdf( psRangeEnc, frame_terminator, SKP_Silk_FrameTermination_iCDF, 8 );\r
+            ec_enc_icdf( psRangeEnc, frame_terminator, SKP_Silk_LBRR_Present_iCDF, 8 );\r
         }\r
 \r
         /* Restore original Gains */\r
index 3ce166f..1513486 100644 (file)
@@ -165,11 +165,6 @@ void SKP_Silk_noise_shape_analysis_FIX(
     psEncCtrl->current_SNR_dB_Q7 = psEnc->SNR_dB_Q7 - SKP_SMULWB( SKP_LSHIFT( ( SKP_int32 )psEnc->BufferedInChannel_ms, 7 ), \r
         SKP_FIX_CONST( 0.1, 16 ) );\r
 \r
-    /* Reduce SNR for 10 ms frames */\r
-    if( psEnc->sCmn.nb_subfr == 2 ) {\r
-        psEncCtrl->current_SNR_dB_Q7 -= SKP_FIX_CONST( 1.5, 7 );\r
-    }\r
-\r
     /* Reduce SNR_dB if inband FEC used */\r
     if( psEnc->speech_activity_Q8 > SKP_FIX_CONST( LBRR_SPEECH_ACTIVITY_THRES, 8 ) ) {\r
         psEncCtrl->current_SNR_dB_Q7 -= SKP_RSHIFT( psEnc->inBandFEC_SNR_comp_Q8, 1 );\r
index 2b0333a..45440d6 100644 (file)
@@ -281,14 +281,9 @@ SKP_INLINE SKP_int SKP_Silk_setup_fs(
             /* Unsupported number of frames */\r
             SKP_assert( 0 );\r
         }\r
-        if( psEnc->sCmn.fs_kHz == 24 ) {\r
-            psEnc->sCmn.mu_LTP_Q9 = SKP_FIX_CONST( MU_LTP_QUANT_SWB, 9 );\r
-            psEnc->sCmn.bitrate_threshold_up    = SKP_int32_MAX;\r
-            psEnc->sCmn.bitrate_threshold_down  = SWB2WB_BITRATE_BPS; \r
-            psEnc->sCmn.pitch_lag_low_bits_iCDF = SKP_Silk_uniform12_iCDF;\r
-        } else if( psEnc->sCmn.fs_kHz == 16 ) {\r
+        if( psEnc->sCmn.fs_kHz == 16 ) {\r
             psEnc->sCmn.mu_LTP_Q9 = SKP_FIX_CONST( MU_LTP_QUANT_WB, 9 );\r
-            psEnc->sCmn.bitrate_threshold_up    = WB2SWB_BITRATE_BPS;\r
+            psEnc->sCmn.bitrate_threshold_up    = SKP_int32_MAX;\r
             psEnc->sCmn.bitrate_threshold_down  = WB2MB_BITRATE_BPS; \r
             psEnc->sCmn.pitch_lag_low_bits_iCDF = SKP_Silk_uniform8_iCDF;\r
         } else if( psEnc->sCmn.fs_kHz == 12 ) {\r
@@ -335,7 +330,11 @@ SKP_INLINE SKP_int SKP_Silk_setup_rate(
         } else if( psEnc->sCmn.fs_kHz == 16 ) {\r
             rateTable = TargetRate_table_WB;\r
         } else {\r
-            rateTable = TargetRate_table_SWB;\r
+            SKP_assert( 0 );\r
+        }\r
+        /* Reduce bitrate for 10 ms modes in these calculations */\r
+        if( psEnc->sCmn.nb_subfr == 2 ) {\r
+            TargetRate_bps -= REDUCE_BITRATE_10_MS_BPS;\r
         }\r
         for( k = 1; k < TARGET_RATE_TAB_SZ; k++ ) {\r
             /* Find bitrate interval in table and interpolate */\r
index 7a19b4f..3d3c361 100644 (file)
@@ -162,7 +162,7 @@ TOC(LBRR)
     /* Noise shaping quantization            */\r
     /*****************************************/\r
 TIC(NSQ)\r
-    SKP_Silk_NSQ_wrapper_FLP( psEnc, &sEncCtrl, xfw, &psEnc->sCmn.q[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ], 0 );\r
+    SKP_Silk_NSQ_wrapper_FLP( psEnc, &sEncCtrl, xfw, &psEnc->sCmn.q[ psEnc->sCmn.nFramesInPayloadBuf * MAX_FRAME_LENGTH ], 0 );\r
 TOC(NSQ)\r
 \r
     /****************************************/\r
@@ -202,12 +202,12 @@ TOC(ENCODE_PARAMS)
         frame_terminator = SKP_SILK_NO_LBRR;\r
 \r
         /* Add the frame termination info to stream */\r
-        ec_enc_icdf( psRangeEnc, frame_terminator, SKP_Silk_FrameTermination_iCDF, 8 );\r
+        ec_enc_icdf( psRangeEnc, frame_terminator, SKP_Silk_LBRR_Present_iCDF, 8 );\r
 \r
         /* Code excitation signal */\r
         for( i = 0; i < psEnc->sCmn.nFramesInPayloadBuf; i++ ) {\r
             SKP_Silk_encode_pulses( psRangeEnc, psEnc->sCmn.signalType[ i ], psEnc->sCmn.quantOffsetType[ i ], \r
-                &psEnc->sCmn.q[ i * psEnc->sCmn.frame_length ], psEnc->sCmn.frame_length );\r
+                &psEnc->sCmn.q[ i * MAX_FRAME_LENGTH ], psEnc->sCmn.frame_length );\r
         }\r
 \r
         /* Payload length so far */\r
@@ -225,7 +225,7 @@ TOC(ENCODE_PARAMS)
 \r
         /* Take into account the q signal that isn't in the bitstream yet */\r
         nBytes += SKP_Silk_pulses_to_bytes( &psEnc->sCmn, \r
-            &psEnc->sCmn.q[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ] );\r
+            &psEnc->sCmn.q[ psEnc->sCmn.nFramesInPayloadBuf * MAX_FRAME_LENGTH ] );\r
     }\r
 \r
     /* Simulate number of ms buffered in channel because of exceeding TargetRate */\r
@@ -234,10 +234,6 @@ TOC(ENCODE_PARAMS)
     psEnc->BufferedInChannel_ms    = SKP_LIMIT_float( psEnc->BufferedInChannel_ms, 0.0f, 100.0f );\r
     psEnc->sCmn.nBytesInPayloadBuf = nBytes;\r
 \r
-    if( psEnc->speech_activity > WB_DETECT_ACTIVE_SPEECH_LEVEL_THRES ) {\r
-        psEnc->sCmn.sSWBdetect.ActiveSpeech_ms = SKP_ADD_POS_SAT32( psEnc->sCmn.sSWBdetect.ActiveSpeech_ms, SUB_FRAME_LENGTH_MS * psEnc->sCmn.nb_subfr ); \r
-    }\r
-\r
 TOC(ENCODE_FRAME)\r
 #ifdef SAVE_ALL_INTERNAL_DATA\r
     //DEBUG_STORE_DATA( xf.dat,                   pIn_HP_LP,                           psEnc->sCmn.frame_length * sizeof( SKP_int16 ) );\r
@@ -307,8 +303,6 @@ void SKP_Silk_LBRR_encode_FLP(
             Rate_only_parameters = 15500;\r
         } else if( psEnc->sCmn.fs_kHz == 16 ) {\r
             Rate_only_parameters = 17500;\r
-        } else if( psEnc->sCmn.fs_kHz == 24 ) {\r
-            Rate_only_parameters = 19500;\r
         } else {\r
             SKP_assert( 0 );\r
         }\r
@@ -334,9 +328,9 @@ void SKP_Silk_LBRR_encode_FLP(
             /*****************************************/\r
             /* Noise shaping quantization            */\r
             /*****************************************/\r
-            SKP_Silk_NSQ_wrapper_FLP( psEnc, psEncCtrl, xfw, &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ], 1 );\r
+            SKP_Silk_NSQ_wrapper_FLP( psEnc, psEncCtrl, xfw, &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf * MAX_FRAME_LENGTH ], 1 );\r
         } else {\r
-            SKP_memset( &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ], 0, psEnc->sCmn.frame_length * sizeof( SKP_int8 ) );\r
+            SKP_memset( &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf * MAX_FRAME_LENGTH ], 0, psEnc->sCmn.frame_length * sizeof( SKP_int8 ) );\r
             psEncCtrl->sCmn.LTP_scaleIndex = 0;\r
         }\r
         /****************************************/\r
@@ -379,7 +373,7 @@ void SKP_Silk_LBRR_encode_FLP(
             /*********************************************/\r
             for( i = 0; i < nFramesInPayloadBuf; i++ ) {\r
                 SKP_Silk_encode_pulses( &psEnc->sCmn.sRC_LBRR, psEnc->sCmn.signalType[ i ], psEnc->sCmn.quantOffsetType[ i ],\r
-                    &psEnc->sCmn.q_LBRR[ i * psEnc->sCmn.frame_length ], psEnc->sCmn.frame_length );\r
+                    &psEnc->sCmn.q_LBRR[ i * MAX_FRAME_LENGTH ], psEnc->sCmn.frame_length );\r
             }\r
 \r
             /* Payload length so far */\r
index ced1f0d..57e09f7 100644 (file)
@@ -144,11 +144,6 @@ void SKP_Silk_noise_shape_analysis_FLP(
     /* Reduce SNR_dB values if recent bitstream has exceeded TargetRate */\r
     psEncCtrl->current_SNR_dB = psEnc->SNR_dB - 0.1f * psEnc->BufferedInChannel_ms;\r
 \r
-    /* Reduce SNR for 10 ms frames */\r
-    if( psEnc->sCmn.nb_subfr == 2 ) {\r
-        psEncCtrl->current_SNR_dB -= 1.5f;\r
-    }\r
-\r
     /* Reduce SNR_dB if inband FEC used */\r
     if( psEnc->speech_activity > LBRR_SPEECH_ACTIVITY_THRES ) {\r
         psEncCtrl->current_SNR_dB -= psEnc->inBandFEC_SNR_comp;\r
index 6d80cef..372f2b8 100644 (file)
@@ -150,18 +150,6 @@ void SKP_Silk_allpass_int(
     const SKP_int32      len           /* I:   Number of samples                    */\r
 );\r
 \r
-/*! \r
- * second order ARMA filter\r
- * can handle (slowly) varying coefficients \r
- */\r
-void SKP_Silk_biquad(\r
-    const SKP_int16      *in,          /* I:   input signal                */\r
-    const SKP_int16      *B,           /* I:   MA coefficients, Q13 [3]    */\r
-    const SKP_int16      *A,           /* I:   AR coefficients, Q13 [2]    */\r
-          SKP_int32      *S,           /* I/O: state vector [2]            */\r
-          SKP_int16      *out,         /* O:   output signal               */\r
-    const SKP_int32      len           /* I:   signal length               */\r
-);\r
 /*!\r
  * second order ARMA filter; \r
  * slower than biquad() but uses more precise coefficients\r
diff --git a/src_SigProc_FIX/SKP_Silk_biquad.c b/src_SigProc_FIX/SKP_Silk_biquad.c
deleted file mode 100644 (file)
index 39392f0..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/***********************************************************************\r
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. \r
-Redistribution and use in source and binary forms, with or without \r
-modification, (subject to the limitations in the disclaimer below) \r
-are permitted provided that the following conditions are met:\r
-- Redistributions of source code must retain the above copyright notice,\r
-this list of conditions and the following disclaimer.\r
-- Redistributions in binary form must reproduce the above copyright \r
-notice, this list of conditions and the following disclaimer in the \r
-documentation and/or other materials provided with the distribution.\r
-- Neither the name of Skype Limited, nor the names of specific \r
-contributors, may be used to endorse or promote products derived from \r
-this software without specific prior written permission.\r
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED \r
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND \r
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,\r
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND \r
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE \r
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, \r
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF \r
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON \r
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-***********************************************************************/\r
-\r
-/*                                                                      *\r
- * SKP_Silk_biquad.c                                                  *\r
- *                                                                      *\r
- * Second order ARMA filter                                             *\r
- * Can handle slowly varying filter coefficients                        *\r
- *                                                                      *\r
- * Copyright 2006 (c), Skype Limited                                    *\r
- * Date: 060221                                                         *\r
- *                                                                      */\r
-#include "SKP_Silk_SigProc_FIX.h"\r
-\r
-/* Second order ARMA filter */\r
-/* Can handle slowly varying filter coefficients */\r
-void SKP_Silk_biquad(\r
-    const SKP_int16      *in,        /* I:    input signal               */\r
-    const SKP_int16      *B,         /* I:    MA coefficients, Q13 [3]   */\r
-    const SKP_int16      *A,         /* I:    AR coefficients, Q13 [2]   */\r
-    SKP_int32            *S,         /* I/O:  state vector [2]           */\r
-    SKP_int16            *out,       /* O:    output signal              */\r
-    const SKP_int32      len         /* I:    signal length              */\r
-)\r
-{\r
-    SKP_int   k, in16;\r
-    SKP_int32 A0_neg, A1_neg, S0, S1, out32;\r
-\r
-    S0 = S[ 0 ];\r
-    S1 = S[ 1 ];\r
-    A0_neg = -A[ 0 ];\r
-    A1_neg = -A[ 1 ];\r
-    for( k = 0; k < len; k++ ) {\r
-        /* S[ 0 ], S[ 1 ]: Q13 */\r
-        in16  = in[ k ];\r
-        out32 = SKP_SMLABB( S0, in16, B[ 0 ] );\r
-\r
-        S0 = SKP_SMLABB( S1, in16, B[ 1 ] );\r
-        S0 += SKP_LSHIFT( SKP_SMULWB( out32, A0_neg ), 3 );\r
-\r
-        S1 = SKP_LSHIFT( SKP_SMULWB( out32, A1_neg ), 3 );\r
-        S1 = SKP_SMLABB( S1, in16, B[ 2 ] );\r
-        out[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( out32, 13 ) );\r
-    }\r
-    S[ 0 ] = S0;\r
-    S[ 1 ] = S1;\r
-}\r
index d603f3c..3faebd4 100644 (file)
@@ -37,7 +37,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 \r
 #include "SKP_Silk_SigProc_FIX.h"\r
 \r
-#define MAX_FRAME_SIZE              544 // subfr_length * nb_subfr = ( 0.005 * 24000 + 16 ) * 4 = 544\r
+#define MAX_FRAME_SIZE              384 // subfr_length * nb_subfr = ( 0.005 * 16000 + 16 ) * 4 = 384\r
 #define MAX_NB_SUBFR                4\r
 \r
 #define QA                          25\r
diff --git a/src_SigProc_FIX/SKP_Silk_debug.c b/src_SigProc_FIX/SKP_Silk_debug.c
deleted file mode 100644 (file)
index 29c67c8..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-/***********************************************************************\r
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. \r
-Redistribution and use in source and binary forms, with or without \r
-modification, (subject to the limitations in the disclaimer below) \r
-are permitted provided that the following conditions are met:\r
-- Redistributions of source code must retain the above copyright notice,\r
-this list of conditions and the following disclaimer.\r
-- Redistributions in binary form must reproduce the above copyright \r
-notice, this list of conditions and the following disclaimer in the \r
-documentation and/or other materials provided with the distribution.\r
-- Neither the name of Skype Limited, nor the names of specific \r
-contributors, may be used to endorse or promote products derived from \r
-this software without specific prior written permission.\r
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED \r
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND \r
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,\r
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND \r
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE \r
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, \r
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF \r
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON \r
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-***********************************************************************/\r
-\r
-/*                                                                      *\r
- * SKP_debug.c                                                          *\r
- *                                                                      *\r
- * This contains code to help debugging                                 *\r
- *                                                                      *\r
- * Copyright 2009 (c), Skype Limited                                    *\r
- * Date: 090629                                                         *\r
- *                                                                      */\r
-\r
-#include "SKP_debug.h"\r
-#include "../src_SigProc_FIX/SKP_Silk_SigProc_FIX.h"\r
-\r
-#ifdef _WIN32\r
-\r
-#if (defined(_WIN32) || defined(_WINCE)) \r
-#include <windows.h>    /* timer */\r
-#else   // Linux or Mac\r
-#include <sys/time.h>\r
-#endif\r
-\r
-unsigned long GetHighResolutionTime() /* O: time in usec*/\r
-{\r
-    /* Returns a time counter in microsec   */\r
-    /* the resolution is platform dependent */\r
-    /* but is typically 1.62 us resolution  */\r
-    LARGE_INTEGER lpPerformanceCount;\r
-    LARGE_INTEGER lpFrequency;\r
-    QueryPerformanceCounter(&lpPerformanceCount);\r
-    QueryPerformanceFrequency(&lpFrequency);\r
-    return (unsigned long)((1000000*(lpPerformanceCount.QuadPart)) / lpFrequency.QuadPart);\r
-}\r
-#else   // Linux or Mac\r
-unsigned long GetHighResolutionTime() /* O: time in usec*/\r
-{\r
-    struct timeval tv;\r
-    gettimeofday(&tv, 0);\r
-    return((tv.tv_sec*1000000)+(tv.tv_usec));\r
-}\r
-#endif\r
-\r
-#if SKP_TIC_TOC\r
-\r
-int           SKP_Timer_nTimers = 0;\r
-int           SKP_Timer_depth_ctr = 0;\r
-char          SKP_Timer_tags[SKP_NUM_TIMERS_MAX][SKP_NUM_TIMERS_MAX_TAG_LEN];\r
-#ifdef WIN32\r
-LARGE_INTEGER SKP_Timer_start[SKP_NUM_TIMERS_MAX];\r
-#else\r
-unsigned long SKP_Timer_start[SKP_NUM_TIMERS_MAX];\r
-#endif  \r
-unsigned int  SKP_Timer_cnt[SKP_NUM_TIMERS_MAX];\r
-SKP_int64     SKP_Timer_min[SKP_NUM_TIMERS_MAX];\r
-SKP_int64     SKP_Timer_sum[SKP_NUM_TIMERS_MAX];\r
-SKP_int64     SKP_Timer_max[SKP_NUM_TIMERS_MAX];\r
-SKP_int64     SKP_Timer_depth[SKP_NUM_TIMERS_MAX];\r
-\r
-#ifdef WIN32\r
-void SKP_TimerSave(char *file_name)\r
-{\r
-    if( SKP_Timer_nTimers > 0 ) \r
-    {\r
-        int k;\r
-        FILE *fp;\r
-        LARGE_INTEGER lpFrequency;\r
-        LARGE_INTEGER lpPerformanceCount1, lpPerformanceCount2;\r
-        int del = 0x7FFFFFFF;\r
-        double avg, sum_avg;\r
-        /* estimate overhead of calling performance counters */\r
-        for( k = 0; k < 1000; k++ ) {\r
-            QueryPerformanceCounter(&lpPerformanceCount1);\r
-            QueryPerformanceCounter(&lpPerformanceCount2);\r
-            lpPerformanceCount2.QuadPart -= lpPerformanceCount1.QuadPart;\r
-            if( (int)lpPerformanceCount2.LowPart < del )\r
-                del = lpPerformanceCount2.LowPart;\r
-        }\r
-        QueryPerformanceFrequency(&lpFrequency);\r
-        /* print results to file */\r
-        sum_avg = 0.0f;\r
-        for( k = 0; k < SKP_Timer_nTimers; k++ ) {\r
-            if (SKP_Timer_depth[k] == 0) {\r
-                sum_avg += (1e6 * SKP_Timer_sum[k] / SKP_Timer_cnt[k] - del) / lpFrequency.QuadPart * SKP_Timer_cnt[k];\r
-            }\r
-        }\r
-        fp = fopen(file_name, "w");\r
-        fprintf(fp, "                                min         avg     %%         max      count\n");\r
-        for( k = 0; k < SKP_Timer_nTimers; k++ ) {\r
-            if (SKP_Timer_depth[k] == 0) {\r
-                fprintf(fp, "%-28s", SKP_Timer_tags[k]);\r
-            } else if (SKP_Timer_depth[k] == 1) {\r
-                fprintf(fp, " %-27s", SKP_Timer_tags[k]);\r
-            } else if (SKP_Timer_depth[k] == 2) {\r
-                fprintf(fp, "  %-26s", SKP_Timer_tags[k]);\r
-            } else if (SKP_Timer_depth[k] == 3) {\r
-                fprintf(fp, "   %-25s", SKP_Timer_tags[k]);\r
-            } else {\r
-                fprintf(fp, "    %-24s", SKP_Timer_tags[k]);\r
-            }\r
-            avg = (1e6 * SKP_Timer_sum[k] / SKP_Timer_cnt[k] - del) / lpFrequency.QuadPart;\r
-            fprintf(fp, "%8.2f", (1e6 * (SKP_max_64(SKP_Timer_min[k] - del, 0))) / lpFrequency.QuadPart);\r
-            fprintf(fp, "%12.2f %6.2f", avg, 100.0 * avg / sum_avg * SKP_Timer_cnt[k]);\r
-            fprintf(fp, "%12.2f", (1e6 * (SKP_max_64(SKP_Timer_max[k] - del, 0))) / lpFrequency.QuadPart);\r
-            fprintf(fp, "%10d\n", SKP_Timer_cnt[k]);\r
-        }\r
-        fprintf(fp, "                                microseconds\n");\r
-        fclose(fp);\r
-    }\r
-}\r
-#else\r
-void SKP_TimerSave(char *file_name)\r
-{\r
-    if( SKP_Timer_nTimers > 0 ) \r
-    {\r
-        int k;\r
-        FILE *fp;\r
-        /* print results to file */\r
-        fp = fopen(file_name, "w");\r
-        fprintf(fp, "                                min         avg         max      count\n");\r
-        for( k = 0; k < SKP_Timer_nTimers; k++ )\r
-        {\r
-            if (SKP_Timer_depth[k] == 0) {\r
-                fprintf(fp, "%-28s", SKP_Timer_tags[k]);\r
-            } else if (SKP_Timer_depth[k] == 1) {\r
-                fprintf(fp, " %-27s", SKP_Timer_tags[k]);\r
-            } else if (SKP_Timer_depth[k] == 2) {\r
-                fprintf(fp, "  %-26s", SKP_Timer_tags[k]);\r
-            } else if (SKP_Timer_depth[k] == 3) {\r
-                fprintf(fp, "   %-25s", SKP_Timer_tags[k]);\r
-            } else {\r
-                fprintf(fp, "    %-24s", SKP_Timer_tags[k]);\r
-            }\r
-            fprintf(fp, "%d ", SKP_Timer_min[k]);\r
-            fprintf(fp, "%f ", (double)SKP_Timer_sum[k] / (double)SKP_Timer_cnt[k]);\r
-            fprintf(fp, "%d ", SKP_Timer_max[k]);\r
-            fprintf(fp, "%10d\n", SKP_Timer_cnt[k]);\r
-        }\r
-        fprintf(fp, "                                microseconds\n");\r
-        fclose(fp);\r
-    }\r
-}\r
-#endif\r
-\r
-#endif /* SKP_TIC_TOC */\r
-\r
-#if SKP_DEBUG\r
-FILE *SKP_debug_store_fp[ SKP_NUM_STORES_MAX ];\r
-int SKP_debug_store_count = 0;\r
-#endif /* SKP_DEBUG */\r
-\r
index b7a3e74..d3eb407 100644 (file)
@@ -34,7 +34,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 void SKP_Silk_decode_pitch(\r
     SKP_int         lagIndex,                        /* I                             */\r
     SKP_int         contourIndex,                    /* O                             */\r
-    SKP_int         pitch_lags[],                    /* O 4 pitch values              */\r
+    SKP_int         pitch_lags[],                    /* O pitch values                */\r
     const SKP_int   Fs_kHz,                          /* I sampling frequency (kHz)    */\r
     const SKP_int   nb_subfr                         /* I number of sub frames        */\r
 )\r
@@ -47,7 +47,7 @@ void SKP_Silk_decode_pitch(
             Lag_CB_ptr = &SKP_Silk_CB_lags_stage2[ 0 ][ 0 ];\r
             cbk_size   = PE_NB_CBKS_STAGE2_EXT;\r
         } else {\r
-            SKP_assert( PE_MAX_NB_SUBFR >> 1 == nb_subfr );\r
+            SKP_assert( nb_subfr == PE_MAX_NB_SUBFR >> 1 );\r
             Lag_CB_ptr = &SKP_Silk_CB_lags_stage2_10_ms[ 0 ][ 0 ];\r
             cbk_size   = PE_NB_CBKS_STAGE2_10MS;\r
         }\r
@@ -56,7 +56,7 @@ void SKP_Silk_decode_pitch(
             Lag_CB_ptr = &SKP_Silk_CB_lags_stage3[ 0 ][ 0 ];\r
             cbk_size   = PE_NB_CBKS_STAGE3_MAX;\r
         } else {\r
-            SKP_assert( PE_MAX_NB_SUBFR >> 1 == nb_subfr );\r
+            SKP_assert( nb_subfr == PE_MAX_NB_SUBFR >> 1 );\r
             Lag_CB_ptr = &SKP_Silk_CB_lags_stage3_10_ms[ 0 ][ 0 ];\r
             cbk_size   = PE_NB_CBKS_STAGE3_10MS;\r
         }\r
index 8f43abe..baa8a33 100644 (file)
@@ -103,7 +103,7 @@ SKP_int SKP_Silk_pitch_analysis_core(    /* O    Voicing estimate: 0 voiced, 1 u
     SKP_int32 delta_lag_log2_sqr_Q7, lag_log2_Q7, prevLag_log2_Q7, prev_lag_bias_Q15, corr_thres_Q15;\r
     const SKP_int8 *Lag_CB_ptr;\r
     /* Check for valid sampling frequency */\r
-    SKP_assert( Fs_kHz == 8 || Fs_kHz == 12 || Fs_kHz == 16 || Fs_kHz == 24 );\r
+    SKP_assert( Fs_kHz == 8 || Fs_kHz == 12 || Fs_kHz == 16 );\r
 \r
     /* Check for valid complexity setting */\r
     SKP_assert( complexity >= SKP_Silk_PE_MIN_COMPLEX );\r
@@ -136,10 +136,6 @@ SKP_int SKP_Silk_pitch_analysis_core(    /* O    Voicing estimate: 0 voiced, 1 u
         SKP_int32 R23[ 6 ];\r
         SKP_memset( R23, 0, 6 * sizeof( SKP_int32 ) );\r
         SKP_Silk_resampler_down2_3( R23, signal_8kHz, signal, frame_length );\r
-    } else if( Fs_kHz == 24 ) {\r
-        SKP_int32 filt_state_fix[ 8 ];\r
-        SKP_memset( filt_state_fix, 0, 8 * sizeof(SKP_int32) );\r
-        SKP_Silk_resampler_down3( filt_state_fix, signal_8kHz, signal, frame_length );\r
     } else {\r
         SKP_assert( Fs_kHz == 8 );\r
         SKP_memcpy( signal_8kHz, signal, frame_length_8kHz * sizeof(SKP_int16) );\r
@@ -372,8 +368,6 @@ SKP_int SKP_Silk_pitch_analysis_core(    /* O    Voicing estimate: 0 voiced, 1 u
             prevLag = SKP_DIV32_16( SKP_LSHIFT( prevLag, 1 ), 3 );\r
         } else if( Fs_kHz == 16 ) {\r
             prevLag = SKP_RSHIFT( prevLag, 1 );\r
-        } else if( Fs_kHz == 24 ) {\r
-            prevLag = SKP_DIV32_16( prevLag, 3 );\r
         }\r
         prevLag_log2_Q7 = SKP_Silk_lin2log( (SKP_int32)prevLag );\r
     } else {\r
@@ -570,7 +564,7 @@ SKP_int SKP_Silk_pitch_analysis_core(    /* O    Voicing estimate: 0 voiced, 1 u
         CCmax = SKP_max( CCmax, 0 );\r
         *LTPCorr_Q15 = (SKP_int)SKP_Silk_SQRT_APPROX( SKP_LSHIFT( CCmax, 13 ) ); /* Output normalized correlation */\r
         for( k = 0; k < nb_subfr; k++ ) {\r
-            pitch_out[ k ] = lag + SKP_Silk_CB_lags_stage2[ k ][ CBimax ];\r
+            pitch_out[ k ] = lag + matrix_ptr( Lag_CB_ptr, k, CBimax, cbk_size );\r
         }\r
         *lagIndex = lag - min_lag_8kHz;\r
         *contourIndex = CBimax;\r
index 87d90d5..c2b20b7 100644 (file)
@@ -34,7 +34,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 /* Definitions For Fix pitch estimator                      */\r
 /************************************************************/\r
 \r
-#define PE_MAX_FS_KHZ                24 /* Maximum sampling frequency used */\r
+#define PE_MAX_FS_KHZ                16 /* Maximum sampling frequency used */\r
 \r
 #define PE_MAX_NB_SUBFR              4\r
 #define PE_SUBFR_LENGTH_MS           5   /* 5 ms  */\r
index 8cf007d..72e526c 100644 (file)
@@ -91,7 +91,6 @@
     <ClCompile Include="SKP_Silk_apply_sine_window.c" />\r
     <ClCompile Include="SKP_Silk_array_maxabs.c" />\r
     <ClCompile Include="SKP_Silk_autocorr.c" />\r
-    <ClCompile Include="SKP_Silk_biquad.c" />\r
     <ClCompile Include="SKP_Silk_biquad_alt.c" />\r
     <ClCompile Include="SKP_Silk_burg_modified.c" />\r
     <ClCompile Include="SKP_Silk_bwexpander.c" />\r
index d22c016..6531f70 100644 (file)
@@ -65,9 +65,6 @@
     <ClCompile Include="SKP_Silk_autocorr.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="SKP_Silk_biquad.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
     <ClCompile Include="SKP_Silk_biquad_alt.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
index f11693f..bb11f13 100644 (file)
@@ -37,11 +37,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 \r
 #include "SKP_Silk_SigProc_FLP.h"\r
 \r
-#define MAX_FRAME_SIZE              544 // subfr_length * nb_subfr = ( 0.005 * 24000 + 16 ) * 4 = 544\r
+#define MAX_FRAME_SIZE              384 // subfr_length * nb_subfr = ( 0.005 * 16000 + 16 ) * 4 = 384\r
 #define MAX_NB_SUBFR                4\r
 \r
 /* Compute reflection coefficients from input signal */\r
-SKP_float SKP_Silk_burg_modified_FLP(     /* O    returns residual energy                                         */\r
+SKP_float SKP_Silk_burg_modified_FLP(   /* O    returns residual energy                                         */\r
     SKP_float       A[],                /* O    prediction coefficients (length order)                          */\r
     const SKP_float x[],                /* I    input signal, length: nb_subfr*(D+L_sub)                        */\r
     const SKP_int   subfr_length,       /* I    input signal subframe length (including D preceeding samples)   */\r
index 410487b..d58efab 100644 (file)
@@ -88,7 +88,7 @@ SKP_int SKP_Silk_pitch_analysis_core_FLP( /* O voicing estimate: 0 voiced, 1 unv
     SKP_float filt_state[ PE_MAX_DECIMATE_STATE_LENGTH ];\r
     SKP_int   i, k, d, j;\r
     SKP_float threshold, contour_bias;\r
-    SKP_float C[ PE_MAX_NB_SUBFR][ (PE_MAX_LAG >> 1) + 5 ]; /* use to be +2 but then valgrind reported errors for SWB */\r
+    SKP_float C[ PE_MAX_NB_SUBFR][ (PE_MAX_LAG >> 1) + 5 ];\r
     SKP_float CC[ PE_NB_CBKS_STAGE2_EXT ];\r
     const SKP_float *target_ptr, *basis_ptr;\r
     double    cross_corr, normalizer, energy, energy_tmp;\r
@@ -110,7 +110,7 @@ SKP_int SKP_Silk_pitch_analysis_core_FLP( /* O voicing estimate: 0 voiced, 1 unv
     const SKP_int8 *Lag_CB_ptr;\r
 \r
     /* Check for valid sampling frequency */\r
-    SKP_assert( Fs_kHz == 8 || Fs_kHz == 12 || Fs_kHz == 16 || Fs_kHz == 24 );\r
+    SKP_assert( Fs_kHz == 8 || Fs_kHz == 12 || Fs_kHz == 16 );\r
 \r
     /* Check for valid complexity setting */\r
     SKP_assert( complexity >= SigProc_PE_MIN_COMPLEX );\r
@@ -160,16 +160,6 @@ SKP_int SKP_Silk_pitch_analysis_core_FLP( /* O voicing estimate: 0 voiced, 1 unv
             SKP_Silk_decimate2_coarsest_FLP( signal, filt_state, signal_8kHz, \r
                 scratch_mem, frame_length_8kHz );\r
         }\r
-    } else if( Fs_kHz == 24 ) {\r
-        SKP_int16 signal_24[ PE_MAX_FRAME_LENGTH ];\r
-        SKP_int16 signal_8[ 8 * PE_MAX_FRAME_LENGTH_MS ];\r
-        SKP_int32 filt_state_fix[ 8 ];\r
-\r
-        /* Resample to 24 -> 8 khz */\r
-        SKP_float2short_array( signal_24, signal, frame_length );\r
-        SKP_memset( filt_state_fix, 0, 8 * sizeof(SKP_int32) );\r
-        SKP_Silk_resampler_down3( filt_state_fix, signal_8, signal_24, frame_length );\r
-        SKP_short2float_array( signal_8kHz, signal_8, frame_length_8kHz );\r
     } else {\r
         SKP_assert( Fs_kHz == 8 );\r
         SKP_memcpy( signal_8kHz, signal, frame_length_8kHz * sizeof(SKP_float) );\r
@@ -354,8 +344,6 @@ SKP_int SKP_Silk_pitch_analysis_core_FLP( /* O voicing estimate: 0 voiced, 1 unv
             prevLag = SKP_LSHIFT( prevLag, 1 ) / 3;\r
         } else if( Fs_kHz == 16 ) {\r
             prevLag = SKP_RSHIFT( prevLag, 1 );\r
-        } else if( Fs_kHz == 24 ) {\r
-            prevLag = prevLag / 3;\r
         }\r
         prevLag_log2 = SKP_P_log2((SKP_float)prevLag);\r
     } else {\r
@@ -509,7 +497,7 @@ SKP_int SKP_Silk_pitch_analysis_core_FLP( /* O voicing estimate: 0 voiced, 1 unv
         SKP_assert( CCmax >= 0.0f );\r
         *LTPCorr = (SKP_float)sqrt( CCmax / nb_subfr ); /* Output normalized correlation */\r
         for( k = 0; k < nb_subfr; k++ ) {\r
-            pitch_out[ k ] = lag + SKP_Silk_CB_lags_stage2[ k ][ CBimax ];\r
+            pitch_out[ k ] = lag + matrix_ptr( Lag_CB_ptr, k, CBimax, cbk_size );\r
         }\r
         *lagIndex = lag - min_lag;\r
         *contourIndex = CBimax;\r
index 7cde053..2c3b544 100644 (file)
@@ -32,7 +32,6 @@ SKP_INLINE void SKP_Silk_nsq_scale_states(
     SKP_Silk_nsq_state  *NSQ,               /* I/O NSQ state                        */\r
     const SKP_int16     x[],                /* I input in Q0                        */\r
     SKP_int32           x_sc_Q10[],         /* O input scaled with 1/Gain           */\r
-    SKP_int             subfr_length,       /* I length of input                    */\r
     const SKP_int16     sLTP[],             /* I re-whitened LTP state in Q0        */\r
     SKP_int32           sLTP_Q16[],         /* O LTP state matching scaled input    */\r
     SKP_int             subfr,              /* I subframe number                    */\r
@@ -61,12 +60,6 @@ SKP_INLINE void SKP_Silk_noise_shape_quantizer(
     SKP_int             length,             /* I    Input length                    */\r
     SKP_int             shapingLPCOrder,    /* I    Noise shaping AR filter order   */\r
     SKP_int             predictLPCOrder     /* I    Prediction filter order         */\r
-#ifdef SAVE_ALL_INTERNAL_DATA\r
-    ,SKP_float          q_in_env[],         /* O                                    */\r
-    SKP_float           q_exc[],            /* O                                    */\r
-    SKP_float           q_LPC_exc[],        /* O                                    */\r
-    SKP_float           q_exc_prev[]        /* O                                    */\r
-#endif\r
 );\r
 \r
 void SKP_Silk_NSQ(\r
@@ -87,7 +80,7 @@ void SKP_Silk_NSQ(
     const SKP_int                   LTP_scale_Q14                               /* I    LTP state scaling                   */\r
 )\r
 {\r
-    SKP_int     k, lag, start_idx, subfr_length, LSF_interpolation_flag;\r
+    SKP_int     k, lag, start_idx, LSF_interpolation_flag;\r
     const SKP_int16 *A_Q12, *B_Q14, *AR_shp_Q13;\r
     SKP_int16   *pxq;\r
     SKP_int32   sLTP_Q16[ 2 * MAX_FRAME_LENGTH ];\r
@@ -96,23 +89,9 @@ void SKP_Silk_NSQ(
     SKP_int     offset_Q10;\r
     SKP_int32   FiltState[ MAX_LPC_ORDER ];\r
     SKP_int32   x_sc_Q10[ MAX_FRAME_LENGTH / MAX_NB_SUBFR ];\r
-#ifdef SAVE_ALL_INTERNAL_DATA\r
-    /* Date buffers for analysing */\r
-    SKP_float   q_in_env_buf[  MAX_FRAME_LENGTH ];\r
-    SKP_float   q_exc_buf[     MAX_FRAME_LENGTH ];\r
-    SKP_float   q_LPC_exc_buf[ MAX_FRAME_LENGTH ];\r
-    SKP_float   q_exc_prev_buf[     MAX_FRAME_LENGTH ];\r
-    SKP_float   *q_in_env, *q_exc, *q_LPC_exc, *q_exc_prev;\r
-\r
-    q_in_env   = q_in_env_buf;\r
-    q_exc      = q_exc_buf;\r
-    q_LPC_exc  = q_LPC_exc_buf;\r
-    q_exc_prev = q_exc_prev_buf;\r
-#endif\r
-\r
-    subfr_length = psEncC->frame_length / MAX_NB_SUBFR;\r
 \r
     NSQ->rand_seed  =  psEncCtrlC->Seed;\r
+\r
     /* Set unvoiced lag to the previous one, overwrite later for voiced */\r
     lag             = NSQ->lagPrev;\r
 \r
@@ -147,40 +126,28 @@ void SKP_Silk_NSQ(
 \r
             /* Re-whitening */\r
             if( ( k & ( 3 - SKP_LSHIFT( LSF_interpolation_flag, 1 ) ) ) == 0 ) {\r
-\r
                 /* Rewhiten with new A coefs */\r
                 start_idx = psEncC->ltp_mem_length - lag - psEncC->predictLPCOrder - LTP_ORDER / 2;\r
                 SKP_assert( start_idx > 0 );\r
                 \r
                 SKP_memset( FiltState, 0, psEncC->predictLPCOrder * sizeof( SKP_int32 ) );\r
                 SKP_Silk_MA_Prediction( &NSQ->xq[ start_idx + k * psEncC->subfr_length ], \r
-                    A_Q12, FiltState, sLTP + start_idx, psEncC->ltp_mem_length - start_idx, psEncC->predictLPCOrder );\r
+                    A_Q12, FiltState, &sLTP[ start_idx ], psEncC->ltp_mem_length - start_idx, psEncC->predictLPCOrder );\r
 \r
                 NSQ->rewhite_flag = 1;\r
                 NSQ->sLTP_buf_idx = psEncC->ltp_mem_length;\r
             }\r
         }\r
         \r
-        SKP_Silk_nsq_scale_states( psEncC, NSQ, x, x_sc_Q10, psEncC->subfr_length, sLTP, \r
-            sLTP_Q16, k, LTP_scale_Q14, Gains_Q16, psEncCtrlC->pitchL );\r
+        SKP_Silk_nsq_scale_states( psEncC, NSQ, x, x_sc_Q10, sLTP, sLTP_Q16, k, LTP_scale_Q14, Gains_Q16, psEncCtrlC->pitchL );\r
 \r
         SKP_Silk_noise_shape_quantizer( NSQ, psEncCtrlC->signalType, x_sc_Q10, q, pxq, sLTP_Q16, A_Q12, B_Q14, \r
             AR_shp_Q13, lag, HarmShapeFIRPacked_Q14, Tilt_Q14[ k ], LF_shp_Q14[ k ], Gains_Q16[ k ], Lambda_Q10, \r
-            offset_Q10, psEncC->subfr_length, psEncC->shapingLPCOrder, psEncC->predictLPCOrder\r
-#ifdef SAVE_ALL_INTERNAL_DATA\r
-            , q_in_env, q_exc, q_LPC_exc, q_exc_prev\r
-#endif\r
-        );\r
+            offset_Q10, psEncC->subfr_length, psEncC->shapingLPCOrder, psEncC->predictLPCOrder );\r
 \r
-        x          += psEncC->subfr_length;\r
-        q          += psEncC->subfr_length;\r
-        pxq        += psEncC->subfr_length;\r
-#ifdef SAVE_ALL_INTERNAL_DATA\r
-        q_in_env   += psEncC->subfr_length;\r
-        q_exc      += psEncC->subfr_length;\r
-        q_LPC_exc  += psEncC->subfr_length;\r
-        q_exc_prev += subfr_length;\r
-#endif\r
+        x   += psEncC->subfr_length;\r
+        q   += psEncC->subfr_length;\r
+        pxq += psEncC->subfr_length;\r
     }\r
 \r
     /* Update lagPrev for next frame */\r
@@ -191,11 +158,9 @@ void SKP_Silk_NSQ(
     SKP_memcpy( NSQ->sLTP_shp_Q10, &NSQ->sLTP_shp_Q10[ psEncC->frame_length ], psEncC->ltp_mem_length * sizeof( SKP_int32 ) );\r
 \r
 #ifdef SAVE_ALL_INTERNAL_DATA\r
-    DEBUG_STORE_DATA( q_in_env.dat,  q_in_env_buf,  psEncC->frame_length * sizeof( SKP_float ) );\r
-    DEBUG_STORE_DATA( q_exc.dat,     q_exc_buf,     psEncC->frame_length * sizeof( SKP_float ) );\r
-    DEBUG_STORE_DATA( q_lpc_exc.dat, q_LPC_exc_buf, psEncC->frame_length * sizeof( SKP_float ) );\r
-    DEBUG_STORE_DATA( xq.dat,        NSQ->xq,       psEncC->frame_length * sizeof( SKP_int16 ) );\r
-    DEBUG_STORE_DATA( q.dat,         &q[ -psEncC->frame_length ], psEncC->frame_length * sizeof( SKP_int8 ) );\r
+    DEBUG_STORE_DATA( xq.dat,       &pxq[ -psEncC->frame_length ],       psEncC->frame_length * sizeof( SKP_int16 ) );\r
+    DEBUG_STORE_DATA( q.dat,        &q[ -psEncC->frame_length ],         psEncC->frame_length * sizeof( SKP_int8 ) );\r
+    DEBUG_STORE_DATA( sLTP_Q16.dat, &sLTP_Q16[ psEncC->ltp_mem_length ], psEncC->frame_length * sizeof( SKP_int32 ) );\r
 #endif\r
 }\r
 \r
@@ -222,12 +187,6 @@ SKP_INLINE void SKP_Silk_noise_shape_quantizer(
     SKP_int             length,             /* I    Input length                    */\r
     SKP_int             shapingLPCOrder,    /* I    Noise shaping AR filter order   */\r
     SKP_int             predictLPCOrder     /* I    Prediction filter order         */\r
-#ifdef SAVE_ALL_INTERNAL_DATA\r
-    ,SKP_float          q_in_env[],         /* O                                    */\r
-    SKP_float           q_exc[],            /* O                                    */\r
-    SKP_float           q_LPC_exc[],        /* O                                    */\r
-    SKP_float           q_exc_prev[]        /* O                                    */\r
-#endif\r
 )\r
 {\r
     SKP_int     i, j;\r
@@ -322,16 +281,17 @@ SKP_INLINE void SKP_Silk_noise_shape_quantizer(
             n_LTP_Q14 = SKP_SMLAWT( n_LTP_Q14, shp_lag_ptr[ -1 ],                     HarmShapeFIRPacked_Q14 );\r
             n_LTP_Q14 = SKP_LSHIFT( n_LTP_Q14, 6 );\r
             shp_lag_ptr++;\r
+\r
+            tmp1 = SKP_SUB32( LTP_pred_Q14, n_LTP_Q14 );                       /* Add Q14 stuff */\r
+            tmp1 = SKP_RSHIFT( tmp1, 4 );                                      /* convert to Q10  */\r
+            tmp1 = SKP_ADD32( tmp1, LPC_pred_Q10 );                            /* add Q10 stuff */ \r
+            tmp1 = SKP_SUB32( tmp1, n_AR_Q10 );                                /* subtract Q10 stuff */ \r
         } else {\r
-            n_LTP_Q14 = 0;\r
+            tmp1 = SKP_SUB32( LPC_pred_Q10, n_AR_Q10 );                        /* subtract Q10 stuff */ \r
         }\r
 \r
         /* Input minus prediction plus noise feedback  */\r
         //r = x[ i ] - LTP_pred - LPC_pred + n_AR + n_Tilt + n_LF + n_LTP;\r
-        tmp1  = SKP_SUB32( LTP_pred_Q14, n_LTP_Q14 );                       /* Add Q14 stuff */\r
-        tmp1  = SKP_RSHIFT( tmp1, 4 );                                      /* convert to Q10  */\r
-        tmp1  = SKP_ADD32( tmp1, LPC_pred_Q10 );                            /* add Q10 stuff */ \r
-        tmp1  = SKP_SUB32( tmp1, n_AR_Q10 );                                /* subtract Q10 stuff */ \r
         tmp1  = SKP_SUB32( tmp1, n_LF_Q10 );                                /* subtract Q10 stuff */ \r
         r_Q10 = SKP_SUB32( x_sc_Q10[ i ], tmp1 );\r
 \r
@@ -370,12 +330,6 @@ SKP_INLINE void SKP_Silk_noise_shape_quantizer(
         /* Scale XQ back to normal level before saving */\r
         xq[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SMULWW( xq_Q10, Gain_Q16 ), 10 ) );\r
         \r
-#ifdef SAVE_ALL_INTERNAL_DATA\r
-        q_in_env[   i ] = ( (SKP_float)r_Q10       * (SKP_float)Gain_Q16 ) / ( 1024.0f * 65536.0f );\r
-        q_exc[      i ] = ( (SKP_float)exc_Q10     * (SKP_float)Gain_Q16 ) / ( 1024.0f * 65536.0f );\r
-        q_LPC_exc[  i ] = ( (SKP_float)LPC_exc_Q10 * (SKP_float)Gain_Q16 ) / ( 1024.0f * 65536.0f );\r
-#endif\r
-        \r
         /* Update states */\r
         psLPC_Q14++;\r
         *psLPC_Q14 = SKP_LSHIFT( xq_Q10, 4 );\r
@@ -400,7 +354,6 @@ SKP_INLINE void SKP_Silk_nsq_scale_states(
     SKP_Silk_nsq_state  *NSQ,               /* I/O NSQ state                        */\r
     const SKP_int16     x[],                /* I input in Q0                        */\r
     SKP_int32           x_sc_Q10[],         /* O input scaled with 1/Gain           */\r
-    SKP_int             subfr_length,       /* I length of input                    */\r
     const SKP_int16     sLTP[],             /* I re-whitened LTP state in Q0        */\r
     SKP_int32           sLTP_Q16[],         /* O LTP state matching scaled input    */\r
     SKP_int             subfr,              /* I subframe number                    */\r
@@ -434,7 +387,7 @@ SKP_INLINE void SKP_Silk_nsq_scale_states(
         gain_adj_Q16 = SKP_DIV32_varQ( inv_gain_Q16, NSQ->prev_inv_gain_Q16, 16 );\r
 \r
         /* Scale long-term shaping state */\r
-        for( i = NSQ->sLTP_shp_buf_idx - subfr_length * psEncC->nb_subfr; i < NSQ->sLTP_shp_buf_idx; i++ ) {\r
+        for( i = NSQ->sLTP_shp_buf_idx - psEncC->ltp_mem_length; i < NSQ->sLTP_shp_buf_idx; i++ ) {\r
             NSQ->sLTP_shp_Q10[ i ] = SKP_SMULWW( gain_adj_Q16, NSQ->sLTP_shp_Q10[ i ] );\r
         }\r
 \r
@@ -457,7 +410,7 @@ SKP_INLINE void SKP_Silk_nsq_scale_states(
     }\r
 \r
     /* Scale input */\r
-    for( i = 0; i < subfr_length; i++ ) {\r
+    for( i = 0; i < psEncC->subfr_length; i++ ) {\r
         x_sc_Q10[ i ] = SKP_RSHIFT( SKP_SMULBB( x[ i ], ( SKP_int16 )inv_gain_Q16 ), 6 );\r
     }\r
 \r
index 7b19730..dc50e73 100644 (file)
@@ -63,7 +63,6 @@ SKP_INLINE void SKP_Silk_nsq_del_dec_scale_states(
     NSQ_del_dec_struct  psDelDec[],             /* I/O  Delayed decision states             */\r
     const SKP_int16     x[],                    /* I    Input in Q0                         */\r
     SKP_int32           x_sc_Q10[],             /* O    Input scaled with 1/Gain in Q10     */\r
-    SKP_int             subfr_length,           /* I    Length of input                     */\r
     const SKP_int16     sLTP[],                 /* I    Re-whitened LTP state in Q0         */\r
     SKP_int32           sLTP_Q16[],             /* O    LTP state matching scaled input     */\r
     SKP_int             subfr,                  /* I    Subframe number                     */\r
@@ -124,7 +123,7 @@ void SKP_Silk_NSQ_del_dec(
 )\r
 {\r
     SKP_int     i, k, lag, start_idx, LSF_interpolation_flag, Winner_ind, subfr;\r
-    SKP_int     last_smple_idx, smpl_buf_idx, decisionDelay, subfr_length;\r
+    SKP_int     last_smple_idx, smpl_buf_idx, decisionDelay;\r
     const SKP_int16 *A_Q12, *B_Q14, *AR_shp_Q13;\r
     SKP_int16   *pxq;\r
     SKP_int32   sLTP_Q16[ 2 * MAX_FRAME_LENGTH ];\r
@@ -136,8 +135,6 @@ void SKP_Silk_NSQ_del_dec(
     NSQ_del_dec_struct psDelDec[ MAX_DEL_DEC_STATES ];\r
     NSQ_del_dec_struct *psDD;\r
 \r
-    subfr_length = psEncC->subfr_length;\r
-\r
     /* Set unvoiced lag to the previous one, overwrite later for voiced */\r
     lag = NSQ->lagPrev;\r
 \r
@@ -159,7 +156,7 @@ void SKP_Silk_NSQ_del_dec(
     offset_Q10   = SKP_Silk_Quantization_Offsets_Q10[ psEncCtrlC->signalType >> 1 ][ psEncCtrlC->quantOffsetType ];\r
     smpl_buf_idx = 0; /* index of oldest samples */\r
 \r
-    decisionDelay = SKP_min_int( DECISION_DELAY, subfr_length );\r
+    decisionDelay = SKP_min_int( DECISION_DELAY, psEncC->subfr_length );\r
 \r
     /* For voiced frames limit the decision delay to lower than the pitch lag */\r
     if( psEncCtrlC->signalType == TYPE_VOICED ) {\r
@@ -225,8 +222,7 @@ void SKP_Silk_NSQ_del_dec(
                         last_smple_idx = ( last_smple_idx - 1 ) & DECISION_DELAY_MASK;\r
                         q[   i - decisionDelay ] = ( SKP_int8 )SKP_RSHIFT( psDD->Q_Q10[ last_smple_idx ], 10 );\r
                         pxq[ i - decisionDelay ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( \r
-                            SKP_SMULWW( psDD->Xq_Q10[ last_smple_idx ], \r
-                            psDD->Gain_Q16[ last_smple_idx ] ), 10 ) );\r
+                            SKP_SMULWW( psDD->Xq_Q10[ last_smple_idx ], psDD->Gain_Q16[ last_smple_idx ] ), 10 ) );\r
                         NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - decisionDelay + i ] = psDD->Shape_Q10[ last_smple_idx ];\r
                     }\r
 \r
@@ -239,16 +235,15 @@ void SKP_Silk_NSQ_del_dec(
                 \r
                 SKP_memset( FiltState, 0, psEncC->predictLPCOrder * sizeof( SKP_int32 ) );\r
                 SKP_Silk_MA_Prediction( &NSQ->xq[ start_idx + k * psEncC->subfr_length ], \r
-                    A_Q12, FiltState, sLTP + start_idx, psEncC->ltp_mem_length - start_idx, psEncC->predictLPCOrder );\r
+                    A_Q12, FiltState, &sLTP[ start_idx ], psEncC->ltp_mem_length - start_idx, psEncC->predictLPCOrder );\r
 \r
                 NSQ->sLTP_buf_idx = psEncC->ltp_mem_length;\r
                 NSQ->rewhite_flag = 1;\r
             }\r
         }\r
 \r
-        SKP_Silk_nsq_del_dec_scale_states( psEncC, NSQ, psDelDec, x, x_sc_Q10, \r
-            subfr_length, sLTP, sLTP_Q16, k, psEncC->nStatesDelayedDecision, smpl_buf_idx,\r
-            LTP_scale_Q14, Gains_Q16, psEncCtrlC->pitchL );\r
+        SKP_Silk_nsq_del_dec_scale_states( psEncC, NSQ, psDelDec, x, x_sc_Q10, sLTP, sLTP_Q16, k, \r
+            psEncC->nStatesDelayedDecision, smpl_buf_idx, LTP_scale_Q14, Gains_Q16, psEncCtrlC->pitchL );\r
 \r
         SKP_Silk_noise_shape_quantizer_del_dec( NSQ, psDelDec, psEncCtrlC->signalType, x_sc_Q10, q, pxq, sLTP_Q16,\r
             A_Q12, B_Q14, AR_shp_Q13, lag, HarmShapeFIRPacked_Q14, Tilt_Q14[ k ], LF_shp_Q14[ k ], Gains_Q16[ k ], \r
@@ -294,9 +289,9 @@ void SKP_Silk_NSQ_del_dec(
     SKP_memmove( NSQ->sLTP_shp_Q10, &NSQ->sLTP_shp_Q10[ psEncC->frame_length ], psEncC->ltp_mem_length * sizeof( SKP_int32 ) );\r
 \r
 #ifdef SAVE_ALL_INTERNAL_DATA\r
-    DEBUG_STORE_DATA( sLTP_Q16.dat, &sLTP_Q16[ psEncC->frame_length ], psEncC->frame_length * sizeof( SKP_int32 ) );\r
-    DEBUG_STORE_DATA( xq.dat,       NSQ->xq,                           psEncC->frame_length * sizeof( SKP_int16 ) );\r
-    DEBUG_STORE_DATA( q.dat,        &q[ -psEncC->frame_length ],       psEncC->frame_length * sizeof( SKP_int8 ) );\r
+    DEBUG_STORE_DATA( xq.dat,       &pxq[ -psEncC->frame_length ],       psEncC->frame_length * sizeof( SKP_int16 ) );\r
+    DEBUG_STORE_DATA( q.dat,        &q[ -psEncC->frame_length ],         psEncC->frame_length * sizeof( SKP_int8 ) );\r
+    DEBUG_STORE_DATA( sLTP_Q16.dat, &sLTP_Q16[ psEncC->ltp_mem_length ], psEncC->frame_length * sizeof( SKP_int32 ) );\r
 #endif\r
 }\r
 \r
@@ -333,7 +328,7 @@ SKP_INLINE void SKP_Silk_noise_shape_quantizer_del_dec(
 {\r
     SKP_int     i, j, k, Winner_ind, RDmin_ind, RDmax_ind, last_smple_idx;\r
     SKP_int32   Winner_rand_state;\r
-    SKP_int32   LTP_pred_Q14, LPC_pred_Q10, n_AR_Q10, n_LTP_Q14;\r
+    SKP_int32   LTP_pred_Q14, LPC_pred_Q10, n_AR_Q10, n_LTP_Q14, LTP_Q10;\r
     SKP_int32   n_LF_Q10, r_Q10, rr_Q20, rd1_Q10, rd2_Q10, RDmin_Q10, RDmax_Q10;\r
     SKP_int32   q1_Q10, q2_Q10, dither, exc_Q10, LPC_exc_Q10, xq_Q10;\r
     SKP_int32   tmp1, tmp2, sLF_AR_shp_Q10;\r
@@ -368,8 +363,10 @@ SKP_INLINE void SKP_Silk_noise_shape_quantizer_del_dec(
             n_LTP_Q14 = SKP_SMLAWT( n_LTP_Q14, shp_lag_ptr[ -1 ],                     HarmShapeFIRPacked_Q14 );\r
             n_LTP_Q14 = SKP_LSHIFT( n_LTP_Q14, 6 );\r
             shp_lag_ptr++;\r
+\r
+            LTP_Q10 = SKP_RSHIFT( SKP_SUB32( LTP_pred_Q14, n_LTP_Q14 ), 4 );\r
         } else {\r
-            n_LTP_Q14 = 0;\r
+            LTP_Q10 = 0;\r
         }\r
 \r
         for( k = 0; k < nStatesDelayedDecision; k++ ) {\r
@@ -436,9 +433,7 @@ SKP_INLINE void SKP_Silk_noise_shape_quantizer_del_dec(
 \r
             /* Input minus prediction plus noise feedback                       */\r
             /* r = x[ i ] - LTP_pred - LPC_pred + n_AR + n_Tilt + n_LF + n_LTP  */\r
-            tmp1  = SKP_SUB32( LTP_pred_Q14, n_LTP_Q14 );                       /* Add Q14 stuff */\r
-            tmp1  = SKP_RSHIFT( tmp1, 4 );                                      /* convert to Q10 */\r
-            tmp1  = SKP_ADD32( tmp1, LPC_pred_Q10 );                            /* add Q10 stuff */ \r
+            tmp1  = SKP_ADD32( LTP_Q10, LPC_pred_Q10 );                         /* add Q10 stuff */ \r
             tmp1  = SKP_SUB32( tmp1, n_AR_Q10 );                                /* subtract Q10 stuff */ \r
             tmp1  = SKP_SUB32( tmp1, n_LF_Q10 );                                /* subtract Q10 stuff */ \r
             r_Q10 = SKP_SUB32( x_Q10[ i ], tmp1 );                              /* residual error Q10 */\r
@@ -607,7 +602,6 @@ SKP_INLINE void SKP_Silk_nsq_del_dec_scale_states(
     NSQ_del_dec_struct  psDelDec[],             /* I/O  Delayed decision states             */\r
     const SKP_int16     x[],                    /* I    Input in Q0                         */\r
     SKP_int32           x_sc_Q10[],             /* O    Input scaled with 1/Gain in Q10     */\r
-    SKP_int             subfr_length,           /* I    Length of input                     */\r
     const SKP_int16     sLTP[],                 /* I    Re-whitened LTP state in Q0         */\r
     SKP_int32           sLTP_Q16[],             /* O    LTP state matching scaled input     */\r
     SKP_int             subfr,                  /* I    Subframe number                     */\r
@@ -644,7 +638,7 @@ SKP_INLINE void SKP_Silk_nsq_del_dec_scale_states(
         gain_adj_Q16 = SKP_DIV32_varQ( inv_gain_Q16, NSQ->prev_inv_gain_Q16, 16 );\r
 \r
         /* Scale long-term shaping state */\r
-        for( i = NSQ->sLTP_shp_buf_idx - subfr_length * psEncC->nb_subfr; i < NSQ->sLTP_shp_buf_idx; i++ ) {\r
+        for( i = NSQ->sLTP_shp_buf_idx - psEncC->ltp_mem_length; i < NSQ->sLTP_shp_buf_idx; i++ ) {\r
             NSQ->sLTP_shp_Q10[ i ] = SKP_SMULWW( gain_adj_Q16, NSQ->sLTP_shp_Q10[ i ] );\r
         }\r
 \r
@@ -676,7 +670,7 @@ SKP_INLINE void SKP_Silk_nsq_del_dec_scale_states(
     }\r
 \r
     /* Scale input */\r
-    for( i = 0; i < subfr_length; i++ ) {\r
+    for( i = 0; i < psEncC->subfr_length; i++ ) {\r
         x_sc_Q10[ i ] = SKP_RSHIFT( SKP_SMULBB( x[ i ], ( SKP_int16 )inv_gain_Q16 ), 6 );\r
     }\r
 \r
index 44c7423..70f6a0a 100644 (file)
@@ -43,7 +43,7 @@ void SKP_Silk_encode_signs(
     const SKP_int               sum_pulses[ MAX_NB_SHELL_BLOCKS ]   /* I    Sum of absolute pulses per block            */\r
 )\r
 {\r
-    SKP_int         i, j, p, inData;\r
+    SKP_int         i, j, p;\r
     SKP_uint8       icdf[ 2 ];\r
     const SKP_int8  *q_ptr;\r
     const SKP_uint8 *icdf_ptr;\r
@@ -52,15 +52,14 @@ void SKP_Silk_encode_signs(
     q_ptr = q;\r
     i = SKP_SMULBB( 6, SKP_ADD_LSHIFT( quantOffsetType, signalType, 1 ) );\r
     icdf_ptr = &SKP_Silk_sign_iCDF[ i ];\r
-    length = SKP_RSHIFT( length, LOG2_SHELL_CODEC_FRAME_LENGTH );\r
+    length = SKP_RSHIFT( length + SHELL_CODEC_FRAME_LENGTH/2, LOG2_SHELL_CODEC_FRAME_LENGTH );\r
     for( i = 0; i < length; i++ ) {\r
         p = sum_pulses[ i ];\r
         if( p > 0 ) {\r
             icdf[ 0 ] = icdf_ptr[ SKP_min( p - 1, 5 ) ];\r
             for( j = 0; j < SHELL_CODEC_FRAME_LENGTH; j++ ) {\r
                 if( q_ptr[ j ] != 0 ) {\r
-                    inData = SKP_enc_map( q_ptr[ j ]); /* - = 0, + = 1 */\r
-                    ec_enc_icdf( psRangeEnc, inData, icdf, 8 );\r
+                    ec_enc_icdf( psRangeEnc, SKP_enc_map( q_ptr[ j ]), icdf, 8 );\r
                 }\r
             }\r
         }\r
@@ -78,7 +77,7 @@ void SKP_Silk_decode_signs(
     const SKP_int               sum_pulses[ MAX_NB_SHELL_BLOCKS ]   /* I    Sum of absolute pulses per block            */\r
 )\r
 {\r
-    SKP_int         i, j, p, data;\r
+    SKP_int         i, j, p;\r
     SKP_uint8       icdf[ 2 ];\r
     SKP_int         *q_ptr;\r
     const SKP_uint8 *icdf_ptr;\r
@@ -87,17 +86,23 @@ void SKP_Silk_decode_signs(
     q_ptr = q;\r
     i = SKP_SMULBB( 6, SKP_ADD_LSHIFT( quantOffsetType, signalType, 1 ) );\r
     icdf_ptr = &SKP_Silk_sign_iCDF[ i ];\r
-    length = SKP_RSHIFT( length, LOG2_SHELL_CODEC_FRAME_LENGTH );\r
+    length = SKP_RSHIFT( length + SHELL_CODEC_FRAME_LENGTH/2, LOG2_SHELL_CODEC_FRAME_LENGTH );\r
     for( i = 0; i < length; i++ ) {\r
         p = sum_pulses[ i ];\r
         if( p > 0 ) {\r
             icdf[ 0 ] = icdf_ptr[ SKP_min( p - 1, 5 ) ];\r
             for( j = 0; j < SHELL_CODEC_FRAME_LENGTH; j++ ) {\r
                 if( q_ptr[ j ] > 0 ) {\r
-                    data = ec_dec_icdf( psRangeDec, icdf, 8 );\r
                     /* attach sign */\r
+#if 1\r
+                    /* conditional implementation */\r
+                    if( ec_dec_icdf( psRangeDec, icdf, 8 ) == 0 ) {\r
+                        q_ptr[ j ] = -q_ptr[ j ];\r
+                    }\r
+#else\r
                     /* implementation with shift, subtraction, multiplication */\r
-                    q_ptr[ j ] *= SKP_dec_map( data );\r
+                    q_ptr[ j ] *= SKP_dec_map( ec_dec_icdf( psRangeDec, icdf, 8 ) );\r
+#endif\r
                 }\r
             }\r
         }\r
index ddbc2ae..3b8d502 100644 (file)
@@ -30,17 +30,21 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 /* Control internal sampling rate */\r
 SKP_int SKP_Silk_control_audio_bandwidth(\r
     SKP_Silk_encoder_state      *psEncC,            /* I/O  Pointer to Silk encoder state               */\r
-    const SKP_int32             TargetRate_bps      /* I    Target max bitrate (bps)                    */\r
+    SKP_int32                   TargetRate_bps      /* I    Target max bitrate (bps)                    */\r
 )\r
 {\r
     SKP_int fs_kHz;\r
 \r
     fs_kHz = psEncC->fs_kHz;\r
+\r
+    /* Reduce bitrate for 10 ms modes in these calculations */\r
+    if( psEncC->nb_subfr == 2 ) {\r
+        TargetRate_bps -= REDUCE_BITRATE_10_MS_BPS;\r
+    }\r
+\r
     if( fs_kHz == 0 ) {\r
         /* Encoder has just been initialized */\r
-        if( TargetRate_bps >= SWB2WB_BITRATE_BPS ) {\r
-            fs_kHz = 24;\r
-        } else if( TargetRate_bps >= WB2MB_BITRATE_BPS ) {\r
+        if( TargetRate_bps >= WB2MB_BITRATE_BPS ) {\r
             fs_kHz = 16;\r
         } else if( TargetRate_bps >= MB2NB_BITRATE_BPS ) {\r
             fs_kHz = 12;\r
@@ -60,15 +64,14 @@ SKP_int SKP_Silk_control_audio_bandwidth(
         /* State machine for the internal sampling rate switching */\r
         if( psEncC->API_fs_Hz > 8000 ) {\r
             /* Accumulate the difference between the target rate and limit for switching down */\r
-            psEncC->bitrateDiff += SKP_MUL( psEncC->PacketSize_ms, psEncC->TargetRate_bps - psEncC->bitrate_threshold_down );\r
+            psEncC->bitrateDiff += SKP_MUL( psEncC->PacketSize_ms, TargetRate_bps - psEncC->bitrate_threshold_down );\r
             psEncC->bitrateDiff  = SKP_min( psEncC->bitrateDiff, 0 );\r
 \r
             if( psEncC->prevSignalType == TYPE_NO_VOICE_ACTIVITY ) { /* Low speech activity */\r
                 /* Check if we should switch down */\r
 #if SWITCH_TRANSITION_FILTERING \r
                 if( ( psEncC->sLP.transition_frame_no == 0 ) &&                         /* Transition phase not active */\r
-                    ( psEncC->bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD ||              /* Bitrate threshold is met */\r
-                    ( psEncC->sSWBdetect.WB_detected * psEncC->fs_kHz == 24 ) ) ) {     /* Forced down-switching due to WB input */\r
+                    ( psEncC->bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD ) ) {           /* Bitrate threshold is met */\r
                         psEncC->sLP.transition_frame_no = 1;                            /* Begin transition phase */\r
                         psEncC->sLP.mode                = 0;                            /* Switch down */\r
                 } else if( \r
@@ -93,10 +96,8 @@ SKP_int SKP_Silk_control_audio_bandwidth(
 \r
                 /* Check if we should switch up */\r
                 if( ( ( psEncC->fs_kHz * 1000 < psEncC->API_fs_Hz ) &&\r
-                    ( psEncC->TargetRate_bps >= psEncC->bitrate_threshold_up ) && \r
-                    ( psEncC->sSWBdetect.WB_detected * psEncC->fs_kHz < 16 ) ) && \r
-                    ( ( psEncC->fs_kHz == 16 ) && ( psEncC->maxInternal_fs_kHz >= 24 ) || \r
-                    ( psEncC->fs_kHz == 12 ) && ( psEncC->maxInternal_fs_kHz >= 16 ) ||\r
+                    ( TargetRate_bps > psEncC->bitrate_threshold_up ) ) && \r
+                    ( ( psEncC->fs_kHz == 12 ) && ( psEncC->maxInternal_fs_kHz >= 16 ) ||\r
                     ( psEncC->fs_kHz ==  8 ) && ( psEncC->maxInternal_fs_kHz >= 12 ) ) \r
 #if SWITCH_TRANSITION_FILTERING\r
                     && ( psEncC->sLP.transition_frame_no == 0 ) )  /* No transition phase running, ready to switch */\r
@@ -113,8 +114,7 @@ SKP_int SKP_Silk_control_audio_bandwidth(
                     } else if( psEncC->fs_kHz == 12 ) {\r
                         fs_kHz = 16;\r
                     } else {\r
-                        SKP_assert( psEncC->fs_kHz == 16 );\r
-                        fs_kHz = 24;\r
+                        SKP_assert( 0 );\r
                     }\r
                 }\r
             }\r
index dcc512f..6577595 100644 (file)
@@ -38,9 +38,9 @@ SKP_int SKP_Silk_init_decoder(
     /* Clear the entire encoder state, except anything copied */\r
     SKP_memset( psDec, 0, sizeof( SKP_Silk_decoder_state ) );\r
 \r
-    /* Set sampling rate to 24 kHz, and init non-zero values */\r
+    /* Set sampling rate to 16 kHz, and init non-zero values */\r
     psDec->nb_subfr = MAX_NB_SUBFR;\r
-    SKP_Silk_decoder_set_fs( psDec, 24 );\r
+    SKP_Silk_decoder_set_fs( psDec, 16 );\r
 \r
     /* Used to deactivate e.g. LSF interpolation and fluctuation reduction */\r
     psDec->first_frame_after_reset = 1;\r
index f4a3629..6fb8242 100644 (file)
@@ -110,7 +110,7 @@ SKP_int SKP_Silk_SDK_Decode(
             return SKP_SILK_DEC_INVALID_FRAME_SIZE;\r
         } \r
         fs_kHz_dec = ( decControl->internalSampleRate >> 10 ) + 1;\r
-        if( fs_kHz_dec != 8 && fs_kHz_dec != 12 && fs_kHz_dec != 16 && fs_kHz_dec != 24 ) {\r
+        if( fs_kHz_dec != 8 && fs_kHz_dec != 12 && fs_kHz_dec != 16 ) {\r
             SKP_assert( 0 );\r
             return SKP_SILK_DEC_INVALID_SAMPLING_FREQUENCY;\r
         }\r
@@ -120,8 +120,7 @@ SKP_int SKP_Silk_SDK_Decode(
     /* Call decoder for one frame */\r
     ret += SKP_Silk_decode_frame( psDec, psRangeDec, samplesOut, nSamplesOut, nBytesIn, lostFlag, &used_bytes );\r
     \r
-    if( used_bytes ) { /* Only Call if not a packet loss */\r
-\r
+    if( used_bytes ) {                  /* Only Call if not a packet loss */\r
         psDec->moreInternalDecoderFrames = psDec->nFramesInPacket - psDec->nFramesDecoded;\r
         if( psDec->nBytesLeft <= 0 || psDec->moreInternalDecoderFrames <= 0 ) {\r
             /* Last frame in Payload */\r
@@ -141,14 +140,13 @@ SKP_int SKP_Silk_SDK_Decode(
         }\r
     }\r
 \r
-    if( MAX_API_FS_KHZ * 1000 < decControl->API_sampleRate ||\r
-        8000       > decControl->API_sampleRate ) {\r
+    if( decControl->API_sampleRate > MAX_API_FS_KHZ * 1000 || decControl->API_sampleRate < 8000 ) {\r
         ret = SKP_SILK_DEC_INVALID_SAMPLING_FREQUENCY;\r
         return( ret );\r
     }\r
 \r
     /* Resample if needed */\r
-    if( psDec->fs_kHz * 1000 != decControl->API_sampleRate ) { \r
+    if( SKP_SMULBB( psDec->fs_kHz, 1000 ) != decControl->API_sampleRate ) { \r
         SKP_int16 samplesOut_tmp[ MAX_API_FS_KHZ * MAX_FRAME_LENGTH_MS ];\r
         SKP_assert( psDec->fs_kHz <= MAX_API_FS_KHZ );\r
 \r
@@ -164,7 +162,7 @@ SKP_int SKP_Silk_SDK_Decode(
         ret += SKP_Silk_resampler( &psDec->resampler_state, samplesOut, samplesOut_tmp, *nSamplesOut );\r
 \r
         /* Update the number of output samples */\r
-        *nSamplesOut = SKP_DIV32( ( SKP_int32 )*nSamplesOut * decControl->API_sampleRate, psDec->fs_kHz * 1000 );\r
+        *nSamplesOut = SKP_DIV32( ( SKP_int32 )*nSamplesOut * decControl->API_sampleRate, SKP_SMULBB( psDec->fs_kHz, 1000 ) );\r
     }\r
 \r
     psDec->prev_API_sampleRate = decControl->API_sampleRate;\r
index d17b8bc..cfe9451 100644 (file)
@@ -41,7 +41,7 @@ void SKP_Silk_decode_core(
     SKP_int16 *A_Q12, *B_Q14, *pxq, A_Q12_tmp[ MAX_LPC_ORDER ];\r
     SKP_int16 sLTP[ MAX_FRAME_LENGTH ];\r
     SKP_int32 LTP_pred_Q14, LPC_pred_Q10, Gain_Q16, inv_gain_Q16, inv_gain_Q32, gain_adj_Q16, rand_seed, offset_Q10, dither;\r
-    SKP_int32 *pred_lag_ptr, *pexc_Q10, *pres_Q10;\r
+    SKP_int32 *pred_lag_ptr, *pexc_Q10;\r
     SKP_int32 vec_Q10[ MAX_SUB_FRAME_LENGTH ];\r
     SKP_int32 FiltState[ MAX_LPC_ORDER ];\r
 \r
@@ -49,16 +49,12 @@ void SKP_Silk_decode_core(
     \r
     offset_Q10 = SKP_Silk_Quantization_Offsets_Q10[ psDecCtrl->signalType >> 1 ][ psDecCtrl->quantOffsetType ];\r
 \r
-    if( psDecCtrl->NLSFInterpCoef_Q2 < ( 1 << 2 ) ) {\r
+    if( psDecCtrl->NLSFInterpCoef_Q2 < 1 << 2 ) {\r
         NLSF_interpolation_flag = 1;\r
     } else {\r
         NLSF_interpolation_flag = 0;\r
     }\r
 \r
-#ifdef SAVE_ALL_INTERNAL_DATA\r
-    //DEBUG_STORE_DATA( q_dec.dat, q, psDec->frame_length * sizeof( SKP_int ) );\r
-#endif\r
-\r
     /* Decode excitation */\r
     rand_seed = psDecCtrl->Seed;\r
     for( i = 0; i < psDec->frame_length; i++ ) {\r
@@ -73,13 +69,11 @@ void SKP_Silk_decode_core(
     }\r
 \r
 #ifdef SAVE_ALL_INTERNAL_DATA\r
-    DEBUG_STORE_DATA( exc_Q10.dat, psDec->exc_Q10, psDec->frame_length * sizeof( SKP_int32 ));\r
-\r
-    /* Resync LTP state here after loss */\r
+    DEBUG_STORE_DATA( dec_q.dat, q, psDec->frame_length * sizeof( SKP_int ) );\r
+    DEBUG_STORE_DATA( dec_exc_Q10.dat, psDec->exc_Q10, psDec->frame_length * sizeof( SKP_int32 ));\r
 #endif\r
 \r
     pexc_Q10 = psDec->exc_Q10;\r
-    pres_Q10 = psDec->res_Q10;\r
     pxq      = &psDec->outBuf[ psDec->ltp_mem_length ];\r
     sLTP_buf_idx = psDec->ltp_mem_length;\r
     /* Loop over subframes */\r
@@ -88,25 +82,34 @@ void SKP_Silk_decode_core(
 \r
         /* Preload LPC coeficients to array on stack. Gives small performance gain */        \r
         SKP_memcpy( A_Q12_tmp, A_Q12, psDec->LPC_order * sizeof( SKP_int16 ) ); \r
-        B_Q14         = &psDecCtrl->LTPCoef_Q14[ k * LTP_ORDER ];\r
-        Gain_Q16      = psDecCtrl->Gains_Q16[ k ];\r
-        signalType    = psDecCtrl->signalType;\r
+        B_Q14        = &psDecCtrl->LTPCoef_Q14[ k * LTP_ORDER ];\r
+        Gain_Q16     = psDecCtrl->Gains_Q16[ k ];\r
+        signalType   = psDecCtrl->signalType;\r
 \r
         inv_gain_Q16 = SKP_INVERSE32_varQ( SKP_max( Gain_Q16, 1 ), 32 );\r
         inv_gain_Q16 = SKP_min( inv_gain_Q16, SKP_int16_MAX );\r
 \r
         /* Calculate Gain adjustment factor */\r
-        gain_adj_Q16 = ( SKP_int32 )1 << 16;\r
+        gain_adj_Q16 = 1 << 16;\r
         if( inv_gain_Q16 != psDec->prev_inv_gain_Q16 ) {\r
             gain_adj_Q16 =  SKP_DIV32_varQ( inv_gain_Q16, psDec->prev_inv_gain_Q16, 16 );\r
+\r
+            /* Scale short term state */\r
+            for( i = 0; i < MAX_LPC_ORDER; i++ ) {\r
+                psDec->sLPC_Q14[ i ] = SKP_SMULWW( gain_adj_Q16, psDec->sLPC_Q14[ i ] );\r
+            }\r
         }\r
 \r
+        /* Save inv_gain */\r
+        SKP_assert( inv_gain_Q16 != 0 );\r
+        psDec->prev_inv_gain_Q16 = inv_gain_Q16;\r
+\r
         /* Avoid abrupt transition from voiced PLC to unvoiced normal decoding */\r
         if( psDec->lossCnt && psDec->prevSignalType == TYPE_VOICED &&\r
-            psDecCtrl->signalType != TYPE_VOICED && k < ( MAX_NB_SUBFR >> 1 ) ) {\r
+            psDecCtrl->signalType != TYPE_VOICED && k < MAX_NB_SUBFR/2 ) {\r
             \r
             SKP_memset( B_Q14, 0, LTP_ORDER * sizeof( SKP_int16 ) );\r
-            B_Q14[ LTP_ORDER/2 ] = ( SKP_int16 )1 << 12; /* 0.25 */\r
+            B_Q14[ LTP_ORDER/2 ] = SKP_FIX_CONST( 0.25, 14 );\r
         \r
             signalType = TYPE_VOICED;\r
             psDecCtrl->pitchL[ k ] = psDec->lagPrev;\r
@@ -114,17 +117,17 @@ void SKP_Silk_decode_core(
 \r
         if( signalType == TYPE_VOICED ) {\r
             /* Voiced */\r
-            \r
             lag = psDecCtrl->pitchL[ k ];\r
+\r
             /* Re-whitening */\r
             if( ( k & ( 3 - SKP_LSHIFT( NLSF_interpolation_flag, 1 ) ) ) == 0 ) {\r
                 /* Rewhiten with new A coefs */\r
                 start_idx = psDec->ltp_mem_length - lag - psDec->LPC_order - LTP_ORDER / 2;\r
                 SKP_assert( start_idx > 0 );\r
 \r
-                SKP_memset( FiltState, 0, psDec->LPC_order * sizeof( SKP_int32 ) ); /* Not really necessary, but Valgrind and Coverity will complain otherwise */\r
+                SKP_memset( FiltState, 0, psDec->LPC_order * sizeof( SKP_int32 ) ); \r
                 SKP_Silk_MA_Prediction( &psDec->outBuf[ start_idx + k * psDec->subfr_length ], \r
-                    A_Q12, FiltState, sLTP + start_idx, psDec->ltp_mem_length - start_idx, psDec->LPC_order );\r
+                    A_Q12, FiltState, &sLTP[ start_idx ], psDec->ltp_mem_length - start_idx, psDec->LPC_order );\r
 \r
                 /* After rewhitening the LTP state is unscaled */\r
                 inv_gain_Q32 = SKP_LSHIFT( inv_gain_Q16, 16 );\r
@@ -132,28 +135,19 @@ void SKP_Silk_decode_core(
                     /* Do LTP downscaling */\r
                     inv_gain_Q32 = SKP_LSHIFT( SKP_SMULWB( inv_gain_Q32, psDecCtrl->LTP_scale_Q14 ), 2 );\r
                 }\r
-                for( i = 0; i < (lag + LTP_ORDER/2); i++ ) {\r
+                for( i = 0; i < lag + LTP_ORDER/2; i++ ) {\r
                     psDec->sLTP_Q16[ sLTP_buf_idx - i - 1 ] = SKP_SMULWB( inv_gain_Q32, sLTP[ psDec->ltp_mem_length - i - 1 ] );\r
                 }\r
             } else {\r
                 /* Update LTP state when Gain changes */\r
-                if( gain_adj_Q16 != ( SKP_int32 )1 << 16 ) {\r
-                    for( i = 0; i < ( lag + LTP_ORDER / 2 ); i++ ) {\r
+                if( gain_adj_Q16 != 1 << 16 ) {\r
+                    for( i = 0; i < lag + LTP_ORDER/2; i++ ) {\r
                         psDec->sLTP_Q16[ sLTP_buf_idx - i - 1 ] = SKP_SMULWW( gain_adj_Q16, psDec->sLTP_Q16[ sLTP_buf_idx - i - 1 ] );\r
                     }\r
                 }\r
             }\r
         }\r
         \r
-        /* Scale short term state */\r
-        for( i = 0; i < MAX_LPC_ORDER; i++ ) {\r
-            psDec->sLPC_Q14[ i ] = SKP_SMULWW( gain_adj_Q16, psDec->sLPC_Q14[ i ] );\r
-        }\r
-\r
-        /* Save inv_gain */\r
-        SKP_assert( inv_gain_Q16 != 0 );\r
-        psDec->prev_inv_gain_Q16 = inv_gain_Q16;\r
-\r
         /* Long-term prediction */\r
         if( signalType == TYPE_VOICED ) {\r
             /* Setup pointer */\r
@@ -168,18 +162,16 @@ void SKP_Silk_decode_core(
                 pred_lag_ptr++;\r
             \r
                 /* Generate LPC residual */ \r
-                pres_Q10[ i ] = SKP_ADD32( pexc_Q10[ i ], SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 ) );\r
+                pexc_Q10[ i ] = SKP_ADD32( pexc_Q10[ i ], SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 ) );\r
             \r
                 /* Update states */\r
-                psDec->sLTP_Q16[ sLTP_buf_idx ] = SKP_LSHIFT( pres_Q10[ i ], 6 );\r
+                psDec->sLTP_Q16[ sLTP_buf_idx ] = SKP_LSHIFT( pexc_Q10[ i ], 6 );\r
                 sLTP_buf_idx++;\r
             }\r
-        } else {\r
-            SKP_memcpy( pres_Q10, pexc_Q10, psDec->subfr_length * sizeof( SKP_int32 ) );\r
         }\r
 \r
 #ifdef SAVE_ALL_INTERNAL_DATA\r
-        DEBUG_STORE_DATA( res_Q10.dat, pres_Q10, psDec->subfr_length * sizeof( SKP_int32 ) );\r
+        DEBUG_STORE_DATA( dec_res_Q10.dat, pexc_Q10, psDec->subfr_length * sizeof( SKP_int32 ) );\r
 #endif\r
 \r
         for( i = 0; i < psDec->subfr_length; i++ ) {\r
@@ -194,14 +186,13 @@ void SKP_Silk_decode_core(
             LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  8 ], A_Q12_tmp[ 7 ] );\r
             LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  9 ], A_Q12_tmp[ 8 ] );\r
             LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 10 ], A_Q12_tmp[ 9 ] );\r
-\r
-            for( j = 10; j < psDec->LPC_order; j ++ ) {\r
+            for( j = 10; j < psDec->LPC_order; j++ ) {\r
                 LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - j - 1 ], A_Q12_tmp[ j ] );\r
             }\r
 \r
             /* Add prediction to LPC residual */\r
-            vec_Q10[ i ] = SKP_ADD32( pres_Q10[ i ], LPC_pred_Q10 );\r
-            \r
+            vec_Q10[ i ] = SKP_ADD32( pexc_Q10[ i ], LPC_pred_Q10 );\r
+\r
             /* Update states */\r
             psDec->sLPC_Q14[ MAX_LPC_ORDER + i ] = SKP_LSHIFT( vec_Q10[ i ], 4 );\r
         }\r
@@ -214,7 +205,6 @@ void SKP_Silk_decode_core(
         /* Update LPC filter state */\r
         SKP_memcpy( psDec->sLPC_Q14, &psDec->sLPC_Q14[ psDec->subfr_length ], MAX_LPC_ORDER * sizeof( SKP_int32 ) );\r
         pexc_Q10 += psDec->subfr_length;\r
-        pres_Q10 += psDec->subfr_length;\r
         pxq      += psDec->subfr_length;\r
     }\r
     \r
@@ -222,7 +212,7 @@ void SKP_Silk_decode_core(
     SKP_memcpy( xq, &psDec->outBuf[ psDec->ltp_mem_length ], psDec->frame_length * sizeof( SKP_int16 ) );\r
 \r
 #ifdef SAVE_ALL_INTERNAL_DATA\r
-    //DEBUG_STORE_DATA( LTP_buf_Q16.dat, &psDec->sLTP_Q16[psDec->frame_length], psDec->frame_length * sizeof( SKP_int32 ));\r
-    //DEBUG_STORE_DATA( xq_dec.dat, xq, psDec->frame_length * sizeof( SKP_int16 ) );\r
+    DEBUG_STORE_DATA( dec_sLTP_Q16.dat, &psDec->sLTP_Q16[ psDec->ltp_mem_length ], psDec->frame_length * sizeof( SKP_int32 ));\r
+    DEBUG_STORE_DATA( dec_xq.dat, xq, psDec->frame_length * sizeof( SKP_int16 ) );\r
 #endif\r
 }\r
index f9817c9..38dc82a 100644 (file)
@@ -49,7 +49,7 @@ TIC(decode_frame)
 \r
     L = psDec->frame_length;\r
     sDecCtrl.LTP_scale_Q14 = 0;\r
-    \r
+\r
     /* Safety checks */\r
     SKP_assert( L > 0 && L <= MAX_FRAME_LENGTH );\r
 \r
@@ -61,8 +61,8 @@ TIC(decode_frame)
         /********************************************/\r
         /* Initialize arithmetic coder              */\r
         /********************************************/\r
-        fs_Khz_old    = psDec->fs_kHz;\r
-        nb_subfr_old  = psDec->nb_subfr;\r
+        fs_Khz_old   = psDec->fs_kHz;\r
+        nb_subfr_old = psDec->nb_subfr;\r
         if( psDec->nFramesDecoded == 0 ) {\r
             SKP_Silk_decode_indices( psDec, psRangeDec );\r
         }\r
@@ -71,51 +71,34 @@ TIC(decode_frame)
         /* Decode parameters and pulse signal       */\r
         /********************************************/\r
 TIC(decode_params)\r
-        SKP_Silk_decode_parameters( psDec, &sDecCtrl, psRangeDec, Pulses, 1 );\r
+        SKP_Silk_decode_parameters( psDec, &sDecCtrl, psRangeDec, Pulses );\r
 TOC(decode_params)\r
 \r
-        if( 0 ) { //psDec->sRC.error ) {\r
-            psDec->nBytesLeft = 0;\r
-\r
-            action = 1;                         /* PLC operation */\r
-            psDec->nb_subfr = nb_subfr_old;\r
-            SKP_Silk_decoder_set_fs( psDec, fs_Khz_old );\r
-\r
-            /* Avoid crashing */\r
-            *decBytes = psRangeDec->buf->storage; \r
-            /*\r
-            if( psDec->sRC.error == RANGE_CODER_DEC_PAYLOAD_TOO_LONG ) {\r
-                ret = SKP_SILK_DEC_PAYLOAD_TOO_LARGE;\r
-            } else {\r
-                ret = SKP_SILK_DEC_PAYLOAD_ERROR;\r
-            }\r
-            */\r
-        } else {\r
-            *decBytes = psRangeDec->buf->storage - psDec->nBytesLeft;\r
-            psDec->nFramesDecoded++;\r
-        \r
-            /* Update lengths. Sampling frequency could have changed */\r
-            L = psDec->frame_length;\r
-\r
-            /********************************************************/\r
-            /* Run inverse NSQ                                      */\r
-            /********************************************************/\r
+        *decBytes = psRangeDec->buf->storage - psDec->nBytesLeft;\r
+        psDec->nFramesDecoded++;\r
+\r
+        /* Update length. Sampling frequency may have changed */\r
+        L = psDec->frame_length;\r
+\r
+        /********************************************************/\r
+        /* Run inverse NSQ                                      */\r
+        /********************************************************/\r
 TIC(decode_core)\r
-            SKP_Silk_decode_core( psDec, &sDecCtrl, pOut, Pulses );\r
+        SKP_Silk_decode_core( psDec, &sDecCtrl, pOut, Pulses );\r
 TOC(decode_core)\r
 \r
-            /********************************************************/\r
-            /* Update PLC state                                     */\r
-            /********************************************************/\r
-            SKP_Silk_PLC( psDec, &sDecCtrl, pOut, L, action );\r
+        /********************************************************/\r
+        /* Update PLC state                                     */\r
+        /********************************************************/\r
+        SKP_Silk_PLC( psDec, &sDecCtrl, pOut, L, action );\r
 \r
-            psDec->lossCnt = 0;\r
-            psDec->prevSignalType = sDecCtrl.signalType;\r
+        psDec->lossCnt = 0;\r
+        psDec->prevSignalType = sDecCtrl.signalType;\r
 \r
-            /* A frame has been decoded without errors */\r
-            psDec->first_frame_after_reset = 0;\r
-        }\r
+        /* A frame has been decoded without errors */\r
+        psDec->first_frame_after_reset = 0;\r
     }\r
+\r
     /*************************************************************/\r
     /* Generate Concealment frame if packet is lost, or corrupt  */\r
     /*************************************************************/\r
@@ -129,10 +112,8 @@ TOC(decode_core)
     /*************************/\r
     SKP_assert( psDec->ltp_mem_length >= psDec->frame_length );\r
     mv_len = psDec->ltp_mem_length - psDec->frame_length;\r
-    SKP_memmove( psDec->outBuf, &psDec->outBuf[ psDec->ltp_mem_length - mv_len ], \r
-        mv_len * sizeof(SKP_int16) );\r
-    SKP_memcpy( &psDec->outBuf[ mv_len ], pOut, \r
-        psDec->frame_length * sizeof( SKP_int16 ) );\r
+    SKP_memmove( psDec->outBuf, &psDec->outBuf[ psDec->frame_length ], mv_len * sizeof(SKP_int16) );\r
+    SKP_memcpy( &psDec->outBuf[ mv_len ], pOut, psDec->frame_length * sizeof( SKP_int16 ) );\r
 \r
     /****************************************************************/\r
     /* Ensure smooth connection of extrapolated and good frames     */\r
@@ -147,20 +128,18 @@ TOC(decode_core)
     /********************************************/\r
     /* HP filter output                            */\r
     /********************************************/\r
-    SKP_assert( ( ( psDec->fs_kHz == 12 ) && ( L % 3 ) == 0 ) || \r
-                ( ( psDec->fs_kHz != 12 ) && ( L % 2 ) == 0 ) );\r
 TIC(HP_out)\r
     SKP_Silk_biquad_alt( pOut, psDec->HP_B, psDec->HP_A, psDec->HPState, pOut, L );\r
 TOC(HP_out)\r
 \r
+    /* Update some decoder state variables */\r
+    psDec->lagPrev = sDecCtrl.pitchL[ psDec->nb_subfr - 1 ];\r
+\r
     /********************************************/\r
     /* set output frame length                    */\r
     /********************************************/\r
     *pN = ( SKP_int16 )L;\r
 \r
-    /* Update some decoder state variables */\r
-    psDec->lagPrev = sDecCtrl.pitchL[ MAX_NB_SUBFR - 1 ];\r
-\r
 TOC(decode_frame)\r
 \r
     return ret;\r
index 5b8b885..b28fb79 100644 (file)
@@ -85,7 +85,11 @@ void SKP_Silk_decode_indices(
         /***********************************/\r
         /* Decode LSF interpolation factor */\r
         /***********************************/\r
-        psDec->NLSFInterpCoef_Q2[ FrameIndex ] = ec_dec_icdf( psRangeDec, SKP_Silk_NLSF_interpolation_factor_iCDF, 8 );\r
+        if( psDec->nb_subfr == MAX_NB_SUBFR ) {\r
+            psDec->NLSFInterpCoef_Q2[ FrameIndex ] = ec_dec_icdf( psRangeDec, SKP_Silk_NLSF_interpolation_factor_iCDF, 8 );\r
+        } else {\r
+            psDec->NLSFInterpCoef_Q2[ FrameIndex ] = 4;\r
+        }\r
         \r
         if( signalType == TYPE_VOICED ) {\r
             /*********************/\r
@@ -140,10 +144,10 @@ void SKP_Silk_decode_indices(
     /**************************************/\r
     /* Decode Frame termination indicator */\r
     /**************************************/\r
-    psDec->FrameTermination = ec_dec_icdf( psRangeDec, SKP_Silk_FrameTermination_iCDF, 8 );\r
+    psDec->FrameTermination = ec_dec_icdf( psRangeDec, SKP_Silk_LBRR_Present_iCDF, 8 );\r
 \r
     /****************************************/\r
-    /* get number of bytes used so far      */\r
+    /* Get number of bytes used so far      */\r
     /****************************************/\r
     nBytesUsed = SKP_RSHIFT( ec_dec_tell( psRangeDec, 0 ) + 7, 3 );\r
     psDec->nBytesLeft = psRangeDec->buf->storage - nBytesUsed;\r
index 8dc5ec1..e3fda04 100644 (file)
@@ -29,11 +29,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 \r
 /* Decode parameters from payload */\r
 void SKP_Silk_decode_parameters(\r
-    SKP_Silk_decoder_state      *psDec,                                 /* I/O  State                                    */\r
-    SKP_Silk_decoder_control    *psDecCtrl,                             /* I/O  Decoder control                          */\r
-    ec_dec                      *psRangeDec,                            /* I/O  Compressor data structure                */\r
-    SKP_int                     q[ MAX_FRAME_LENGTH ],                  /* O    Excitation signal                        */\r
-    const SKP_int               fullDecoding                            /* I    Flag to tell if only arithmetic decoding */\r
+    SKP_Silk_decoder_state      *psDec,                             /* I/O  State                                    */\r
+    SKP_Silk_decoder_control    *psDecCtrl,                         /* I/O  Decoder control                          */\r
+    ec_dec                      *psRangeDec,                        /* I/O  Compressor data structure                */\r
+    SKP_int                     q[ MAX_FRAME_LENGTH ]               /* O    Excitation signal                        */\r
 )\r
 {\r
     SKP_int   i, k, Ix, nBytesUsed;\r
@@ -74,7 +73,7 @@ void SKP_Silk_decode_parameters(
         /* the previous NLSF1, and the current NLSF1                                   */\r
         for( i = 0; i < psDec->LPC_order; i++ ) {\r
             pNLSF0_Q15[ i ] = psDec->prevNLSF_Q15[ i ] + SKP_RSHIFT( SKP_MUL( psDecCtrl->NLSFInterpCoef_Q2, \r
-                ( pNLSF_Q15[ i ] - psDec->prevNLSF_Q15[ i ] ) ), 2 );\r
+                pNLSF_Q15[ i ] - psDec->prevNLSF_Q15[ i ] ), 2 );\r
         }\r
 \r
         /* Convert NLSF parameters to AR prediction filter coefficients */\r
index b0d0a00..c0a8655 100644 (file)
@@ -54,6 +54,7 @@ void SKP_Silk_decode_pulses(
         SKP_assert( frame_length == 12 * 10 ); /* Make sure only happens for 10 ms @ 12 kHz */\r
         iter++;\r
     }\r
+\r
     /***************************************************/\r
     /* Sum-Weighted-Pulses Decoding                    */\r
     /***************************************************/\r
index ce1b972..41f7f7e 100644 (file)
@@ -74,11 +74,7 @@ void SKP_Silk_decoder_set_fs(
         psDec->prevSignalType          = TYPE_NO_VOICE_ACTIVITY;\r
         psDec->first_frame_after_reset = 1;\r
 \r
-        if( fs_kHz == 24 ) {\r
-            psDec->HP_A = SKP_Silk_Dec_A_HP_24;\r
-            psDec->HP_B = SKP_Silk_Dec_B_HP_24;\r
-            psDec->pitch_lag_low_bits_iCDF = SKP_Silk_uniform12_iCDF;\r
-        } else if( fs_kHz == 16 ) {\r
+        if( fs_kHz == 16 ) {\r
             psDec->HP_A = SKP_Silk_Dec_A_HP_16;\r
             psDec->HP_B = SKP_Silk_Dec_B_HP_16;\r
             psDec->pitch_lag_low_bits_iCDF = SKP_Silk_uniform8_iCDF;\r
index 3b25aee..becd461 100644 (file)
@@ -50,9 +50,10 @@ extern "C"
 #define MIN_TARGET_RATE_BPS                     5000\r
 #define MAX_TARGET_RATE_BPS                     SKP_uint16_MAX\r
 \r
+/* Compensation in bitrate calculations for 10 ms modes */\r
+#define REDUCE_BITRATE_10_MS_BPS                2200\r
+\r
 /* Transition bitrates between modes */\r
-#define SWB2WB_BITRATE_BPS                      24000\r
-#define WB2SWB_BITRATE_BPS                      28000\r
 #define WB2MB_BITRATE_BPS                       12000\r
 #define MB2WB_BITRATE_BPS                       16000\r
 #define MB2NB_BITRATE_BPS                        9000\r
@@ -67,7 +68,7 @@ extern "C"
 #define NO_SPEECH_FRAMES_BEFORE_DTX             5       /* eq 100 ms */\r
 #define MAX_CONSECUTIVE_DTX                     20      /* eq 400 ms */\r
 \r
-#define USE_LBRR                                1\r
+#define USE_LBRR                                0\r
 \r
 /* Amount of concecutive no FEC packets before telling JB */\r
 #define NO_LBRR_THRES                           10\r
@@ -83,12 +84,6 @@ extern "C"
 #define SKP_SILK_NO_LBRR                        0\r
 #define SKP_SILK_LBRR                           1\r
 \r
-/* Number of Second order Sections for SWB detection HP filter */\r
-#define NB_SOS                                  3\r
-#define HP_8_KHZ_THRES                          10          /* average energy per sample, above 8 kHz       */\r
-#define CONCEC_SWB_SMPLS_THRES                  480 * 15    /* 300 ms                                       */\r
-#define WB_DETECT_ACTIVE_SPEECH_MS_THRES        15000       /* ms of active speech needed for WB detection  */\r
-\r
 /* Activate bandwidth transition filtering for mode switching */\r
 #define SWITCH_TRANSITION_FILTERING             1\r
 \r
@@ -96,7 +91,7 @@ extern "C"
 #define DEC_HP_ORDER                            2\r
 \r
 /* Maximum sampling frequency, should be 16 for embedded */\r
-#define MAX_FS_KHZ                              24 \r
+#define MAX_FS_KHZ                              16 \r
 #define MAX_API_FS_KHZ                          48\r
 \r
 /* Signal types used by silk */\r
@@ -147,7 +142,7 @@ extern "C"
 /* Number of gain quantization levels */\r
 #define N_LEVELS_QGAIN                          64\r
 /* Max increase in gain quantization index */\r
-#define MAX_DELTA_GAIN_QUANT                    38\r
+#define MAX_DELTA_GAIN_QUANT                    36\r
 /* Max decrease in gain quantization index */\r
 #define MIN_DELTA_GAIN_QUANT                    -4\r
 \r
diff --git a/src_common/SKP_Silk_detect_SWB_input.c b/src_common/SKP_Silk_detect_SWB_input.c
deleted file mode 100644 (file)
index cbc3434..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/***********************************************************************\r
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. \r
-Redistribution and use in source and binary forms, with or without \r
-modification, (subject to the limitations in the disclaimer below) \r
-are permitted provided that the following conditions are met:\r
-- Redistributions of source code must retain the above copyright notice,\r
-this list of conditions and the following disclaimer.\r
-- Redistributions in binary form must reproduce the above copyright \r
-notice, this list of conditions and the following disclaimer in the \r
-documentation and/or other materials provided with the distribution.\r
-- Neither the name of Skype Limited, nor the names of specific \r
-contributors, may be used to endorse or promote products derived from \r
-this software without specific prior written permission.\r
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED \r
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND \r
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,\r
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND \r
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE \r
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, \r
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF \r
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON \r
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-***********************************************************************/\r
-\r
-/*\r
- * Detect SWB input by measuring energy above 8 kHz.\r
- */\r
-\r
-#include "SKP_Silk_main.h"\r
-\r
-void SKP_Silk_detect_SWB_input(\r
-    SKP_Silk_detect_SWB_state   *psSWBdetect,   /* (I/O) encoder state  */\r
-    const SKP_int16             samplesIn[],    /* (I) input to encoder */\r
-    SKP_int                     nSamplesIn      /* (I) length of input */\r
-)\r
-{\r
-    SKP_int     HP_8_kHz_len, i, shift;\r
-    SKP_int16   in_HP_8_kHz[ MAX_FRAME_LENGTH ];\r
-    SKP_int32   energy_32;\r
-    \r
-    /* High pass filter with cutoff at 8 khz */\r
-    HP_8_kHz_len = SKP_min_int( nSamplesIn, MAX_FRAME_LENGTH );\r
-    HP_8_kHz_len = SKP_max_int( HP_8_kHz_len, 0 );\r
-\r
-    /* Cutoff around 9 khz */\r
-    /* A = conv(conv([8192,14613, 6868], [8192,12883, 7337]), [8192,11586, 7911]); */\r
-    /* B = conv(conv([575, -948, 575], [575, -221, 575]), [575, 104, 575]); */\r
-    SKP_Silk_biquad( samplesIn, SKP_Silk_SWB_detect_B_HP_Q13[ 0 ], SKP_Silk_SWB_detect_A_HP_Q13[ 0 ], \r
-        psSWBdetect->S_HP_8_kHz[ 0 ], in_HP_8_kHz, HP_8_kHz_len );\r
-    for( i = 1; i < NB_SOS; i++ ) {\r
-        SKP_Silk_biquad( in_HP_8_kHz, SKP_Silk_SWB_detect_B_HP_Q13[ i ], SKP_Silk_SWB_detect_A_HP_Q13[ i ], \r
-            psSWBdetect->S_HP_8_kHz[ i ], in_HP_8_kHz, HP_8_kHz_len );\r
-    }\r
-\r
-    /* Calculate energy in HP signal */\r
-    SKP_Silk_sum_sqr_shift( &energy_32, &shift, in_HP_8_kHz, HP_8_kHz_len );\r
-\r
-    /* Count concecutive samples above threshold, after adjusting threshold for number of input samples and shift */\r
-    if( energy_32 > SKP_RSHIFT( SKP_SMULBB( HP_8_KHZ_THRES, HP_8_kHz_len ), shift ) ) {\r
-        psSWBdetect->ConsecSmplsAboveThres += nSamplesIn;\r
-        if( psSWBdetect->ConsecSmplsAboveThres > CONCEC_SWB_SMPLS_THRES ) {\r
-            psSWBdetect->SWB_detected = 1;\r
-        }\r
-    } else {\r
-        psSWBdetect->ConsecSmplsAboveThres -= nSamplesIn;\r
-        psSWBdetect->ConsecSmplsAboveThres = SKP_max( psSWBdetect->ConsecSmplsAboveThres, 0 );\r
-    }\r
-\r
-    /* If sufficient speech activity and no SWB detected, we detect the signal as being WB */\r
-    if( ( psSWBdetect->ActiveSpeech_ms > WB_DETECT_ACTIVE_SPEECH_MS_THRES ) && ( psSWBdetect->SWB_detected == 0 ) ) {\r
-        psSWBdetect->WB_detected = 1;\r
-    }\r
-}\r
index 6f5a66d..946bb55 100644 (file)
@@ -145,12 +145,10 @@ SKP_int SKP_Silk_SDK_Encode(
           ( encControl->API_sampleRate        != 48000 ) ) ||\r
         ( ( encControl->maxInternalSampleRate !=  8000 ) &&\r
           ( encControl->maxInternalSampleRate != 12000 ) &&\r
-          ( encControl->maxInternalSampleRate != 16000 ) &&\r
-          ( encControl->maxInternalSampleRate != 24000 ) ) ||\r
+          ( encControl->maxInternalSampleRate != 16000 ) ) ||\r
         ( ( encControl->minInternalSampleRate !=  8000 ) &&\r
           ( encControl->minInternalSampleRate != 12000 ) &&\r
-          ( encControl->minInternalSampleRate != 16000 ) &&\r
-          ( encControl->minInternalSampleRate != 24000 ) ) ||\r
+          ( encControl->minInternalSampleRate != 16000 ) ) ||\r
           ( encControl->minInternalSampleRate > encControl->maxInternalSampleRate ) ) {\r
         ret = SKP_SILK_ENC_FS_NOT_SUPPORTED;\r
         SKP_assert( 0 );\r
@@ -206,15 +204,6 @@ SKP_int SKP_Silk_SDK_Encode(
         return( ret );\r
     }\r
 \r
-#if MAX_FS_KHZ > 16\r
-    /* Detect energy above 8 kHz */\r
-    if( SKP_min( API_fs_Hz, 1000 * max_internal_fs_kHz ) == 24000 && \r
-            psEnc->sCmn.sSWBdetect.SWB_detected == 0 && \r
-            psEnc->sCmn.sSWBdetect.WB_detected == 0 ) {\r
-        SKP_Silk_detect_SWB_input( &psEnc->sCmn.sSWBdetect, samplesIn, ( SKP_int )nSamplesIn );\r
-    }\r
-#endif\r
-\r
     /* Input buffering/resampling and encoding */\r
     MaxBytesOut = 0;                    /* return 0 output bytes if no encoder called */\r
     while( 1 ) {\r
@@ -266,7 +255,7 @@ SKP_int SKP_Silk_SDK_Encode(
 \r
     *nBytesOut = MaxBytesOut;\r
     if( psEnc->sCmn.useDTX && psEnc->sCmn.inDTX ) {\r
-        /* DTX simulation */\r
+        /* DTX */\r
         *nBytesOut = 0;\r
     }\r
 \r
index 56a8949..b381e12 100644 (file)
@@ -97,9 +97,11 @@ void SKP_Silk_encode_indices(
         ec_enc_icdf( psRangeEnc, psEncCtrlC->NLSFIndices[ i ], psNLSF_CB->StartPtr[ i ], 8 );\r
     }\r
 \r
-    /* Encode NLSF interpolation factor */\r
-    SKP_assert( psEncC->useInterpolatedNLSFs == 1 || psEncCtrlC->NLSFInterpCoef_Q2 == ( 1 << 2 ) );\r
-    ec_enc_icdf( psRangeEnc, psEncCtrlC->NLSFInterpCoef_Q2, SKP_Silk_NLSF_interpolation_factor_iCDF, 8 );\r
+    if( psEncC->nb_subfr == MAX_NB_SUBFR ) {\r
+        /* Encode NLSF interpolation factor */\r
+        SKP_assert( psEncC->useInterpolatedNLSFs == 1 || psEncCtrlC->NLSFInterpCoef_Q2 == ( 1 << 2 ) );\r
+        ec_enc_icdf( psRangeEnc, psEncCtrlC->NLSFInterpCoef_Q2, SKP_Silk_NLSF_interpolation_factor_iCDF, 8 );\r
+    }\r
 \r
 #ifdef SAVE_ALL_INTERNAL_DATA\r
     DEBUG_STORE_DATA( lsf_interpol.dat, &psEncCtrlC->NLSFInterpCoef_Q2, sizeof(int) );\r
index db5986d..4c89dd8 100644 (file)
@@ -61,7 +61,7 @@ void SKP_Silk_gains_quant(
             /* Delta index */\r
             ind[ k ] = ind[ k ] - *prev_ind;\r
 \r
-            /* Double the quantization step size is doubled for large gain increases, so that the max gain level can be reached */\r
+            /* Double the quantization step size for large gain increases, so that the max gain level can be reached */\r
             double_step_size_threshold = 2 * MAX_DELTA_GAIN_QUANT - N_LEVELS_QGAIN + *prev_ind;\r
             if( ind[ k ] > double_step_size_threshold ) {\r
                 ind[ k ] = double_step_size_threshold + SKP_RSHIFT( ind[ k ] - double_step_size_threshold + 1, 1 );\r
@@ -105,7 +105,7 @@ void SKP_Silk_gains_dequant(
 \r
             /* Accumulate deltas */\r
             double_step_size_threshold = 2 * MAX_DELTA_GAIN_QUANT - N_LEVELS_QGAIN + *prev_ind;\r
-            if( ind[ k ] > double_step_size_threshold ) {\r
+            if( ind_tmp > double_step_size_threshold ) {\r
                 *prev_ind += SKP_LSHIFT( ind_tmp, 1 ) - double_step_size_threshold;\r
             } else {\r
                 *prev_ind += ind_tmp;\r
index 68d85fd..0b9011c 100644 (file)
@@ -72,7 +72,7 @@ void SKP_Silk_decode_signs(
 /* Control internal sampling rate */\r
 SKP_int SKP_Silk_control_audio_bandwidth(\r
     SKP_Silk_encoder_state      *psEncC,            /* I/O  Pointer to Silk encoder state               */\r
-    const SKP_int32             TargetRate_bps      /* I    Target max bitrate (bps)                    */\r
+    SKP_int32                   TargetRate_bps      /* I    Target max bitrate (bps)                    */\r
 );\r
 \r
 /***************/\r
@@ -224,13 +224,6 @@ SKP_int SKP_Silk_VAD_GetSA_Q8(                                  /* O    Return v
     const SKP_int               fs_kHz                          /* I    Input frame sample frequency    */\r
 );\r
 \r
-/* Detect signal in 8 - 12 khz range */\r
-void SKP_Silk_detect_SWB_input(\r
-    SKP_Silk_detect_SWB_state   *psSWBdetect,       /* I/O  Encoder state                               */\r
-    const SKP_int16             samplesIn[],        /* I    Input to encoder                            */\r
-    SKP_int                     nSamplesIn          /* I    Length of input                             */\r
-);\r
-\r
 #if SWITCH_TRANSITION_FILTERING\r
 /* Low-pass filter with variable cutoff frequency based on  */\r
 /* piece-wise linear interpolation between elliptic filters */\r
@@ -285,11 +278,10 @@ void SKP_Silk_decode_indices(
 \r
 /* Decode parameters from payload v4 Bitstream */\r
 void SKP_Silk_decode_parameters(\r
-    SKP_Silk_decoder_state      *psDec,                                 /* I/O  State                                    */\r
-    SKP_Silk_decoder_control    *psDecCtrl,                             /* I/O  Decoder control                          */\r
-    ec_dec                      *psRangeDec,                            /* I/O  Compressor data structure                */\r
-    SKP_int                     q[ MAX_FRAME_LENGTH ],                  /* O    Excitation signal                        */\r
-    const SKP_int               fullDecoding                            /* I    Flag to tell if only arithmetic decoding */\r
+    SKP_Silk_decoder_state      *psDec,                             /* I/O  State                                    */\r
+    SKP_Silk_decoder_control    *psDecCtrl,                         /* I/O  Decoder control                          */\r
+    ec_dec                      *psRangeDec,                        /* I/O  Compressor data structure                */\r
+    SKP_int                     q[ MAX_FRAME_LENGTH ]               /* O    Excitation signal                        */\r
 );\r
 \r
 /* Core decoder. Performs inverse NSQ operation LTP + LPC */\r
index bb93ebb..bb9dad4 100644 (file)
@@ -89,15 +89,6 @@ typedef struct {
 } SKP_Silk_range_coder_state;\r
 #endif\r
 \r
-/* Input frequency range detection struct */\r
-typedef struct {\r
-    SKP_int32                   S_HP_8_kHz[ NB_SOS ][ 2 ];  /* HP filter State */\r
-    SKP_int32                   ConsecSmplsAboveThres;\r
-    SKP_int32                   ActiveSpeech_ms;            /* Accumulated time with active speech */\r
-    SKP_int                     SWB_detected;               /* Flag to indicate SWB input */\r
-    SKP_int                     WB_detected;                /* Flag to indicate WB input */\r
-} SKP_Silk_detect_SWB_state;\r
-\r
 #if SWITCH_TRANSITION_FILTERING\r
 /* Variable cut-off low-pass filter state */\r
 typedef struct {\r
@@ -208,10 +199,6 @@ typedef struct {
     SKP_int                         inDTX;                          /* Flag to signal DTX period                                            */\r
     SKP_int                         LBRR_nBytes;\r
 \r
-    /* Struct for detecting SWB input */\r
-    SKP_Silk_detect_SWB_state       sSWBdetect;\r
-\r
-\r
     /* Buffers */\r
        SKP_int8                        q[ MAX_FRAME_LENGTH * MAX_FRAMES_PER_PACKET ];      /* pulse signal buffer */\r
     SKP_int8                        q_LBRR[ MAX_FRAME_LENGTH * MAX_FRAMES_PER_PACKET ]; /* pulse signal buffer */\r
@@ -278,7 +265,6 @@ typedef struct {
     SKP_int32       sLTP_Q16[ 2 * MAX_FRAME_LENGTH ];\r
     SKP_int32       sLPC_Q14[ MAX_FRAME_LENGTH / MAX_NB_SUBFR + MAX_LPC_ORDER ];\r
     SKP_int32       exc_Q10[ MAX_FRAME_LENGTH ];\r
-    SKP_int32       res_Q10[ MAX_FRAME_LENGTH ];\r
     SKP_int16       outBuf[ 2 * MAX_FRAME_LENGTH ];             /* Buffer for output signal                                             */\r
     SKP_int         lagPrev;                                    /* Previous Lag                                                         */\r
     SKP_int         LastGainIndex;                              /* Previous gain index                                                  */\r
index 30a5ac6..e85214c 100644 (file)
@@ -41,7 +41,7 @@ extern "C"
 \r
 /* entropy coding tables */\r
 extern const SKP_uint8  SKP_Silk_gain_iCDF[ 3 ][ N_LEVELS_QGAIN / 8 ];                               /* 24 */\r
-extern const SKP_uint8  SKP_Silk_delta_gain_iCDF[ MAX_DELTA_GAIN_QUANT - MIN_DELTA_GAIN_QUANT + 1 ]; /* 43 */\r
+extern const SKP_uint8  SKP_Silk_delta_gain_iCDF[ MAX_DELTA_GAIN_QUANT - MIN_DELTA_GAIN_QUANT + 1 ]; /* 41 */\r
 \r
 extern const SKP_uint8  SKP_Silk_pitch_lag_iCDF[ 2 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) ];  /* 32 */\r
 extern const SKP_uint8  SKP_Silk_pitch_delta_iCDF[21];                                              /*  21 */\r
@@ -71,7 +71,6 @@ extern const SKP_uint8  SKP_Silk_sign_iCDF[ 36 ];
 extern const SKP_uint8  SKP_Silk_uniform4_iCDF[   4 ];                                              /*   4 */\r
 extern const SKP_uint8  SKP_Silk_uniform6_iCDF[   6 ];                                              /*   6 */\r
 extern const SKP_uint8  SKP_Silk_uniform8_iCDF[   8 ];                                              /*   8 */\r
-extern const SKP_uint8  SKP_Silk_uniform12_iCDF[ 12 ];                                              /*  12 */\r
 \r
 extern const SKP_uint8  SKP_Silk_LTP_per_index_iCDF[ 3 ];                                           /*   3 */\r
 extern const SKP_uint8  * const SKP_Silk_LTP_gain_iCDF_ptrs[ NB_LTP_CBKS ];                         /*   3 */\r
@@ -96,16 +95,9 @@ extern const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB0_10, SKP_Silk_NLSF_CB1_10;
 extern const SKP_uint16  TargetRate_table_NB[  TARGET_RATE_TAB_SZ ];\r
 extern const SKP_uint16  TargetRate_table_MB[  TARGET_RATE_TAB_SZ ];\r
 extern const SKP_uint16  TargetRate_table_WB[  TARGET_RATE_TAB_SZ ];\r
-extern const SKP_uint16  TargetRate_table_SWB[ TARGET_RATE_TAB_SZ ];\r
 extern const SKP_uint16  SNR_table_Q1[         TARGET_RATE_TAB_SZ ];\r
 \r
-/* Filter coeficicnts for HP filter: 4. Order filter implementad as two biquad filters  */\r
-extern const SKP_int16  SKP_Silk_SWB_detect_B_HP_Q13[ NB_SOS ][ 3 ];\r
-extern const SKP_int16  SKP_Silk_SWB_detect_A_HP_Q13[ NB_SOS ][ 2 ];\r
-\r
 /* Decoder high-pass filter coefficients */\r
-extern const SKP_int32  SKP_Silk_Dec_A_HP_24[ DEC_HP_ORDER ];                                       /*   2 */\r
-extern const SKP_int32  SKP_Silk_Dec_B_HP_24[ DEC_HP_ORDER + 1 ];                                   /*   3 */\r
 extern const SKP_int32  SKP_Silk_Dec_A_HP_16[ DEC_HP_ORDER ];                                       /*   2 */\r
 extern const SKP_int32  SKP_Silk_Dec_B_HP_16[ DEC_HP_ORDER + 1 ];                                   /*   3 */\r
 extern const SKP_int32  SKP_Silk_Dec_A_HP_12[ DEC_HP_ORDER ];                                       /*   2 */\r
@@ -114,7 +106,7 @@ extern const SKP_int32  SKP_Silk_Dec_A_HP_8[ DEC_HP_ORDER ];
 extern const SKP_int32  SKP_Silk_Dec_B_HP_8[ DEC_HP_ORDER + 1 ];                                    /*   3 */\r
 \r
 /* Table for frame termination indication */\r
-extern const SKP_uint8  SKP_Silk_FrameTermination_iCDF[ 2 ];\r
+extern const SKP_uint8  SKP_Silk_LBRR_Present_iCDF[ 2 ];\r
 \r
 /* Table for random seed */\r
 extern const SKP_uint8  SKP_Silk_Seed_iCDF[ 4 ];\r
index e2e87cb..f7e26e4 100644 (file)
@@ -46,12 +46,12 @@ const SKP_uint8 SKP_Silk_gain_iCDF[ 3 ][ N_LEVELS_QGAIN / 8 ] =
 };\r
 \r
 const SKP_uint8 SKP_Silk_delta_gain_iCDF[ MAX_DELTA_GAIN_QUANT - MIN_DELTA_GAIN_QUANT + 1 ] = {\r
-          250,    245,    234,    203,     73,     52,     44,     40,\r
-           37,     35,     33,     31,     30,     29,     28,     27,\r
-           26,     25,     24,     23,     22,     21,     20,     19,\r
-           18,     17,     16,     15,     14,     13,     12,     11,\r
-           10,      9,      8,      7,      6,      5,      4,      3,\r
-            2,      1,      0\r
+          250,    245,    234,    203,     71,     50,     42,     38,\r
+           35,     33,     31,     29,     28,     27,     26,     25,\r
+           24,     23,     22,     21,     20,     19,     18,     17,\r
+           16,     15,     14,     13,     12,     11,     10,      9,\r
+            8,      7,      6,      5,      4,      3,      2,      1,\r
+            0\r
 };\r
 \r
 #ifdef __cplusplus\r
index 1f51514..489ce31 100644 (file)
@@ -44,27 +44,11 @@ const SKP_uint16 TargetRate_table_MB[ TARGET_RATE_TAB_SZ ] = {
 const SKP_uint16 TargetRate_table_WB[ TARGET_RATE_TAB_SZ ] = {\r
     0,      11000,  14000,  17000,  21000,  26000,  35000,  MAX_TARGET_RATE_BPS\r
 };\r
-const SKP_uint16 TargetRate_table_SWB[ TARGET_RATE_TAB_SZ ] = {\r
-    0,      13000,  16000,  19000,  25000,  32000,  45000,  MAX_TARGET_RATE_BPS\r
-};\r
 const SKP_uint16 SNR_table_Q1[ TARGET_RATE_TAB_SZ ] = {\r
     19,     31,     35,     39,     44,     49,     55,     60\r
 };\r
 \r
-/* Filter coeficicnts for HP filter: 4. Order filter implementad as two biquad filters  */\r
-const SKP_int16 SKP_Silk_SWB_detect_B_HP_Q13[ NB_SOS ][ 3 ] = {\r
-    //{400, -550, 400}, {400, 130, 400}, {400, 390, 400}\r
-    {575, -948, 575}, {575, -221, 575}, {575, 104, 575} \r
-};\r
-const SKP_int16 SKP_Silk_SWB_detect_A_HP_Q13[ NB_SOS ][ 2 ] = {\r
-    {14613, 6868}, {12883, 7337}, {11586, 7911}\r
-    //{14880, 6900}, {14400, 7300}, {13700, 7800}\r
-};\r
-\r
 /* Decoder high-pass filter coefficients, -6 dB @ 50 Hz, 0.05 dB ripple */\r
-const SKP_int32 SKP_Silk_Dec_A_HP_24[ DEC_HP_ORDER ]     = {-530479464,  262127223};            /* second order AR coefs, Q28 */\r
-const SKP_int32 SKP_Silk_Dec_B_HP_24[ DEC_HP_ORDER + 1 ] = { 265214231, -530428461, 265214231}; /* second order MA coefs, Q28 */\r
-\r
 const SKP_int32 SKP_Silk_Dec_A_HP_16[ DEC_HP_ORDER ]     = {-527234079,  258986528};            /* second order AR coefs, Q28 */\r
 const SKP_int32 SKP_Silk_Dec_B_HP_16[ DEC_HP_ORDER + 1 ] = { 263603618, -527207236, 263603618}; /* second order MA coefs, Q28 */\r
 \r
@@ -114,7 +98,7 @@ const SKP_uint8 SKP_Silk_type_offset_joint_iCDF[6][6] =
 const SKP_uint8 SKP_Silk_NLSF_interpolation_factor_iCDF[ 5 ] = { 243, 221, 192, 181, 0 };\r
 \r
 /* Table for frame termination indication */\r
-const SKP_uint8 SKP_Silk_FrameTermination_iCDF[ 2 ] = { 64, 0 };\r
+const SKP_uint8 SKP_Silk_LBRR_Present_iCDF[ 2 ] = { 100, 0 };\r
 \r
 /* Table for random seed */\r
 const SKP_uint8 SKP_Silk_Seed_iCDF[ 4 ] = { 192, 128, 64, 0 };\r
@@ -131,7 +115,6 @@ const SKP_int16 SKP_Silk_LTPScales_table_Q14[ 3 ] = { 15565, 11469, 8192 };
 const SKP_uint8 SKP_Silk_uniform4_iCDF[   4 ] = { 192, 128, 64, 0 };\r
 const SKP_uint8 SKP_Silk_uniform6_iCDF[   6 ] = { 213, 171, 128, 85, 43, 0 };\r
 const SKP_uint8 SKP_Silk_uniform8_iCDF[   8 ] = { 224, 192, 160, 128, 96, 64, 32, 0 };\r
-const SKP_uint8 SKP_Silk_uniform12_iCDF[ 12 ] = { 235, 213, 192, 171, 149, 128, 107, 85, 64, 43, 21, 0 };\r
 \r
 #if SWITCH_TRANSITION_FILTERING\r
 /*  Elliptic/Cauer filters designed with 0.1 dB passband ripple, \r
index 2c131d1..89598d4 100644 (file)
@@ -60,7 +60,6 @@ extern "C"
 #define MU_LTP_QUANT_NB                                 0.03f\r
 #define MU_LTP_QUANT_MB                                 0.025f\r
 #define MU_LTP_QUANT_WB                                 0.02f\r
-#define MU_LTP_QUANT_SWB                                0.016f\r
 \r
 /***********************/\r
 /* High pass filtering */\r
index 9945710..6a4ee53 100644 (file)
@@ -95,7 +95,6 @@
     <ClCompile Include="SKP_Silk_decode_parameters.c" />\r
     <ClCompile Include="SKP_Silk_decode_pulses.c" />\r
     <ClCompile Include="SKP_Silk_dec_API.c" />\r
-    <ClCompile Include="SKP_Silk_detect_SWB_input.c" />\r
     <ClCompile Include="SKP_Silk_encode_indices.c" />\r
     <ClCompile Include="SKP_Silk_encode_pulses.c" />\r
     <ClCompile Include="SKP_Silk_enc_API.c" />\r
index 5b674a9..2f26aed 100644 (file)
@@ -71,9 +71,6 @@
     <ClCompile Include="SKP_Silk_decoder_set_fs.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="SKP_Silk_detect_SWB_input.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
     <ClCompile Include="SKP_Silk_enc_API.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
index 8462911..992e66a 100644 (file)
@@ -73,7 +73,9 @@ static void print_usage(char* argv[]) {
     printf( "\nin.bit       : Bitstream input to decoder" );\r
     printf( "\nout.pcm      : Speech output from decoder" );\r
     printf( "\n   settings:" );\r
-    printf( "\n-Fs_API <Hz> : Sampling rate of output signal in Hz; default: 24000" );\r
+    printf( "\n-Fs_API <Hz>       : Sampling rate of output signal in Hz" );\r
+    printf( "\n-Fs_Internal <Hz>  : Internal sampling rate in Hz, default" ); \r
+    printf( "\n-packetlength <ms> : Packet interval in ms, default" );\r
     printf( "\n-loss <perc> : Simulated packet loss percentage (0-100); default: 0" );\r
     printf( "\n" );\r
 }\r
@@ -132,6 +134,12 @@ int main( int argc, char* argv[] )
         } else if( SKP_STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-Fs_API" ) == 0 ) {\r
             sscanf( argv[ args + 1 ], "%d", &API_Fs_Hz );\r
             args += 2;\r
+        } else if( SKP_STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-Fs_Internal" ) == 0 ) {\r
+            sscanf( argv[ args + 1 ], "%d", &DecControl.internalSampleRate );\r
+            args += 2;\r
+        } else if( SKP_STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-packetlength" ) == 0 ) {\r
+            sscanf( argv[ args + 1 ], "%d", &DecControl.payloadSize_ms );\r
+            args += 2;\r
         } else if( SKP_STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-quiet" ) == 0 ) {\r
             quiet = 1;\r
             args++;\r
index b5e85a5..876c802 100644 (file)
@@ -45,7 +45,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #define MAX_BYTES_PER_FRAME     250 // Equals peak bitrate of 100 kbps \r
 #define MAX_INPUT_FRAMES        5\r
 #define MAX_LBRR_DELAY          2\r
-#define MAX_FRAME_LENGTH        480\r
+#define MAX_FRAME_LENGTH        320\r
 #define MAX_FRAME_LENGTH_MS     20\r
 #define MAX_API_FS_KHZ          48\r
 \r
@@ -78,8 +78,8 @@ static void print_usage( char* argv[] ) {
     printf( "\nin.pcm               : Speech input to encoder" );\r
     printf( "\nout.bit              : Bitstream output from encoder" );\r
     printf( "\n   settings:" );\r
-    printf( "\n-Fs_API <Hz>         : API sampling rate in Hz, default: 24000" );\r
-    printf( "\n-Fs_maxInternal <Hz> : Maximum internal sampling rate in Hz, default: 24000" ); \r
+    printf( "\n-Fs_API <Hz>         : API sampling rate in Hz, default: 16000" );\r
+    printf( "\n-Fs_maxInternal <Hz> : Maximum internal sampling rate in Hz, default: 16000" ); \r
     printf( "\n-packetlength <ms>   : Packet interval in ms, default: 20" );\r
     printf( "\n-rate <bps>          : Target bitrate; default: 25000" );\r
     printf( "\n-loss <perc>         : Uplink loss estimate, in percent (0-100); default: 0" );\r
@@ -112,8 +112,8 @@ int main( int argc, char* argv[] )
     ec_enc         range_enc_celt_state;\r
 \r
     /* default settings */\r
-    SKP_int32 API_fs_Hz = 24000;\r
-    SKP_int32 max_internal_fs_Hz = 24000;\r
+    SKP_int32 API_fs_Hz = 16000;\r
+    SKP_int32 max_internal_fs_Hz = 16000;\r
     SKP_int32 min_internal_fs_Hz = 8000;\r
     SKP_int32 targetRate_bps = 25000;\r
     SKP_int32 packetSize_ms = 20;\r