1 /* 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 /* 12 * initialize.c 13 * 14 * Internal initfunctions 15 * 16 */ 17 18 #include "codec.h" 19 #include "structs.h" 20 #include "pitch_estimator.h" 21 22 23 void WebRtcIsacfix_InitMaskingEnc(MaskFiltstr_enc *maskdata) { 24 25 int k; 26 27 for (k = 0; k < WINLEN; k++) { 28 maskdata->DataBufferLoQ0[k] = (int16_t) 0; 29 maskdata->DataBufferHiQ0[k] = (int16_t) 0; 30 } 31 for (k = 0; k < ORDERLO+1; k++) { 32 maskdata->CorrBufLoQQ[k] = (int32_t) 0; 33 maskdata->CorrBufLoQdom[k] = 0; 34 35 maskdata->PreStateLoGQ15[k] = 0; 36 37 } 38 for (k = 0; k < ORDERHI+1; k++) { 39 maskdata->CorrBufHiQQ[k] = (int32_t) 0; 40 maskdata->CorrBufHiQdom[k] = 0; 41 maskdata->PreStateHiGQ15[k] = 0; 42 } 43 44 maskdata->OldEnergy = 10; 45 46 return; 47 } 48 49 void WebRtcIsacfix_InitMaskingDec(MaskFiltstr_dec *maskdata) { 50 51 int k; 52 53 for (k = 0; k < ORDERLO+1; k++) 54 { 55 maskdata->PostStateLoGQ0[k] = 0; 56 } 57 for (k = 0; k < ORDERHI+1; k++) 58 { 59 maskdata->PostStateHiGQ0[k] = 0; 60 } 61 62 maskdata->OldEnergy = 10; 63 64 return; 65 } 66 67 68 69 70 71 72 73 void WebRtcIsacfix_InitPreFilterbank(PreFiltBankstr *prefiltdata) 74 { 75 int k; 76 77 for (k = 0; k < QLOOKAHEAD; k++) { 78 prefiltdata->INLABUF1_fix[k] = 0; 79 prefiltdata->INLABUF2_fix[k] = 0; 80 } 81 for (k = 0; k < WEBRTC_SPL_MUL_16_16(2,(QORDER-1)); k++) { 82 83 prefiltdata->INSTAT1_fix[k] = 0; 84 prefiltdata->INSTAT2_fix[k] = 0; 85 } 86 87 /* High pass filter states */ 88 prefiltdata->HPstates_fix[0] = 0; 89 prefiltdata->HPstates_fix[1] = 0; 90 91 return; 92 } 93 94 void WebRtcIsacfix_InitPostFilterbank(PostFiltBankstr *postfiltdata) 95 { 96 int k; 97 98 for (k = 0; k < WEBRTC_SPL_MUL_16_16(2, POSTQORDER); k++) { 99 100 postfiltdata->STATE_0_LOWER_fix[k] = 0; 101 postfiltdata->STATE_0_UPPER_fix[k] = 0; 102 } 103 104 /* High pass filter states */ 105 106 postfiltdata->HPstates1_fix[0] = 0; 107 postfiltdata->HPstates1_fix[1] = 0; 108 109 postfiltdata->HPstates2_fix[0] = 0; 110 postfiltdata->HPstates2_fix[1] = 0; 111 112 return; 113 } 114 115 116 void WebRtcIsacfix_InitPitchFilter(PitchFiltstr *pitchfiltdata) 117 { 118 int k; 119 120 for (k = 0; k < PITCH_BUFFSIZE; k++) 121 pitchfiltdata->ubufQQ[k] = 0; 122 for (k = 0; k < (PITCH_DAMPORDER); k++) 123 pitchfiltdata->ystateQQ[k] = 0; 124 125 pitchfiltdata->oldlagQ7 = 6400; /* 50.0 in Q7 */ 126 pitchfiltdata->oldgainQ12 = 0; 127 } 128 129 void WebRtcIsacfix_InitPitchAnalysis(PitchAnalysisStruct *State) 130 { 131 int k; 132 133 for (k = 0; k < PITCH_CORR_LEN2+PITCH_CORR_STEP2+PITCH_MAX_LAG/2-PITCH_FRAME_LEN/2+2; k++) { 134 State->dec_buffer16[k] = 0; 135 } 136 for (k = 0; k < WEBRTC_SPL_MUL_16_16(2, ALLPASSSECTIONS)+1; k++) { 137 State->decimator_state32[k] = 0; 138 } 139 140 for (k = 0; k < QLOOKAHEAD; k++) 141 State->inbuf[k] = 0; 142 143 WebRtcIsacfix_InitPitchFilter(&(State->PFstr_wght)); 144 145 WebRtcIsacfix_InitPitchFilter(&(State->PFstr)); 146 } 147 148 149 void WebRtcIsacfix_InitPlc( PLCstr *State ) 150 { 151 State->decayCoeffPriodic = WEBRTC_SPL_WORD16_MAX; 152 State->decayCoeffNoise = WEBRTC_SPL_WORD16_MAX; 153 154 State->used = PLC_WAS_USED; 155 156 WebRtcSpl_ZerosArrayW16(State->overlapLP, RECOVERY_OVERLAP); 157 WebRtcSpl_ZerosArrayW16(State->lofilt_coefQ15, ORDERLO); 158 WebRtcSpl_ZerosArrayW16(State->hifilt_coefQ15, ORDERHI ); 159 160 State->AvgPitchGain_Q12 = 0; 161 State->lastPitchGain_Q12 = 0; 162 State->lastPitchLag_Q7 = 0; 163 State->gain_lo_hiQ17[0]=State->gain_lo_hiQ17[1] = 0; 164 WebRtcSpl_ZerosArrayW16(State->prevPitchInvIn, FRAMESAMPLES/2); 165 WebRtcSpl_ZerosArrayW16(State->prevPitchInvOut, PITCH_MAX_LAG + 10 ); 166 WebRtcSpl_ZerosArrayW32(State->prevHP, PITCH_MAX_LAG + 10 ); 167 State->pitchCycles = 0; 168 State->A = 0; 169 State->B = 0; 170 State->pitchIndex = 0; 171 State->stretchLag = 240; 172 State->seed = 4447; 173 174 175 } 176