You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

146 lines
7.8 KiB

/*
typedef.h
Copyright (C) 2011 Belledonne Communications, Grenoble, France
Author : Johan Pascal
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef TYPEDEF_H
#define TYPEDEF_H
#include <stdint.h>
#include "codecParameters.h"
#include "bcg729/encoder.h"
#include "bcg729/decoder.h"
typedef int16_t word16_t;
typedef uint16_t uword16_t;
typedef int32_t word32_t;
typedef uint32_t uword32_t;
typedef int64_t word64_t;
/* define the context structure to store all static data for a decoder channel */
struct bcg729DecoderChannelContextStruct_struct {
/*** buffers used in decoder bloc ***/
word16_t previousqLSP[NB_LSP_COEFF]; /* previous quantised LSP in Q0.15 */
word16_t excitationVector[L_PAST_EXCITATION + L_FRAME]; /* in Q0 this vector contains:
0->153 : the past excitation vector.(length is Max Pitch Delay: 144 + interpolation window size : 10)
154-> 154+L_FRAME-1 : the current frame adaptative Code Vector first used to compute then the excitation vector */
word16_t boundedAdaptativeCodebookGain; /* the pitch gain from last subframe bounded in range [0.2,0.8] in Q0.14 */
word16_t adaptativeCodebookGain; /* the gains needs to be stored in case of frame erasure in Q14 */
word16_t fixedCodebookGain; /* in Q14.1 */
word16_t reconstructedSpeech[NB_LSP_COEFF+L_FRAME]; /* in Q0, output of the LP synthesis filter, the first 10 words store the previous frame output */
uint16_t pseudoRandomSeed; /* seed used in the pseudo random number generator */
/*** buffers used in decodeLSP bloc ***/
word16_t lastqLSF[NB_LSP_COEFF]; /* this buffer stores the last qLSF to be used in case of frame lost in Q2.13 */
/* buffer to store the last 4 frames codewords, used to compute the current qLSF */
word16_t previousLCodeWord[MA_MAX_K][NB_LSP_COEFF]; /* in Q2.13, buffer to store the last 4 frames codewords, used to compute the current qLSF */
/* the values stored are the codewords computed from the codebooks and rearranged */
word16_t lastValidL0; /* this one store the L0 of last valid frame to be used in case of frame erased */
/*** buffer used in decodeAdaptativeCodeVector bloc ***/
uint16_t previousIntPitchDelay; /* store the last valid Integer Pitch Delay computed, used in case of parity error or frame erased */
/*** buffer used in decodeGains bloc ***/
word16_t previousGainPredictionError[4]; /* the last four gain prediction error U(m) eq69 and eq72, spec3.9.1 in Q10*/
/*** buffers used in postFilter bloc ***/
word16_t residualSignalBuffer[MAXIMUM_INT_PITCH_DELAY+L_FRAME]; /* store the residual signal (current subframe and MAXIMUM_INT_PITCH_DELAY of previous values) in Q0 */
word16_t scaledResidualSignalBuffer[MAXIMUM_INT_PITCH_DELAY+L_FRAME]; /* same as previous but in Q-2 */
word16_t longTermFilteredResidualSignalBuffer[1+L_SUBFRAME]; /* the output of long term filter in Q0, need 1 word from previous subframe for tilt compensation filter */
word16_t *longTermFilteredResidualSignal; /* points to the beginning of current subframe longTermFilteredResidualSignal */
word16_t shortTermFilteredResidualSignalBuffer[NB_LSP_COEFF+L_SUBFRAME]; /* the output of short term filter(synthesis filter) in Q0, need NB_LSP_COEFF word from previous subframe as filter memory */
word16_t *shortTermFilteredResidualSignal; /* points to the beginning of current subframe shortTermFilteredResidualSignal */
word16_t previousAdaptativeGain; /* previous gain for adaptative gain control */
/*** buffers used in postProcessing bloc ***/
word16_t inputX0;
word16_t inputX1;
word32_t outputY2;
word32_t outputY1;
};
/* define the context structure to store all static data for an encoder channel */
struct bcg729EncoderChannelContextStruct_struct {
/*** buffers used in decoder bloc ***/
/* Signal buffer mapping : 240 word16_t length */
/* <---- 120 word16_t -->|<---- 80 word16_t ---->|<---- 40 word16_t --->| */
/* |----- old signal -----|----------- current frame -------------------|-----next subframe 1 ------------| */
/* |----- subframe 1 -----|----- subframe 2 -----| */
/* |--------------- last input frame -----------------------| */
/* ^ ^ ^ */
/* | | | */
/* signalBuffer signalCurrentFrame signalLastInputFrame */
word16_t signalBuffer[L_LP_ANALYSIS_WINDOW]; /* this buffer stores the input signal */
word16_t *signalLastInputFrame; /* point to the beginning of the last frame in the signal buffer */
word16_t *signalCurrentFrame; /* point to the beginning of the current frame in the signal buffer */
word16_t previousLSPCoefficients[NB_LSP_COEFF]; /* LSP coefficient of previous frame */
word16_t previousqLSPCoefficients[NB_LSP_COEFF]; /* Quantized LSP coefficient of previous frame */
word16_t weightedInputSignal[MAXIMUM_INT_PITCH_DELAY+L_FRAME]; /* buffer storing the weightedInputSignal on current frame and MAXIMUM_INT_PITCH_DELAY of previous values */
word16_t excitationVector[L_PAST_EXCITATION + L_FRAME]; /* in Q0 this vector contains:
0->153 : the past excitation vector.(length is Max Pitch Delay: 144 + interpolation window size : 10)
154-> 154+L_FRAME-1 : the current frame adaptative Code Vector first used to compute then the excitation vector */
word16_t targetSignal[NB_LSP_COEFF+L_SUBFRAME]; /* in Q0, buffer holding the target signal (x[n]) as in spec A.3.6, the first NB_LSP_COEFF values are memory from previous subframe used in filtering(computed according to spec A.3.10), the following values are the target signal for current subframe */
word16_t lastQuantizedAdaptativeCodebookGain; /* in Q14, the quantized adaptive codebook gain from previous subframe */
/*** buffer used in preProcessing ***/
word16_t inputX0, inputX1;
word32_t outputY2, outputY1;
/*** buffer used in LSPQuantization ***/
word16_t previousqLSF[MA_MAX_K][NB_LSP_COEFF]; /* previousqLSF of the last 4(MA pred buffer size) frames in Q13, contains actually quantizer output (l) and not LSF (w)*/
/*** buffer used in gainQuantization ***/
word16_t previousGainPredictionError[4]; /* the last four gain prediction error U(m) eq69 and eq72, spec3.9.1 in Q10*/
};
/* MAXINTXX define the maximum signed integer value on XX bits(2^(XX-1) - 1) */
/* used to check on overflows in fixed point mode */
#define MAXINT16 0x7fff
#define MAXINT28 0x7ffffff
#define MAXINT29 0xfffffff
#define MININT32 0x80000000
#define MAXINT32 0x7fffffff
#define MAXINT64 0x7fffffffffffffffLL
/* several values used for inits */
#define ONE_IN_Q31 0x7FFFFFFF
#define ONE_IN_Q30 0x40000000
#define ONE_IN_Q27 0x08000000
#define ONE_IN_Q15 0x00008000
#define ONE_IN_Q13 0x00002000
#define ONE_IN_Q12 0x00001000
#define ONE_IN_Q11 0x00000800
#define HALF_PI_Q13 12868
#define HALF_PI_Q15 51472
/* 0.04*Pi + 1 and 0.92*Pi - 1 used by LSPQuantization */
#define OO4PIPLUS1_IN_Q13 9221
#define O92PIMINUS1_IN_Q13 15485
/* 1.2 in Q14 */
#define ONE_POINT_2_IN_Q14 19661
/* 0.7 in Q12 */
#define O7_IN_Q12 2867
/* 0.2 in Q14 */
#define O2_IN_Q14 3277
/* 0.2 in Q15 */
#define O2_IN_Q15 6554
#endif /* ifndef TYPEDEF_H */