/*
 *  Copyright (c) 2012 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.
 */

/*
 * lpc_tables.h
 *
 * header file for coding tables for the LPC coefficients
 *
 */

#ifndef MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_LPC_TABLES_H_
#define MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_LPC_TABLES_H_

#include "modules/audio_coding/codecs/isac/main/source/structs.h"

#include "modules/audio_coding/codecs/isac/main/source/settings.h"

#define KLT_STEPSIZE         1.00000000
#define KLT_NUM_AVG_GAIN     0
#define KLT_NUM_AVG_SHAPE    0
#define KLT_NUM_MODELS  3
#define LPC_GAIN_SCALE     4.000f
#define LPC_LOBAND_SCALE   2.100f
#define LPC_LOBAND_ORDER   ORDERLO
#define LPC_HIBAND_SCALE   0.450f
#define LPC_HIBAND_ORDER   ORDERHI
#define LPC_GAIN_ORDER     2

#define LPC_SHAPE_ORDER    (LPC_LOBAND_ORDER + LPC_HIBAND_ORDER)

#define KLT_ORDER_GAIN     (LPC_GAIN_ORDER * SUBFRAMES)
#define KLT_ORDER_SHAPE    (LPC_SHAPE_ORDER * SUBFRAMES)

/* cdf array for model indicator */
extern const uint16_t WebRtcIsac_kQKltModelCdf[KLT_NUM_MODELS+1];

/* pointer to cdf array for model indicator */
extern const uint16_t *WebRtcIsac_kQKltModelCdfPtr[1];

/* initial cdf index for decoder of model indicator */
extern const uint16_t WebRtcIsac_kQKltModelInitIndex[1];

/* offset to go from rounded value to quantization index */
extern const short WebRtcIsac_kQKltQuantMinGain[12];

extern const short WebRtcIsac_kQKltQuantMinShape[108];

/* maximum quantization index */
extern const uint16_t WebRtcIsac_kQKltMaxIndGain[12];

extern const uint16_t WebRtcIsac_kQKltMaxIndShape[108];

/* index offset */
extern const uint16_t WebRtcIsac_kQKltOffsetGain[12];

extern const uint16_t WebRtcIsac_kQKltOffsetShape[108];

/* initial cdf index for KLT coefficients */
extern const uint16_t WebRtcIsac_kQKltInitIndexGain[12];

extern const uint16_t WebRtcIsac_kQKltInitIndexShape[108];

/* quantizer representation levels */
extern const double WebRtcIsac_kQKltLevelsGain[392];

extern const double WebRtcIsac_kQKltLevelsShape[578];

/* cdf tables for quantizer indices */
extern const uint16_t WebRtcIsac_kQKltCdfGain[404];

extern const uint16_t WebRtcIsac_kQKltCdfShape[686];

/* pointers to cdf tables for quantizer indices */
extern const uint16_t *WebRtcIsac_kQKltCdfPtrGain[12];

extern const uint16_t *WebRtcIsac_kQKltCdfPtrShape[108];

/* left KLT transforms */
extern const double WebRtcIsac_kKltT1Gain[4];

extern const double WebRtcIsac_kKltT1Shape[324];

/* right KLT transforms */
extern const double WebRtcIsac_kKltT2Gain[36];

extern const double WebRtcIsac_kKltT2Shape[36];

/* means of log gains and LAR coefficients */
extern const double WebRtcIsac_kLpcMeansGain[12];

extern const double WebRtcIsac_kLpcMeansShape[108];

#endif /* MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_LPC_TABLES_H_ */
