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