344 lines
11 KiB
C
344 lines
11 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.
|
|
*/
|
|
|
|
/*****************************************************************************************
|
|
*
|
|
* Compilation flags in NetEQ:
|
|
*
|
|
*****************************************************************************************
|
|
*
|
|
***** Platform flags ******
|
|
*
|
|
* SCRATCH Run NetEQ with "Scratch memory" to save some stack memory.
|
|
* Definition can be used on all platforms
|
|
*
|
|
***** Summary flags ******
|
|
*
|
|
* NETEQ_ALL_SPECIAL_CODECS Add support for special codecs (CN/RED/DTMF)
|
|
*
|
|
* NETEQ_ALL_NB_CODECS Add support for all NB codecs (except CN/RED/DTMF)
|
|
*
|
|
* NETEQ_ALL_WB_CODECS Add support for all WB codecs (except CN/RED/DTMF)
|
|
*
|
|
* NETEQ_VOICEENGINE_CODECS Support for all NB, WB and SWB32 codecs and CN, RED and DTMF
|
|
*
|
|
* NETEQ_ALL_CODECS Support for all NB, WB, SWB 32kHz and SWB 48kHz as well as
|
|
* CN, RED and DTMF
|
|
*
|
|
***** Sampling frequency ******
|
|
* (Note: usually not needed when Summary flags are used)
|
|
*
|
|
* NETEQ_WIDEBAND Wideband enabled
|
|
*
|
|
* NETEQ_32KHZ_WIDEBAND Super wideband @ 32kHz enabled
|
|
*
|
|
* NETEQ_48KHZ_WIDEBAND Super wideband @ 48kHz enabled
|
|
*
|
|
***** Special Codec ******
|
|
* (Note: not needed if NETEQ_ALL_CODECS is used)
|
|
*
|
|
* NETEQ_RED_CODEC With this flag you enable NetEQ to understand redundancy in
|
|
* the RTP. NetEQ will use the redundancy if it's the same
|
|
* codec
|
|
*
|
|
* NETEQ_CNG_CODEC Enable DTX with the CN payload
|
|
*
|
|
* NETEQ_ATEVENT_DECODE Enable AVT event and play out the corresponding DTMF tone
|
|
*
|
|
***** Speech Codecs *****
|
|
* (Note: Not needed if Summary flags are used)
|
|
*
|
|
* NETEQ_G711_CODEC Enable G.711 u- and A-law
|
|
*
|
|
* NETEQ_PCM16B_CODEC Enable uncompressed 16-bit
|
|
*
|
|
* NETEQ_ILBC_CODEC Enable iLBC
|
|
*
|
|
* NETEQ_ISAC_CODEC Enable iSAC
|
|
*
|
|
* NETEQ_ISAC_SWB_CODEC Enable iSAC-SWB
|
|
*
|
|
* NETEQ_G722_CODEC Enable G.722
|
|
*
|
|
* NETEQ_G729_CODEC Enable G.729
|
|
*
|
|
* NETEQ_G729_1_CODEC Enable G.729.1
|
|
*
|
|
* NETEQ_G726_CODEC Enable G.726
|
|
*
|
|
* NETEQ_G722_1_CODEC Enable G722.1
|
|
*
|
|
* NETEQ_G722_1C_CODEC Enable G722.1 Annex C
|
|
*
|
|
* NETEQ_SPEEX_CODEC Enable Speex (at 8 and 16 kHz sample rate)
|
|
*
|
|
* NETEQ_GSMFR_CODEC Enable GSM-FR
|
|
*
|
|
* NETEQ_AMR_CODEC Enable AMR (narrowband)
|
|
*
|
|
* NETEQ_AMRWB_CODEC Enable AMR-WB
|
|
*
|
|
* NETEQ_CNG_CODEC Enable DTX with the CNG payload
|
|
*
|
|
* NETEQ_ATEVENT_DECODE Enable AVT event and play out the corresponding DTMF tone
|
|
*
|
|
***** Test flags ******
|
|
*
|
|
* WEBRTC_NETEQ_40BITACC_TEST Run NetEQ with simulated 40-bit accumulator to run
|
|
* bit-exact to a DSP implementation where the main (splib
|
|
* and NetEQ) functions have been 40-bit optimized
|
|
*
|
|
*****************************************************************************************
|
|
*/
|
|
|
|
#if !defined NETEQ_DEFINES_H
|
|
#define NETEQ_DEFINES_H
|
|
|
|
/* Data block structure for MCU to DSP communication:
|
|
*
|
|
*
|
|
* First 3 16-bit words are pre-header that contains instructions and timestamp update
|
|
* Fourth 16-bit word is length of data block 1
|
|
* Rest is payload data
|
|
*
|
|
* 0 48 64 80
|
|
* -------------...----------------------------------------------------------------------
|
|
* | PreHeader ... | Length 1 | Payload data 1 ...... | Lenght 2| Data block 2.... | ...
|
|
* -------------...----------------------------------------------------------------------
|
|
*
|
|
*
|
|
* Preheader:
|
|
* 4 MSB can be either of:
|
|
*/
|
|
|
|
#define DSP_INSTR_NORMAL 0x1000
|
|
/* Payload data will contain the encoded frames */
|
|
|
|
#define DSP_INSTR_MERGE 0x2000
|
|
/* Payload data block 1 will contain the encoded frame */
|
|
/* Info block will contain the number of missing samples */
|
|
|
|
#define DSP_INSTR_EXPAND 0x3000
|
|
/* Payload data will be empty */
|
|
|
|
#define DSP_INSTR_ACCELERATE 0x4000
|
|
/* Payload data will contain the encoded frame */
|
|
|
|
#define DSP_INSTR_DO_RFC3389CNG 0x5000
|
|
/* Payload data will contain the SID frame if there is one*/
|
|
|
|
#define DSP_INSTR_DTMF_GENERATE 0x6000
|
|
/* Payload data will be one WebRtc_Word16 with the current DTMF value and one
|
|
* WebRtc_Word16 with the current volume value
|
|
*/
|
|
#define DSP_INSTR_NORMAL_ONE_DESC 0x7000
|
|
/* No encoded frames */
|
|
|
|
#define DSP_INSTR_DO_CODEC_INTERNAL_CNG 0x8000
|
|
/* Codec has a built-in VAD/DTX scheme (use the above for "no transmission") */
|
|
|
|
#define DSP_INSTR_PREEMPTIVE_EXPAND 0x9000
|
|
/* Payload data will contain the encoded frames, if any */
|
|
|
|
#define DSP_INSTR_DO_ALTERNATIVE_PLC 0xB000
|
|
/* NetEQ switched off and packet missing... */
|
|
|
|
#define DSP_INSTR_DO_ALTERNATIVE_PLC_INC_TS 0xC000
|
|
/* NetEQ switched off and packet missing... */
|
|
|
|
#define DSP_INSTR_DO_AUDIO_REPETITION 0xD000
|
|
/* NetEQ switched off and packet missing... */
|
|
|
|
#define DSP_INSTR_DO_AUDIO_REPETITION_INC_TS 0xE000
|
|
/* NetEQ switched off and packet missing... */
|
|
|
|
#define DSP_INSTR_FADE_TO_BGN 0xF000
|
|
/* Exception handling: fade out to BGN (expand) */
|
|
|
|
/*
|
|
* Next 4 bits signal additional data that needs to be transmitted
|
|
*/
|
|
|
|
#define DSP_CODEC_NO_CHANGE 0x0100
|
|
#define DSP_CODEC_NEW_CODEC 0x0200
|
|
#define DSP_CODEC_ADD_LATE_PKT 0x0300
|
|
#define DSP_CODEC_RESET 0x0400
|
|
#define DSP_DTMF_PAYLOAD 0x0010
|
|
|
|
/*
|
|
* The most significant bit of the payload-length
|
|
* is used to flag whether the associated payload
|
|
* is redundant payload. This currently useful only for
|
|
* iSAC, where redundant payloads have to be treated
|
|
* differently. Every time the length is read it must be
|
|
* masked by DSP_CODEC_MASK_RED_FLAG to ignore the flag.
|
|
* Use DSP_CODEC_RED_FLAG to set or retrieve the flag.
|
|
*/
|
|
#define DSP_CODEC_MASK_RED_FLAG 0x7FFF
|
|
#define DSP_CODEC_RED_FLAG 0x8000
|
|
|
|
/*
|
|
* The first block of payload data consist of decode function pointers,
|
|
* and then the speech blocks.
|
|
*
|
|
*/
|
|
|
|
|
|
/*
|
|
* The playout modes that NetEq produced (i.e. gives more info about if the
|
|
* Accelerate was successful or not)
|
|
*/
|
|
|
|
#define MODE_NORMAL 0x0000
|
|
#define MODE_EXPAND 0x0001
|
|
#define MODE_MERGE 0x0002
|
|
#define MODE_SUCCESS_ACCELERATE 0x0003
|
|
#define MODE_UNSUCCESS_ACCELERATE 0x0004
|
|
#define MODE_RFC3389CNG 0x0005
|
|
#define MODE_LOWEN_ACCELERATE 0x0006
|
|
#define MODE_DTMF 0x0007
|
|
#define MODE_ONE_DESCRIPTOR 0x0008
|
|
#define MODE_CODEC_INTERNAL_CNG 0x0009
|
|
#define MODE_SUCCESS_PREEMPTIVE 0x000A
|
|
#define MODE_UNSUCCESS_PREEMPTIVE 0x000B
|
|
#define MODE_LOWEN_PREEMPTIVE 0x000C
|
|
#define MODE_FADE_TO_BGN 0x000D
|
|
|
|
#define MODE_ERROR 0x0010
|
|
|
|
#define MODE_AWAITING_CODEC_PTR 0x0100
|
|
|
|
#define MODE_BGN_ONLY 0x0200
|
|
|
|
#define MODE_MASTER_DTMF_SIGNAL 0x0400
|
|
|
|
#define MODE_USING_STEREO 0x0800
|
|
|
|
|
|
|
|
/***********************/
|
|
/* Group codec defines */
|
|
/***********************/
|
|
|
|
#if (defined(NETEQ_ALL_SPECIAL_CODECS))
|
|
#define NETEQ_CNG_CODEC
|
|
#define NETEQ_ATEVENT_DECODE
|
|
#define NETEQ_RED_CODEC
|
|
#define NETEQ_VAD
|
|
#define NETEQ_ARBITRARY_CODEC
|
|
#endif
|
|
|
|
#if (defined(NETEQ_ALL_NB_CODECS)) /* Except RED, DTMF and CNG */
|
|
#define NETEQ_PCM16B_CODEC
|
|
#define NETEQ_G711_CODEC
|
|
#define NETEQ_ILBC_CODEC
|
|
#define NETEQ_G729_CODEC
|
|
#define NETEQ_G726_CODEC
|
|
#define NETEQ_GSMFR_CODEC
|
|
#define NETEQ_AMR_CODEC
|
|
#endif
|
|
|
|
#if (defined(NETEQ_ALL_WB_CODECS)) /* Except RED, DTMF and CNG */
|
|
#define NETEQ_ISAC_CODEC
|
|
#define NETEQ_G722_CODEC
|
|
#define NETEQ_G722_1_CODEC
|
|
#define NETEQ_G729_1_CODEC
|
|
#define NETEQ_SPEEX_CODEC
|
|
#define NETEQ_AMRWB_CODEC
|
|
#define NETEQ_WIDEBAND
|
|
#endif
|
|
|
|
#if (defined(NETEQ_ALL_WB32_CODECS)) /* AAC, RED, DTMF and CNG */
|
|
#define NETEQ_ISAC_SWB_CODEC
|
|
#define NETEQ_32KHZ_WIDEBAND
|
|
#define NETEQ_G722_1C_CODEC
|
|
#endif
|
|
|
|
#if (defined(NETEQ_VOICEENGINE_CODECS))
|
|
/* Special codecs */
|
|
#define NETEQ_CNG_CODEC
|
|
#define NETEQ_ATEVENT_DECODE
|
|
#define NETEQ_RED_CODEC
|
|
#define NETEQ_VAD
|
|
#define NETEQ_ARBITRARY_CODEC
|
|
|
|
/* Narrowband codecs */
|
|
#define NETEQ_PCM16B_CODEC
|
|
#define NETEQ_G711_CODEC
|
|
#define NETEQ_ILBC_CODEC
|
|
|
|
/* Wideband codecs */
|
|
#define NETEQ_WIDEBAND
|
|
#define NETEQ_ISAC_CODEC
|
|
#define NETEQ_G722_CODEC
|
|
|
|
/* Super wideband 32kHz codecs */
|
|
#define NETEQ_ISAC_SWB_CODEC
|
|
#define NETEQ_32KHZ_WIDEBAND
|
|
|
|
#endif
|
|
|
|
#if (defined(NETEQ_ALL_CODECS))
|
|
/* Special codecs */
|
|
#define NETEQ_CNG_CODEC
|
|
#define NETEQ_ATEVENT_DECODE
|
|
#define NETEQ_RED_CODEC
|
|
#define NETEQ_VAD
|
|
#define NETEQ_ARBITRARY_CODEC
|
|
|
|
/* Narrowband codecs */
|
|
#define NETEQ_PCM16B_CODEC
|
|
#define NETEQ_G711_CODEC
|
|
#define NETEQ_ILBC_CODEC
|
|
#define NETEQ_G729_CODEC
|
|
#define NETEQ_G726_CODEC
|
|
#define NETEQ_GSMFR_CODEC
|
|
#define NETEQ_AMR_CODEC
|
|
|
|
/* Wideband codecs */
|
|
#define NETEQ_WIDEBAND
|
|
#define NETEQ_ISAC_CODEC
|
|
#define NETEQ_G722_CODEC
|
|
#define NETEQ_G722_1_CODEC
|
|
#define NETEQ_G729_1_CODEC
|
|
#define NETEQ_SPEEX_CODEC
|
|
#define NETEQ_AMRWB_CODEC
|
|
|
|
/* Super wideband 32kHz codecs */
|
|
#define NETEQ_ISAC_SWB_CODEC
|
|
#define NETEQ_32KHZ_WIDEBAND
|
|
#define NETEQ_G722_1C_CODEC
|
|
|
|
/* Super wideband 48kHz codecs */
|
|
#define NETEQ_48KHZ_WIDEBAND
|
|
#endif
|
|
|
|
/* Max output size from decoding one frame */
|
|
#if defined(NETEQ_48KHZ_WIDEBAND)
|
|
#define NETEQ_MAX_FRAME_SIZE 2880 /* 60 ms super wideband */
|
|
#define NETEQ_MAX_OUTPUT_SIZE 3600 /* 60+15 ms super wideband (60 ms decoded + 15 ms for merge overlap) */
|
|
#elif defined(NETEQ_32KHZ_WIDEBAND)
|
|
#define NETEQ_MAX_FRAME_SIZE 1920 /* 60 ms super wideband */
|
|
#define NETEQ_MAX_OUTPUT_SIZE 2400 /* 60+15 ms super wideband (60 ms decoded + 15 ms for merge overlap) */
|
|
#elif defined(NETEQ_WIDEBAND)
|
|
#define NETEQ_MAX_FRAME_SIZE 960 /* 60 ms wideband */
|
|
#define NETEQ_MAX_OUTPUT_SIZE 1200 /* 60+15 ms wideband (60 ms decoded + 10 ms for merge overlap) */
|
|
#else
|
|
#define NETEQ_MAX_FRAME_SIZE 480 /* 60 ms narrowband */
|
|
#define NETEQ_MAX_OUTPUT_SIZE 600 /* 60+15 ms narrowband (60 ms decoded + 10 ms for merge overlap) */
|
|
#endif
|
|
|
|
|
|
/* Enable stereo */
|
|
#define NETEQ_STEREO
|
|
|
|
#endif /* #if !defined NETEQ_DEFINES_H */
|
|
|