1a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/*
2a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *  Copyright (c) 2012 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 * codec.h
13a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *
14a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * This header file contains the calls to the internal encoder
15a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * and decoder functions.
16a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *
17a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin */
18a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
19a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_CODEC_H_
20a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_CODEC_H_
21a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
22a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#include "structs.h"
23a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
24a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
25a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EstimateBandwidth(BwEstimatorstr   *bwest_str,
26a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                    Bitstr_dec       *streamdata,
27a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                    WebRtc_Word32      packet_size,
28a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                    WebRtc_UWord16     rtp_seq_number,
29a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                    WebRtc_UWord32     send_ts,
30a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                    WebRtc_UWord32     arr_ts);
31a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
32a6451827d543eb00824bc95097e47d0aac51ae93Alexander GutkinWebRtc_Word16 WebRtcIsacfix_DecodeImpl(WebRtc_Word16   *signal_out16,
33a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                       ISACFIX_DecInst_t  *ISACdec_obj,
34a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                       WebRtc_Word16        *current_framesamples);
35a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
36a6451827d543eb00824bc95097e47d0aac51ae93Alexander GutkinWebRtc_Word16 WebRtcIsacfix_DecodePlcImpl(WebRtc_Word16       *decoded,
37a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                          ISACFIX_DecInst_t *ISACdec_obj,
38a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                          WebRtc_Word16       *current_framesample );
39a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
40a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncodeImpl(WebRtc_Word16      *in,
41a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                             ISACFIX_EncInst_t  *ISACenc_obj,
42a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                             BwEstimatorstr      *bw_estimatordata,
43a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                             WebRtc_Word16         CodingMode);
44a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
45a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EncodeStoredData(ISACFIX_EncInst_t  *ISACenc_obj,
46a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                   int     BWnumber,
47a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                   float              scale);
48a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
49a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* initialization functions */
50a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
51a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_InitMaskingEnc(MaskFiltstr_enc *maskdata);
52a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_InitMaskingDec(MaskFiltstr_dec *maskdata);
53a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
54a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_InitPreFilterbank(PreFiltBankstr *prefiltdata);
55a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
56a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_InitPostFilterbank(PostFiltBankstr *postfiltdata);
57a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
58a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_InitPitchFilter(PitchFiltstr *pitchfiltdata);
59a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
60a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_InitPitchAnalysis(PitchAnalysisStruct *State);
61a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
62a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_InitPlc( PLCstr *State );
63a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
64a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
65a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* transform functions */
66a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
67a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_InitTransform();
68a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
69a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
70a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_Time2Spec(WebRtc_Word16 *inre1Q9,
71a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                             WebRtc_Word16 *inre2Q9,
72a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                             WebRtc_Word16 *outre,
73a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                             WebRtc_Word16 *outim);
74a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
75a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
76a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
77a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_Spec2Time(WebRtc_Word16 *inreQ7,
78a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                             WebRtc_Word16 *inimQ7,
79a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                             WebRtc_Word32 *outre1Q16,
80a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                             WebRtc_Word32 *outre2Q16);
81a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
82a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
83a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
84a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
85a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* filterbank functions */
86a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
87a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_SplitAndFilter1(WebRtc_Word16    *in,
88a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                   WebRtc_Word16    *LP16,
89a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                   WebRtc_Word16    *HP16,
90a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                   PreFiltBankstr *prefiltdata);
91a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
92a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_FilterAndCombine1(WebRtc_Word16     *tempin_ch1,
93a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                     WebRtc_Word16     *tempin_ch2,
94a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                     WebRtc_Word16     *out16,
95a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                     PostFiltBankstr *postfiltdata);
96a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
97a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#ifdef WEBRTC_ISAC_FIX_NB_CALLS_ENABLED
98a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
99a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_SplitAndFilter2(WebRtc_Word16    *in,
100a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                   WebRtc_Word16    *LP16,
101a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                   WebRtc_Word16    *HP16,
102a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                   PreFiltBankstr *prefiltdata);
103a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
104a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_FilterAndCombine2(WebRtc_Word16     *tempin_ch1,
105a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                     WebRtc_Word16     *tempin_ch2,
106a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                     WebRtc_Word16     *out16,
107a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                     PostFiltBankstr *postfiltdata,
108a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                     WebRtc_Word16     len);
109a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
110a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#endif
111a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
112a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* normalized lattice filters */
113a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
114a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_NormLatticeFilterMa(WebRtc_Word16 orderCoef,
115a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                       WebRtc_Word32 *stateGQ15,
116a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                       WebRtc_Word16 *lat_inQ0,
117a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                       WebRtc_Word16 *filt_coefQ15,
118a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                       WebRtc_Word32 *gain_lo_hiQ17,
119a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                       WebRtc_Word16 lo_hi,
120a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                       WebRtc_Word16 *lat_outQ9);
121a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
122a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_NormLatticeFilterAr(WebRtc_Word16 orderCoef,
123a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                       WebRtc_Word16 *stateGQ0,
124a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                       WebRtc_Word32 *lat_inQ25,
125a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                       WebRtc_Word16 *filt_coefQ15,
126a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                       WebRtc_Word32 *gain_lo_hiQ17,
127a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                       WebRtc_Word16 lo_hi,
128a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                       WebRtc_Word16 *lat_outQ0);
129a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
130a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* TODO(kma): Remove the following functions into individual header files. */
131a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
132a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* Internal functions in both C and ARM Neon versions */
133a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
134a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_AutocorrC(WebRtc_Word32* __restrict r,
135a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                            const WebRtc_Word16* __restrict x,
136a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                            WebRtc_Word16 N,
137a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                            WebRtc_Word16 order,
138a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                            WebRtc_Word16* __restrict scale);
139a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
140a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_FilterMaLoopC(int16_t input0,
141a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                 int16_t input1,
142a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                 int32_t input2,
143a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                 int32_t* ptr0,
144a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                 int32_t* ptr1,
145a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                 int32_t* ptr2);
146a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
147a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#if (defined WEBRTC_DETECT_ARM_NEON) || (defined WEBRTC_ARCH_ARM_NEON)
148a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_AutocorrNeon(WebRtc_Word32* __restrict r,
149a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                               const WebRtc_Word16* __restrict x,
150a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                               WebRtc_Word16 N,
151a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                               WebRtc_Word16 order,
152a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                               WebRtc_Word16* __restrict scale);
153a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
154a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinvoid WebRtcIsacfix_FilterMaLoopNeon(int16_t input0,
155a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                    int16_t input1,
156a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                    int32_t input2,
157a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                    int32_t* ptr0,
158a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                    int32_t* ptr1,
159a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                    int32_t* ptr2);
160a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#endif
161a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
162a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* Function pointers associated with the above functions. */
163a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
164a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef int (*AutocorrFix)(WebRtc_Word32* __restrict r,
165a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                           const WebRtc_Word16* __restrict x,
166a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                           WebRtc_Word16 N,
167a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                           WebRtc_Word16 order,
168a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                           WebRtc_Word16* __restrict scale);
169a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinextern AutocorrFix WebRtcIsacfix_AutocorrFix;
170a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
171a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef void (*FilterMaLoopFix)(int16_t input0,
172a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                int16_t input1,
173a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                int32_t input2,
174a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                int32_t* ptr0,
175a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                int32_t* ptr1,
176a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin                                int32_t* ptr2);
177a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinextern FilterMaLoopFix WebRtcIsacfix_FilterMaLoopFix;
178a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
179a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_CODEC_H_ */
180