blob: 1b82958883fcc0c1661386f5ab7f76328ea93dc9 [file] [log] [blame]
/*
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
/*
* initialize.c
*
* Internal initfunctions
*
*/
#include "modules/audio_coding/codecs/isac/fix/source/codec.h"
#include "modules/audio_coding/codecs/isac/fix/source/structs.h"
#include "modules/audio_coding/codecs/isac/fix/source/pitch_estimator.h"
void WebRtcIsacfix_InitMaskingEnc(MaskFiltstr_enc *maskdata) {
int k;
for (k = 0; k < WINLEN; k++) {
maskdata->DataBufferLoQ0[k] = (int16_t) 0;
maskdata->DataBufferHiQ0[k] = (int16_t) 0;
}
for (k = 0; k < ORDERLO+1; k++) {
maskdata->CorrBufLoQQ[k] = (int32_t) 0;
maskdata->CorrBufLoQdom[k] = 0;
maskdata->PreStateLoGQ15[k] = 0;
}
for (k = 0; k < ORDERHI+1; k++) {
maskdata->CorrBufHiQQ[k] = (int32_t) 0;
maskdata->CorrBufHiQdom[k] = 0;
maskdata->PreStateHiGQ15[k] = 0;
}
maskdata->OldEnergy = 10;
return;
}
void WebRtcIsacfix_InitMaskingDec(MaskFiltstr_dec *maskdata) {
int k;
for (k = 0; k < ORDERLO+1; k++)
{
maskdata->PostStateLoGQ0[k] = 0;
}
for (k = 0; k < ORDERHI+1; k++)
{
maskdata->PostStateHiGQ0[k] = 0;
}
maskdata->OldEnergy = 10;
return;
}
void WebRtcIsacfix_InitPreFilterbank(PreFiltBankstr *prefiltdata)
{
int k;
for (k = 0; k < QLOOKAHEAD; k++) {
prefiltdata->INLABUF1_fix[k] = 0;
prefiltdata->INLABUF2_fix[k] = 0;
}
for (k = 0; k < 2 * (QORDER - 1); k++) {
prefiltdata->INSTAT1_fix[k] = 0;
prefiltdata->INSTAT2_fix[k] = 0;
}
/* High pass filter states */
prefiltdata->HPstates_fix[0] = 0;
prefiltdata->HPstates_fix[1] = 0;
return;
}
void WebRtcIsacfix_InitPostFilterbank(PostFiltBankstr *postfiltdata)
{
int k;
for (k = 0; k < 2 * POSTQORDER; k++) {
postfiltdata->STATE_0_LOWER_fix[k] = 0;
postfiltdata->STATE_0_UPPER_fix[k] = 0;
}
/* High pass filter states */
postfiltdata->HPstates1_fix[0] = 0;
postfiltdata->HPstates1_fix[1] = 0;
postfiltdata->HPstates2_fix[0] = 0;
postfiltdata->HPstates2_fix[1] = 0;
return;
}
void WebRtcIsacfix_InitPitchFilter(PitchFiltstr *pitchfiltdata)
{
int k;
for (k = 0; k < PITCH_BUFFSIZE; k++)
pitchfiltdata->ubufQQ[k] = 0;
for (k = 0; k < (PITCH_DAMPORDER); k++)
pitchfiltdata->ystateQQ[k] = 0;
pitchfiltdata->oldlagQ7 = 6400; /* 50.0 in Q7 */
pitchfiltdata->oldgainQ12 = 0;
}
void WebRtcIsacfix_InitPitchAnalysis(PitchAnalysisStruct *State)
{
int k;
for (k = 0; k < PITCH_CORR_LEN2+PITCH_CORR_STEP2+PITCH_MAX_LAG/2-PITCH_FRAME_LEN/2+2; k++) {
State->dec_buffer16[k] = 0;
}
for (k = 0; k < 2 * ALLPASSSECTIONS + 1; k++) {
State->decimator_state32[k] = 0;
}
for (k = 0; k < QLOOKAHEAD; k++)
State->inbuf[k] = 0;
WebRtcIsacfix_InitPitchFilter(&(State->PFstr_wght));
WebRtcIsacfix_InitPitchFilter(&(State->PFstr));
}
void WebRtcIsacfix_InitPlc( PLCstr *State )
{
State->decayCoeffPriodic = WEBRTC_SPL_WORD16_MAX;
State->decayCoeffNoise = WEBRTC_SPL_WORD16_MAX;
State->used = PLC_WAS_USED;
WebRtcSpl_ZerosArrayW16(State->overlapLP, RECOVERY_OVERLAP);
WebRtcSpl_ZerosArrayW16(State->lofilt_coefQ15, ORDERLO);
WebRtcSpl_ZerosArrayW16(State->hifilt_coefQ15, ORDERHI );
State->AvgPitchGain_Q12 = 0;
State->lastPitchGain_Q12 = 0;
State->lastPitchLag_Q7 = 0;
State->gain_lo_hiQ17[0]=State->gain_lo_hiQ17[1] = 0;
WebRtcSpl_ZerosArrayW16(State->prevPitchInvIn, FRAMESAMPLES/2);
WebRtcSpl_ZerosArrayW16(State->prevPitchInvOut, PITCH_MAX_LAG + 10 );
WebRtcSpl_ZerosArrayW32(State->prevHP, PITCH_MAX_LAG + 10 );
State->pitchCycles = 0;
State->A = 0;
State->B = 0;
State->pitchIndex = 0;
State->stretchLag = 240;
State->seed = 4447;
}