| OLD | NEW | 
|---|
| 1 /*********************************************************************** | 1 /*********************************************************************** | 
| 2 Copyright (c) 2006-2011, Skype Limited. All rights reserved. | 2 Copyright (c) 2006-2011, Skype Limited. All rights reserved. | 
| 3 Redistribution and use in source and binary forms, with or without | 3 Redistribution and use in source and binary forms, with or without | 
| 4 modification, are permitted provided that the following conditions | 4 modification, are permitted provided that the following conditions | 
| 5 are met: | 5 are met: | 
| 6 - Redistributions of source code must retain the above copyright notice, | 6 - Redistributions of source code must retain the above copyright notice, | 
| 7 this list of conditions and the following disclaimer. | 7 this list of conditions and the following disclaimer. | 
| 8 - Redistributions in binary form must reproduce the above copyright | 8 - Redistributions in binary form must reproduce the above copyright | 
| 9 notice, this list of conditions and the following disclaimer in the | 9 notice, this list of conditions and the following disclaimer in the | 
| 10 documentation and/or other materials provided with the distribution. | 10 documentation and/or other materials provided with the distribution. | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 30 #endif | 30 #endif | 
| 31 | 31 | 
| 32 #include "main_FIX.h" | 32 #include "main_FIX.h" | 
| 33 #include "stack_alloc.h" | 33 #include "stack_alloc.h" | 
| 34 #include "tuning_parameters.h" | 34 #include "tuning_parameters.h" | 
| 35 | 35 | 
| 36 /* Compute gain to make warped filter coefficients have a zero mean log frequenc
     y response on a   */ | 36 /* Compute gain to make warped filter coefficients have a zero mean log frequenc
     y response on a   */ | 
| 37 /* non-warped frequency scale. (So that it can be implemented with a minimum-pha
     se monic filter.) */ | 37 /* non-warped frequency scale. (So that it can be implemented with a minimum-pha
     se monic filter.) */ | 
| 38 /* Note: A monic filter is one with the first coefficient equal to 1.0. In Silk 
     we omit the first */ | 38 /* Note: A monic filter is one with the first coefficient equal to 1.0. In Silk 
     we omit the first */ | 
| 39 /* coefficient in an array of coefficients, for monic filters.                  
                       */ | 39 /* coefficient in an array of coefficients, for monic filters.                  
                       */ | 
| 40 static inline opus_int32 warped_gain( /* gain in Q16*/ | 40 static OPUS_INLINE opus_int32 warped_gain( /* gain in Q16*/ | 
| 41     const opus_int32     *coefs_Q24, | 41     const opus_int32     *coefs_Q24, | 
| 42     opus_int             lambda_Q16, | 42     opus_int             lambda_Q16, | 
| 43     opus_int             order | 43     opus_int             order | 
| 44 ) { | 44 ) { | 
| 45     opus_int   i; | 45     opus_int   i; | 
| 46     opus_int32 gain_Q24; | 46     opus_int32 gain_Q24; | 
| 47 | 47 | 
| 48     lambda_Q16 = -lambda_Q16; | 48     lambda_Q16 = -lambda_Q16; | 
| 49     gain_Q24 = coefs_Q24[ order - 1 ]; | 49     gain_Q24 = coefs_Q24[ order - 1 ]; | 
| 50     for( i = order - 2; i >= 0; i-- ) { | 50     for( i = order - 2; i >= 0; i-- ) { | 
| 51         gain_Q24 = silk_SMLAWB( coefs_Q24[ i ], gain_Q24, lambda_Q16 ); | 51         gain_Q24 = silk_SMLAWB( coefs_Q24[ i ], gain_Q24, lambda_Q16 ); | 
| 52     } | 52     } | 
| 53     gain_Q24  = silk_SMLAWB( SILK_FIX_CONST( 1.0, 24 ), gain_Q24, -lambda_Q16 ); | 53     gain_Q24  = silk_SMLAWB( SILK_FIX_CONST( 1.0, 24 ), gain_Q24, -lambda_Q16 ); | 
| 54     return silk_INVERSE32_varQ( gain_Q24, 40 ); | 54     return silk_INVERSE32_varQ( gain_Q24, 40 ); | 
| 55 } | 55 } | 
| 56 | 56 | 
| 57 /* Convert warped filter coefficients to monic pseudo-warped coefficients and li
     mit maximum     */ | 57 /* Convert warped filter coefficients to monic pseudo-warped coefficients and li
     mit maximum     */ | 
| 58 /* amplitude of monic warped coefficients by using bandwidth expansion on the tr
     ue coefficients */ | 58 /* amplitude of monic warped coefficients by using bandwidth expansion on the tr
     ue coefficients */ | 
