Update SILK code using the CELT range coder
[opus.git] / src_common / SKP_Silk_decode_indices_v4.c
similarity index 91%
rename from src/SKP_Silk_decode_indices_v4.c
rename to src_common/SKP_Silk_decode_indices_v4.c
index b86d1f5..e41797b 100644 (file)
@@ -32,7 +32,7 @@ void SKP_Silk_decode_indices_v4(
     SKP_Silk_decoder_state      *psDec            /* I/O    State                              */\r
 )\r
 {\r
-    SKP_int   i, k, Ix, fs_kHz_dec, FrameIndex = 0, FrameTermination;\r
+    SKP_int   i, k, Ix, fs_kHz_dec, nb_subfr, FrameIndex = 0, FrameTermination;\r
     SKP_int   sigtype, QuantOffsetType, seed_int, nBytesUsed;\r
     SKP_int   decode_absolute_lagIndex, delta_lagIndex, prev_lagIndex = 0;\r
     const SKP_Silk_NLSF_CB_struct *psNLSF_CB = NULL;\r
@@ -50,7 +50,13 @@ void SKP_Silk_decode_indices_v4(
             return;\r
         }\r
         fs_kHz_dec = SKP_Silk_SamplingRates_table[ Ix ];\r
-        SKP_Silk_decoder_set_fs( psDec, fs_kHz_dec );\r
+\r
+        /* Convert number of subframes to index */\r
+        SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_NbSubframes_CDF, SKP_Silk_NbSubframes_offset );\r
+        nb_subfr = (Ix + 1) << 1;\r
+        SKP_assert( nb_subfr == MAX_NB_SUBFR >> 1 || nb_subfr == MAX_NB_SUBFR );\r
+        \r
+        SKP_Silk_decoder_set_fs( psDec, fs_kHz_dec, nb_subfr );\r
     \r
         FrameIndex       = 0;\r
         FrameTermination = SKP_SILK_MORE_FRAMES;\r
@@ -90,7 +96,7 @@ void SKP_Silk_decode_indices_v4(
         }\r
 \r
         /* remaining subframes */\r
-        for( i = 1; i < NB_SUBFR; i++ ) {\r
+        for( i = 1; i < psDec->nb_subfr; i++ ) {\r
             SKP_Silk_range_decoder( &psDec->GainsIndices[ FrameIndex ][ i ], psRC, SKP_Silk_delta_gain_CDF, SKP_Silk_delta_gain_CDF_offset );\r
         }\r
         \r
@@ -154,7 +160,7 @@ void SKP_Silk_decode_indices_v4(
             /* Decode PERIndex value */\r
             SKP_Silk_range_decoder( &psDec->PERIndex[ FrameIndex ], psRC, SKP_Silk_LTP_per_index_CDF, SKP_Silk_LTP_per_index_CDF_offset );\r
             \r
-            for( k = 0; k < NB_SUBFR; k++ ) {\r
+            for( k = 0; k < psDec->nb_subfr; k++ ) {\r
                 SKP_Silk_range_decoder( &psDec->LTPIndex[ FrameIndex ][ k ], psRC, SKP_Silk_LTP_gain_CDF_ptrs[ psDec->PERIndex[ FrameIndex ] ], \r
                     SKP_Silk_LTP_gain_CDF_offsets[ psDec->PERIndex[ FrameIndex ] ] );\r
             }\r
@@ -184,8 +190,9 @@ void SKP_Silk_decode_indices_v4(
     /****************************************/\r
     /* get number of bytes used so far      */\r
     /****************************************/\r
-    SKP_Silk_range_coder_get_length( psRC, &nBytesUsed );\r
-    psDec->nBytesLeft = psRC->bufferLength - nBytesUsed;\r
+    SKP_Silk_range_decoder_get_length( psRC, &nBytesUsed );\r
+    psDec->nBytesLeft = psRC->range_dec_celt_state.buf->storage - nBytesUsed;\r
+\r
     if( psDec->nBytesLeft < 0 ) {\r
         psRC->error = RANGE_CODER_READ_BEYOND_BUFFER;\r
     }\r