Index: webrtc/media/engine/webrtcvoiceengine_unittest.cc |
diff --git a/webrtc/media/engine/webrtcvoiceengine_unittest.cc b/webrtc/media/engine/webrtcvoiceengine_unittest.cc |
index 80c3fda2716cacac7f197c957214b8755a538895..12c4f62e6b67e7aaa4a1c303992d8863e6adefdf 100644 |
--- a/webrtc/media/engine/webrtcvoiceengine_unittest.cc |
+++ b/webrtc/media/engine/webrtcvoiceengine_unittest.cc |
@@ -41,11 +41,11 @@ const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1); |
const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1); |
const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1); |
const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1); |
-const cricket::AudioCodec kTelephoneEventCodec(106, |
- "telephone-event", |
- 8000, |
- 0, |
- 1); |
+const cricket::AudioCodec |
+ kTelephoneEventCodec1(106, "telephone-event", 8000, 0, 1); |
+const cricket::AudioCodec |
+ kTelephoneEventCodec2(107, "telephone-event", 32000, 0, 1); |
+ |
const uint32_t kSsrc1 = 0x99; |
const uint32_t kSsrc2 = 2; |
const uint32_t kSsrc3 = 3; |
@@ -203,7 +203,7 @@ class WebRtcVoiceEngineTestFake : public testing::Test { |
SetSend(channel_, true); |
EXPECT_FALSE(channel_->CanInsertDtmf()); |
EXPECT_FALSE(channel_->InsertDtmf(ssrc, 1, 111)); |
- send_parameters_.codecs.push_back(kTelephoneEventCodec); |
+ send_parameters_.codecs.push_back(kTelephoneEventCodec1); |
EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); |
EXPECT_TRUE(channel_->CanInsertDtmf()); |
@@ -223,7 +223,7 @@ class WebRtcVoiceEngineTestFake : public testing::Test { |
EXPECT_EQ(-1, telephone_event.payload_type); |
EXPECT_TRUE(channel_->InsertDtmf(ssrc, 2, 123)); |
telephone_event = GetSendStream(kSsrc1).GetLatestTelephoneEvent(); |
- EXPECT_EQ(kTelephoneEventCodec.id, telephone_event.payload_type); |
+ EXPECT_EQ(kTelephoneEventCodec1.id, telephone_event.payload_type); |
EXPECT_EQ(2, telephone_event.event_code); |
EXPECT_EQ(123, telephone_event.duration_ms); |
} |
@@ -575,7 +575,10 @@ TEST_F(WebRtcVoiceEngineTestFake, FindCodec) { |
// Find ISAC with explicit clockrate and 0 bitrate. |
EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kIsacCodec, &codec_inst)); |
// Find telephone-event with explicit clockrate and 0 bitrate. |
- EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kTelephoneEventCodec, |
+ EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kTelephoneEventCodec1, |
+ &codec_inst)); |
+ // Find telephone-event with explicit clockrate and 0 bitrate. |
+ EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kTelephoneEventCodec2, |
&codec_inst)); |
// Find ISAC with a different payload id. |
codec = kIsacCodec; |
@@ -608,12 +611,14 @@ TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) { |
cricket::AudioRecvParameters parameters; |
parameters.codecs.push_back(kIsacCodec); |
parameters.codecs.push_back(kPcmuCodec); |
- parameters.codecs.push_back(kTelephoneEventCodec); |
- parameters.codecs[0].id = 106; // collide with existing telephone-event |
+ parameters.codecs.push_back(kTelephoneEventCodec1); |
+ parameters.codecs.push_back(kTelephoneEventCodec2); |
+ parameters.codecs[0].id = 106; // collide with existing CN 32k |
parameters.codecs[2].id = 126; |
EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
EXPECT_TRUE(AddRecvStream(kSsrc1)); |
int channel_num = voe_.GetLastChannel(); |
+ |
webrtc::CodecInst gcodec; |
rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); |
gcodec.plfreq = 16000; |
@@ -621,11 +626,17 @@ TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) { |
EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); |
EXPECT_EQ(106, gcodec.pltype); |
EXPECT_STREQ("ISAC", gcodec.plname); |
+ |
rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "telephone-event"); |
gcodec.plfreq = 8000; |
EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); |
EXPECT_EQ(126, gcodec.pltype); |
EXPECT_STREQ("telephone-event", gcodec.plname); |
+ |
+ gcodec.plfreq = 32000; |
+ EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); |
+ EXPECT_EQ(107, gcodec.pltype); |
+ EXPECT_STREQ("telephone-event", gcodec.plname); |
} |
// Test that we fail to set an unknown inbound codec. |
@@ -717,12 +728,14 @@ TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithMultipleStreams) { |
cricket::AudioRecvParameters parameters; |
parameters.codecs.push_back(kIsacCodec); |
parameters.codecs.push_back(kPcmuCodec); |
- parameters.codecs.push_back(kTelephoneEventCodec); |
- parameters.codecs[0].id = 106; // collide with existing telephone-event |
+ parameters.codecs.push_back(kTelephoneEventCodec1); |
+ parameters.codecs.push_back(kTelephoneEventCodec2); |
+ parameters.codecs[0].id = 106; // collide with existing CN 32k |
parameters.codecs[2].id = 126; |
EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
EXPECT_TRUE(AddRecvStream(kSsrc1)); |
int channel_num2 = voe_.GetLastChannel(); |
+ |
webrtc::CodecInst gcodec; |
rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); |
gcodec.plfreq = 16000; |
@@ -730,19 +743,25 @@ TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithMultipleStreams) { |
EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); |
EXPECT_EQ(106, gcodec.pltype); |
EXPECT_STREQ("ISAC", gcodec.plname); |
+ |
rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "telephone-event"); |
gcodec.plfreq = 8000; |
gcodec.channels = 1; |
EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); |
EXPECT_EQ(126, gcodec.pltype); |
EXPECT_STREQ("telephone-event", gcodec.plname); |
+ |
+ gcodec.plfreq = 32000; |
+ EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); |
+ EXPECT_EQ(107, gcodec.pltype); |
+ EXPECT_STREQ("telephone-event", gcodec.plname); |
} |
TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsAfterAddingStreams) { |
EXPECT_TRUE(SetupRecvStream()); |
cricket::AudioRecvParameters parameters; |
parameters.codecs.push_back(kIsacCodec); |
- parameters.codecs[0].id = 106; // collide with existing telephone-event |
+ parameters.codecs[0].id = 106; // collide with existing CN 32k |
EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
int channel_num2 = voe_.GetLastChannel(); |
@@ -1913,7 +1932,7 @@ TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) { |
EXPECT_TRUE(SetupSendStream()); |
int channel_num = voe_.GetLastChannel(); |
cricket::AudioSendParameters parameters; |
- parameters.codecs.push_back(kTelephoneEventCodec); |
+ parameters.codecs.push_back(kTelephoneEventCodec1); |
parameters.codecs.push_back(kIsacCodec); |
parameters.codecs.push_back(kPcmuCodec); |
parameters.codecs[0].id = 98; // DTMF |
@@ -1930,7 +1949,7 @@ TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) { |
TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) { |
EXPECT_TRUE(SetupSendStream()); |
cricket::AudioSendParameters parameters; |
- parameters.codecs.push_back(kTelephoneEventCodec); |
+ parameters.codecs.push_back(kTelephoneEventCodec1); |
parameters.codecs.push_back(kIsacCodec); |
parameters.codecs[0].id = 0; // DTMF |
parameters.codecs[1].id = 96; |
@@ -1976,7 +1995,7 @@ TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) { |
// TODO(juberti): cn 32000 |
parameters.codecs.push_back(kCn16000Codec); |
parameters.codecs.push_back(kCn8000Codec); |
- parameters.codecs.push_back(kTelephoneEventCodec); |
+ parameters.codecs.push_back(kTelephoneEventCodec1); |
parameters.codecs[0].id = 96; |
parameters.codecs[2].id = 97; // wideband CN |
parameters.codecs[4].id = 98; // DTMF |
@@ -2000,7 +2019,7 @@ TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) { |
// TODO(juberti): cn 32000 |
parameters.codecs.push_back(kCn16000Codec); |
parameters.codecs.push_back(kCn8000Codec); |
- parameters.codecs.push_back(kTelephoneEventCodec); |
+ parameters.codecs.push_back(kTelephoneEventCodec1); |
parameters.codecs[0].id = 96; |
parameters.codecs[2].id = 97; // wideband CN |
parameters.codecs[4].id = 98; // DTMF |
@@ -2065,7 +2084,7 @@ TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) { |
parameters.codecs.push_back(kPcmuCodec); |
parameters.codecs.push_back(kCn16000Codec); |
parameters.codecs.push_back(kCn8000Codec); |
- parameters.codecs.push_back(kTelephoneEventCodec); |
+ parameters.codecs.push_back(kTelephoneEventCodec1); |
parameters.codecs[0].name = "iSaC"; |
parameters.codecs[0].id = 96; |
parameters.codecs[2].id = 97; // wideband CN |
@@ -3423,6 +3442,12 @@ TEST(WebRtcVoiceEngineTest, HasCorrectCodecs) { |
cricket::AudioCodec(96, "CN", 8000, 0, 1), nullptr)); |
EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
cricket::AudioCodec(96, "telephone-event", 8000, 0, 1), nullptr)); |
+ EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
+ cricket::AudioCodec(96, "telephone-event", 16000, 0, 1), nullptr)); |
+ EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
+ cricket::AudioCodec(96, "telephone-event", 32000, 0, 1), nullptr)); |
+ EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
+ cricket::AudioCodec(96, "telephone-event", 48000, 0, 1), nullptr)); |
// Check codecs with an id by id. |
EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
cricket::AudioCodec(0, "", 8000, 0, 1), nullptr)); // PCMU |
@@ -3452,27 +3477,34 @@ TEST(WebRtcVoiceEngineTest, HasCorrectCodecs) { |
// type assignments checked here? It shouldn't really matter. |
cricket::WebRtcVoiceEngine engine( |
nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory()); |
- for (std::vector<cricket::AudioCodec>::const_iterator it = |
- engine.send_codecs().begin(); |
- it != engine.send_codecs().end(); ++it) { |
- if (it->name == "CN" && it->clockrate == 16000) { |
- EXPECT_EQ(105, it->id); |
- } else if (it->name == "CN" && it->clockrate == 32000) { |
- EXPECT_EQ(106, it->id); |
- } else if (it->name == "ISAC" && it->clockrate == 16000) { |
- EXPECT_EQ(103, it->id); |
- } else if (it->name == "ISAC" && it->clockrate == 32000) { |
- EXPECT_EQ(104, it->id); |
- } else if (it->name == "G722" && it->clockrate == 8000) { |
- EXPECT_EQ(9, it->id); |
- } else if (it->name == "telephone-event") { |
- EXPECT_EQ(126, it->id); |
- } else if (it->name == "opus") { |
- EXPECT_EQ(111, it->id); |
- ASSERT_TRUE(it->params.find("minptime") != it->params.end()); |
- EXPECT_EQ("10", it->params.find("minptime")->second); |
- ASSERT_TRUE(it->params.find("useinbandfec") != it->params.end()); |
- EXPECT_EQ("1", it->params.find("useinbandfec")->second); |
+ for (const cricket::AudioCodec& codec : engine.send_codecs()) { |
+ if (codec.name == "CN" && codec.clockrate == 16000) { |
+ EXPECT_EQ(105, codec.id); |
+ } else if (codec.name == "CN" && codec.clockrate == 32000) { |
+ EXPECT_EQ(106, codec.id); |
+ } else if (codec.name == "ISAC" && codec.clockrate == 16000) { |
+ EXPECT_EQ(103, codec.id); |
+ } else if (codec.name == "ISAC" && codec.clockrate == 32000) { |
+ EXPECT_EQ(104, codec.id); |
+ } else if (codec.name == "G722" && codec.clockrate == 8000) { |
+ EXPECT_EQ(9, codec.id); |
+ } else if (codec.name == "telephone-event" && codec.clockrate == 8000) { |
+ EXPECT_EQ(126, codec.id); |
+ // TODO(solenberg): 16k, 32k, 48k DTMF should be dynamically assigned. |
+ // Remove these checks once both send and receive side assigns payload types |
+ // dynamically. |
+ } else if (codec.name == "telephone-event" && codec.clockrate == 16000) { |
+ EXPECT_EQ(113, codec.id); |
+ } else if (codec.name == "telephone-event" && codec.clockrate == 32000) { |
+ EXPECT_EQ(112, codec.id); |
+ } else if (codec.name == "telephone-event" && codec.clockrate == 48000) { |
+ EXPECT_EQ(110, codec.id); |
+ } else if (codec.name == "opus") { |
+ EXPECT_EQ(111, codec.id); |
+ ASSERT_TRUE(codec.params.find("minptime") != codec.params.end()); |
+ EXPECT_EQ("10", codec.params.find("minptime")->second); |
+ ASSERT_TRUE(codec.params.find("useinbandfec") != codec.params.end()); |
+ EXPECT_EQ("1", codec.params.find("useinbandfec")->second); |
} |
} |
} |