1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * entropy_coding.h 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * This header file declares all of the functions used to arithmetically 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * encode the iSAC bistream 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_ENTROPY_CODING_H_ 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_ENTROPY_CODING_H_ 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "settings.h" 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "structs.h" 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/****************************************************************************** 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * WebRtcIsac_DecodeSpec() 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Decode real and imaginary part of the DFT coefficients, given a bit-stream. 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * The decoded DFT coefficient can be transformed to time domain by 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * WebRtcIsac_Time2Spec(). 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Input: 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - streamdata : pointer to a stucture containg the encoded 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * data and theparameters needed for entropy 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * coding. 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - AvgPitchGain_Q12 : average pitch-gain of the frame. This is only 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * relevant for 0-4 kHz band, and the input value is 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * not used in other bands. 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - band : specifies which band's DFT should be decoded. 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Output: 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - *fr : pointer to a buffer where the real part of DFT 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * coefficients are written to. 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - *fi : pointer to a buffer where the imaginary part 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * of DFT coefficients are written to. 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Return value : < 0 if an error occures 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 0 if succeeded. 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 49fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint WebRtcIsac_DecodeSpec(Bitstr* streamdata, int16_t AvgPitchGain_Q12, 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enum ISACBand band, double* fr, double* fi); 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/****************************************************************************** 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * WebRtcIsac_EncodeSpec() 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Encode real and imaginary part of the DFT coefficients into the given 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * bit-stream. 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Input: 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - *fr : pointer to a buffer where the real part of DFT 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * coefficients are written to. 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - *fi : pointer to a buffer where the imaginary part 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * of DFT coefficients are written to. 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - AvgPitchGain_Q12 : average pitch-gain of the frame. This is only 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * relevant for 0-4 kHz band, and the input value is 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * not used in other bands. 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - band : specifies which band's DFT should be decoded. 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Output: 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - streamdata : pointer to a stucture containg the encoded 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * data and theparameters needed for entropy 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * coding. 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Return value : < 0 if an error occures 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 0 if succeeded. 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 75fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint WebRtcIsac_EncodeSpec(const int16_t* fr, const int16_t* fi, 76fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t AvgPitchGain_Q12, enum ISACBand band, 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Bitstr* streamdata); 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* decode & dequantize LPC Coef */ 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint WebRtcIsac_DecodeLpcCoef(Bitstr* streamdata, double* LPCCoef); 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint WebRtcIsac_DecodeLpcCoefUB(Bitstr* streamdata, double* lpcVecs, 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org double* percepFilterGains, 83fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t bandwidth); 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint WebRtcIsac_DecodeLpc(Bitstr* streamdata, double* LPCCoef_lo, 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org double* LPCCoef_hi); 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* quantize & code LPC Coef */ 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid WebRtcIsac_EncodeLpcLb(double* LPCCoef_lo, double* LPCCoef_hi, 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Bitstr* streamdata, ISAC_SaveEncData_t* encData); 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid WebRtcIsac_EncodeLpcGainLb(double* LPCCoef_lo, double* LPCCoef_hi, 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Bitstr* streamdata, 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ISAC_SaveEncData_t* encData); 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/****************************************************************************** 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * WebRtcIsac_EncodeLpcUB() 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Encode LPC parameters, given as A-polynomial, of upper-band. The encoding 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * is performed in LAR domain. 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * For the upper-band, we compute and encode LPC of some sub-frames, LPC of 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * other sub-frames are computed by linear interpolation, in LAR domain. This 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * function performs the interpolation and returns the LPC of all sub-frames. 103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Inputs: 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - lpcCoef : a buffer containing A-polynomials of sub-frames 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * (excluding first coefficient that is 1). 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - bandwidth : specifies if the codec is operating at 0-12 kHz 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * or 0-16 kHz mode. 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Input/output: 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - streamdata : pointer to a structure containing the encoded 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * data and the parameters needed for entropy 113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * coding. 114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Output: 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - interpolLPCCoeff : Decoded and interpolated LPC (A-polynomial) 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * of all sub-frames. 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * If LP analysis is of order K, and there are N 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * sub-frames then this is a buffer of size 120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * (k + 1) * N, each vector starts with the LPC gain 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * of the corresponding sub-frame. The LPC gains 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * are encoded and inserted after this function is 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * called. The first A-coefficient which is 1 is not 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * included. 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Return value : 0 if encoding is successful, 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * <0 if failed to encode. 128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 129fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint16_t WebRtcIsac_EncodeLpcUB(double* lpcCoeff, Bitstr* streamdata, 130fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org double* interpolLPCCoeff, 131fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t bandwidth, 132fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org ISACUBSaveEncDataStruct* encData); 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/****************************************************************************** 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * WebRtcIsac_DecodeInterpolLpcUb() 136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Decode LPC coefficients and interpolate to get the coefficients fo all 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * sub-frmaes. 138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Inputs: 140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - bandwidth : spepecifies if the codec is in 0-12 kHz or 141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 0-16 kHz mode. 142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Input/output: 144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - streamdata : pointer to a stucture containg the encoded 145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * data and theparameters needed for entropy 146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * coding. 147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Output: 149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - percepFilterParam : Decoded and interpolated LPC (A-polynomial) of 150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * all sub-frames. 151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * If LP analysis is of order K, and there are N 152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * sub-frames then this is a buffer of size 153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * (k + 1) * N, each vector starts with the LPC gain 154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * of the corresponding sub-frame. The LPC gains 155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * are encoded and inserted after this function is 156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * called. The first A-coefficient which is 1 is not 157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * included. 158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Return value : 0 if encoding is successful, 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * <0 if failed to encode. 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 162fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint16_t WebRtcIsac_DecodeInterpolLpcUb(Bitstr* streamdata, 163fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org double* percepFilterParam, 164fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t bandwidth); 165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* Decode & dequantize RC */ 167fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint WebRtcIsac_DecodeRc(Bitstr* streamdata, int16_t* RCQ15); 168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* Quantize & code RC */ 170fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgvoid WebRtcIsac_EncodeRc(int16_t* RCQ15, Bitstr* streamdata); 171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* Decode & dequantize squared Gain */ 173fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint WebRtcIsac_DecodeGain2(Bitstr* streamdata, int32_t* Gain2); 174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* Quantize & code squared Gain (input is squared gain) */ 176fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint WebRtcIsac_EncodeGain2(int32_t* gain2, Bitstr* streamdata); 177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 178fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgvoid WebRtcIsac_EncodePitchGain(int16_t* PitchGains_Q12, 179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Bitstr* streamdata, 180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ISAC_SaveEncData_t* encData); 181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 182fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgvoid WebRtcIsac_EncodePitchLag(double* PitchLags, int16_t* PitchGain_Q12, 183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Bitstr* streamdata, ISAC_SaveEncData_t* encData); 184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint WebRtcIsac_DecodePitchGain(Bitstr* streamdata, 186fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t* PitchGain_Q12); 187fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint WebRtcIsac_DecodePitchLag(Bitstr* streamdata, int16_t* PitchGain_Q12, 188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org double* PitchLag); 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 190fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint WebRtcIsac_DecodeFrameLen(Bitstr* streamdata, int16_t* framelength); 191fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint WebRtcIsac_EncodeFrameLen(int16_t framelength, Bitstr* streamdata); 192fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint WebRtcIsac_DecodeSendBW(Bitstr* streamdata, int16_t* BWno); 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid WebRtcIsac_EncodeReceiveBw(int* BWno, Bitstr* streamdata); 194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* Step-down */ 196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid WebRtcIsac_Poly2Rc(double* a, int N, double* RC); 197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* Step-up */ 199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid WebRtcIsac_Rc2Poly(double* RC, int N, double* a); 200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid WebRtcIsac_TranscodeLPCCoef(double* LPCCoef_lo, double* LPCCoef_hi, 202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int* index_g); 203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/****************************************************************************** 206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * WebRtcIsac_EncodeLpcGainUb() 207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Encode LPC gains of sub-Frames. 208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Input/outputs: 210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - lpGains : a buffer which contains 'SUBFRAME' number of 211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * LP gains to be encoded. The input values are 212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * overwritten by the quantized values. 213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - streamdata : pointer to a stucture containg the encoded 214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * data and theparameters needed for entropy 215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * coding. 216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Output: 218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - lpcGainIndex : quantization indices for lpc gains, these will 219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be stored to be used for FEC. 220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid WebRtcIsac_EncodeLpcGainUb(double* lpGains, Bitstr* streamdata, 222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int* lpcGainIndex); 223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/****************************************************************************** 226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * WebRtcIsac_EncodeLpcGainUb() 227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Store LPC gains of sub-Frames in 'streamdata'. 228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Input: 230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - lpGains : a buffer which contains 'SUBFRAME' number of 231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * LP gains to be encoded. 232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Input/outputs: 233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - streamdata : pointer to a stucture containg the encoded 234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * data and theparameters needed for entropy 235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * coding. 236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid WebRtcIsac_StoreLpcGainUb(double* lpGains, Bitstr* streamdata); 239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/****************************************************************************** 242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * WebRtcIsac_DecodeLpcGainUb() 243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Decode the LPC gain of sub-frames. 244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Input/output: 246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - streamdata : pointer to a stucture containg the encoded 247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * data and theparameters needed for entropy 248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * coding. 249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Output: 251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - lpGains : a buffer where decoded LPC gians will be stored. 252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Return value : 0 if succeeded. 254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * <0 if failed. 255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 256fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint16_t WebRtcIsac_DecodeLpcGainUb(double* lpGains, Bitstr* streamdata); 257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/****************************************************************************** 260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * WebRtcIsac_EncodeBandwidth() 261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Encode if the bandwidth of encoded audio is 0-12 kHz or 0-16 kHz. 262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Input: 264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - bandwidth : an enumerator specifying if the codec in is 265b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 0-12 kHz or 0-16 kHz mode. 266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 267b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Input/output: 268b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - streamdata : pointer to a stucture containg the encoded 269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * data and theparameters needed for entropy 270b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * coding. 271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Return value : 0 if succeeded. 273b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * <0 if failed. 274b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 275fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint16_t WebRtcIsac_EncodeBandwidth(enum ISACBandwidth bandwidth, 276fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org Bitstr* streamData); 277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/****************************************************************************** 280b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * WebRtcIsac_DecodeBandwidth() 281b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Decode the bandwidth of the encoded audio, i.e. if the bandwidth is 0-12 kHz 282b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * or 0-16 kHz. 283b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 284b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Input/output: 285b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - streamdata : pointer to a stucture containg the encoded 286b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * data and theparameters needed for entropy 287b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * coding. 288b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 289b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Output: 290b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - bandwidth : an enumerator specifying if the codec is in 291b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 0-12 kHz or 0-16 kHz mode. 292b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 293b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Return value : 0 if succeeded. 294b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * <0 if failed. 295b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 296fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint16_t WebRtcIsac_DecodeBandwidth(Bitstr* streamData, 297fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org enum ISACBandwidth* bandwidth); 298b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/****************************************************************************** 301b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * WebRtcIsac_EncodeJitterInfo() 302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Decode the jitter information. 303b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 304b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Input/output: 305b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - streamdata : pointer to a stucture containg the encoded 306b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * data and theparameters needed for entropy 307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * coding. 308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 309b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Input: 310b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - jitterInfo : one bit of info specifying if the channel is 311b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in high/low jitter. Zero indicates low jitter 312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * and one indicates high jitter. 313b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 314b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Return value : 0 if succeeded. 315b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * <0 if failed. 316b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 317fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint16_t WebRtcIsac_EncodeJitterInfo(int32_t jitterIndex, 318fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org Bitstr* streamData); 319b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 320b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 321b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/****************************************************************************** 322b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * WebRtcIsac_DecodeJitterInfo() 323b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Decode the jitter information. 324b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 325b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Input/output: 326b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - streamdata : pointer to a stucture containg the encoded 327b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * data and theparameters needed for entropy 328b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * coding. 329b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 330b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Output: 331b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - jitterInfo : one bit of info specifying if the channel is 332b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in high/low jitter. Zero indicates low jitter 333b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * and one indicates high jitter. 334b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 335b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Return value : 0 if succeeded. 336b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * <0 if failed. 337b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 338fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint16_t WebRtcIsac_DecodeJitterInfo(Bitstr* streamData, 339fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int32_t* jitterInfo); 340b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 341b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_ENTROPY_CODING_H_ */ 342