| 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 | 
|---|