OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2014 Google Inc. | 3 * Copyright 2014 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 1296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1307 EXPECT_FALSE(channel_->AddRecvStream( | 1307 EXPECT_FALSE(channel_->AddRecvStream( |
1308 cricket::StreamParams::CreateLegacy(new_ssrc))); | 1308 cricket::StreamParams::CreateLegacy(new_ssrc))); |
1309 | 1309 |
1310 EXPECT_TRUE(channel_->SetCapturer(new_ssrc, video_capturer_.get())); | 1310 EXPECT_TRUE(channel_->SetCapturer(new_ssrc, video_capturer_.get())); |
1311 | 1311 |
1312 SendAndReceive(codec); | 1312 SendAndReceive(codec); |
1313 EXPECT_TRUE(channel_->RemoveSendStream(new_ssrc)); | 1313 EXPECT_TRUE(channel_->RemoveSendStream(new_ssrc)); |
1314 EXPECT_EQ(0u, channel_->GetDefaultSendChannelSsrc()); | 1314 EXPECT_EQ(0u, channel_->GetDefaultSendChannelSsrc()); |
1315 } | 1315 } |
1316 | 1316 |
1317 // Tests that we can send and receive frames with early receive. | |
1318 void TwoStreamsSendAndUnsignalledRecv(const cricket::VideoCodec& codec) { | |
1319 cricket::VideoSendParameters parameters; | |
1320 parameters.options.conference_mode = rtc::Optional<bool>(true); | |
1321 parameters.options.unsignalled_recv_stream_limit = rtc::Optional<int>(1); | |
1322 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | |
1323 SetUpSecondStreamWithNoRecv(); | |
1324 // Test sending and receiving on first stream. | |
1325 Send(codec); | |
1326 EXPECT_EQ_WAIT(2, NumRtpPackets(), kTimeout); | |
1327 EXPECT_EQ_WAIT(1, renderer_.num_rendered_frames(), kTimeout); | |
1328 // The first send is not expected to yield frames, because the ssrc | |
1329 // is not signalled yet. With unsignalled recv enabled, we will drop frames | |
1330 // instead of packets. | |
1331 EXPECT_EQ(0, renderer2_.num_rendered_frames()); | |
1332 // Give a chance for the decoder to process before adding the receiver. | |
1333 rtc::Thread::Current()->ProcessMessages(100); | |
1334 // Test sending and receiving on second stream. | |
1335 EXPECT_TRUE(channel_->AddRecvStream( | |
1336 cricket::StreamParams::CreateLegacy(kSsrc + 2))); | |
1337 EXPECT_TRUE(channel_->SetRenderer(kSsrc + 2, &renderer2_)); | |
1338 SendFrame(); | |
1339 EXPECT_EQ_WAIT(2, renderer_.num_rendered_frames(), kTimeout); | |
1340 EXPECT_EQ(4, NumRtpPackets()); | |
1341 // The second send is expected to yield frame as the ssrc is signalled now. | |
1342 // Decode should succeed here, though we received the key frame earlier. | |
1343 // Without early recv, we would have dropped it and decoding would have | |
1344 // failed. | |
1345 EXPECT_EQ_WAIT(1, renderer2_.num_rendered_frames(), kTimeout); | |
1346 } | |
1347 | |
1348 // Tests that we drop key frames when conference mode is enabled and we | |
1349 // receive rtp packets on unsignalled streams. Removal of a unsignalled recv | |
1350 // stream is successful. | |
1351 void TwoStreamsAddAndRemoveUnsignalledRecv( | |
1352 const cricket::VideoCodec& codec) { | |
1353 cricket::VideoOptions vmo; | |
1354 vmo.conference_mode = rtc::Optional<bool>(true); | |
1355 vmo.unsignalled_recv_stream_limit = rtc::Optional<int>(1); | |
1356 EXPECT_TRUE(channel_->SetOptions(vmo)); | |
1357 SetUpSecondStreamWithNoRecv(); | |
1358 // Sending and receiving on first stream. | |
1359 Send(codec); | |
1360 EXPECT_EQ_WAIT(2, NumRtpPackets(), kTimeout); | |
1361 EXPECT_EQ_WAIT(1, renderer_.num_rendered_frames(), kTimeout); | |
1362 // The first send is not expected to yield frames, because the ssrc | |
1363 // is no signalled yet. With unsignalled recv enabled, we will drop frames | |
1364 // instead of packets. | |
1365 EXPECT_EQ(0, renderer2_.num_rendered_frames()); | |
1366 // Give a chance for the decoder to process before adding the receiver. | |
1367 rtc::Thread::Current()->ProcessMessages(100); | |
1368 // Ensure that we can remove the unsignalled recv stream that was created | |
1369 // when the first video packet with unsignalled recv ssrc is received. | |
1370 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc + 2)); | |
1371 } | |
1372 | |
1373 const rtc::scoped_ptr<webrtc::Call> call_; | 1317 const rtc::scoped_ptr<webrtc::Call> call_; |
1374 VideoEngineOverride<E> engine_; | 1318 VideoEngineOverride<E> engine_; |
1375 rtc::scoped_ptr<cricket::FakeVideoCapturer> video_capturer_; | 1319 rtc::scoped_ptr<cricket::FakeVideoCapturer> video_capturer_; |
1376 rtc::scoped_ptr<cricket::FakeVideoCapturer> video_capturer_2_; | 1320 rtc::scoped_ptr<cricket::FakeVideoCapturer> video_capturer_2_; |
1377 rtc::scoped_ptr<C> channel_; | 1321 rtc::scoped_ptr<C> channel_; |
1378 cricket::FakeNetworkInterface network_interface_; | 1322 cricket::FakeNetworkInterface network_interface_; |
1379 cricket::FakeVideoRenderer renderer_; | 1323 cricket::FakeVideoRenderer renderer_; |
1380 cricket::VideoMediaChannel::Error media_error_; | 1324 cricket::VideoMediaChannel::Error media_error_; |
1381 | 1325 |
1382 // Used by test cases where 2 streams are run on the same channel. | 1326 // Used by test cases where 2 streams are run on the same channel. |
1383 cricket::FakeVideoRenderer renderer2_; | 1327 cricket::FakeVideoRenderer renderer2_; |
1384 }; | 1328 }; |
1385 | 1329 |
1386 #endif // TALK_MEDIA_BASE_VIDEOENGINE_UNITTEST_H_ NOLINT | 1330 #endif // TALK_MEDIA_BASE_VIDEOENGINE_UNITTEST_H_ NOLINT |
OLD | NEW |