1a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/*
2a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *
4a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *  Use of this source code is governed by a BSD-style license
5a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *  that can be found in the LICENSE file in the root of the source
6a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *  tree. An additional intellectual property rights grant can be found
7a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *  in the file PATENTS.  All contributing project authors may
8a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *  be found in the AUTHORS file in the root of the source tree.
9a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin */
10a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
11a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/*
12a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * entropy_coding.h
13a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *
14a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * This header file contains all of the functions used to arithmetically
15a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * encode the iSAC bistream
16a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *
17a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin */
18a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
19a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_ENTROPY_CODING_H_
20a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_ENTROPY_CODING_H_
21a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
22a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#include "structs.h"
23a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
24a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* decode complex spectrum (return number of bytes in stream) */
25a6451827d543eb00824bc95097e47d0aac51ae93Alexander GutkinWebRtc_Word16 WebRtcIsacfix_DecodeSpec(Bitstr_dec  *streamdata,
26a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                       WebRtc_Word16 *frQ7,
27a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                       WebRtc_Word16 *fiQ7,
28a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                       WebRtc_Word16 AvgPitchGain_Q12);
29a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
30a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* encode complex spectrum */
31a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncodeSpec(const WebRtc_Word16 *fr,
32a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                             const WebRtc_Word16 *fi,
33a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                             Bitstr_enc *streamdata,
34a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                             WebRtc_Word16 AvgPitchGain_Q12);
35a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
36a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
37a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* decode & dequantize LPC Coef */
38a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_DecodeLpcCoef(Bitstr_dec  *streamdata,
39a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                WebRtc_Word32 *LPCCoefQ17,
40a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                WebRtc_Word32 *gain_lo_hiQ17,
41a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                WebRtc_Word16 *outmodel);
42a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
43a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_DecodeLpc(WebRtc_Word32 *gain_lo_hiQ17,
44a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                            WebRtc_Word16 *LPCCoef_loQ15,
45a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                            WebRtc_Word16 *LPCCoef_hiQ15,
46a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                            Bitstr_dec  *streamdata,
47a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                            WebRtc_Word16 *outmodel);
48a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
49a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* quantize & code LPC Coef */
50a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncodeLpc(WebRtc_Word32 *gain_lo_hiQ17,
51a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                            WebRtc_Word16 *LPCCoef_loQ15,
52a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                            WebRtc_Word16 *LPCCoef_hiQ15,
53a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                            WebRtc_Word16 *model,
54a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                            WebRtc_Word32 *sizeQ11,
55a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                            Bitstr_enc *streamdata,
56a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                            ISAC_SaveEncData_t* encData,
57a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                            transcode_obj *transcodeParam);
58a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
59a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EstCodeLpcGain(WebRtc_Word32 *gain_lo_hiQ17,
60a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                 Bitstr_enc *streamdata,
61a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                 ISAC_SaveEncData_t* encData);
62a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* decode & dequantize RC */
63a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_DecodeRcCoef(Bitstr_dec *streamdata,
64a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                               WebRtc_Word16 *RCQ15);
65a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
66a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* quantize & code RC */
67a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncodeRcCoef(WebRtc_Word16 *RCQ15,
68a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                               Bitstr_enc *streamdata);
69a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
70a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* decode & dequantize squared Gain */
71a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_DecodeGain2(Bitstr_dec *streamdata,
72a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                              WebRtc_Word32 *Gain2);
73a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
74a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* quantize & code squared Gain (input is squared gain) */
75a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncodeGain2(WebRtc_Word32 *gain2,
76a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                              Bitstr_enc *streamdata);
77a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
78a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncodePitchGain(WebRtc_Word16 *PitchGains_Q12,
79a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                  Bitstr_enc *streamdata,
80a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                  ISAC_SaveEncData_t* encData);
81a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
82a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncodePitchLag(WebRtc_Word16 *PitchLagQ7,
83a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                 WebRtc_Word16 *PitchGain_Q12,
84a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                 Bitstr_enc *streamdata,
85a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                 ISAC_SaveEncData_t* encData);
86a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
87a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_DecodePitchGain(Bitstr_dec *streamdata,
88a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                  WebRtc_Word16 *PitchGain_Q12);
89a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
90a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_DecodePitchLag(Bitstr_dec *streamdata,
91a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                 WebRtc_Word16 *PitchGain_Q12,
92a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                 WebRtc_Word16 *PitchLagQ7);
93a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
94a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_DecodeFrameLen(Bitstr_dec *streamdata,
95a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                 WebRtc_Word16 *framelength);
96a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
97a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
98a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncodeFrameLen(WebRtc_Word16 framelength,
99a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                 Bitstr_enc *streamdata);
100a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
101a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_DecodeSendBandwidth(Bitstr_dec *streamdata,
102a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                      WebRtc_Word16 *BWno);
103a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
104a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
105a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncodeReceiveBandwidth(WebRtc_Word16 *BWno,
106a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                         Bitstr_enc *streamdata);
107a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
108a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_TranscodeLpcCoef(WebRtc_Word32 *tmpcoeffs_gQ6,
109a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                    WebRtc_Word16 *index_gQQ);
110a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
111a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_ENTROPY_CODING_H_ */
112