Chromium Code Reviews| 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..b199c37c8558923684b9bb90f4e120eb85ab135f 100644 |
| --- a/webrtc/modules/audio_coding/neteq/test/RTPencode.cc |
| +++ b/webrtc/modules/audio_coding/neteq/test/RTPencode.cc |
| @@ -36,6 +36,10 @@ |
| #include "PayloadTypes.h" |
| +namespace { |
| +const size_t kRtpDataSize = 8000; |
| +} |
| + |
| /*********************/ |
| /* Misc. definitions */ |
| /*********************/ |
| @@ -193,6 +197,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 +271,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 +285,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 +296,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 +439,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 +894,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 +1429,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 +1572,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 +1721,14 @@ 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); |
| + assert(cdlen > 0); |
|
hlundin-webrtc
2015/12/11 08:30:29
Nit: CHECK_GT(cdlen, 0);
I think CHECK is better t
minyue-webrtc
2015/12/11 09:03:55
Done.
|
| +#endif |
| indata += frameLen; |
| encoded += cdlen; |
| totalLen += cdlen; |