| 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 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 if( gain_Q16 >= (1 << 21) || psCNG->CNG_smth_Gain_Q16 > (1 << 23) ) { | 131 if( gain_Q16 >= (1 << 21) || psCNG->CNG_smth_Gain_Q16 > (1 << 23) ) { |
| 132 gain_Q16 = silk_SMULTT( gain_Q16, gain_Q16 ); | 132 gain_Q16 = silk_SMULTT( gain_Q16, gain_Q16 ); |
| 133 gain_Q16 = silk_SUB_LSHIFT32(silk_SMULTT( psCNG->CNG_smth_Gain_Q16,
psCNG->CNG_smth_Gain_Q16 ), gain_Q16, 5 ); | 133 gain_Q16 = silk_SUB_LSHIFT32(silk_SMULTT( psCNG->CNG_smth_Gain_Q16,
psCNG->CNG_smth_Gain_Q16 ), gain_Q16, 5 ); |
| 134 gain_Q16 = silk_LSHIFT32( silk_SQRT_APPROX( gain_Q16 ), 16 ); | 134 gain_Q16 = silk_LSHIFT32( silk_SQRT_APPROX( gain_Q16 ), 16 ); |
| 135 } else { | 135 } else { |
| 136 gain_Q16 = silk_SMULWW( gain_Q16, gain_Q16 ); | 136 gain_Q16 = silk_SMULWW( gain_Q16, gain_Q16 ); |
| 137 gain_Q16 = silk_SUB_LSHIFT32(silk_SMULWW( psCNG->CNG_smth_Gain_Q16,
psCNG->CNG_smth_Gain_Q16 ), gain_Q16, 5 ); | 137 gain_Q16 = silk_SUB_LSHIFT32(silk_SMULWW( psCNG->CNG_smth_Gain_Q16,
psCNG->CNG_smth_Gain_Q16 ), gain_Q16, 5 ); |
| 138 gain_Q16 = silk_LSHIFT32( silk_SQRT_APPROX( gain_Q16 ), 8 ); | 138 gain_Q16 = silk_LSHIFT32( silk_SQRT_APPROX( gain_Q16 ), 8 ); |
| 139 } | 139 } |
| 140 gain_Q10 = silk_RSHIFT( gain_Q16, 6 ); | 140 gain_Q10 = silk_RSHIFT( gain_Q16, 6 ); |
| 141 | 141 |
| 142 silk_CNG_exc( CNG_sig_Q14 + MAX_LPC_ORDER, psCNG->CNG_exc_buf_Q14, lengt
h, &psCNG->rand_seed ); | 142 silk_CNG_exc( CNG_sig_Q14 + MAX_LPC_ORDER, psCNG->CNG_exc_buf_Q14, lengt
h, &psCNG->rand_seed ); |
| 143 | 143 |
| 144 /* Convert CNG NLSF to filter representation */ | 144 /* Convert CNG NLSF to filter representation */ |
| 145 silk_NLSF2A( A_Q12, psCNG->CNG_smth_NLSF_Q15, psDec->LPC_order ); | 145 silk_NLSF2A( A_Q12, psCNG->CNG_smth_NLSF_Q15, psDec->LPC_order, psDec->a
rch ); |
| 146 | 146 |
| 147 /* Generate CNG signal, by synthesis filtering */ | 147 /* Generate CNG signal, by synthesis filtering */ |
| 148 silk_memcpy( CNG_sig_Q14, psCNG->CNG_synth_state, MAX_LPC_ORDER * sizeof
( opus_int32 ) ); | 148 silk_memcpy( CNG_sig_Q14, psCNG->CNG_synth_state, MAX_LPC_ORDER * sizeof
( opus_int32 ) ); |
| 149 for( i = 0; i < length; i++ ) { | 149 for( i = 0; i < length; i++ ) { |
| 150 silk_assert( psDec->LPC_order == 10 || psDec->LPC_order == 16 ); | 150 silk_assert( psDec->LPC_order == 10 || psDec->LPC_order == 16 ); |
| 151 /* Avoids introducing a bias because silk_SMLAWB() always rounds to
-inf */ | 151 /* Avoids introducing a bias because silk_SMLAWB() always rounds to
-inf */ |
| 152 LPC_pred_Q10 = silk_RSHIFT( psDec->LPC_order, 1 ); | 152 LPC_pred_Q10 = silk_RSHIFT( psDec->LPC_order, 1 ); |
| 153 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 1 ], A_Q12[ 0 ] ); | 153 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 1 ], A_Q12[ 0 ] ); |
| 154 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 2 ], A_Q12[ 1 ] ); | 154 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 2 ], A_Q12[ 1 ] ); |
| 155 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 3 ], A_Q12[ 2 ] ); | 155 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 3 ], A_Q12[ 2 ] ); |
| 156 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 4 ], A_Q12[ 3 ] ); | 156 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 4 ], A_Q12[ 3 ] ); |
| 157 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 5 ], A_Q12[ 4 ] ); | 157 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 5 ], A_Q12[ 4 ] ); |
| 158 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 6 ], A_Q12[ 5 ] ); | 158 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 6 ], A_Q12[ 5 ] ); |
| 159 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 7 ], A_Q12[ 6 ] ); | 159 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 7 ], A_Q12[ 6 ] ); |
| 160 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 8 ], A_Q12[ 7 ] ); | 160 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 8 ], A_Q12[ 7 ] ); |
| 161 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 9 ], A_Q12[ 8 ] ); | 161 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 9 ], A_Q12[ 8 ] ); |
| 162 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 10 ], A_Q12[ 9 ] ); | 162 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_ORDER
+ i - 10 ], A_Q12[ 9 ] ); |
| 163 if( psDec->LPC_order == 16 ) { | 163 if( psDec->LPC_order == 16 ) { |
| 164 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_O
RDER + i - 11 ], A_Q12[ 10 ] ); | 164 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_O
RDER + i - 11 ], A_Q12[ 10 ] ); |
| 165 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_O
RDER + i - 12 ], A_Q12[ 11 ] ); | 165 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_O
RDER + i - 12 ], A_Q12[ 11 ] ); |
| 166 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_O
RDER + i - 13 ], A_Q12[ 12 ] ); | 166 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_O
RDER + i - 13 ], A_Q12[ 12 ] ); |
| 167 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_O
RDER + i - 14 ], A_Q12[ 13 ] ); | 167 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_O
RDER + i - 14 ], A_Q12[ 13 ] ); |
| 168 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_O
RDER + i - 15 ], A_Q12[ 14 ] ); | 168 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_O
RDER + i - 15 ], A_Q12[ 14 ] ); |
| 169 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_O
RDER + i - 16 ], A_Q12[ 15 ] ); | 169 LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, CNG_sig_Q14[ MAX_LPC_O
RDER + i - 16 ], A_Q12[ 15 ] ); |
| 170 } | 170 } |
| 171 | 171 |
| 172 /* Update states */ | 172 /* Update states */ |
| 173 CNG_sig_Q14[ MAX_LPC_ORDER + i ] = silk_ADD_SAT32( CNG_sig_Q14[ MAX_
LPC_ORDER + i ], silk_LSHIFT_SAT32( LPC_pred_Q10, 4 ) ); | 173 CNG_sig_Q14[ MAX_LPC_ORDER + i ] = silk_ADD_SAT32( CNG_sig_Q14[ MAX_
LPC_ORDER + i ], silk_LSHIFT_SAT32( LPC_pred_Q10, 4 ) ); |
| 174 | 174 |
| 175 /* Scale with Gain and add to input signal */ | 175 /* Scale with Gain and add to input signal */ |
| 176 frame[ i ] = (opus_int16)silk_ADD_SAT16( frame[ i ], silk_SAT16( sil
k_RSHIFT_ROUND( silk_SMULWW( CNG_sig_Q14[ MAX_LPC_ORDER + i ], gain_Q10 ), 8 ) )
); | 176 frame[ i ] = (opus_int16)silk_ADD_SAT16( frame[ i ], silk_SAT16( sil
k_RSHIFT_ROUND( silk_SMULWW( CNG_sig_Q14[ MAX_LPC_ORDER + i ], gain_Q10 ), 8 ) )
); |
| 177 | 177 |
| 178 } | 178 } |
| 179 silk_memcpy( psCNG->CNG_synth_state, &CNG_sig_Q14[ length ], MAX_LPC_ORD
ER * sizeof( opus_int32 ) ); | 179 silk_memcpy( psCNG->CNG_synth_state, &CNG_sig_Q14[ length ], MAX_LPC_ORD
ER * sizeof( opus_int32 ) ); |
| 180 } else { | 180 } else { |
| 181 silk_memset( psCNG->CNG_synth_state, 0, psDec->LPC_order * sizeof( opus
_int32 ) ); | 181 silk_memset( psCNG->CNG_synth_state, 0, psDec->LPC_order * sizeof( opus
_int32 ) ); |
| 182 } | 182 } |
| 183 RESTORE_STACK; | 183 RESTORE_STACK; |
| 184 } | 184 } |
| OLD | NEW |