| Index: webrtc/modules/audio_coding/neteq/test/RTPencode.cc
|
| diff --git a/webrtc/modules/audio_coding/neteq/test/RTPencode.cc b/webrtc/modules/audio_coding/neteq/test/RTPencode.cc
|
| index 5410925e8100071057f3be86caf87f5a86f17fc6..45586ee111c655ae0b6f28ffd339ed74bcfc32fc 100644
|
| --- a/webrtc/modules/audio_coding/neteq/test/RTPencode.cc
|
| +++ b/webrtc/modules/audio_coding/neteq/test/RTPencode.cc
|
| @@ -25,7 +25,9 @@
|
|
|
| #include <algorithm>
|
|
|
| +#include "webrtc/base/checks.h"
|
| #include "webrtc/typedefs.h"
|
| +
|
| // needed for NetEqDecoder
|
| #include "webrtc/modules/audio_coding/neteq/audio_decoder_impl.h"
|
| #include "webrtc/modules/audio_coding/neteq/include/neteq.h"
|
| @@ -36,6 +38,10 @@
|
|
|
| #include "PayloadTypes.h"
|
|
|
| +namespace {
|
| +const size_t kRtpDataSize = 8000;
|
| +}
|
| +
|
| /*********************/
|
| /* Misc. definitions */
|
| /*********************/
|
| @@ -193,6 +199,9 @@ void stereoInterleave(unsigned char* data, size_t dataLen, size_t stride);
|
| #if ((defined CODEC_SPEEX_8) || (defined CODEC_SPEEX_16))
|
| #include "SpeexInterface.h"
|
| #endif
|
| +#ifdef CODEC_OPUS
|
| +#include "webrtc/modules/audio_coding/codecs/opus/opus_interface.h"
|
| +#endif
|
|
|
| /***********************************/
|
| /* Global codec instance variables */
|
| @@ -264,6 +273,9 @@ SPEEX_encinst_t* SPEEX8enc_inst[2];
|
| #ifdef CODEC_SPEEX_16
|
| SPEEX_encinst_t* SPEEX16enc_inst[2];
|
| #endif
|
| +#ifdef CODEC_OPUS
|
| +OpusEncInst* opus_inst[2];
|
| +#endif
|
|
|
| int main(int argc, char* argv[]) {
|
| size_t packet_size;
|
| @@ -275,7 +287,7 @@ int main(int argc, char* argv[]) {
|
| int useRed = 0;
|
| size_t len, enc_len;
|
| int16_t org_data[4000];
|
| - unsigned char rtp_data[8000];
|
| + unsigned char rtp_data[kRtpDataSize];
|
| int16_t seqNo = 0xFFF;
|
| uint32_t ssrc = 1235412312;
|
| uint32_t timestamp = 0xAC1245;
|
| @@ -286,12 +298,12 @@ int main(int argc, char* argv[]) {
|
| uint32_t red_TS[2] = {0};
|
| uint16_t red_len[2] = {0};
|
| size_t RTPheaderLen = 12;
|
| - uint8_t red_data[8000];
|
| + uint8_t red_data[kRtpDataSize];
|
| #ifdef INSERT_OLD_PACKETS
|
| uint16_t old_length, old_plen;
|
| size_t old_enc_len;
|
| int first_old_packet = 1;
|
| - unsigned char old_rtp_data[8000];
|
| + unsigned char old_rtp_data[kRtpDataSize];
|
| size_t packet_age = 0;
|
| #endif
|
| #ifdef INSERT_DTMF_PACKETS
|
| @@ -429,6 +441,10 @@ int main(int argc, char* argv[]) {
|
| printf(" : red_isac Redundancy RTP packet with 2*iSAC "
|
| "frames\n");
|
| #endif
|
| +#endif // CODEC_RED
|
| +#ifdef CODEC_OPUS
|
| + printf(" : opus Opus codec with FEC (48kHz, 32kbps, FEC"
|
| + " on and tuned for 5%% packet losses)\n");
|
| #endif
|
| printf("\n");
|
|
|
| @@ -880,6 +896,10 @@ void NetEQTest_GetCodec_and_PT(char* name,
|
| *PT = NETEQ_CODEC_ISAC_PT; /* this will be the PT for the sub-headers */
|
| *fs = 16000;
|
| *useRed = 1;
|
| + } else if (!strcmp(name, "opus")) {
|
| + *codec = webrtc::NetEqDecoder::kDecoderOpus;
|
| + *PT = NETEQ_CODEC_OPUS_PT; /* this will be the PT for the sub-headers */
|
| + *fs = 48000;
|
| } else {
|
| printf("Error: Not a supported codec (%s)\n", name);
|
| exit(0);
|
| @@ -1411,12 +1431,23 @@ int NetEQTest_init_coders(webrtc::NetEqDecoder coder,
|
| }
|
| break;
|
| #endif
|
| +#ifdef CODEC_OPUS
|
| + case webrtc::NetEqDecoder::kDecoderOpus:
|
| + ok = WebRtcOpus_EncoderCreate(&opus_inst[k], 1, 0);
|
| + if (ok != 0) {
|
| + printf("Error: Couldn't allocate memory for Opus encoding "
|
| + "instance\n");
|
| + exit(0);
|
| + }
|
| + WebRtcOpus_EnableFec(opus_inst[k]);
|
| + WebRtcOpus_SetPacketLossRate(opus_inst[k], 5);
|
| + break;
|
| +#endif
|
| default:
|
| printf("Error: unknown codec in call to NetEQTest_init_coders.\n");
|
| exit(0);
|
| break;
|
| }
|
| -
|
| if (ok != 0) {
|
| return (ok);
|
| }
|
| @@ -1543,6 +1574,11 @@ int NetEQTest_free_coders(webrtc::NetEqDecoder coder, size_t numChannels) {
|
| WebRtcGSMFR_FreeEnc(GSMFRenc_inst[k]);
|
| break;
|
| #endif
|
| +#ifdef CODEC_OPUS
|
| + case webrtc::NetEqDecoder::kDecoderOpus:
|
| + WebRtcOpus_EncoderFree(opus_inst[k]);
|
| + break;
|
| +#endif
|
| default:
|
| printf("Error: unknown codec in call to NetEQTest_init_coders.\n");
|
| exit(0);
|
| @@ -1687,6 +1723,11 @@ size_t NetEQTest_encode(webrtc::NetEqDecoder coder,
|
| cdlen = static_cast<size_t>(res);
|
| }
|
| #endif
|
| +#ifdef CODEC_OPUS
|
| + cdlen = WebRtcOpus_Encode(opus_inst[k], indata, frameLen, kRtpDataSize - 12,
|
| + encoded);
|
| + RTC_CHECK_GT(cdlen, 0u);
|
| +#endif
|
| indata += frameLen;
|
| encoded += cdlen;
|
| totalLen += cdlen;
|
|
|