Update SILK code using the CELT range coder
[opus.git] / src_common / SKP_Silk_encode_parameters_v4.c
similarity index 71%
rename from src/SKP_Silk_encode_parameters_v4.c
rename to src_common/SKP_Silk_encode_parameters_v4.c
index c6786b8..07c6e04 100644 (file)
@@ -40,17 +40,17 @@ void SKP_Silk_encode_parameters_v4(
     SKP_int   encode_absolute_lagIndex, delta_lagIndex;\r
     const SKP_Silk_NLSF_CB_struct *psNLSF_CB;\r
 \r
-\r
-    /************************/\r
-    /* Encode sampling rate */\r
-    /************************/\r
+#ifdef SAVE_ALL_INTERNAL_DATA\r
+    SKP_int nBytes_lagIndex, nBytes_contourIndex, nBytes_LTP;\r
+    SKP_int nBytes_after, nBytes_before;\r
+#endif\r
+\r
+    /*************************************/\r
+    /* Encode sampling rate and          */\r
+    /* number of subframes in each frame */\r
+    /*************************************/\r
     /* only done for first frame in packet */\r
     if( psEncC->nFramesInPayloadBuf == 0 ) {\r
-        \r
-        /* Initialize arithmetic coder */\r
-        SKP_Silk_range_enc_init( &psEncC->sRC );\r
-        psEncC->nBytesInPayloadBuf = 0;\r
-\r
         /* get sampling rate index */\r
         for( i = 0; i < 3; i++ ) {\r
             if( SKP_Silk_SamplingRates_table[ i ] == psEncC->fs_kHz ) {\r
@@ -58,6 +58,11 @@ void SKP_Silk_encode_parameters_v4(
             }\r
         }\r
         SKP_Silk_range_encoder( psRC, i, SKP_Silk_SamplingRates_CDF );\r
+\r
+        /* Convert number of subframes to index */\r
+        SKP_assert( psEncC->nb_subfr == MAX_NB_SUBFR >> 1 || psEncC->nb_subfr == MAX_NB_SUBFR );\r
+        i = (psEncC->nb_subfr >> 1) - 1;\r
+        SKP_Silk_range_encoder( psRC, i, SKP_Silk_NbSubframes_CDF );\r
     }\r
 \r
     /*********************************************/\r
@@ -81,6 +86,9 @@ void SKP_Silk_encode_parameters_v4(
     /****************/\r
     /* Encode gains */\r
     /****************/\r
+#ifdef SAVE_ALL_INTERNAL_DATA\r
+    SKP_Silk_range_encoder_get_length( psRC, &nBytes_before );\r
+#endif\r
     /* first subframe */\r
     if( psEncC->nFramesInPayloadBuf == 0 ) {\r
         /* first frame in packet: independent coding */\r
@@ -91,14 +99,22 @@ void SKP_Silk_encode_parameters_v4(
     }\r
 \r
     /* remaining subframes */\r
-    for( i = 1; i < NB_SUBFR; i++ ) {\r
+    for( i = 1; i < psEncC->nb_subfr; i++ ) {\r
         SKP_Silk_range_encoder( psRC, psEncCtrlC->GainsIndices[ i ], SKP_Silk_delta_gain_CDF );\r
     }\r
 \r
+#ifdef SAVE_ALL_INTERNAL_DATA\r
+    SKP_Silk_range_encoder_get_length( psRC, &nBytes_after );\r
+    nBytes_after -= nBytes_before; // bytes just added\r
+    DEBUG_STORE_DATA( nBytes_gains.dat, &nBytes_after, sizeof( SKP_int ) );\r
+#endif\r
 \r
     /****************/\r
     /* Encode NLSFs */\r
     /****************/\r
+#ifdef SAVE_ALL_INTERNAL_DATA\r
+    SKP_Silk_range_encoder_get_length( psRC, &nBytes_before );\r
+#endif\r
     /* Range encoding of the NLSF path */\r
     psNLSF_CB = psEncC->psNLSF_CB[ psEncCtrlC->sigtype ];\r
     SKP_Silk_range_encoder_multi( psRC, psEncCtrlC->NLSFIndices, psNLSF_CB->StartPtr, psNLSF_CB->nStages );\r
@@ -107,13 +123,19 @@ void SKP_Silk_encode_parameters_v4(
     SKP_assert( psEncC->useInterpolatedNLSFs == 1 || psEncCtrlC->NLSFInterpCoef_Q2 == ( 1 << 2 ) );\r
     SKP_Silk_range_encoder( psRC, psEncCtrlC->NLSFInterpCoef_Q2, SKP_Silk_NLSF_interpolation_factor_CDF );\r
 \r
+#ifdef SAVE_ALL_INTERNAL_DATA\r
+    SKP_Silk_range_encoder_get_length( psRC, &nBytes_after );\r
+    nBytes_after -= nBytes_before; // bytes just added\r
+    DEBUG_STORE_DATA( nBytes_LSF.dat, &nBytes_after, sizeof( SKP_int ) );\r
+#endif\r
 \r
     if( psEncCtrlC->sigtype == SIG_TYPE_VOICED ) {\r
         /*********************/\r
         /* Encode pitch lags */\r
         /*********************/\r
-\r
-\r
+#ifdef SAVE_ALL_INTERNAL_DATA\r
+        SKP_Silk_range_encoder_get_length( psRC, &nBytes_before );\r
+#endif\r
         /* lag index */\r
         encode_absolute_lagIndex = 1;\r
         if( psEncC->nFramesInPayloadBuf > 0 && psEncC->prev_sigtype == SIG_TYPE_VOICED ) {\r
@@ -143,7 +165,14 @@ void SKP_Silk_encode_parameters_v4(
         }\r
         psEncC->prev_lagIndex = psEncCtrlC->lagIndex;\r
 \r
+#ifdef SAVE_ALL_INTERNAL_DATA\r
+        SKP_Silk_range_encoder_get_length( psRC, &nBytes_after );\r
+        nBytes_lagIndex = nBytes_after - nBytes_before; // bytes just added\r
+#endif\r
 \r
+#ifdef SAVE_ALL_INTERNAL_DATA\r
+        SKP_Silk_range_encoder_get_length( psRC, &nBytes_before );\r
+#endif\r
         /* countour index */\r
         if( psEncC->fs_kHz == 8 ) {\r
             /* Less codevectors used in 8 khz mode */\r
@@ -152,16 +181,22 @@ void SKP_Silk_encode_parameters_v4(
             /* Joint for 12, 16, 24 khz */\r
             SKP_Silk_range_encoder( psRC, psEncCtrlC->contourIndex, SKP_Silk_pitch_contour_CDF );\r
         }\r
+#ifdef SAVE_ALL_INTERNAL_DATA\r
+        SKP_Silk_range_encoder_get_length( psRC, &nBytes_after ); \r
+        nBytes_contourIndex = nBytes_after - nBytes_before; // bytes just added\r
+#endif\r
 \r
         /********************/\r
         /* Encode LTP gains */\r
         /********************/\r
-\r
+#ifdef SAVE_ALL_INTERNAL_DATA\r
+        SKP_Silk_range_encoder_get_length( psRC, &nBytes_before );\r
+#endif\r
         /* PERIndex value */\r
         SKP_Silk_range_encoder( psRC, psEncCtrlC->PERIndex, SKP_Silk_LTP_per_index_CDF );\r
 \r
         /* Codebook Indices */\r
-        for( k = 0; k < NB_SUBFR; k++ ) {\r
+        for( k = 0; k < psEncC->nb_subfr; k++ ) {\r
             SKP_Silk_range_encoder( psRC, psEncCtrlC->LTPIndex[ k ], SKP_Silk_LTP_gain_CDF_ptrs[ psEncCtrlC->PERIndex ] );\r
         }\r
 \r
@@ -169,8 +204,26 @@ void SKP_Silk_encode_parameters_v4(
         /* Encode LTP scaling */\r
         /**********************/\r
         SKP_Silk_range_encoder( psRC, psEncCtrlC->LTP_scaleIndex, SKP_Silk_LTPscale_CDF );\r
+#ifdef SAVE_ALL_INTERNAL_DATA\r
+        SKP_Silk_range_encoder_get_length( psRC, &nBytes_after );\r
+        nBytes_LTP = nBytes_after - nBytes_before; // bytes just added\r
+#endif\r
     }\r
-\r
+#ifdef SAVE_ALL_INTERNAL_DATA\r
+    else { \r
+        // Unvoiced speech\r
+        nBytes_lagIndex     = 0;\r
+        nBytes_contourIndex = 0;\r
+        nBytes_LTP          = 0;\r
+    }\r
+    DEBUG_STORE_DATA( nBytes_lagIndex.dat,      &nBytes_lagIndex,       sizeof( SKP_int ) );\r
+    DEBUG_STORE_DATA( nBytes_contourIndex.dat,  &nBytes_contourIndex,   sizeof( SKP_int ) );\r
+    DEBUG_STORE_DATA( nBytes_LTP.dat,           &nBytes_LTP,            sizeof( SKP_int ) );\r
+#endif\r
+\r
+#ifdef SAVE_ALL_INTERNAL_DATA\r
+    SKP_Silk_range_encoder_get_length( psRC, &nBytes_before );\r
+#endif\r
 \r
     /***************/\r
     /* Encode seed */\r