blob: c95b53ff64e3bafd3ad00809d0c413757a1024bd [file] [log] [blame]
/*
* 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_ */