| /* | |
| * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | |
| * | |
| * Use of this source code is governed by a BSD-style license | |
| * that can be found in the LICENSE file in the root of the source | |
| * tree. An additional intellectual property rights grant can be found | |
| * in the file PATENTS. All contributing project authors may | |
| * be found in the AUTHORS file in the root of the source tree. | |
| */ | |
| /* | |
| * codec.h | |
| * | |
| * This header file contains the calls to the internal encoder | |
| * and decoder functions. | |
| * | |
| */ | |
| #ifndef MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_CODEC_H_ | |
| #define MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_CODEC_H_ | |
| #include "modules/audio_coding/codecs/isac/fix/source/structs.h" | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
| int WebRtcIsacfix_EstimateBandwidth(BwEstimatorstr* bwest_str, | |
| Bitstr_dec* streamdata, | |
| size_t packet_size, | |
| uint16_t rtp_seq_number, | |
| uint32_t send_ts, | |
| uint32_t arr_ts); | |
| int WebRtcIsacfix_DecodeImpl(int16_t* signal_out16, | |
| IsacFixDecoderInstance* ISACdec_obj, | |
| size_t* current_framesamples); | |
| void WebRtcIsacfix_DecodePlcImpl(int16_t* decoded, | |
| IsacFixDecoderInstance* ISACdec_obj, | |
| size_t* current_framesample); | |
| int WebRtcIsacfix_EncodeImpl(int16_t* in, | |
| IsacFixEncoderInstance* ISACenc_obj, | |
| BwEstimatorstr* bw_estimatordata, | |
| int16_t CodingMode); | |
| int WebRtcIsacfix_EncodeStoredData(IsacFixEncoderInstance* ISACenc_obj, | |
| int BWnumber, | |
| float scale); | |
| /* initialization functions */ | |
| void WebRtcIsacfix_InitMaskingEnc(MaskFiltstr_enc* maskdata); | |
| void WebRtcIsacfix_InitMaskingDec(MaskFiltstr_dec* maskdata); | |
| void WebRtcIsacfix_InitPreFilterbank(PreFiltBankstr* prefiltdata); | |
| void WebRtcIsacfix_InitPostFilterbank(PostFiltBankstr* postfiltdata); | |
| void WebRtcIsacfix_InitPitchFilter(PitchFiltstr* pitchfiltdata); | |
| void WebRtcIsacfix_InitPitchAnalysis(PitchAnalysisStruct* State); | |
| void WebRtcIsacfix_InitPlc(PLCstr* State); | |
| /* transform functions */ | |
| void WebRtcIsacfix_InitTransform(void); | |
| typedef void (*Time2Spec)(int16_t* inre1Q9, | |
| int16_t* inre2Q9, | |
| int16_t* outre, | |
| int16_t* outim); | |
| typedef void (*Spec2Time)(int16_t* inreQ7, | |
| int16_t* inimQ7, | |
| int32_t* outre1Q16, | |
| int32_t* outre2Q16); | |
| extern Time2Spec WebRtcIsacfix_Time2Spec; | |
| extern Spec2Time WebRtcIsacfix_Spec2Time; | |
| void WebRtcIsacfix_Time2SpecC(int16_t* inre1Q9, | |
| int16_t* inre2Q9, | |
| int16_t* outre, | |
| int16_t* outim); | |
| void WebRtcIsacfix_Spec2TimeC(int16_t* inreQ7, | |
| int16_t* inimQ7, | |
| int32_t* outre1Q16, | |
| int32_t* outre2Q16); | |
| #if defined(WEBRTC_HAS_NEON) | |
| void WebRtcIsacfix_Time2SpecNeon(int16_t* inre1Q9, | |
| int16_t* inre2Q9, | |
| int16_t* outre, | |
| int16_t* outim); | |
| void WebRtcIsacfix_Spec2TimeNeon(int16_t* inreQ7, | |
| int16_t* inimQ7, | |
| int32_t* outre1Q16, | |
| int32_t* outre2Q16); | |
| #endif | |
| #if defined(MIPS32_LE) | |
| void WebRtcIsacfix_Time2SpecMIPS(int16_t* inre1Q9, | |
| int16_t* inre2Q9, | |
| int16_t* outre, | |
| int16_t* outim); | |
| void WebRtcIsacfix_Spec2TimeMIPS(int16_t* inreQ7, | |
| int16_t* inimQ7, | |
| int32_t* outre1Q16, | |
| int32_t* outre2Q16); | |
| #endif | |
| /* filterbank functions */ | |
| void WebRtcIsacfix_SplitAndFilter1(int16_t* in, | |
| int16_t* LP16, | |
| int16_t* HP16, | |
| PreFiltBankstr* prefiltdata); | |
| void WebRtcIsacfix_FilterAndCombine1(int16_t* tempin_ch1, | |
| int16_t* tempin_ch2, | |
| int16_t* out16, | |
| PostFiltBankstr* postfiltdata); | |
| #ifdef WEBRTC_ISAC_FIX_NB_CALLS_ENABLED | |
| void WebRtcIsacfix_SplitAndFilter2(int16_t* in, | |
| int16_t* LP16, | |
| int16_t* HP16, | |
| PreFiltBankstr* prefiltdata); | |
| void WebRtcIsacfix_FilterAndCombine2(int16_t* tempin_ch1, | |
| int16_t* tempin_ch2, | |
| int16_t* out16, | |
| PostFiltBankstr* postfiltdata, | |
| int16_t len); | |
| #endif | |
| /* normalized lattice filters */ | |
| void WebRtcIsacfix_NormLatticeFilterMa(size_t orderCoef, | |
| int32_t* stateGQ15, | |
| int16_t* lat_inQ0, | |
| int16_t* filt_coefQ15, | |
| int32_t* gain_lo_hiQ17, | |
| int16_t lo_hi, | |
| int16_t* lat_outQ9); | |
| void WebRtcIsacfix_NormLatticeFilterAr(size_t orderCoef, | |
| int16_t* stateGQ0, | |
| int32_t* lat_inQ25, | |
| int16_t* filt_coefQ15, | |
| int32_t* gain_lo_hiQ17, | |
| int16_t lo_hi, | |
| int16_t* lat_outQ0); | |
| /* TODO(kma): Remove the following functions into individual header files. */ | |
| /* Internal functions in both C and ARM Neon versions */ | |
| int WebRtcIsacfix_AutocorrC(int32_t* __restrict r, | |
| const int16_t* __restrict x, | |
| int16_t N, | |
| int16_t order, | |
| int16_t* __restrict scale); | |
| void WebRtcIsacfix_FilterMaLoopC(int16_t input0, | |
| int16_t input1, | |
| int32_t input2, | |
| int32_t* ptr0, | |
| int32_t* ptr1, | |
| int32_t* ptr2); | |
| #if defined(WEBRTC_HAS_NEON) | |
| int WebRtcIsacfix_AutocorrNeon(int32_t* __restrict r, | |
| const int16_t* __restrict x, | |
| int16_t N, | |
| int16_t order, | |
| int16_t* __restrict scale); | |
| void WebRtcIsacfix_FilterMaLoopNeon(int16_t input0, | |
| int16_t input1, | |
| int32_t input2, | |
| int32_t* ptr0, | |
| int32_t* ptr1, | |
| int32_t* ptr2); | |
| #endif | |
| #if defined(MIPS32_LE) | |
| int WebRtcIsacfix_AutocorrMIPS(int32_t* __restrict r, | |
| const int16_t* __restrict x, | |
| int16_t N, | |
| int16_t order, | |
| int16_t* __restrict scale); | |
| void WebRtcIsacfix_FilterMaLoopMIPS(int16_t input0, | |
| int16_t input1, | |
| int32_t input2, | |
| int32_t* ptr0, | |
| int32_t* ptr1, | |
| int32_t* ptr2); | |
| #endif | |
| /* Function pointers associated with the above functions. */ | |
| typedef int (*AutocorrFix)(int32_t* __restrict r, | |
| const int16_t* __restrict x, | |
| int16_t N, | |
| int16_t order, | |
| int16_t* __restrict scale); | |
| extern AutocorrFix WebRtcIsacfix_AutocorrFix; | |
| typedef void (*FilterMaLoopFix)(int16_t input0, | |
| int16_t input1, | |
| int32_t input2, | |
| int32_t* ptr0, | |
| int32_t* ptr1, | |
| int32_t* ptr2); | |
| extern FilterMaLoopFix WebRtcIsacfix_FilterMaLoopFix; | |
| #ifdef __cplusplus | |
| } // extern "C" | |
| #endif | |
| #endif /* MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_CODEC_H_ */ |