| /* |
| * Copyright (c) 2011 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 WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_CODEC_H_ |
| #define WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_CODEC_H_ |
| |
| #include "structs.h" |
| |
| int WebRtcIsac_EstimateBandwidth( |
| BwEstimatorstr* bwest_str, |
| Bitstr* streamdata, |
| WebRtc_Word32 packet_size, |
| WebRtc_UWord16 rtp_seq_number, |
| WebRtc_UWord32 send_ts, |
| WebRtc_UWord32 arr_ts, |
| enum IsacSamplingRate encoderSampRate, |
| enum IsacSamplingRate decoderSampRate); |
| |
| int WebRtcIsac_DecodeLb( |
| float* signal_out, |
| ISACLBDecStruct* ISACdec_obj, |
| WebRtc_Word16* current_framesamples, |
| WebRtc_Word16 isRCUPayload); |
| |
| int WebRtcIsac_DecodeRcuLb( |
| float* signal_out, |
| ISACLBDecStruct* ISACdec_obj, |
| WebRtc_Word16* current_framesamples); |
| |
| int WebRtcIsac_EncodeLb( |
| float* in, |
| ISACLBEncStruct* ISACencLB_obj, |
| WebRtc_Word16 codingMode, |
| WebRtc_Word16 bottleneckIndex); |
| |
| int WebRtcIsac_EncodeStoredDataLb( |
| const ISAC_SaveEncData_t* ISACSavedEnc_obj, |
| Bitstr* ISACBitStr_obj, |
| int BWnumber, |
| float scale); |
| |
| |
| int WebRtcIsac_EncodeStoredDataUb12( |
| const ISACUBSaveEncDataStruct* ISACSavedEnc_obj, |
| Bitstr* bitStream, |
| WebRtc_Word32 jitterInfo, |
| float scale); |
| |
| int WebRtcIsac_EncodeStoredDataUb16( |
| const ISACUBSaveEncDataStruct* ISACSavedEnc_obj, |
| Bitstr* bitStream, |
| WebRtc_Word32 jitterInfo, |
| float scale); |
| |
| |
| WebRtc_Word16 WebRtcIsac_GetRedPayloadUb( |
| const ISACUBSaveEncDataStruct* ISACSavedEncObj, |
| Bitstr* bitStreamObj, |
| enum ISACBandwidth bandwidth); |
| /****************************************************************************** |
| * WebRtcIsac_RateAllocation() |
| * Internal function to perform a rate-allocation for upper and lower-band, |
| * given a total rate. |
| * |
| * Input: |
| * - inRateBitPerSec : a total bit-rate in bits/sec. |
| * |
| * Output: |
| * - rateLBBitPerSec : a bit-rate allocated to the lower-band |
| * in bits/sec. |
| * - rateUBBitPerSec : a bit-rate allocated to the upper-band |
| * in bits/sec. |
| * |
| * Return value : 0 if rate allocation has been successful. |
| * -1 if failed to allocate rates. |
| */ |
| |
| WebRtc_Word16 |
| WebRtcIsac_RateAllocation( |
| WebRtc_Word32 inRateBitPerSec, |
| double* rateLBBitPerSec, |
| double* rateUBBitPerSec, |
| enum ISACBandwidth* bandwidthKHz); |
| |
| |
| /****************************************************************************** |
| * WebRtcIsac_DecodeUb16() |
| * |
| * Decode the upper-band if the codec is in 0-16 kHz mode. |
| * |
| * Input/Output: |
| * -ISACdec_obj : pointer to the upper-band decoder object. The |
| * bit-stream is stored inside the decoder object. |
| * |
| * Output: |
| * -signal_out : decoded audio, 480 samples 30 ms. |
| * |
| * Return value : >0 number of decoded bytes. |
| * <0 if an error occurred. |
| */ |
| int WebRtcIsac_DecodeUb16( |
| float* signal_out, |
| ISACUBDecStruct* ISACdec_obj, |
| WebRtc_Word16 isRCUPayload); |
| |
| |
| /****************************************************************************** |
| * WebRtcIsac_DecodeUb12() |
| * |
| * Decode the upper-band if the codec is in 0-12 kHz mode. |
| * |
| * Input/Output: |
| * -ISACdec_obj : pointer to the upper-band decoder object. The |
| * bit-stream is stored inside the decoder object. |
| * |
| * Output: |
| * -signal_out : decoded audio, 480 samples 30 ms. |
| * |
| * Return value : >0 number of decoded bytes. |
| * <0 if an error occurred. |
| */ |
| int WebRtcIsac_DecodeUb12( |
| float* signal_out, |
| ISACUBDecStruct* ISACdec_obj, |
| WebRtc_Word16 isRCUPayload); |
| |
| |
| /****************************************************************************** |
| * WebRtcIsac_EncodeUb16() |
| * |
| * Encode the upper-band if the codec is in 0-16 kHz mode. |
| * |
| * Input: |
| * -in : upper-band audio, 160 samples (10 ms). |
| * |
| * Input/Output: |
| * -ISACdec_obj : pointer to the upper-band encoder object. The |
| * bit-stream is stored inside the encoder object. |
| * |
| * Return value : >0 number of encoded bytes. |
| * <0 if an error occurred. |
| */ |
| int WebRtcIsac_EncodeUb16( |
| float* in, |
| ISACUBEncStruct* ISACenc_obj, |
| WebRtc_Word32 jitterInfo); |
| |
| |
| /****************************************************************************** |
| * WebRtcIsac_EncodeUb12() |
| * |
| * Encode the upper-band if the codec is in 0-12 kHz mode. |
| * |
| * Input: |
| * -in : upper-band audio, 160 samples (10 ms). |
| * |
| * Input/Output: |
| * -ISACdec_obj : pointer to the upper-band encoder object. The |
| * bit-stream is stored inside the encoder object. |
| * |
| * Return value : >0 number of encoded bytes. |
| * <0 if an error occurred. |
| */ |
| int WebRtcIsac_EncodeUb12( |
| float* in, |
| ISACUBEncStruct* ISACenc_obj, |
| WebRtc_Word32 jitterInfo); |
| |
| /************************** initialization functions *************************/ |
| |
| void WebRtcIsac_InitMasking(MaskFiltstr *maskdata); |
| |
| void WebRtcIsac_InitPreFilterbank(PreFiltBankstr *prefiltdata); |
| |
| void WebRtcIsac_InitPostFilterbank(PostFiltBankstr *postfiltdata); |
| |
| void WebRtcIsac_InitPitchFilter(PitchFiltstr *pitchfiltdata); |
| |
| void WebRtcIsac_InitPitchAnalysis(PitchAnalysisStruct *State); |
| |
| |
| /**************************** transform functions ****************************/ |
| |
| void WebRtcIsac_InitTransform(); |
| |
| void WebRtcIsac_Time2Spec(double *inre1, |
| double *inre2, |
| WebRtc_Word16 *outre, |
| WebRtc_Word16 *outim, |
| FFTstr *fftstr_obj); |
| |
| void WebRtcIsac_Spec2time(double *inre, |
| double *inim, |
| double *outre1, |
| double *outre2, |
| FFTstr *fftstr_obj); |
| |
| |
| /******************************* filter functions ****************************/ |
| |
| void WebRtcIsac_AllPoleFilter(double *InOut, |
| double *Coef, |
| int lengthInOut, |
| int orderCoef); |
| |
| void WebRtcIsac_AllZeroFilter(double *In, |
| double *Coef, |
| int lengthInOut, |
| int orderCoef, |
| double *Out); |
| |
| void WebRtcIsac_ZeroPoleFilter(double *In, |
| double *ZeroCoef, |
| double *PoleCoef, |
| int lengthInOut, |
| int orderCoef, |
| double *Out); |
| |
| |
| /***************************** filterbank functions **************************/ |
| |
| void WebRtcIsac_SplitAndFilter(double *in, |
| double *LP, |
| double *HP, |
| double *LP_la, |
| double *HP_la, |
| PreFiltBankstr *prefiltdata); |
| |
| |
| void WebRtcIsac_FilterAndCombine(double *InLP, |
| double *InHP, |
| double *Out, |
| PostFiltBankstr *postfiltdata); |
| |
| |
| |
| void WebRtcIsac_SplitAndFilterFloat(float *in, |
| float *LP, |
| float *HP, |
| double *LP_la, |
| double *HP_la, |
| PreFiltBankstr *prefiltdata); |
| |
| |
| void WebRtcIsac_FilterAndCombineFloat(float *InLP, |
| float *InHP, |
| float *Out, |
| PostFiltBankstr *postfiltdata); |
| |
| |
| /************************* normalized lattice filters ************************/ |
| |
| void WebRtcIsac_NormLatticeFilterMa(int orderCoef, |
| float *stateF, |
| float *stateG, |
| float *lat_in, |
| double *filtcoeflo, |
| double *lat_out); |
| |
| void WebRtcIsac_NormLatticeFilterAr(int orderCoef, |
| float *stateF, |
| float *stateG, |
| double *lat_in, |
| double *lo_filt_coef, |
| float *lat_out); |
| |
| void WebRtcIsac_Dir2Lat(double *a, |
| int orderCoef, |
| float *sth, |
| float *cth); |
| |
| void WebRtcIsac_AutoCorr(double *r, |
| const double *x, |
| int N, |
| int order); |
| |
| #endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_CODEC_H_ */ |