Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(790)

Unified Diff: webrtc/media/engine/webrtcvoiceengine_unittest.cc

Issue 2669583002: Added a flag to AudioCodecSpec to indicate adaptive bitrate support. (Closed)
Patch Set: int -> size_t to avoid unsigned/signed mismatch warnings on Windows. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/media/engine/webrtcvoiceengine.cc ('k') | webrtc/modules/audio_coding/codecs/audio_format.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/media/engine/webrtcvoiceengine_unittest.cc
diff --git a/webrtc/media/engine/webrtcvoiceengine_unittest.cc b/webrtc/media/engine/webrtcvoiceengine_unittest.cc
index a7ea8c2c9257b5720ed72c1ea68530b76804e0dd..b655a49922734dc4dc9e0ec98e90d6e8b185160f 100644
--- a/webrtc/media/engine/webrtcvoiceengine_unittest.cc
+++ b/webrtc/media/engine/webrtcvoiceengine_unittest.cc
@@ -3680,3 +3680,73 @@ TEST(WebRtcVoiceEngineTest, SetRecvCodecs) {
parameters.codecs = engine.recv_codecs();
EXPECT_TRUE(channel.SetRecvParameters(parameters));
}
+
+TEST(WebRtcVoiceEngineTest, CollectRecvCodecs) {
+ std::vector<webrtc::AudioCodecSpec> specs;
+ webrtc::AudioCodecSpec spec1({"codec1", 48000, 2, {{"param1", "value1"}}});
+ spec1.allow_comfort_noise = false;
+ spec1.supports_network_adaption = true;
+ specs.push_back(spec1);
+ webrtc::AudioCodecSpec spec2({"codec2", 32000, 1});
+ spec2.allow_comfort_noise = false;
+ specs.push_back(spec2);
+ specs.push_back(webrtc::AudioCodecSpec({"codec3", 16000, 1,
+ {{"param1", "value1b"},
+ {"param2", "value2"}}}));
+ specs.push_back(webrtc::AudioCodecSpec({"codec4", 8000, 1}));
+ specs.push_back(webrtc::AudioCodecSpec({"codec5", 8000, 2}));
+
+ rtc::scoped_refptr<webrtc::MockAudioDecoderFactory> mock_factory =
+ new rtc::RefCountedObject<webrtc::MockAudioDecoderFactory>;
+ EXPECT_CALL(*mock_factory.get(), GetSupportedDecoders())
+ .WillOnce(Return(specs));
+
+ cricket::WebRtcVoiceEngine engine(nullptr, mock_factory, nullptr);
+ auto codecs = engine.recv_codecs();
+ EXPECT_EQ(11, codecs.size());
+
+ // Rather than just ASSERTing that there are enough codecs, ensure that we can
+ // check the actual values safely, to provide better test results.
+ auto get_codec =
+ [&codecs](size_t index) -> const cricket::AudioCodec& {
+ static const cricket::AudioCodec missing_codec(0, "<missing>", 0, 0, 0);
+ if (codecs.size() > index)
+ return codecs[index];
+ return missing_codec;
+ };
+
+ // Ensure the general codecs are generated first and in order.
+ for (size_t i = 0; i != specs.size(); ++i) {
+ EXPECT_EQ(specs[i].format.name, get_codec(i).name);
+ EXPECT_EQ(specs[i].format.clockrate_hz, get_codec(i).clockrate);
+ EXPECT_EQ(specs[i].format.num_channels, get_codec(i).channels);
+ EXPECT_EQ(specs[i].format.parameters, get_codec(i).params);
+ }
+
+ // Find the index of a codec, or -1 if not found, so that we can easily check
+ // supplementary codecs are orderd after the general codecs.
ossu 2017/02/09 19:59:58 There's also a spelling error here.
+ auto find_codec =
+ [&codecs](const webrtc::SdpAudioFormat& format) -> int {
+ for (size_t i = 0; i != codecs.size(); ++i) {
+ const cricket::AudioCodec& codec = codecs[i];
+ if (STR_CASE_CMP(codec.name.c_str(), format.name.c_str()) == 0 &&
+ codec.clockrate == format.clockrate_hz &&
+ codec.channels == format.num_channels) {
+ return static_cast<int>(i);
kwiberg-webrtc 2017/02/09 05:26:44 This is a test, so checked_cast? Not that it's lik
ossu 2017/02/09 19:59:58 Hmm, now that you mention it, it probably should b
+ }
+ }
+ return -1;
+ };
+
+ // Ensure all supplementary codecs are generated last. Their internal ordering
+ // is not important.
+ // Without this cast, the comparison turned unsigned and, thus, failed for -1.
+ const int num_specs = static_cast<int>(specs.size());
+ EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs);
+ EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs);
+ EXPECT_EQ(find_codec({"cn", 32000, 1}), -1);
+ EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs);
+ EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs);
+ EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs);
+ EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs);
+}
« no previous file with comments | « webrtc/media/engine/webrtcvoiceengine.cc ('k') | webrtc/modules/audio_coding/codecs/audio_format.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698