Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(923)

Side by Side Diff: third_party/opus/src/silk/fixed/find_pitch_lags_FIX.c

Issue 2962373002: [Opus] Update to v1.2.1 (Closed)
Patch Set: Pre-increment instead of post-increment Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 26 matching lines...) Expand all
37 void silk_find_pitch_lags_FIX( 37 void silk_find_pitch_lags_FIX(
38 silk_encoder_state_FIX *psEnc, /* I /O encoder state */ 38 silk_encoder_state_FIX *psEnc, /* I /O encoder state */
39 silk_encoder_control_FIX *psEncCtrl, /* I /O encoder control */ 39 silk_encoder_control_FIX *psEncCtrl, /* I /O encoder control */
40 opus_int16 res[], /* O residual */ 40 opus_int16 res[], /* O residual */
41 const opus_int16 x[], /* I Speech signal */ 41 const opus_int16 x[], /* I Speech signal */
42 int arch /* I Run-time architecture */ 42 int arch /* I Run-time architecture */
43 ) 43 )
44 { 44 {
45 opus_int buf_len, i, scale; 45 opus_int buf_len, i, scale;
46 opus_int32 thrhld_Q13, res_nrg; 46 opus_int32 thrhld_Q13, res_nrg;
47 const opus_int16 *x_buf, *x_buf_ptr; 47 const opus_int16 *x_ptr;
48 VARDECL( opus_int16, Wsig ); 48 VARDECL( opus_int16, Wsig );
49 opus_int16 *Wsig_ptr; 49 opus_int16 *Wsig_ptr;
50 opus_int32 auto_corr[ MAX_FIND_PITCH_LPC_ORDER + 1 ]; 50 opus_int32 auto_corr[ MAX_FIND_PITCH_LPC_ORDER + 1 ];
51 opus_int16 rc_Q15[ MAX_FIND_PITCH_LPC_ORDER ]; 51 opus_int16 rc_Q15[ MAX_FIND_PITCH_LPC_ORDER ];
52 opus_int32 A_Q24[ MAX_FIND_PITCH_LPC_ORDER ]; 52 opus_int32 A_Q24[ MAX_FIND_PITCH_LPC_ORDER ];
53 opus_int16 A_Q12[ MAX_FIND_PITCH_LPC_ORDER ]; 53 opus_int16 A_Q12[ MAX_FIND_PITCH_LPC_ORDER ];
54 SAVE_STACK; 54 SAVE_STACK;
55 55
56 /******************************************/ 56 /******************************************/
57 /* Set up buffer lengths etc based on Fs */ 57 /* Set up buffer lengths etc based on Fs */
58 /******************************************/ 58 /******************************************/
59 buf_len = psEnc->sCmn.la_pitch + psEnc->sCmn.frame_length + psEnc->sCmn.ltp_ mem_length; 59 buf_len = psEnc->sCmn.la_pitch + psEnc->sCmn.frame_length + psEnc->sCmn.ltp_ mem_length;
60 60
61 /* Safety check */ 61 /* Safety check */
62 silk_assert( buf_len >= psEnc->sCmn.pitch_LPC_win_length ); 62 silk_assert( buf_len >= psEnc->sCmn.pitch_LPC_win_length );
63 63
64 x_buf = x - psEnc->sCmn.ltp_mem_length;
65
66 /*************************************/ 64 /*************************************/
67 /* Estimate LPC AR coefficients */ 65 /* Estimate LPC AR coefficients */
68 /*************************************/ 66 /*************************************/
69 67
70 /* Calculate windowed signal */ 68 /* Calculate windowed signal */
71 69
72 ALLOC( Wsig, psEnc->sCmn.pitch_LPC_win_length, opus_int16 ); 70 ALLOC( Wsig, psEnc->sCmn.pitch_LPC_win_length, opus_int16 );
73 71
74 /* First LA_LTP samples */ 72 /* First LA_LTP samples */
75 x_buf_ptr = x_buf + buf_len - psEnc->sCmn.pitch_LPC_win_length; 73 x_ptr = x + buf_len - psEnc->sCmn.pitch_LPC_win_length;
76 Wsig_ptr = Wsig; 74 Wsig_ptr = Wsig;
77 silk_apply_sine_window( Wsig_ptr, x_buf_ptr, 1, psEnc->sCmn.la_pitch ); 75 silk_apply_sine_window( Wsig_ptr, x_ptr, 1, psEnc->sCmn.la_pitch );
78 76
79 /* Middle un - windowed samples */ 77 /* Middle un - windowed samples */
80 Wsig_ptr += psEnc->sCmn.la_pitch; 78 Wsig_ptr += psEnc->sCmn.la_pitch;
81 x_buf_ptr += psEnc->sCmn.la_pitch; 79 x_ptr += psEnc->sCmn.la_pitch;
82 silk_memcpy( Wsig_ptr, x_buf_ptr, ( psEnc->sCmn.pitch_LPC_win_length - silk_ LSHIFT( psEnc->sCmn.la_pitch, 1 ) ) * sizeof( opus_int16 ) ); 80 silk_memcpy( Wsig_ptr, x_ptr, ( psEnc->sCmn.pitch_LPC_win_length - silk_LSHI FT( psEnc->sCmn.la_pitch, 1 ) ) * sizeof( opus_int16 ) );
83 81
84 /* Last LA_LTP samples */ 82 /* Last LA_LTP samples */
85 Wsig_ptr += psEnc->sCmn.pitch_LPC_win_length - silk_LSHIFT( psEnc->sCmn.la_ pitch, 1 ); 83 Wsig_ptr += psEnc->sCmn.pitch_LPC_win_length - silk_LSHIFT( psEnc->sCmn.la_ pitch, 1 );
86 x_buf_ptr += psEnc->sCmn.pitch_LPC_win_length - silk_LSHIFT( psEnc->sCmn.la_ pitch, 1 ); 84 x_ptr += psEnc->sCmn.pitch_LPC_win_length - silk_LSHIFT( psEnc->sCmn.la_pitc h, 1 );
87 silk_apply_sine_window( Wsig_ptr, x_buf_ptr, 2, psEnc->sCmn.la_pitch ); 85 silk_apply_sine_window( Wsig_ptr, x_ptr, 2, psEnc->sCmn.la_pitch );
88 86
89 /* Calculate autocorrelation sequence */ 87 /* Calculate autocorrelation sequence */
90 silk_autocorr( auto_corr, &scale, Wsig, psEnc->sCmn.pitch_LPC_win_length, ps Enc->sCmn.pitchEstimationLPCOrder + 1, arch ); 88 silk_autocorr( auto_corr, &scale, Wsig, psEnc->sCmn.pitch_LPC_win_length, ps Enc->sCmn.pitchEstimationLPCOrder + 1, arch );
91 89
92 /* Add white noise, as fraction of energy */ 90 /* Add white noise, as fraction of energy */
93 auto_corr[ 0 ] = silk_SMLAWB( auto_corr[ 0 ], auto_corr[ 0 ], SILK_FIX_CONST ( FIND_PITCH_WHITE_NOISE_FRACTION, 16 ) ) + 1; 91 auto_corr[ 0 ] = silk_SMLAWB( auto_corr[ 0 ], auto_corr[ 0 ], SILK_FIX_CONST ( FIND_PITCH_WHITE_NOISE_FRACTION, 16 ) ) + 1;
94 92
95 /* Calculate the reflection coefficients using schur */ 93 /* Calculate the reflection coefficients using schur */
96 res_nrg = silk_schur( rc_Q15, auto_corr, psEnc->sCmn.pitchEstimationLPCOrder ); 94 res_nrg = silk_schur( rc_Q15, auto_corr, psEnc->sCmn.pitchEstimationLPCOrder );
97 95
98 /* Prediction gain */ 96 /* Prediction gain */
99 psEncCtrl->predGain_Q16 = silk_DIV32_varQ( auto_corr[ 0 ], silk_max_int( res _nrg, 1 ), 16 ); 97 psEncCtrl->predGain_Q16 = silk_DIV32_varQ( auto_corr[ 0 ], silk_max_int( res _nrg, 1 ), 16 );
100 98
101 /* Convert reflection coefficients to prediction coefficients */ 99 /* Convert reflection coefficients to prediction coefficients */
102 silk_k2a( A_Q24, rc_Q15, psEnc->sCmn.pitchEstimationLPCOrder ); 100 silk_k2a( A_Q24, rc_Q15, psEnc->sCmn.pitchEstimationLPCOrder );
103 101
104 /* Convert From 32 bit Q24 to 16 bit Q12 coefs */ 102 /* Convert From 32 bit Q24 to 16 bit Q12 coefs */
105 for( i = 0; i < psEnc->sCmn.pitchEstimationLPCOrder; i++ ) { 103 for( i = 0; i < psEnc->sCmn.pitchEstimationLPCOrder; i++ ) {
106 A_Q12[ i ] = (opus_int16)silk_SAT16( silk_RSHIFT( A_Q24[ i ], 12 ) ); 104 A_Q12[ i ] = (opus_int16)silk_SAT16( silk_RSHIFT( A_Q24[ i ], 12 ) );
107 } 105 }
108 106
109 /* Do BWE */ 107 /* Do BWE */
110 silk_bwexpander( A_Q12, psEnc->sCmn.pitchEstimationLPCOrder, SILK_FIX_CONST( FIND_PITCH_BANDWIDTH_EXPANSION, 16 ) ); 108 silk_bwexpander( A_Q12, psEnc->sCmn.pitchEstimationLPCOrder, SILK_FIX_CONST( FIND_PITCH_BANDWIDTH_EXPANSION, 16 ) );
111 109
112 /*****************************************/ 110 /*****************************************/
113 /* LPC analysis filtering */ 111 /* LPC analysis filtering */
114 /*****************************************/ 112 /*****************************************/
115 silk_LPC_analysis_filter( res, x_buf, A_Q12, buf_len, psEnc->sCmn.pitchEstim ationLPCOrder, psEnc->sCmn.arch ); 113 silk_LPC_analysis_filter( res, x, A_Q12, buf_len, psEnc->sCmn.pitchEstimatio nLPCOrder, psEnc->sCmn.arch );
116 114
117 if( psEnc->sCmn.indices.signalType != TYPE_NO_VOICE_ACTIVITY && psEnc->sCmn. first_frame_after_reset == 0 ) { 115 if( psEnc->sCmn.indices.signalType != TYPE_NO_VOICE_ACTIVITY && psEnc->sCmn. first_frame_after_reset == 0 ) {
118 /* Threshold for pitch estimator */ 116 /* Threshold for pitch estimator */
119 thrhld_Q13 = SILK_FIX_CONST( 0.6, 13 ); 117 thrhld_Q13 = SILK_FIX_CONST( 0.6, 13 );
120 thrhld_Q13 = silk_SMLABB( thrhld_Q13, SILK_FIX_CONST( -0.004, 13 ), psEn c->sCmn.pitchEstimationLPCOrder ); 118 thrhld_Q13 = silk_SMLABB( thrhld_Q13, SILK_FIX_CONST( -0.004, 13 ), psEn c->sCmn.pitchEstimationLPCOrder );
121 thrhld_Q13 = silk_SMLAWB( thrhld_Q13, SILK_FIX_CONST( -0.1, 21 ), psE nc->sCmn.speech_activity_Q8 ); 119 thrhld_Q13 = silk_SMLAWB( thrhld_Q13, SILK_FIX_CONST( -0.1, 21 ), psE nc->sCmn.speech_activity_Q8 );
122 thrhld_Q13 = silk_SMLABB( thrhld_Q13, SILK_FIX_CONST( -0.15, 13 ), silk _RSHIFT( psEnc->sCmn.prevSignalType, 1 ) ); 120 thrhld_Q13 = silk_SMLABB( thrhld_Q13, SILK_FIX_CONST( -0.15, 13 ), silk _RSHIFT( psEnc->sCmn.prevSignalType, 1 ) );
123 thrhld_Q13 = silk_SMLAWB( thrhld_Q13, SILK_FIX_CONST( -0.1, 14 ), psEn c->sCmn.input_tilt_Q15 ); 121 thrhld_Q13 = silk_SMLAWB( thrhld_Q13, SILK_FIX_CONST( -0.1, 14 ), psEn c->sCmn.input_tilt_Q15 );
124 thrhld_Q13 = silk_SAT16( thrhld_Q13 ); 122 thrhld_Q13 = silk_SAT16( thrhld_Q13 );
125 123
(...skipping 10 matching lines...) Expand all
136 psEnc->sCmn.indices.signalType = TYPE_UNVOICED; 134 psEnc->sCmn.indices.signalType = TYPE_UNVOICED;
137 } 135 }
138 } else { 136 } else {
139 silk_memset( psEncCtrl->pitchL, 0, sizeof( psEncCtrl->pitchL ) ); 137 silk_memset( psEncCtrl->pitchL, 0, sizeof( psEncCtrl->pitchL ) );
140 psEnc->sCmn.indices.lagIndex = 0; 138 psEnc->sCmn.indices.lagIndex = 0;
141 psEnc->sCmn.indices.contourIndex = 0; 139 psEnc->sCmn.indices.contourIndex = 0;
142 psEnc->LTPCorr_Q15 = 0; 140 psEnc->LTPCorr_Q15 = 0;
143 } 141 }
144 RESTORE_STACK; 142 RESTORE_STACK;
145 } 143 }
OLDNEW
« no previous file with comments | « third_party/opus/src/silk/fixed/find_LTP_FIX.c ('k') | third_party/opus/src/silk/fixed/find_pred_coefs_FIX.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698