/* * 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_MAIN_SOURCE_CODEC_H_ #define MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_CODEC_H_ #include #include "modules/audio_coding/codecs/isac/main/source/structs.h" #include "modules/third_party/fft/fft.h" void WebRtcIsac_ResetBitstream(Bitstr* bit_stream); int WebRtcIsac_EstimateBandwidth(BwEstimatorstr* bwest_str, Bitstr* streamdata, size_t packet_size, uint16_t rtp_seq_number, uint32_t send_ts, uint32_t arr_ts, enum IsacSamplingRate encoderSampRate, enum IsacSamplingRate decoderSampRate); int WebRtcIsac_DecodeLb(const TransformTables* transform_tables, float* signal_out, ISACLBDecStruct* ISACdec_obj, int16_t* current_framesamples, int16_t isRCUPayload); int WebRtcIsac_DecodeRcuLb(float* signal_out, ISACLBDecStruct* ISACdec_obj, int16_t* current_framesamples); int WebRtcIsac_EncodeLb(const TransformTables* transform_tables, float* in, ISACLBEncStruct* ISACencLB_obj, int16_t codingMode, int16_t bottleneckIndex); int WebRtcIsac_EncodeStoredDataLb(const IsacSaveEncoderData* ISACSavedEnc_obj, Bitstr* ISACBitStr_obj, int BWnumber, float scale); int WebRtcIsac_EncodeStoredDataUb( const ISACUBSaveEncDataStruct* ISACSavedEnc_obj, Bitstr* bitStream, int32_t jitterInfo, float scale, enum ISACBandwidth bandwidth); int16_t 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. */ int16_t WebRtcIsac_RateAllocation(int32_t 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(const TransformTables* transform_tables, float* signal_out, ISACUBDecStruct* ISACdec_obj, int16_t 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(const TransformTables* transform_tables, float* signal_out, ISACUBDecStruct* ISACdec_obj, int16_t 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(const TransformTables* transform_tables, float* in, ISACUBEncStruct* ISACenc_obj, int32_t 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(const TransformTables* transform_tables, float* in, ISACUBEncStruct* ISACenc_obj, int32_t jitterInfo); /************************** initialization functions *************************/ void WebRtcIsac_InitMasking(MaskFiltstr* maskdata); void WebRtcIsac_InitPostFilterbank(PostFiltBankstr* postfiltdata); /**************************** transform functions ****************************/ void WebRtcIsac_InitTransform(TransformTables* tables); void WebRtcIsac_Time2Spec(const TransformTables* tables, double* inre1, double* inre2, int16_t* outre, int16_t* outim, FFTstr* fftstr_obj); void WebRtcIsac_Spec2time(const TransformTables* tables, double* inre, double* inim, double* outre1, double* outre2, FFTstr* fftstr_obj); /***************************** filterbank functions **************************/ 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); #endif /* MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_CODEC_H_ */