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 * codec.h
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * This header file contains the calls to the internal encoder
15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * and decoder functions.
16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_CODEC_H_
20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_CODEC_H_
21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "structs.h"
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
2427fe999a8fe09ea7a39318e00262b30e38caa83ckma@webrtc.org#ifdef __cplusplus
2527fe999a8fe09ea7a39318e00262b30e38caa83ckma@webrtc.orgextern "C" {
2627fe999a8fe09ea7a39318e00262b30e38caa83ckma@webrtc.org#endif
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
28178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.orgint WebRtcIsacfix_EstimateBandwidth(BwEstimatorstr* bwest_str,
29178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.org                                    Bitstr_dec* streamdata,
30fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                    int32_t packet_size,
31fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                    uint16_t rtp_seq_number,
32fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                    uint32_t send_ts,
33fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                    uint32_t arr_ts);
34178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.org
35fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint16_t WebRtcIsacfix_DecodeImpl(int16_t* signal_out16,
36178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.org                                       ISACFIX_DecInst_t* ISACdec_obj,
37fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                       int16_t* current_framesamples);
38178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.org
39fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint16_t WebRtcIsacfix_DecodePlcImpl(int16_t* decoded,
40178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.org                                          ISACFIX_DecInst_t* ISACdec_obj,
41fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                          int16_t* current_framesample );
42178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.org
43fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint WebRtcIsacfix_EncodeImpl(int16_t* in,
44178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.org                             ISACFIX_EncInst_t* ISACenc_obj,
45178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.org                             BwEstimatorstr* bw_estimatordata,
46fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                             int16_t CodingMode);
47178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.org
48178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.orgint WebRtcIsacfix_EncodeStoredData(ISACFIX_EncInst_t* ISACenc_obj,
49178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.org                                   int BWnumber,
50178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.org                                   float scale);
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* initialization functions */
53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
54178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.orgvoid WebRtcIsacfix_InitMaskingEnc(MaskFiltstr_enc* maskdata);
55178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.orgvoid WebRtcIsacfix_InitMaskingDec(MaskFiltstr_dec* maskdata);
56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
57178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.orgvoid WebRtcIsacfix_InitPreFilterbank(PreFiltBankstr* prefiltdata);
58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
59178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.orgvoid WebRtcIsacfix_InitPostFilterbank(PostFiltBankstr* postfiltdata);
60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
61178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.orgvoid WebRtcIsacfix_InitPitchFilter(PitchFiltstr* pitchfiltdata);
62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
63178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.orgvoid WebRtcIsacfix_InitPitchAnalysis(PitchAnalysisStruct* State);
64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
65178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.orgvoid WebRtcIsacfix_InitPlc(PLCstr* State);
66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* transform functions */
69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid WebRtcIsacfix_InitTransform();
71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
72fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgtypedef void (*Time2Spec)(int16_t* inre1Q9,
73fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                          int16_t* inre2Q9,
74fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                          int16_t* outre,
75fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                          int16_t* outim);
76fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgtypedef void (*Spec2Time)(int16_t* inreQ7,
77fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                          int16_t* inimQ7,
78fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                          int32_t* outre1Q16,
79fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                          int32_t* outre2Q16);
80178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.org
81178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.orgextern Time2Spec WebRtcIsacfix_Time2Spec;
823c37468d59d36a3d274f0822d2095ffc1fa8ae2dkma@webrtc.orgextern Spec2Time WebRtcIsacfix_Spec2Time;
833c37468d59d36a3d274f0822d2095ffc1fa8ae2dkma@webrtc.org
84fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgvoid WebRtcIsacfix_Time2SpecC(int16_t* inre1Q9,
85fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                              int16_t* inre2Q9,
86fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                              int16_t* outre,
87fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                              int16_t* outim);
88fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgvoid WebRtcIsacfix_Spec2TimeC(int16_t* inreQ7,
89fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                              int16_t* inimQ7,
90fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                              int32_t* outre1Q16,
91fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                              int32_t* outre2Q16);
923c37468d59d36a3d274f0822d2095ffc1fa8ae2dkma@webrtc.org
933c37468d59d36a3d274f0822d2095ffc1fa8ae2dkma@webrtc.org#if (defined WEBRTC_DETECT_ARM_NEON) || (defined WEBRTC_ARCH_ARM_NEON)
94fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgvoid WebRtcIsacfix_Time2SpecNeon(int16_t* inre1Q9,
95fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                 int16_t* inre2Q9,
96fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                 int16_t* outre,
97fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                 int16_t* outim);
98fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgvoid WebRtcIsacfix_Spec2TimeNeon(int16_t* inreQ7,
99fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                 int16_t* inimQ7,
100fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                 int32_t* outre1Q16,
101fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                 int32_t* outre2Q16);
1023c37468d59d36a3d274f0822d2095ffc1fa8ae2dkma@webrtc.org#endif
103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
104e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org#if defined(MIPS32_LE)
105e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.orgvoid WebRtcIsacfix_Time2SpecMIPS(int16_t* inre1Q9,
106e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org                                 int16_t* inre2Q9,
107e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org                                 int16_t* outre,
108e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org                                 int16_t* outim);
109e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.orgvoid WebRtcIsacfix_Spec2TimeMIPS(int16_t* inreQ7,
110e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org                                 int16_t* inimQ7,
111e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org                                 int32_t* outre1Q16,
112e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org                                 int32_t* outre2Q16);
113e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org#endif
114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* filterbank functions */
116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
117fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgvoid WebRtcIsacfix_SplitAndFilter1(int16_t* in,
118fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                   int16_t* LP16,
119fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                   int16_t* HP16,
120178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.org                                   PreFiltBankstr* prefiltdata);
121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
122fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgvoid WebRtcIsacfix_FilterAndCombine1(int16_t* tempin_ch1,
123fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                     int16_t* tempin_ch2,
124fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                     int16_t* out16,
125178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.org                                     PostFiltBankstr* postfiltdata);
126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_ISAC_FIX_NB_CALLS_ENABLED
128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
129fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgvoid WebRtcIsacfix_SplitAndFilter2(int16_t* in,
130fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                   int16_t* LP16,
131fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                   int16_t* HP16,
132178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.org                                   PreFiltBankstr* prefiltdata);
133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
134fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgvoid WebRtcIsacfix_FilterAndCombine2(int16_t* tempin_ch1,
135fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                     int16_t* tempin_ch2,
136fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                     int16_t* out16,
137178f01351b644e253b3fcf109a5a0d9ec56921b8kma@webrtc.org                                     PostFiltBankstr* postfiltdata,
138fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                     int16_t len);
139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif
141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* normalized lattice filters */
143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
144fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgvoid WebRtcIsacfix_NormLatticeFilterMa(int16_t orderCoef,
145fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                       int32_t* stateGQ15,
146fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                       int16_t* lat_inQ0,
147fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                       int16_t* filt_coefQ15,
148fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                       int32_t* gain_lo_hiQ17,
149fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                       int16_t lo_hi,
150fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                       int16_t* lat_outQ9);
151fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org
152fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgvoid WebRtcIsacfix_NormLatticeFilterAr(int16_t orderCoef,
153fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                       int16_t* stateGQ0,
154fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                       int32_t* lat_inQ25,
155fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                       int16_t* filt_coefQ15,
156fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                       int32_t* gain_lo_hiQ17,
157fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                       int16_t lo_hi,
158fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                                       int16_t* lat_outQ0);
159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* TODO(kma): Remove the following functions into individual header files. */
161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* Internal functions in both C and ARM Neon versions */
163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
164fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint WebRtcIsacfix_AutocorrC(int32_t* __restrict r,
165fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                            const int16_t* __restrict x,
166fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                            int16_t N,
167fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                            int16_t order,
168fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                            int16_t* __restrict scale);
169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid WebRtcIsacfix_FilterMaLoopC(int16_t input0,
171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                 int16_t input1,
172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                 int32_t input2,
173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                 int32_t* ptr0,
174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                 int32_t* ptr1,
175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                 int32_t* ptr2);
176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if (defined WEBRTC_DETECT_ARM_NEON) || (defined WEBRTC_ARCH_ARM_NEON)
178fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgint WebRtcIsacfix_AutocorrNeon(int32_t* __restrict r,
179fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                               const int16_t* __restrict x,
180fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                               int16_t N,
181fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                               int16_t order,
182fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                               int16_t* __restrict scale);
183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid WebRtcIsacfix_FilterMaLoopNeon(int16_t input0,
185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                    int16_t input1,
186bc9c1950fc96bd82af358b5d95dd717267130bb0andrew@webrtc.org                                    int32_t input2,
187bc9c1950fc96bd82af358b5d95dd717267130bb0andrew@webrtc.org                                    int32_t* ptr0,
188bc9c1950fc96bd82af358b5d95dd717267130bb0andrew@webrtc.org                                    int32_t* ptr1,
189bc9c1950fc96bd82af358b5d95dd717267130bb0andrew@webrtc.org                                    int32_t* ptr2);
190bc9c1950fc96bd82af358b5d95dd717267130bb0andrew@webrtc.org#endif
191bc9c1950fc96bd82af358b5d95dd717267130bb0andrew@webrtc.org
192bc9c1950fc96bd82af358b5d95dd717267130bb0andrew@webrtc.org#if defined(MIPS32_LE)
193bc9c1950fc96bd82af358b5d95dd717267130bb0andrew@webrtc.orgint WebRtcIsacfix_AutocorrMIPS(int32_t* __restrict r,
194bc9c1950fc96bd82af358b5d95dd717267130bb0andrew@webrtc.org                               const int16_t* __restrict x,
195bc9c1950fc96bd82af358b5d95dd717267130bb0andrew@webrtc.org                               int16_t N,
196bc9c1950fc96bd82af358b5d95dd717267130bb0andrew@webrtc.org                               int16_t order,
197bc9c1950fc96bd82af358b5d95dd717267130bb0andrew@webrtc.org                               int16_t* __restrict scale);
198bc9c1950fc96bd82af358b5d95dd717267130bb0andrew@webrtc.org
199bc9c1950fc96bd82af358b5d95dd717267130bb0andrew@webrtc.orgvoid WebRtcIsacfix_FilterMaLoopMIPS(int16_t input0,
200bc9c1950fc96bd82af358b5d95dd717267130bb0andrew@webrtc.org                                    int16_t input1,
201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                    int32_t input2,
202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                    int32_t* ptr0,
203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                    int32_t* ptr1,
204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                    int32_t* ptr2);
205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif
206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* Function pointers associated with the above functions. */
208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
209fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.orgtypedef int (*AutocorrFix)(int32_t* __restrict r,
210fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                           const int16_t* __restrict x,
211fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                           int16_t N,
212fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                           int16_t order,
213fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org                           int16_t* __restrict scale);
214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgextern AutocorrFix WebRtcIsacfix_AutocorrFix;
215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef void (*FilterMaLoopFix)(int16_t input0,
217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                int16_t input1,
218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                int32_t input2,
219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                int32_t* ptr0,
220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                int32_t* ptr1,
221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                int32_t* ptr2);
222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgextern FilterMaLoopFix WebRtcIsacfix_FilterMaLoopFix;
223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
22427fe999a8fe09ea7a39318e00262b30e38caa83ckma@webrtc.org#ifdef __cplusplus
22527fe999a8fe09ea7a39318e00262b30e38caa83ckma@webrtc.org}  // extern "C"
22627fe999a8fe09ea7a39318e00262b30e38caa83ckma@webrtc.org#endif
22727fe999a8fe09ea7a39318e00262b30e38caa83ckma@webrtc.org
228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_CODEC_H_ */
229