630 lines
14 KiB
C++
630 lines
14 KiB
C++
|
/*
|
||
|
* 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.
|
||
|
*/
|
||
|
|
||
|
#include "NETEQTEST_CodecClass.h"
|
||
|
#include "webrtc_neteq_help_macros.h"
|
||
|
|
||
|
NETEQTEST_Decoder::NETEQTEST_Decoder(enum WebRtcNetEQDecoder type, WebRtc_UWord16 fs, const char * name, WebRtc_UWord8 pt)
|
||
|
:
|
||
|
_decoder(NULL),
|
||
|
_decoderType(type),
|
||
|
_pt(pt),
|
||
|
_fs(fs),
|
||
|
_name(name)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
int NETEQTEST_Decoder::loadToNetEQ(NETEQTEST_NetEQClass & neteq, WebRtcNetEQ_CodecDef & codecInst)
|
||
|
{
|
||
|
SET_CODEC_PAR(codecInst, _decoderType, _pt, _decoder, _fs);
|
||
|
int err = neteq.loadCodec(codecInst);
|
||
|
|
||
|
if (err)
|
||
|
{
|
||
|
printf("Error loading codec %s into NetEQ database\n", _name.c_str());
|
||
|
}
|
||
|
|
||
|
return(err);
|
||
|
}
|
||
|
|
||
|
|
||
|
// iSAC
|
||
|
#ifdef CODEC_ISAC
|
||
|
#include "isac.h"
|
||
|
|
||
|
decoder_iSAC::decoder_iSAC(WebRtc_UWord8 pt)
|
||
|
:
|
||
|
NETEQTEST_Decoder(kDecoderISAC, 16000, "iSAC", pt)
|
||
|
{
|
||
|
WebRtc_Word16 err = WebRtcIsac_Create((ISACStruct **) &_decoder);
|
||
|
if (err)
|
||
|
{
|
||
|
throw std::exception();
|
||
|
}
|
||
|
|
||
|
WebRtcIsac_EncoderInit((ISACStruct *) _decoder, 0);
|
||
|
WebRtcIsac_SetDecSampRate((ISACStruct *) _decoder, kIsacWideband);
|
||
|
}
|
||
|
|
||
|
|
||
|
decoder_iSAC::~decoder_iSAC()
|
||
|
{
|
||
|
if (_decoder)
|
||
|
{
|
||
|
WebRtcIsac_Free((ISACStruct *) _decoder);
|
||
|
_decoder = NULL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
int decoder_iSAC::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_ISAC_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_ISAC_SWB
|
||
|
decoder_iSACSWB::decoder_iSACSWB(WebRtc_UWord8 pt)
|
||
|
:
|
||
|
NETEQTEST_Decoder(kDecoderISACswb, 32000, "iSAC swb", pt)
|
||
|
{
|
||
|
WebRtc_Word16 err = WebRtcIsac_Create((ISACStruct **) &_decoder);
|
||
|
if (err)
|
||
|
{
|
||
|
throw std::exception();
|
||
|
}
|
||
|
|
||
|
WebRtcIsac_EncoderInit((ISACStruct *) _decoder, 0);
|
||
|
WebRtcIsac_SetDecSampRate((ISACStruct *) _decoder, kIsacSuperWideband);
|
||
|
}
|
||
|
|
||
|
decoder_iSACSWB::~decoder_iSACSWB()
|
||
|
{
|
||
|
if (_decoder)
|
||
|
{
|
||
|
WebRtcIsac_Free((ISACStruct *) _decoder);
|
||
|
_decoder = NULL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int decoder_iSACSWB::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_ISACSWB_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
// PCM u/A
|
||
|
#ifdef CODEC_G711
|
||
|
#include "g711_interface.h"
|
||
|
|
||
|
decoder_PCMU::decoder_PCMU(WebRtc_UWord8 pt)
|
||
|
:
|
||
|
NETEQTEST_Decoder(kDecoderPCMu, 8000, "G.711-u", pt)
|
||
|
{
|
||
|
// no state to crate or init
|
||
|
}
|
||
|
|
||
|
int decoder_PCMU::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_PCMU_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
|
||
|
}
|
||
|
|
||
|
decoder_PCMA::decoder_PCMA(WebRtc_UWord8 pt)
|
||
|
:
|
||
|
NETEQTEST_Decoder(kDecoderPCMa, 8000, "G.711-A", pt)
|
||
|
{
|
||
|
// no state to crate or init
|
||
|
}
|
||
|
|
||
|
int decoder_PCMA::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_PCMA_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
// Linear PCM16b
|
||
|
#if (defined(CODEC_PCM16B) || defined(CODEC_PCM16B_WB) || \
|
||
|
defined(CODEC_PCM16B_32KHZ) || defined(CODEC_PCM16B_48KHZ))
|
||
|
#include "pcm16b.h"
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_PCM16B
|
||
|
int decoder_PCM16B_NB::loadToNetEQ(NETEQTEST_NetEQClass &neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_PCM16B_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_PCM16B_WB
|
||
|
int decoder_PCM16B_WB::loadToNetEQ(NETEQTEST_NetEQClass &neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_PCM16B_WB_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_PCM16B_32KHZ
|
||
|
int decoder_PCM16B_SWB32::loadToNetEQ(NETEQTEST_NetEQClass &neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_PCM16B_SWB32_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_PCM16B_48KHZ
|
||
|
int decoder_PCM16B_SWB48::loadToNetEQ(NETEQTEST_NetEQClass &neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_PCM16B_SWB48_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_ILBC
|
||
|
#include "ilbc.h"
|
||
|
decoder_ILBC::decoder_ILBC(WebRtc_UWord8 pt)
|
||
|
:
|
||
|
NETEQTEST_Decoder(kDecoderILBC, 8000, "iLBC", pt)
|
||
|
{
|
||
|
WebRtc_Word16 err = WebRtcIlbcfix_DecoderCreate((iLBC_decinst_t **) &_decoder);
|
||
|
if (err)
|
||
|
{
|
||
|
throw std::exception();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
decoder_ILBC::~decoder_ILBC()
|
||
|
{
|
||
|
WebRtcIlbcfix_DecoderFree((iLBC_decinst_t *) _decoder);
|
||
|
}
|
||
|
|
||
|
int decoder_ILBC::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_ILBC_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_G729
|
||
|
#include "G729Interface.h"
|
||
|
decoder_G729::decoder_G729(WebRtc_UWord8 pt)
|
||
|
:
|
||
|
NETEQTEST_Decoder(kDecoderG729, 8000, "G.729", pt)
|
||
|
{
|
||
|
WebRtc_Word16 err = WebRtcG729_CreateDec((G729_decinst_t **) &_decoder);
|
||
|
if (err)
|
||
|
{
|
||
|
throw std::exception();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
decoder_G729::~decoder_G729()
|
||
|
{
|
||
|
WebRtcG729_FreeDec((G729_decinst_t *) _decoder);
|
||
|
}
|
||
|
|
||
|
int decoder_G729::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_G729_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_G729_1
|
||
|
#include "G729_1Interface.h"
|
||
|
decoder_G729_1::decoder_G729_1(WebRtc_UWord8 pt)
|
||
|
:
|
||
|
NETEQTEST_Decoder(kDecoderG729_1, 16000, "G.729.1", pt)
|
||
|
{
|
||
|
WebRtc_Word16 err = WebRtcG7291_Create((G729_1_inst_t **) &_decoder);
|
||
|
if (err)
|
||
|
{
|
||
|
throw std::exception();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
decoder_G729_1::~decoder_G729_1()
|
||
|
{
|
||
|
WebRtcG7291_Free((G729_1_inst_t *) _decoder);
|
||
|
}
|
||
|
|
||
|
int decoder_G729_1::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_G729_1_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_G722
|
||
|
#include "g722_interface.h"
|
||
|
decoder_G722::decoder_G722(WebRtc_UWord8 pt)
|
||
|
:
|
||
|
NETEQTEST_Decoder(kDecoderG722, 16000, "G.722", pt)
|
||
|
{
|
||
|
WebRtc_Word16 err = WebRtcG722_CreateDecoder((G722DecInst **) &_decoder);
|
||
|
if (err)
|
||
|
{
|
||
|
throw std::exception();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
decoder_G722::~decoder_G722()
|
||
|
{
|
||
|
WebRtcG722_FreeDecoder((G722DecInst *) _decoder);
|
||
|
}
|
||
|
|
||
|
int decoder_G722::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_G722_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#if (defined(CODEC_G722_1_16) || defined(CODEC_G722_1_24) || \
|
||
|
defined(CODEC_G722_1_32) || defined(CODEC_G722_1C_24) || \
|
||
|
defined(CODEC_G722_1C_32) || defined(CODEC_G722_1C_48))
|
||
|
#include "G722_1Interface.h"
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_G722_1_16
|
||
|
decoder_G722_1_16::decoder_G722_1_16(WebRtc_UWord8 pt)
|
||
|
:
|
||
|
NETEQTEST_Decoder(kDecoderG722_1_16, 16000, "G.722.1 (16 kbps)", pt)
|
||
|
{
|
||
|
if (WebRtcG7221_CreateDec16((G722_1_16_decinst_t **) &_decoder))
|
||
|
{
|
||
|
throw std::exception();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
decoder_G722_1_16::~decoder_G722_1_16()
|
||
|
{
|
||
|
WebRtcG7221_FreeDec16((G722_1_16_decinst_t *) _decoder);
|
||
|
}
|
||
|
|
||
|
int decoder_G722_1_16::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_G722_1_16_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_G722_1_24
|
||
|
decoder_G722_1_24::decoder_G722_1_24(WebRtc_UWord8 pt)
|
||
|
:
|
||
|
NETEQTEST_Decoder(kDecoderG722_1_24, 16000, "G.722.1 (24 kbps)", pt)
|
||
|
{
|
||
|
if (WebRtcG7221_CreateDec24((G722_1_24_decinst_t **) &_decoder))
|
||
|
{
|
||
|
throw std::exception();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
decoder_G722_1_24::~decoder_G722_1_24()
|
||
|
{
|
||
|
WebRtcG7221_FreeDec24((G722_1_24_decinst_t *) _decoder);
|
||
|
}
|
||
|
|
||
|
int decoder_G722_1_24::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_G722_1_24_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_G722_1_32
|
||
|
decoder_G722_1_32::decoder_G722_1_32(WebRtc_UWord8 pt)
|
||
|
:
|
||
|
NETEQTEST_Decoder(kDecoderG722_1_32, 16000, "G.722.1 (32 kbps)", pt)
|
||
|
{
|
||
|
if (WebRtcG7221_CreateDec32((G722_1_32_decinst_t **) &_decoder))
|
||
|
{
|
||
|
throw std::exception();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
decoder_G722_1_32::~decoder_G722_1_32()
|
||
|
{
|
||
|
WebRtcG7221_FreeDec32((G722_1_32_decinst_t *) _decoder);
|
||
|
}
|
||
|
|
||
|
int decoder_G722_1_32::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_G722_1_32_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_G722_1C_24
|
||
|
decoder_G722_1C_24::decoder_G722_1C_24(WebRtc_UWord8 pt)
|
||
|
:
|
||
|
NETEQTEST_Decoder(kDecoderG722_1C_24, 32000, "G.722.1C (24 kbps)", pt)
|
||
|
{
|
||
|
if (WebRtcG7221C_CreateDec24((G722_1C_24_decinst_t **) &_decoder))
|
||
|
throw std::exception();
|
||
|
}
|
||
|
|
||
|
decoder_G722_1C_24::~decoder_G722_1C_24()
|
||
|
{
|
||
|
WebRtcG7221C_FreeDec24((G722_1C_24_decinst_t *) _decoder);
|
||
|
}
|
||
|
|
||
|
int decoder_G722_1C_24::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_G722_1C_24_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_G722_1C_32
|
||
|
decoder_G722_1C_32::decoder_G722_1C_32(WebRtc_UWord8 pt)
|
||
|
:
|
||
|
NETEQTEST_Decoder(kDecoderG722_1C_32, 32000, "G.722.1C (32 kbps)", pt)
|
||
|
{
|
||
|
if (WebRtcG7221C_CreateDec32((G722_1C_32_decinst_t **) &_decoder))
|
||
|
throw std::exception();
|
||
|
}
|
||
|
|
||
|
decoder_G722_1C_32::~decoder_G722_1C_32()
|
||
|
{
|
||
|
WebRtcG7221C_FreeDec32((G722_1C_32_decinst_t *) _decoder);
|
||
|
}
|
||
|
|
||
|
int decoder_G722_1C_32::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_G722_1C_32_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_G722_1C_48
|
||
|
decoder_G722_1C_48::decoder_G722_1C_48(WebRtc_UWord8 pt)
|
||
|
:
|
||
|
NETEQTEST_Decoder(kDecoderG722_1C_48, 32000, "G.722.1C (48 kbps)", pt)
|
||
|
{
|
||
|
if (WebRtcG7221C_CreateDec48((G722_1C_48_decinst_t **) &_decoder))
|
||
|
throw std::exception();
|
||
|
}
|
||
|
|
||
|
decoder_G722_1C_48::~decoder_G722_1C_48()
|
||
|
{
|
||
|
WebRtcG7221C_FreeDec48((G722_1C_48_decinst_t *) _decoder);
|
||
|
}
|
||
|
|
||
|
int decoder_G722_1C_48::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_G722_1C_48_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_AMR
|
||
|
#include "AMRInterface.h"
|
||
|
#include "AMRCreation.h"
|
||
|
decoder_AMR::decoder_AMR(WebRtc_UWord8 pt)
|
||
|
:
|
||
|
NETEQTEST_Decoder(kDecoderAMR, 8000, "AMR", pt)
|
||
|
{
|
||
|
if (WebRtcAmr_CreateDec((AMR_decinst_t **) &_decoder))
|
||
|
throw std::exception();
|
||
|
|
||
|
WebRtcAmr_DecodeBitmode((AMR_decinst_t *) _decoder, AMRBandwidthEfficient);
|
||
|
}
|
||
|
|
||
|
decoder_AMR::~decoder_AMR()
|
||
|
{
|
||
|
WebRtcAmr_FreeDec((AMR_decinst_t *) _decoder);
|
||
|
}
|
||
|
|
||
|
int decoder_AMR::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_AMR_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_AMRWB
|
||
|
#include "AMRWBInterface.h"
|
||
|
#include "AMRWBCreation.h"
|
||
|
decoder_AMRWB::decoder_AMRWB(WebRtc_UWord8 pt)
|
||
|
:
|
||
|
NETEQTEST_Decoder(kDecoderAMRWB, 16000, "AMR wb", pt)
|
||
|
{
|
||
|
if (WebRtcAmrWb_CreateDec((AMRWB_decinst_t **) &_decoder))
|
||
|
throw std::exception();
|
||
|
|
||
|
WebRtcAmrWb_DecodeBitmode((AMRWB_decinst_t *) _decoder, AMRBandwidthEfficient);
|
||
|
}
|
||
|
|
||
|
decoder_AMRWB::~decoder_AMRWB()
|
||
|
{
|
||
|
WebRtcAmrWb_FreeDec((AMRWB_decinst_t *) _decoder);
|
||
|
}
|
||
|
|
||
|
int decoder_AMRWB::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_AMRWB_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_GSMFR
|
||
|
#include "GSMFRInterface.h"
|
||
|
#include "GSMFRCreation.h"
|
||
|
decoder_GSMFR::decoder_GSMFR(WebRtc_UWord8 pt)
|
||
|
:
|
||
|
NETEQTEST_Decoder(kDecoderGSMFR, 8000, "GSM-FR", pt)
|
||
|
{
|
||
|
if (WebRtcGSMFR_CreateDec((GSMFR_decinst_t **) &_decoder))
|
||
|
throw std::exception();
|
||
|
}
|
||
|
|
||
|
decoder_GSMFR::~decoder_GSMFR()
|
||
|
{
|
||
|
WebRtcGSMFR_FreeDec((GSMFR_decinst_t *) _decoder);
|
||
|
}
|
||
|
|
||
|
int decoder_GSMFR::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_GSMFR_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#if (defined(CODEC_SPEEX_8) || defined (CODEC_SPEEX_16))
|
||
|
#include "SpeexInterface.h"
|
||
|
decoder_SPEEX::decoder_SPEEX(WebRtc_UWord8 pt, WebRtc_UWord16 fs)
|
||
|
:
|
||
|
NETEQTEST_Decoder(fs == 8000 ? kDecoderSPEEX_8 : kDecoderSPEEX_16,
|
||
|
fs, "SPEEX " + fs/1000, pt)
|
||
|
{
|
||
|
if (fs != 8000 && fs != 16000)
|
||
|
throw std::exception("Wrong sample rate for SPEEX");
|
||
|
|
||
|
if (WebRtcSpeex_CreateDec((SPEEX_decinst_t **) &_decoder, fs, 1))
|
||
|
throw std::exception();
|
||
|
}
|
||
|
|
||
|
decoder_SPEEX::~decoder_SPEEX()
|
||
|
{
|
||
|
WebRtcSpeex_FreeDec((SPEEX_decinst_t *) _decoder);
|
||
|
}
|
||
|
|
||
|
int decoder_SPEEX::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_SPEEX_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_RED
|
||
|
int decoder_RED::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_RED_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifdef CODEC_ATEVENT_DECODE
|
||
|
int decoder_AVT::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_AVT_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#if (defined(CODEC_CNGCODEC8) || defined(CODEC_CNGCODEC16) || \
|
||
|
defined(CODEC_CNGCODEC32) || defined(CODEC_CNGCODEC48))
|
||
|
#include "webrtc_cng.h"
|
||
|
decoder_CNG::decoder_CNG(WebRtc_UWord8 pt, WebRtc_UWord16 fs)
|
||
|
:
|
||
|
NETEQTEST_Decoder(kDecoderCNG, fs, "CNG " + fs/1000, pt)
|
||
|
{
|
||
|
if (fs != 8000 && fs != 16000 && fs != 32000 && fs != 48000)
|
||
|
throw std::exception();
|
||
|
|
||
|
if (WebRtcCng_CreateDec((CNG_dec_inst **) &_decoder))
|
||
|
throw std::exception();
|
||
|
}
|
||
|
|
||
|
decoder_CNG::~decoder_CNG()
|
||
|
{
|
||
|
WebRtcCng_FreeDec((CNG_dec_inst *) _decoder);
|
||
|
}
|
||
|
|
||
|
int decoder_CNG::loadToNetEQ(NETEQTEST_NetEQClass & neteq)
|
||
|
{
|
||
|
WebRtcNetEQ_CodecDef codecInst;
|
||
|
|
||
|
SET_CNG_FUNCTIONS(codecInst);
|
||
|
|
||
|
return(NETEQTEST_Decoder::loadToNetEQ(neteq, codecInst));
|
||
|
}
|
||
|
#endif
|