This is from the upstream library commit id 3326535126e435f1ba647885ce43a8f0f3d317eb, corresponding to Chromium 88.0.4290.1.
224 lines
8.4 KiB
C
224 lines
8.4 KiB
C
/*
|
|
* 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 <stddef.h>
|
|
|
|
#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_ */
|