/* * 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. */ /* * Interface for the codec database. */ #ifndef CODEC_DB_H #define CODEC_DB_H #include "typedefs.h" #include "webrtc_neteq.h" #include "codec_db_defines.h" #include "neteq_defines.h" #if defined(NETEQ_48KHZ_WIDEBAND) #define NUM_CNG_CODECS 4 #elif defined(NETEQ_32KHZ_WIDEBAND) #define NUM_CNG_CODECS 3 #elif defined(NETEQ_WIDEBAND) #define NUM_CNG_CODECS 2 #else #define NUM_CNG_CODECS 1 #endif typedef struct { WebRtc_Word16 position[NUM_TOTAL_CODECS]; WebRtc_Word16 nrOfCodecs; WebRtc_Word16 payloadType[NUM_CODECS]; FuncDecode funcDecode[NUM_CODECS]; FuncDecode funcDecodeRCU[NUM_CODECS]; FuncDecodePLC funcDecodePLC[NUM_CODECS]; FuncDecodeInit funcDecodeInit[NUM_CODECS]; FuncAddLatePkt funcAddLatePkt[NUM_CODECS]; FuncGetMDinfo funcGetMDinfo[NUM_CODECS]; FuncGetPitchInfo funcGetPitch[NUM_CODECS]; FuncUpdBWEst funcUpdBWEst[NUM_CODECS]; FuncGetErrorCode funcGetErrorCode[NUM_CODECS]; void * codec_state[NUM_CODECS]; WebRtc_UWord16 codec_fs[NUM_CODECS]; WebRtc_Word16 CNGpayloadType[NUM_CNG_CODECS]; } CodecDbInst_t; #define NO_SPLIT -1 /* codec payload cannot be split */ typedef struct { WebRtc_Word16 deltaBytes; WebRtc_Word16 deltaTime; } SplitInfo_t; /* * Resets the codec database. */ int WebRtcNetEQ_DbReset(CodecDbInst_t *inst); /* * Adds a new codec to the database. */ int WebRtcNetEQ_DbAdd(CodecDbInst_t *inst, enum WebRtcNetEQDecoder codec, WebRtc_Word16 payloadType, FuncDecode funcDecode, FuncDecode funcDecodeRCU, FuncDecodePLC funcDecodePLC, FuncDecodeInit funcDecodeInit, FuncAddLatePkt funcAddLatePkt, FuncGetMDinfo funcGetMDinfo, FuncGetPitchInfo funcGetPitch, FuncUpdBWEst funcUpdBWEst, FuncGetErrorCode funcGetErrorCode, void* codec_state, WebRtc_UWord16 codec_fs); /* * Removes a codec from the database. */ int WebRtcNetEQ_DbRemove(CodecDbInst_t *inst, enum WebRtcNetEQDecoder codec); /* * Get the decoder function pointers for a codec. */ int WebRtcNetEQ_DbGetPtrs(CodecDbInst_t *inst, enum WebRtcNetEQDecoder, CodecFuncInst_t *ptr_inst); /* * Returns payload number given a codec identifier. */ int WebRtcNetEQ_DbGetPayload(CodecDbInst_t *inst, enum WebRtcNetEQDecoder codecID); /* * Returns codec identifier given a payload number. */ int WebRtcNetEQ_DbGetCodec(CodecDbInst_t *inst, int payloadType); /* * Extracts the Payload Split information of the codec with the specified payloadType. */ int WebRtcNetEQ_DbGetSplitInfo(SplitInfo_t *inst, enum WebRtcNetEQDecoder codecID, int codedsize); /* * Returns 1 if codec is multiple description type, 0 otherwise. */ int WebRtcNetEQ_DbIsMDCodec(enum WebRtcNetEQDecoder codecID); /* * Returns 1 if payload type is registered as a CNG codec, 0 otherwise. */ int WebRtcNetEQ_DbIsCNGPayload(CodecDbInst_t *inst, int payloadType); /* * Return the sample rate for the codec with the given payload type, 0 if error. */ WebRtc_UWord16 WebRtcNetEQ_DbGetSampleRate(CodecDbInst_t *inst, int payloadType); #endif