| Index: silk/quant_LTP_gains.c
 | 
| diff --git a/silk/quant_LTP_gains.c b/silk/quant_LTP_gains.c
 | 
| index 43b43cb8d806f865c2f0969d27e4eda0ce845353..fd0870da194e812d7219e5a024bf2e2cc75c3aa4 100644
 | 
| --- a/silk/quant_LTP_gains.c
 | 
| +++ b/silk/quant_LTP_gains.c
 | 
| @@ -30,11 +30,13 @@ POSSIBILITY OF SUCH DAMAGE.
 | 
|  #endif
 | 
|  
 | 
|  #include "main.h"
 | 
| +#include "tuning_parameters.h"
 | 
|  
 | 
|  void silk_quant_LTP_gains(
 | 
|      opus_int16                  B_Q14[ MAX_NB_SUBFR * LTP_ORDER ],          /* I/O  (un)quantized LTP gains         */
 | 
|      opus_int8                   cbk_index[ MAX_NB_SUBFR ],                  /* O    Codebook Index                  */
 | 
|      opus_int8                   *periodicity_index,                         /* O    Periodicity Index               */
 | 
| +	opus_int32					*sum_log_gain_Q7,							/* I/O  Cumulative max prediction gain  */
 | 
|      const opus_int32            W_Q18[ MAX_NB_SUBFR*LTP_ORDER*LTP_ORDER ],  /* I    Error Weights in Q18            */
 | 
|      opus_int                    mu_Q9,                                      /* I    Mu value (R/D tradeoff)         */
 | 
|      opus_int                    lowComplexity,                              /* I    Flag for low complexity         */
 | 
| @@ -45,18 +47,26 @@ void silk_quant_LTP_gains(
 | 
|      opus_int8            temp_idx[ MAX_NB_SUBFR ];
 | 
|      const opus_uint8     *cl_ptr_Q5;
 | 
|      const opus_int8      *cbk_ptr_Q7;
 | 
| +    const opus_uint8     *cbk_gain_ptr_Q7;
 | 
|      const opus_int16     *b_Q14_ptr;
 | 
|      const opus_int32     *W_Q18_ptr;
 | 
|      opus_int32           rate_dist_Q14_subfr, rate_dist_Q14, min_rate_dist_Q14;
 | 
| +	opus_int32           sum_log_gain_tmp_Q7, best_sum_log_gain_Q7, max_gain_Q7, gain_Q7;
 | 
|  
 | 
|      /***************************************************/
 | 
|      /* iterate over different codebooks with different */
 | 
|      /* rates/distortions, and choose best */
 | 
|      /***************************************************/
 | 
|      min_rate_dist_Q14 = silk_int32_MAX;
 | 
| +    best_sum_log_gain_Q7 = 0;
 | 
|      for( k = 0; k < 3; k++ ) {
 | 
| +        /* Safety margin for pitch gain control, to take into account factors
 | 
| +           such as state rescaling/rewhitening. */
 | 
| +        opus_int32 gain_safety = SILK_FIX_CONST( 0.4, 7 );
 | 
| +
 | 
|          cl_ptr_Q5  = silk_LTP_gain_BITS_Q5_ptrs[ k ];
 | 
|          cbk_ptr_Q7 = silk_LTP_vq_ptrs_Q7[        k ];
 | 
| +        cbk_gain_ptr_Q7 = silk_LTP_vq_gain_ptrs_Q7[ k ];
 | 
|          cbk_size   = silk_LTP_vq_sizes[          k ];
 | 
|  
 | 
|          /* Set up pointer to first subframe */
 | 
| @@ -64,19 +74,28 @@ void silk_quant_LTP_gains(
 | 
|          b_Q14_ptr = B_Q14;
 | 
|  
 | 
|          rate_dist_Q14 = 0;
 | 
| +		sum_log_gain_tmp_Q7 = *sum_log_gain_Q7;
 | 
|          for( j = 0; j < nb_subfr; j++ ) {
 | 
| +			max_gain_Q7 = silk_log2lin( ( SILK_FIX_CONST( MAX_SUM_LOG_GAIN_DB / 6.0, 7 ) - sum_log_gain_tmp_Q7 ) 
 | 
| +										+ SILK_FIX_CONST( 7, 7 ) ) - gain_safety;
 | 
| +
 | 
|              silk_VQ_WMat_EC(
 | 
|                  &temp_idx[ j ],         /* O    index of best codebook vector                           */
 | 
|                  &rate_dist_Q14_subfr,   /* O    best weighted quantization error + mu * rate            */
 | 
| +				&gain_Q7,               /* O    sum of absolute LTP coefficients                        */
 | 
|                  b_Q14_ptr,              /* I    input vector to be quantized                            */
 | 
|                  W_Q18_ptr,              /* I    weighting matrix                                        */
 | 
|                  cbk_ptr_Q7,             /* I    codebook                                                */
 | 
| +                cbk_gain_ptr_Q7,        /* I    codebook effective gains                                */
 | 
|                  cl_ptr_Q5,              /* I    code length for each codebook vector                    */
 | 
|                  mu_Q9,                  /* I    tradeoff between weighted error and rate                */
 | 
| +				max_gain_Q7,            /* I    maximum sum of absolute LTP coefficients                */
 | 
|                  cbk_size                /* I    number of vectors in codebook                           */
 | 
|              );
 | 
|  
 | 
|              rate_dist_Q14 = silk_ADD_POS_SAT32( rate_dist_Q14, rate_dist_Q14_subfr );
 | 
| +            sum_log_gain_tmp_Q7 = silk_max(0, sum_log_gain_tmp_Q7
 | 
| +                                + silk_lin2log( gain_safety + gain_Q7 ) - SILK_FIX_CONST( 7, 7 ));
 | 
|  
 | 
|              b_Q14_ptr += LTP_ORDER;
 | 
|              W_Q18_ptr += LTP_ORDER * LTP_ORDER;
 | 
| @@ -89,6 +108,7 @@ void silk_quant_LTP_gains(
 | 
|              min_rate_dist_Q14 = rate_dist_Q14;
 | 
|              *periodicity_index = (opus_int8)k;
 | 
|              silk_memcpy( cbk_index, temp_idx, nb_subfr * sizeof( opus_int8 ) );
 | 
| +			best_sum_log_gain_Q7 = sum_log_gain_tmp_Q7;
 | 
|          }
 | 
|  
 | 
|          /* Break early in low-complexity mode if rate distortion is below threshold */
 | 
| @@ -103,5 +123,6 @@ void silk_quant_LTP_gains(
 | 
|              B_Q14[ j * LTP_ORDER + k ] = silk_LSHIFT( cbk_ptr_Q7[ cbk_index[ j ] * LTP_ORDER + k ], 7 );
 | 
|          }
 | 
|      }
 | 
| +	*sum_log_gain_Q7 = best_sum_log_gain_Q7;
 | 
|  }
 | 
|  
 | 
| 
 |