/* * 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. */ /* * This is the main API for NetEQ. Helper macros are located in webrtc_neteq_help_macros.h, * while some internal API functions are found in webrtc_neteq_internal.h. */ #include "typedefs.h" #ifndef WEBRTC_NETEQ_H #define WEBRTC_NETEQ_H #ifdef __cplusplus extern "C" { #endif /********************************************************** * Definitions */ enum WebRtcNetEQDecoder { kDecoderReservedStart, kDecoderPCMu, kDecoderPCMa, kDecoderPCMu_2ch, kDecoderPCMa_2ch, kDecoderILBC, kDecoderISAC, kDecoderISACswb, kDecoderISACfb, kDecoderPCM16B, kDecoderPCM16Bwb, kDecoderPCM16Bswb32kHz, kDecoderPCM16Bswb48kHz, kDecoderPCM16B_2ch, kDecoderPCM16Bwb_2ch, kDecoderPCM16Bswb32kHz_2ch, kDecoderG722, kDecoderG722_2ch, kDecoderRED, kDecoderAVT, kDecoderCNG, kDecoderArbitrary, kDecoderG729, kDecoderG729_1, kDecoderG726_16, kDecoderG726_24, kDecoderG726_32, kDecoderG726_40, kDecoderG722_1_16, kDecoderG722_1_24, kDecoderG722_1_32, kDecoderG722_1C_24, kDecoderG722_1C_32, kDecoderG722_1C_48, kDecoderOpus, kDecoderSPEEX_8, kDecoderSPEEX_16, kDecoderCELT_32, kDecoderCELT_32_2ch, kDecoderGSMFR, kDecoderAMR, kDecoderAMRWB, kDecoderReservedEnd }; enum WebRtcNetEQNetworkType { kUDPNormal, kUDPVideoSync, kTCPNormal, kTCPLargeJitter, kTCPXLargeJitter }; enum WebRtcNetEQOutputType { kOutputNormal, kOutputPLC, kOutputCNG, kOutputPLCtoCNG, kOutputVADPassive }; enum WebRtcNetEQPlayoutMode { kPlayoutOn, kPlayoutOff, kPlayoutFax, kPlayoutStreaming }; /* Available modes for background noise (inserted after long expands) */ enum WebRtcNetEQBGNMode { kBGNOn, /* default "normal" behavior with eternal noise */ kBGNFade, /* noise fades to zero after some time */ kBGNOff /* background noise is always zero */ }; /************************************************* * Definitions of decoder calls and the default * API function calls for each codec */ typedef int16_t (*WebRtcNetEQ_FuncDecode)(void* state, int16_t* encoded, int16_t len, int16_t* decoded, int16_t* speechType); typedef int16_t (*WebRtcNetEQ_FuncDecodePLC)(void* state, int16_t* decoded, int16_t frames); typedef int16_t (*WebRtcNetEQ_FuncDecodeInit)(void* state); typedef int16_t (*WebRtcNetEQ_FuncAddLatePkt)(void* state, int16_t* encoded, int16_t len); typedef int16_t (*WebRtcNetEQ_FuncGetMDinfo)(void* state); typedef int16_t (*WebRtcNetEQ_FuncGetPitchInfo)(void* state, int16_t* encoded, int16_t* length); typedef int16_t (*WebRtcNetEQ_FuncUpdBWEst)(void* state, const uint16_t *encoded, int32_t packet_size, uint16_t rtp_seq_number, uint32_t send_ts, uint32_t arr_ts); typedef int (*WebRtcNetEQ_FuncDurationEst)(void* state, const uint8_t* payload, int payload_length_bytes); typedef int16_t (*WebRtcNetEQ_FuncGetErrorCode)(void* state); /********************************************************** * Structures */ typedef struct { enum WebRtcNetEQDecoder codec; int16_t payloadType; WebRtcNetEQ_FuncDecode funcDecode; WebRtcNetEQ_FuncDecode funcDecodeRCU; WebRtcNetEQ_FuncDecodePLC funcDecodePLC; WebRtcNetEQ_FuncDecodeInit funcDecodeInit; WebRtcNetEQ_FuncAddLatePkt funcAddLatePkt; WebRtcNetEQ_FuncGetMDinfo funcGetMDinfo; WebRtcNetEQ_FuncGetPitchInfo funcGetPitch; WebRtcNetEQ_FuncUpdBWEst funcUpdBWEst; WebRtcNetEQ_FuncDurationEst funcDurationEst; WebRtcNetEQ_FuncGetErrorCode funcGetErrorCode; void* codec_state; uint16_t codec_fs; } WebRtcNetEQ_CodecDef; typedef struct { uint16_t fraction_lost; uint32_t cum_lost; uint32_t ext_max; uint32_t jitter; } WebRtcNetEQ_RTCPStat; /********************************************************** * NETEQ Functions */ /* Info functions */ #define WEBRTC_NETEQ_MAX_ERROR_NAME 40 int WebRtcNetEQ_GetErrorCode(void *inst); int WebRtcNetEQ_GetErrorName(int errorCode, char *errorName, int maxStrLen); /* Instance memory assign functions */ int WebRtcNetEQ_AssignSize(int *sizeinbytes); int WebRtcNetEQ_Assign(void **inst, void *NETEQ_inst_Addr); int WebRtcNetEQ_GetRecommendedBufferSize(void *inst, const enum WebRtcNetEQDecoder *codec, int noOfCodecs, enum WebRtcNetEQNetworkType nwType, int *MaxNoOfPackets, int *sizeinbytes, int* per_packet_overhead_bytes); int WebRtcNetEQ_AssignBuffer(void *inst, int MaxNoOfPackets, void *NETEQ_Buffer_Addr, int sizeinbytes); /* Init functions */ int WebRtcNetEQ_Init(void *inst, uint16_t fs); int WebRtcNetEQ_SetAVTPlayout(void *inst, int PlayoutAVTon); int WebRtcNetEQ_SetExtraDelay(void *inst, int DelayInMs); int WebRtcNetEQ_SetPlayoutMode(void *inst, enum WebRtcNetEQPlayoutMode playoutMode); int WebRtcNetEQ_SetBGNMode(void *inst, enum WebRtcNetEQBGNMode bgnMode); int WebRtcNetEQ_GetBGNMode(const void *inst, enum WebRtcNetEQBGNMode *bgnMode); /* Codec Database functions */ int WebRtcNetEQ_CodecDbReset(void *inst); int WebRtcNetEQ_CodecDbAdd(void *inst, WebRtcNetEQ_CodecDef *codecInst); int WebRtcNetEQ_CodecDbRemove(void *inst, enum WebRtcNetEQDecoder codec); int WebRtcNetEQ_CodecDbGetSizeInfo(void *inst, int16_t *UsedEntries, int16_t *MaxEntries); int WebRtcNetEQ_CodecDbGetCodecInfo(void *inst, int16_t Entry, enum WebRtcNetEQDecoder *codec); /* Real-time functions */ int WebRtcNetEQ_RecIn(void *inst, int16_t *p_w16datagramstart, int16_t w16_RTPlen, uint32_t uw32_timeRec); int WebRtcNetEQ_RecOut(void *inst, int16_t *pw16_outData, int16_t *pw16_len); int WebRtcNetEQ_GetRTCPStats(void *inst, WebRtcNetEQ_RTCPStat *RTCP_inst); int WebRtcNetEQ_GetRTCPStatsNoReset(void *inst, WebRtcNetEQ_RTCPStat *RTCP_inst); int WebRtcNetEQ_GetSpeechTimeStamp(void *inst, uint32_t *timestamp); int WebRtcNetEQ_DecodedRtpInfo(const void* inst, int* sequence_number, uint32_t* timestamp); int WebRtcNetEQ_GetSpeechOutputType(void *inst, enum WebRtcNetEQOutputType *outputType); /* VQmon related functions */ int WebRtcNetEQ_VQmonRecOutStatistics(void *inst, uint16_t *validVoiceDurationMs, uint16_t *concealedVoiceDurationMs, uint8_t *concealedVoiceFlags); int WebRtcNetEQ_VQmonGetConfiguration(void *inst, uint16_t *absMaxDelayMs, uint8_t *adaptationRate); int WebRtcNetEQ_VQmonGetRxStatistics(void *inst, uint16_t *avgDelayMs, uint16_t *maxDelayMs); #ifdef __cplusplus } #endif #endif