| 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 12 matching lines...) Expand all Loading... |
| 23 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | 23 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| 24 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | 24 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| 25 POSSIBILITY OF SUCH DAMAGE. | 25 POSSIBILITY OF SUCH DAMAGE. |
| 26 ***********************************************************************/ | 26 ***********************************************************************/ |
| 27 | 27 |
| 28 #ifdef HAVE_CONFIG_H | 28 #ifdef HAVE_CONFIG_H |
| 29 #include "config.h" | 29 #include "config.h" |
| 30 #endif | 30 #endif |
| 31 | 31 |
| 32 #include "main.h" | 32 #include "main.h" |
| 33 #include "stack_alloc.h" |
| 33 #include "PLC.h" | 34 #include "PLC.h" |
| 34 | 35 |
| 35 #define NB_ATT 2 | 36 #define NB_ATT 2 |
| 36 static const opus_int16 HARM_ATT_Q15[NB_ATT] = { 32440, 31130 }; /*
0.99, 0.95 */ | 37 static const opus_int16 HARM_ATT_Q15[NB_ATT] = { 32440, 31130 }; /*
0.99, 0.95 */ |
| 37 static const opus_int16 PLC_RAND_ATTENUATE_V_Q15[NB_ATT] = { 31130, 26214 }; /*
0.95, 0.8 */ | 38 static const opus_int16 PLC_RAND_ATTENUATE_V_Q15[NB_ATT] = { 31130, 26214 }; /*
0.95, 0.8 */ |
| 38 static const opus_int16 PLC_RAND_ATTENUATE_UV_Q15[NB_ATT] = { 32440, 29491 }; /*
0.99, 0.9 */ | 39 static const opus_int16 PLC_RAND_ATTENUATE_UV_Q15[NB_ATT] = { 32440, 29491 }; /*
0.99, 0.9 */ |
| 39 | 40 |
| 40 static inline void silk_PLC_update( | 41 static inline void silk_PLC_update( |
| 41 silk_decoder_state *psDec, /* I/O Decoder state
*/ | 42 silk_decoder_state *psDec, /* I/O Decoder state
*/ |
| 42 silk_decoder_control *psDecCtrl /* I/O Decoder contr
ol */ | 43 silk_decoder_control *psDecCtrl /* I/O Decoder contr
ol */ |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 ) | 172 ) |
| 172 { | 173 { |
| 173 opus_int i, j, k; | 174 opus_int i, j, k; |
| 174 opus_int lag, idx, sLTP_buf_idx, shift1, shift2; | 175 opus_int lag, idx, sLTP_buf_idx, shift1, shift2; |
| 175 opus_int32 rand_seed, harm_Gain_Q15, rand_Gain_Q15, inv_gain_Q30; | 176 opus_int32 rand_seed, harm_Gain_Q15, rand_Gain_Q15, inv_gain_Q30; |
| 176 opus_int32 energy1, energy2, *rand_ptr, *pred_lag_ptr; | 177 opus_int32 energy1, energy2, *rand_ptr, *pred_lag_ptr; |
| 177 opus_int32 LPC_pred_Q10, LTP_pred_Q12; | 178 opus_int32 LPC_pred_Q10, LTP_pred_Q12; |
| 178 opus_int16 rand_scale_Q14; | 179 opus_int16 rand_scale_Q14; |
| 179 opus_int16 *B_Q14, *exc_buf_ptr; | 180 opus_int16 *B_Q14, *exc_buf_ptr; |
| 180 opus_int32 *sLPC_Q14_ptr; | 181 opus_int32 *sLPC_Q14_ptr; |
| 181 opus_int16 exc_buf[ 2 * MAX_SUB_FRAME_LENGTH ]; | 182 VARDECL( opus_int16, exc_buf ); |
| 182 opus_int16 A_Q12[ MAX_LPC_ORDER ]; | 183 opus_int16 A_Q12[ MAX_LPC_ORDER ]; |
| 183 opus_int16 sLTP[ MAX_FRAME_LENGTH ]; | 184 VARDECL( opus_int16, sLTP ); |
| 184 opus_int32 sLTP_Q14[ 2 * MAX_FRAME_LENGTH ]; | 185 VARDECL( opus_int32, sLTP_Q14 ); |
| 185 silk_PLC_struct *psPLC = &psDec->sPLC; | 186 silk_PLC_struct *psPLC = &psDec->sPLC; |
| 186 opus_int32 prevGain_Q10[2]; | 187 opus_int32 prevGain_Q10[2]; |
| 188 SAVE_STACK; |
| 189 |
| 190 ALLOC( exc_buf, 2*psPLC->subfr_length, opus_int16 ); |
| 191 ALLOC( sLTP, psDec->ltp_mem_length, opus_int16 ); |
| 192 ALLOC( sLTP_Q14, psDec->ltp_mem_length + psDec->frame_length, opus_int32 ); |
| 187 | 193 |
| 188 prevGain_Q10[0] = silk_RSHIFT( psPLC->prevGain_Q16[ 0 ], 6); | 194 prevGain_Q10[0] = silk_RSHIFT( psPLC->prevGain_Q16[ 0 ], 6); |
| 189 prevGain_Q10[1] = silk_RSHIFT( psPLC->prevGain_Q16[ 1 ], 6); | 195 prevGain_Q10[1] = silk_RSHIFT( psPLC->prevGain_Q16[ 1 ], 6); |
| 190 | 196 |
| 191 if( psDec->first_frame_after_reset ) { | 197 if( psDec->first_frame_after_reset ) { |
| 192 silk_memset( psPLC->prevLPC_Q12, 0, sizeof( psPLC->prevLPC_Q12 ) ); | 198 silk_memset( psPLC->prevLPC_Q12, 0, sizeof( psPLC->prevLPC_Q12 ) ); |
| 193 } | 199 } |
| 194 | 200 |
| 195 /* Find random noise component */ | 201 /* Find random noise component */ |
| 196 /* Scale previous excitation signal */ | 202 /* Scale previous excitation signal */ |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 silk_memcpy( psDec->sLPC_Q14_buf, &sLPC_Q14_ptr[ psDec->frame_length ], MAX_
LPC_ORDER * sizeof( opus_int32 ) ); | 353 silk_memcpy( psDec->sLPC_Q14_buf, &sLPC_Q14_ptr[ psDec->frame_length ], MAX_
LPC_ORDER * sizeof( opus_int32 ) ); |
| 348 | 354 |
| 349 /**************************************/ | 355 /**************************************/ |
| 350 /* Update states */ | 356 /* Update states */ |
| 351 /**************************************/ | 357 /**************************************/ |
| 352 psPLC->rand_seed = rand_seed; | 358 psPLC->rand_seed = rand_seed; |
| 353 psPLC->randScale_Q14 = rand_scale_Q14; | 359 psPLC->randScale_Q14 = rand_scale_Q14; |
| 354 for( i = 0; i < MAX_NB_SUBFR; i++ ) { | 360 for( i = 0; i < MAX_NB_SUBFR; i++ ) { |
| 355 psDecCtrl->pitchL[ i ] = lag; | 361 psDecCtrl->pitchL[ i ] = lag; |
| 356 } | 362 } |
| 363 RESTORE_STACK; |
| 357 } | 364 } |
| 358 | 365 |
| 359 /* Glues concealed frames with new good recieved frames */ | 366 /* Glues concealed frames with new good received frames */ |
| 360 void silk_PLC_glue_frames( | 367 void silk_PLC_glue_frames( |
| 361 silk_decoder_state *psDec, /* I/O decoder state
*/ | 368 silk_decoder_state *psDec, /* I/O decoder state
*/ |
| 362 opus_int16 frame[], /* I/O signal
*/ | 369 opus_int16 frame[], /* I/O signal
*/ |
| 363 opus_int length /* I length of signa
l */ | 370 opus_int length /* I length of signa
l */ |
| 364 ) | 371 ) |
| 365 { | 372 { |
| 366 opus_int i, energy_shift; | 373 opus_int i, energy_shift; |
| 367 opus_int32 energy; | 374 opus_int32 energy; |
| 368 silk_PLC_struct *psPLC; | 375 silk_PLC_struct *psPLC; |
| 369 psPLC = &psDec->sPLC; | 376 psPLC = &psDec->sPLC; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 gain_Q16 += slope_Q16; | 414 gain_Q16 += slope_Q16; |
| 408 if( gain_Q16 > (opus_int32)1 << 16 ) { | 415 if( gain_Q16 > (opus_int32)1 << 16 ) { |
| 409 break; | 416 break; |
| 410 } | 417 } |
| 411 } | 418 } |
| 412 } | 419 } |
| 413 } | 420 } |
| 414 psPLC->last_frame_lost = 0; | 421 psPLC->last_frame_lost = 0; |
| 415 } | 422 } |
| 416 } | 423 } |
| OLD | NEW |