| 59 static inline void limit_warped_coefs( | 59 static OPUS_INLINE void limit_warped_coefs( | 
| 60     opus_int32           *coefs_syn_Q24, | 60     opus_int32           *coefs_syn_Q24, | 
| 61     opus_int32           *coefs_ana_Q24, | 61     opus_int32           *coefs_ana_Q24, | 
| 62     opus_int             lambda_Q16, | 62     opus_int             lambda_Q16, | 
| 63     opus_int32           limit_Q24, | 63     opus_int32           limit_Q24, | 
| 64     opus_int             order | 64     opus_int             order | 
| 65 ) { | 65 ) { | 
| 66     opus_int   i, iter, ind = 0; | 66     opus_int   i, iter, ind = 0; | 
| 67     opus_int32 tmp, maxabs_Q24, chirp_Q16, gain_syn_Q16, gain_ana_Q16; | 67     opus_int32 tmp, maxabs_Q24, chirp_Q16, gain_syn_Q16, gain_ana_Q16; | 
| 68     opus_int32 nom_Q16, den_Q24; | 68     opus_int32 nom_Q16, den_Q24; | 
| 69 | 69 | 
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 138     silk_assert( 0 ); | 138     silk_assert( 0 ); | 
| 139 } | 139 } | 
| 140 | 140 | 
| 141 /**************************************************************/ | 141 /**************************************************************/ | 
| 142 /* Compute noise shaping coefficients and initial gain values */ | 142 /* Compute noise shaping coefficients and initial gain values */ | 
| 143 /**************************************************************/ | 143 /**************************************************************/ | 
| 144 void silk_noise_shape_analysis_FIX( | 144 void silk_noise_shape_analysis_FIX( | 
| 145     silk_encoder_state_FIX          *psEnc,                                 /* I
     /O  Encoder state FIX                                                           
     */ | 145     silk_encoder_state_FIX          *psEnc,                                 /* I
     /O  Encoder state FIX                                                           
     */ | 
| 146     silk_encoder_control_FIX        *psEncCtrl,                             /* I
     /O  Encoder control FIX                                                         
     */ | 146     silk_encoder_control_FIX        *psEncCtrl,                             /* I
     /O  Encoder control FIX                                                         
     */ | 
| 147     const opus_int16                *pitch_res,                             /* I
         LPC residual from pitch analysis                                            
     */ | 147     const opus_int16                *pitch_res,                             /* I
         LPC residual from pitch analysis                                            
     */ | 
| 148     const opus_int16                *x                                      /* I
         Input signal [ frame_length + la_shape ]                                    
     */ | 148     const opus_int16                *x,                                     /* I
         Input signal [ frame_length + la_shape ]                                    
     */ | 
|  | 149     int                              arch                                   /* I
         Run-time architecture                                                       
     */ | 
| 149 ) | 150 ) | 
| 150 { | 151 { | 
| 151     silk_shape_state_FIX *psShapeSt = &psEnc->sShape; | 152     silk_shape_state_FIX *psShapeSt = &psEnc->sShape; | 
| 152     opus_int     k, i, nSamples, Qnrg, b_Q14, warping_Q16, scale = 0; | 153     opus_int     k, i, nSamples, Qnrg, b_Q14, warping_Q16, scale = 0; | 
| 153     opus_int32   SNR_adj_dB_Q7, HarmBoost_Q16, HarmShapeGain_Q16, Tilt_Q16, tmp3
     2; | 154     opus_int32   SNR_adj_dB_Q7, HarmBoost_Q16, HarmShapeGain_Q16, Tilt_Q16, tmp3
     2; | 
| 154     opus_int32   nrg, pre_nrg_Q30, log_energy_Q7, log_energy_prev_Q7, energy_var
     iation_Q7; | 155     opus_int32   nrg, pre_nrg_Q30, log_energy_Q7, log_energy_prev_Q7, energy_var
     iation_Q7; | 
| 155     opus_int32   delta_Q16, BWExp1_Q16, BWExp2_Q16, gain_mult_Q16, gain_add_Q16,
      strength_Q16, b_Q8; | 156     opus_int32   delta_Q16, BWExp1_Q16, BWExp2_Q16, gain_mult_Q16, gain_add_Q16,
      strength_Q16, b_Q8; | 
| 156     opus_int32   auto_corr[     MAX_SHAPE_LPC_ORDER + 1 ]; | 157     opus_int32   auto_corr[     MAX_SHAPE_LPC_ORDER + 1 ]; | 
| 157     opus_int32   refl_coef_Q16[ MAX_SHAPE_LPC_ORDER ]; | 158     opus_int32   refl_coef_Q16[ MAX_SHAPE_LPC_ORDER ]; | 
| 158     opus_int32   AR1_Q24[       MAX_SHAPE_LPC_ORDER ]; | 159     opus_int32   AR1_Q24[       MAX_SHAPE_LPC_ORDER ]; | 
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 274         silk_apply_sine_window( x_windowed + shift, x_ptr + shift, 2, slope_part
      ); | 275         silk_apply_sine_window( x_windowed + shift, x_ptr + shift, 2, slope_part
      ); | 
| 275 | 276 | 
| 276         /* Update pointer: next LPC analysis block */ | 277         /* Update pointer: next LPC analysis block */ | 
| 277         x_ptr += psEnc->sCmn.subfr_length; | 278         x_ptr += psEnc->sCmn.subfr_length; | 
| 278 | 279 | 
| 279         if( psEnc->sCmn.warping_Q16 > 0 ) { | 280         if( psEnc->sCmn.warping_Q16 > 0 ) { | 
| 280             /* Calculate warped auto correlation */ | 281             /* Calculate warped auto correlation */ | 
| 281             silk_warped_autocorrelation_FIX( auto_corr, &scale, x_windowed, warp
     ing_Q16, psEnc->sCmn.shapeWinLength, psEnc->sCmn.shapingLPCOrder ); | 282             silk_warped_autocorrelation_FIX( auto_corr, &scale, x_windowed, warp
     ing_Q16, psEnc->sCmn.shapeWinLength, psEnc->sCmn.shapingLPCOrder ); | 
| 282         } else { | 283         } else { | 
| 283             /* Calculate regular auto correlation */ | 284             /* Calculate regular auto correlation */ | 
| 284             silk_autocorr( auto_corr, &scale, x_windowed, psEnc->sCmn.shapeWinLe
     ngth, psEnc->sCmn.shapingLPCOrder + 1 ); | 285             silk_autocorr( auto_corr, &scale, x_windowed, psEnc->sCmn.shapeWinLe
     ngth, psEnc->sCmn.shapingLPCOrder + 1, arch ); | 
| 285         } | 286         } | 
| 286 | 287 | 
| 287         /* Add white noise, as a fraction of energy */ | 288         /* Add white noise, as a fraction of energy */ | 
| 288         auto_corr[0] = silk_ADD32( auto_corr[0], silk_max_32( silk_SMULWB( silk_
     RSHIFT( auto_corr[ 0 ], 4 ), | 289         auto_corr[0] = silk_ADD32( auto_corr[0], silk_max_32( silk_SMULWB( silk_
     RSHIFT( auto_corr[ 0 ], 4 ), | 
| 289             SILK_FIX_CONST( SHAPE_WHITE_NOISE_FRACTION, 20 ) ), 1 ) ); | 290             SILK_FIX_CONST( SHAPE_WHITE_NOISE_FRACTION, 20 ) ), 1 ) ); | 
| 290 | 291 | 
| 291         /* Calculate the reflection coefficients using schur */ | 292         /* Calculate the reflection coefficients using schur */ | 
| 292         nrg = silk_schur64( refl_coef_Q16, auto_corr, psEnc->sCmn.shapingLPCOrde
     r ); | 293         nrg = silk_schur64( refl_coef_Q16, auto_corr, psEnc->sCmn.shapingLPCOrde
     r ); | 
| 293         silk_assert( nrg >= 0 ); | 294         silk_assert( nrg >= 0 ); | 
| 294 | 295 | 
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 435             silk_SMLAWB( psShapeSt->HarmShapeGain_smth_Q16, HarmShapeGain_Q16 - 
     psShapeSt->HarmShapeGain_smth_Q16, SILK_FIX_CONST( SUBFR_SMTH_COEF, 16 ) ); | 436             silk_SMLAWB( psShapeSt->HarmShapeGain_smth_Q16, HarmShapeGain_Q16 - 
     psShapeSt->HarmShapeGain_smth_Q16, SILK_FIX_CONST( SUBFR_SMTH_COEF, 16 ) ); | 
| 436         psShapeSt->Tilt_smth_Q16 = | 437         psShapeSt->Tilt_smth_Q16 = | 
| 437             silk_SMLAWB( psShapeSt->Tilt_smth_Q16,          Tilt_Q16          - 
     psShapeSt->Tilt_smth_Q16,          SILK_FIX_CONST( SUBFR_SMTH_COEF, 16 ) ); | 438             silk_SMLAWB( psShapeSt->Tilt_smth_Q16,          Tilt_Q16          - 
     psShapeSt->Tilt_smth_Q16,          SILK_FIX_CONST( SUBFR_SMTH_COEF, 16 ) ); | 
| 438 | 439 | 
| 439         psEncCtrl->HarmBoost_Q14[ k ]     = ( opus_int )silk_RSHIFT_ROUND( psSha
     peSt->HarmBoost_smth_Q16,     2 ); | 440         psEncCtrl->HarmBoost_Q14[ k ]     = ( opus_int )silk_RSHIFT_ROUND( psSha
     peSt->HarmBoost_smth_Q16,     2 ); | 
| 440         psEncCtrl->HarmShapeGain_Q14[ k ] = ( opus_int )silk_RSHIFT_ROUND( psSha
     peSt->HarmShapeGain_smth_Q16, 2 ); | 441         psEncCtrl->HarmShapeGain_Q14[ k ] = ( opus_int )silk_RSHIFT_ROUND( psSha
     peSt->HarmShapeGain_smth_Q16, 2 ); | 
| 441         psEncCtrl->Tilt_Q14[ k ]          = ( opus_int )silk_RSHIFT_ROUND( psSha
     peSt->Tilt_smth_Q16,          2 ); | 442         psEncCtrl->Tilt_Q14[ k ]          = ( opus_int )silk_RSHIFT_ROUND( psSha
     peSt->Tilt_smth_Q16,          2 ); | 
| 442     } | 443     } | 
| 443     RESTORE_STACK; | 444     RESTORE_STACK; | 
| 444 } | 445 } | 
| OLD | NEW | 
|---|