OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 #include <algorithm> // max | 10 #include <algorithm> // max |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 void TestNackRetransmission(uint32_t retransmit_ssrc, | 59 void TestNackRetransmission(uint32_t retransmit_ssrc, |
60 uint8_t retransmit_payload_type); | 60 uint8_t retransmit_payload_type); |
61 void TestPacketFragmentationSize(VideoFormat format, bool with_fec); | 61 void TestPacketFragmentationSize(VideoFormat format, bool with_fec); |
62 | 62 |
63 void TestVp9NonFlexMode(uint8_t num_temporal_layers, | 63 void TestVp9NonFlexMode(uint8_t num_temporal_layers, |
64 uint8_t num_spatial_layers); | 64 uint8_t num_spatial_layers); |
65 | 65 |
66 void TestRequestSourceRotateVideo(bool support_orientation_ext); | 66 void TestRequestSourceRotateVideo(bool support_orientation_ext); |
67 }; | 67 }; |
68 | 68 |
| 69 // TODO(eladalon): !!! Doesn't look like this file should really work... |
| 70 |
69 TEST_F(VideoSendStreamTest, CanStartStartedStream) { | 71 TEST_F(VideoSendStreamTest, CanStartStartedStream) { |
70 CreateSenderCall(Call::Config(event_log_.get())); | 72 CreateSenderCall(Call::Config(event_log_.get())); |
71 | 73 |
72 test::NullTransport transport; | 74 test::NullTransport transport; |
73 CreateSendConfig(1, 0, 0, &transport); | 75 CreateSendConfig(1, 0, 0, &transport); |
74 CreateVideoStreams(); | 76 CreateVideoStreams(); |
75 video_send_stream_->Start(); | 77 video_send_stream_->Start(); |
76 video_send_stream_->Start(); | 78 video_send_stream_->Start(); |
77 DestroyStreams(); | 79 DestroyStreams(); |
78 } | 80 } |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
473 | 475 |
474 if (sent_media_ && sent_ulpfec_) { | 476 if (sent_media_ && sent_ulpfec_) { |
475 observation_complete_.Set(); | 477 observation_complete_.Set(); |
476 } | 478 } |
477 | 479 |
478 prev_header_ = header; | 480 prev_header_ = header; |
479 | 481 |
480 return SEND_PACKET; | 482 return SEND_PACKET; |
481 } | 483 } |
482 | 484 |
483 test::PacketTransport* CreateSendTransport(Call* sender_call) override { | 485 test::PacketTransport* CreateSendTransport( |
| 486 test::SingleThreadedTaskQueue* task_queue, |
| 487 Call* sender_call) override { |
484 // At low RTT (< kLowRttNackMs) -> NACK only, no FEC. | 488 // At low RTT (< kLowRttNackMs) -> NACK only, no FEC. |
485 // Configure some network delay. | 489 // Configure some network delay. |
486 const int kNetworkDelayMs = 100; | 490 const int kNetworkDelayMs = 100; |
487 FakeNetworkPipe::Config config; | 491 FakeNetworkPipe::Config config; |
488 config.loss_percent = 5; | 492 config.loss_percent = 5; |
489 config.queue_delay_ms = kNetworkDelayMs; | 493 config.queue_delay_ms = kNetworkDelayMs; |
490 return new test::PacketTransport( | 494 return new test::PacketTransport( |
491 sender_call, this, test::PacketTransport::kSender, | 495 task_queue, sender_call, this, test::PacketTransport::kSender, |
492 VideoSendStreamTest::payload_type_map_, config); | 496 VideoSendStreamTest::payload_type_map_, config); |
493 } | 497 } |
494 | 498 |
495 void ModifyVideoConfigs( | 499 void ModifyVideoConfigs( |
496 VideoSendStream::Config* send_config, | 500 VideoSendStream::Config* send_config, |
497 std::vector<VideoReceiveStream::Config>* receive_configs, | 501 std::vector<VideoReceiveStream::Config>* receive_configs, |
498 VideoEncoderConfig* encoder_config) override { | 502 VideoEncoderConfig* encoder_config) override { |
499 if (use_nack_) { | 503 if (use_nack_) { |
500 send_config->rtp.nack.rtp_history_ms = | 504 send_config->rtp.nack.rtp_history_ms = |
501 (*receive_configs)[0].rtp.nack.rtp_history_ms = | 505 (*receive_configs)[0].rtp.nack.rtp_history_ms = |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
629 EXPECT_TRUE(header.extension.hasTransportSequenceNumber); | 633 EXPECT_TRUE(header.extension.hasTransportSequenceNumber); |
630 } | 634 } |
631 | 635 |
632 if (sent_media_ && sent_flexfec_) { | 636 if (sent_media_ && sent_flexfec_) { |
633 observation_complete_.Set(); | 637 observation_complete_.Set(); |
634 } | 638 } |
635 | 639 |
636 return SEND_PACKET; | 640 return SEND_PACKET; |
637 } | 641 } |
638 | 642 |
639 test::PacketTransport* CreateSendTransport(Call* sender_call) override { | 643 test::PacketTransport* CreateSendTransport( |
| 644 test::SingleThreadedTaskQueue* task_queue, |
| 645 Call* sender_call) override { |
640 // At low RTT (< kLowRttNackMs) -> NACK only, no FEC. | 646 // At low RTT (< kLowRttNackMs) -> NACK only, no FEC. |
641 // Therefore we need some network delay. | 647 // Therefore we need some network delay. |
642 const int kNetworkDelayMs = 100; | 648 const int kNetworkDelayMs = 100; |
643 FakeNetworkPipe::Config config; | 649 FakeNetworkPipe::Config config; |
644 config.loss_percent = 5; | 650 config.loss_percent = 5; |
645 config.queue_delay_ms = kNetworkDelayMs; | 651 config.queue_delay_ms = kNetworkDelayMs; |
646 return new test::PacketTransport( | 652 return new test::PacketTransport( |
647 sender_call, this, test::PacketTransport::kSender, | 653 task_queue, sender_call, this, test::PacketTransport::kSender, |
648 VideoSendStreamTest::payload_type_map_, config); | 654 VideoSendStreamTest::payload_type_map_, config); |
649 } | 655 } |
650 | 656 |
651 void ModifyVideoConfigs( | 657 void ModifyVideoConfigs( |
652 VideoSendStream::Config* send_config, | 658 VideoSendStream::Config* send_config, |
653 std::vector<VideoReceiveStream::Config>* receive_configs, | 659 std::vector<VideoReceiveStream::Config>* receive_configs, |
654 VideoEncoderConfig* encoder_config) override { | 660 VideoEncoderConfig* encoder_config) override { |
655 if (use_nack_) { | 661 if (use_nack_) { |
656 send_config->rtp.nack.rtp_history_ms = | 662 send_config->rtp.nack.rtp_history_ms = |
657 (*receive_configs)[0].rtp.nack.rtp_history_ms = | 663 (*receive_configs)[0].rtp.nack.rtp_history_ms = |
(...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1330 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 1336 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
1331 rtc::CritScope lock(&crit_); | 1337 rtc::CritScope lock(&crit_); |
1332 | 1338 |
1333 RTPHeader header; | 1339 RTPHeader header; |
1334 parser_->Parse(packet, length, &header); | 1340 parser_->Parse(packet, length, &header); |
1335 padding_length_ += header.paddingLength; | 1341 padding_length_ += header.paddingLength; |
1336 total_length_ += length; | 1342 total_length_ += length; |
1337 return SEND_PACKET; | 1343 return SEND_PACKET; |
1338 } | 1344 } |
1339 | 1345 |
1340 test::PacketTransport* CreateSendTransport(Call* sender_call) override { | 1346 test::PacketTransport* CreateSendTransport( |
| 1347 test::SingleThreadedTaskQueue* task_queue, |
| 1348 Call* sender_call) override { |
1341 const int kNetworkDelayMs = 50; | 1349 const int kNetworkDelayMs = 50; |
1342 FakeNetworkPipe::Config config; | 1350 FakeNetworkPipe::Config config; |
1343 config.loss_percent = 10; | 1351 config.loss_percent = 10; |
1344 config.link_capacity_kbps = kCapacityKbps; | 1352 config.link_capacity_kbps = kCapacityKbps; |
1345 config.queue_delay_ms = kNetworkDelayMs; | 1353 config.queue_delay_ms = kNetworkDelayMs; |
1346 return new test::PacketTransport(sender_call, this, | 1354 return new test::PacketTransport(task_queue, sender_call, this, |
1347 test::PacketTransport::kSender, | 1355 test::PacketTransport::kSender, |
1348 payload_type_map_, config); | 1356 payload_type_map_, config); |
1349 } | 1357 } |
1350 | 1358 |
1351 void ModifyVideoConfigs( | 1359 void ModifyVideoConfigs( |
1352 VideoSendStream::Config* send_config, | 1360 VideoSendStream::Config* send_config, |
1353 std::vector<VideoReceiveStream::Config>* receive_configs, | 1361 std::vector<VideoReceiveStream::Config>* receive_configs, |
1354 VideoEncoderConfig* encoder_config) override { | 1362 VideoEncoderConfig* encoder_config) override { |
1355 // Turn on RTX. | 1363 // Turn on RTX. |
1356 send_config->rtp.rtx.payload_type = kFakeVideoSendPayloadType; | 1364 send_config->rtp.rtx.payload_type = kFakeVideoSendPayloadType; |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1469 | 1477 |
1470 RunBaseTest(&test); | 1478 RunBaseTest(&test); |
1471 } | 1479 } |
1472 | 1480 |
1473 TEST_F(VideoSendStreamTest, ChangingNetworkRoute) { | 1481 TEST_F(VideoSendStreamTest, ChangingNetworkRoute) { |
1474 static const int kStartBitrateBps = 300000; | 1482 static const int kStartBitrateBps = 300000; |
1475 static const int kNewMaxBitrateBps = 1234567; | 1483 static const int kNewMaxBitrateBps = 1234567; |
1476 static const uint8_t kExtensionId = test::kTransportSequenceNumberExtensionId; | 1484 static const uint8_t kExtensionId = test::kTransportSequenceNumberExtensionId; |
1477 class ChangingNetworkRouteTest : public test::EndToEndTest { | 1485 class ChangingNetworkRouteTest : public test::EndToEndTest { |
1478 public: | 1486 public: |
1479 ChangingNetworkRouteTest() | 1487 explicit ChangingNetworkRouteTest(test::SingleThreadedTaskQueue* task_queue) |
1480 : EndToEndTest(test::CallTest::kDefaultTimeoutMs), call_(nullptr) { | 1488 : EndToEndTest(test::CallTest::kDefaultTimeoutMs), |
| 1489 task_queue_(task_queue), |
| 1490 call_(nullptr) { |
1481 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( | 1491 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( |
1482 kRtpExtensionTransportSequenceNumber, kExtensionId)); | 1492 kRtpExtensionTransportSequenceNumber, kExtensionId)); |
1483 } | 1493 } |
1484 | 1494 |
1485 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { | 1495 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { |
1486 call_ = sender_call; | 1496 call_ = sender_call; |
1487 } | 1497 } |
1488 | 1498 |
1489 void ModifyVideoConfigs( | 1499 void ModifyVideoConfigs( |
1490 VideoSendStream::Config* send_config, | 1500 VideoSendStream::Config* send_config, |
(...skipping 20 matching lines...) Expand all Loading... |
1511 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 1521 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
1512 if (call_->GetStats().send_bandwidth_bps > kStartBitrateBps) { | 1522 if (call_->GetStats().send_bandwidth_bps > kStartBitrateBps) { |
1513 observation_complete_.Set(); | 1523 observation_complete_.Set(); |
1514 } | 1524 } |
1515 | 1525 |
1516 return SEND_PACKET; | 1526 return SEND_PACKET; |
1517 } | 1527 } |
1518 | 1528 |
1519 void PerformTest() override { | 1529 void PerformTest() override { |
1520 rtc::NetworkRoute new_route(true, 10, 20, -1); | 1530 rtc::NetworkRoute new_route(true, 10, 20, -1); |
1521 call_->OnNetworkRouteChanged("transport", new_route); | |
1522 Call::Config::BitrateConfig bitrate_config; | 1531 Call::Config::BitrateConfig bitrate_config; |
1523 bitrate_config.start_bitrate_bps = kStartBitrateBps; | 1532 |
1524 call_->SetBitrateConfig(bitrate_config); | 1533 task_queue_->SendTask([this, &new_route, &bitrate_config]() { |
| 1534 call_->OnNetworkRouteChanged("transport", new_route); |
| 1535 bitrate_config.start_bitrate_bps = kStartBitrateBps; |
| 1536 call_->SetBitrateConfig(bitrate_config); |
| 1537 }); |
| 1538 |
1525 EXPECT_TRUE(Wait()) | 1539 EXPECT_TRUE(Wait()) |
1526 << "Timed out while waiting for start bitrate to be exceeded."; | 1540 << "Timed out while waiting for start bitrate to be exceeded."; |
1527 | 1541 |
1528 bitrate_config.start_bitrate_bps = -1; | 1542 task_queue_->SendTask([this, &new_route, &bitrate_config]() { |
1529 bitrate_config.max_bitrate_bps = kNewMaxBitrateBps; | 1543 bitrate_config.start_bitrate_bps = -1; |
1530 call_->SetBitrateConfig(bitrate_config); | 1544 bitrate_config.max_bitrate_bps = kNewMaxBitrateBps; |
1531 // TODO(holmer): We should set the last sent packet id here and verify | 1545 call_->SetBitrateConfig(bitrate_config); |
1532 // that we correctly ignore any packet loss reported prior to that id. | 1546 // TODO(holmer): We should set the last sent packet id here and verify |
1533 ++new_route.local_network_id; | 1547 // that we correctly ignore any packet loss reported prior to that id. |
1534 call_->OnNetworkRouteChanged("transport", new_route); | 1548 ++new_route.local_network_id; |
1535 EXPECT_GE(call_->GetStats().send_bandwidth_bps, kStartBitrateBps); | 1549 call_->OnNetworkRouteChanged("transport", new_route); |
| 1550 EXPECT_GE(call_->GetStats().send_bandwidth_bps, kStartBitrateBps); |
| 1551 }); |
1536 } | 1552 } |
1537 | 1553 |
1538 private: | 1554 private: |
| 1555 test::SingleThreadedTaskQueue* const task_queue_; |
1539 Call* call_; | 1556 Call* call_; |
1540 } test; | 1557 } test(&task_queue_); |
1541 | 1558 |
1542 RunBaseTest(&test); | 1559 RunBaseTest(&test); |
1543 } | 1560 } |
1544 | 1561 |
1545 TEST_F(VideoSendStreamTest, ChangingTransportOverhead) { | 1562 TEST_F(VideoSendStreamTest, ChangingTransportOverhead) { |
1546 class ChangingTransportOverheadTest : public test::EndToEndTest { | 1563 class ChangingTransportOverheadTest : public test::EndToEndTest { |
1547 public: | 1564 public: |
1548 ChangingTransportOverheadTest() | 1565 explicit ChangingTransportOverheadTest( |
| 1566 test::SingleThreadedTaskQueue* task_queue) |
1549 : EndToEndTest(test::CallTest::kDefaultTimeoutMs), | 1567 : EndToEndTest(test::CallTest::kDefaultTimeoutMs), |
| 1568 task_queue_(task_queue), |
1550 call_(nullptr), | 1569 call_(nullptr), |
1551 packets_sent_(0), | 1570 packets_sent_(0), |
1552 transport_overhead_(0) {} | 1571 transport_overhead_(0) {} |
1553 | 1572 |
1554 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { | 1573 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { |
1555 call_ = sender_call; | 1574 call_ = sender_call; |
1556 } | 1575 } |
1557 | 1576 |
1558 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 1577 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
1559 EXPECT_LE(length, kMaxRtpPacketSize); | 1578 EXPECT_LE(length, kMaxRtpPacketSize); |
1560 rtc::CritScope cs(&lock_); | 1579 rtc::CritScope cs(&lock_); |
1561 if (++packets_sent_ < 100) | 1580 if (++packets_sent_ < 100) |
1562 return SEND_PACKET; | 1581 return SEND_PACKET; |
1563 observation_complete_.Set(); | 1582 observation_complete_.Set(); |
1564 return SEND_PACKET; | 1583 return SEND_PACKET; |
1565 } | 1584 } |
1566 | 1585 |
1567 void ModifyVideoConfigs( | 1586 void ModifyVideoConfigs( |
1568 VideoSendStream::Config* send_config, | 1587 VideoSendStream::Config* send_config, |
1569 std::vector<VideoReceiveStream::Config>* receive_configs, | 1588 std::vector<VideoReceiveStream::Config>* receive_configs, |
1570 VideoEncoderConfig* encoder_config) override { | 1589 VideoEncoderConfig* encoder_config) override { |
1571 send_config->rtp.max_packet_size = kMaxRtpPacketSize; | 1590 send_config->rtp.max_packet_size = kMaxRtpPacketSize; |
1572 } | 1591 } |
1573 | 1592 |
1574 void PerformTest() override { | 1593 void PerformTest() override { |
1575 transport_overhead_ = 100; | 1594 task_queue_->SendTask([this]() { |
1576 call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, | 1595 transport_overhead_ = 100; |
1577 transport_overhead_); | 1596 call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, |
| 1597 transport_overhead_); |
| 1598 }); |
| 1599 |
1578 EXPECT_TRUE(Wait()); | 1600 EXPECT_TRUE(Wait()); |
| 1601 |
1579 { | 1602 { |
1580 rtc::CritScope cs(&lock_); | 1603 rtc::CritScope cs(&lock_); |
1581 packets_sent_ = 0; | 1604 packets_sent_ = 0; |
1582 } | 1605 } |
1583 transport_overhead_ = 500; | 1606 |
1584 call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, | 1607 task_queue_->SendTask([this]() { |
1585 transport_overhead_); | 1608 transport_overhead_ = 500; |
| 1609 call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, |
| 1610 transport_overhead_); |
| 1611 }); |
| 1612 |
1586 EXPECT_TRUE(Wait()); | 1613 EXPECT_TRUE(Wait()); |
1587 } | 1614 } |
1588 | 1615 |
1589 private: | 1616 private: |
| 1617 test::SingleThreadedTaskQueue* const task_queue_; |
1590 Call* call_; | 1618 Call* call_; |
1591 rtc::CriticalSection lock_; | 1619 rtc::CriticalSection lock_; |
1592 int packets_sent_ GUARDED_BY(lock_); | 1620 int packets_sent_ GUARDED_BY(lock_); |
1593 int transport_overhead_; | 1621 int transport_overhead_; |
1594 const size_t kMaxRtpPacketSize = 1000; | 1622 const size_t kMaxRtpPacketSize = 1000; |
1595 } test; | 1623 } test(&task_queue_); |
1596 | 1624 |
1597 RunBaseTest(&test); | 1625 RunBaseTest(&test); |
1598 } | 1626 } |
1599 | 1627 |
1600 // Test class takes takes as argument a switch selecting if type switch should | 1628 // Test class takes takes as argument a switch selecting if type switch should |
1601 // occur and a function pointer to reset the send stream. This is necessary | 1629 // occur and a function pointer to reset the send stream. This is necessary |
1602 // since you cannot change the content type of a VideoSendStream, you need to | 1630 // since you cannot change the content type of a VideoSendStream, you need to |
1603 // recreate it. Stopping and recreating the stream can only be done on the main | 1631 // recreate it. Stopping and recreating the stream can only be done on the main |
1604 // thread and in the context of VideoSendStreamTest (not BaseTest). | 1632 // thread and in the context of VideoSendStreamTest (not BaseTest). |
1605 template <typename T> | 1633 template <typename T> |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1709 auto reset_fun = [](const VideoSendStream::Config& send_stream_config, | 1737 auto reset_fun = [](const VideoSendStream::Config& send_stream_config, |
1710 const VideoEncoderConfig& encoder_config) {}; | 1738 const VideoEncoderConfig& encoder_config) {}; |
1711 MaxPaddingSetTest<decltype(reset_fun)> test(false, &reset_fun); | 1739 MaxPaddingSetTest<decltype(reset_fun)> test(false, &reset_fun); |
1712 RunBaseTest(&test); | 1740 RunBaseTest(&test); |
1713 } | 1741 } |
1714 | 1742 |
1715 TEST_F(VideoSendStreamTest, RespectsMinTransmitBitrateAfterContentSwitch) { | 1743 TEST_F(VideoSendStreamTest, RespectsMinTransmitBitrateAfterContentSwitch) { |
1716 // Function for removing and recreating the send stream with a new config. | 1744 // Function for removing and recreating the send stream with a new config. |
1717 auto reset_fun = [this](const VideoSendStream::Config& send_stream_config, | 1745 auto reset_fun = [this](const VideoSendStream::Config& send_stream_config, |
1718 const VideoEncoderConfig& encoder_config) { | 1746 const VideoEncoderConfig& encoder_config) { |
1719 Stop(); | 1747 task_queue_.SendTask([this, &send_stream_config, &encoder_config]() { |
1720 sender_call_->DestroyVideoSendStream(video_send_stream_); | 1748 Stop(); |
1721 video_send_config_ = send_stream_config.Copy(); | 1749 sender_call_->DestroyVideoSendStream(video_send_stream_); |
1722 video_encoder_config_ = encoder_config.Copy(); | 1750 video_send_config_ = send_stream_config.Copy(); |
1723 video_send_stream_ = sender_call_->CreateVideoSendStream( | 1751 video_encoder_config_ = encoder_config.Copy(); |
1724 video_send_config_.Copy(), video_encoder_config_.Copy()); | 1752 video_send_stream_ = sender_call_->CreateVideoSendStream( |
1725 video_send_stream_->SetSource( | 1753 video_send_config_.Copy(), video_encoder_config_.Copy()); |
1726 frame_generator_capturer_.get(), | 1754 video_send_stream_->SetSource( |
1727 VideoSendStream::DegradationPreference::kMaintainResolution); | 1755 frame_generator_capturer_.get(), |
1728 Start(); | 1756 VideoSendStream::DegradationPreference::kMaintainResolution); |
| 1757 Start(); |
| 1758 }); |
1729 }; | 1759 }; |
1730 MaxPaddingSetTest<decltype(reset_fun)> test(true, &reset_fun); | 1760 MaxPaddingSetTest<decltype(reset_fun)> test(true, &reset_fun); |
1731 RunBaseTest(&test); | 1761 RunBaseTest(&test); |
1732 } | 1762 } |
1733 | 1763 |
1734 // This test verifies that new frame sizes reconfigures encoders even though not | 1764 // This test verifies that new frame sizes reconfigures encoders even though not |
1735 // (yet) sending. The purpose of this is to permit encoding as quickly as | 1765 // (yet) sending. The purpose of this is to permit encoding as quickly as |
1736 // possible once we start sending. Likely the frames being input are from the | 1766 // possible once we start sending. Likely the frames being input are from the |
1737 // same source that will be sent later, which just means that we're ready | 1767 // same source that will be sent later, which just means that we're ready |
1738 // earlier. | 1768 // earlier. |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2053 VideoFrame frame(I420Buffer::Create(width, height), kVideoRotation_0, data); | 2083 VideoFrame frame(I420Buffer::Create(width, height), kVideoRotation_0, data); |
2054 frame.set_timestamp(data); | 2084 frame.set_timestamp(data); |
2055 // Use data as a ms timestamp. | 2085 // Use data as a ms timestamp. |
2056 frame.set_timestamp_us(data * rtc::kNumMicrosecsPerMillisec); | 2086 frame.set_timestamp_us(data * rtc::kNumMicrosecsPerMillisec); |
2057 return frame; | 2087 return frame; |
2058 } | 2088 } |
2059 | 2089 |
2060 TEST_F(VideoSendStreamTest, EncoderIsProperlyInitializedAndDestroyed) { | 2090 TEST_F(VideoSendStreamTest, EncoderIsProperlyInitializedAndDestroyed) { |
2061 class EncoderStateObserver : public test::SendTest, public VideoEncoder { | 2091 class EncoderStateObserver : public test::SendTest, public VideoEncoder { |
2062 public: | 2092 public: |
2063 EncoderStateObserver() | 2093 explicit EncoderStateObserver(test::SingleThreadedTaskQueue* task_queue) |
2064 : SendTest(kDefaultTimeoutMs), | 2094 : SendTest(kDefaultTimeoutMs), |
| 2095 task_queue_(task_queue), |
2065 stream_(nullptr), | 2096 stream_(nullptr), |
2066 initialized_(false), | 2097 initialized_(false), |
2067 callback_registered_(false), | 2098 callback_registered_(false), |
2068 num_releases_(0), | 2099 num_releases_(0), |
2069 released_(false) {} | 2100 released_(false) {} |
2070 | 2101 |
2071 bool IsReleased() { | 2102 bool IsReleased() { |
2072 rtc::CritScope lock(&crit_); | 2103 rtc::CritScope lock(&crit_); |
2073 return released_; | 2104 return released_; |
2074 } | 2105 } |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2141 void ModifyVideoConfigs( | 2172 void ModifyVideoConfigs( |
2142 VideoSendStream::Config* send_config, | 2173 VideoSendStream::Config* send_config, |
2143 std::vector<VideoReceiveStream::Config>* receive_configs, | 2174 std::vector<VideoReceiveStream::Config>* receive_configs, |
2144 VideoEncoderConfig* encoder_config) override { | 2175 VideoEncoderConfig* encoder_config) override { |
2145 send_config->encoder_settings.encoder = this; | 2176 send_config->encoder_settings.encoder = this; |
2146 encoder_config_ = encoder_config->Copy(); | 2177 encoder_config_ = encoder_config->Copy(); |
2147 } | 2178 } |
2148 | 2179 |
2149 void PerformTest() override { | 2180 void PerformTest() override { |
2150 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; | 2181 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; |
2151 EXPECT_EQ(0u, num_releases()); | 2182 |
2152 stream_->ReconfigureVideoEncoder(std::move(encoder_config_)); | 2183 task_queue_->SendTask([this]() { |
2153 EXPECT_EQ(0u, num_releases()); | 2184 EXPECT_EQ(0u, num_releases()); |
2154 stream_->Stop(); | 2185 stream_->ReconfigureVideoEncoder(std::move(encoder_config_)); |
2155 // Encoder should not be released before destroying the VideoSendStream. | 2186 EXPECT_EQ(0u, num_releases()); |
2156 EXPECT_FALSE(IsReleased()); | 2187 stream_->Stop(); |
2157 EXPECT_TRUE(IsReadyForEncode()); | 2188 // Encoder should not be released before destroying the VideoSendStream. |
2158 stream_->Start(); | 2189 EXPECT_FALSE(IsReleased()); |
| 2190 EXPECT_TRUE(IsReadyForEncode()); |
| 2191 stream_->Start(); |
| 2192 }); |
| 2193 |
2159 // Sanity check, make sure we still encode frames with this encoder. | 2194 // Sanity check, make sure we still encode frames with this encoder. |
2160 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; | 2195 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; |
2161 } | 2196 } |
2162 | 2197 |
| 2198 test::SingleThreadedTaskQueue* const task_queue_; |
2163 rtc::CriticalSection crit_; | 2199 rtc::CriticalSection crit_; |
2164 VideoSendStream* stream_; | 2200 VideoSendStream* stream_; |
2165 bool initialized_ GUARDED_BY(crit_); | 2201 bool initialized_ GUARDED_BY(crit_); |
2166 bool callback_registered_ GUARDED_BY(crit_); | 2202 bool callback_registered_ GUARDED_BY(crit_); |
2167 size_t num_releases_ GUARDED_BY(crit_); | 2203 size_t num_releases_ GUARDED_BY(crit_); |
2168 bool released_ GUARDED_BY(crit_); | 2204 bool released_ GUARDED_BY(crit_); |
2169 VideoEncoderConfig encoder_config_; | 2205 VideoEncoderConfig encoder_config_; |
2170 } test_encoder; | 2206 } test_encoder(&task_queue_); |
2171 | 2207 |
2172 RunBaseTest(&test_encoder); | 2208 RunBaseTest(&test_encoder); |
2173 | 2209 |
2174 EXPECT_TRUE(test_encoder.IsReleased()); | 2210 EXPECT_TRUE(test_encoder.IsReleased()); |
2175 EXPECT_EQ(1u, test_encoder.num_releases()); | 2211 EXPECT_EQ(1u, test_encoder.num_releases()); |
2176 } | 2212 } |
2177 | 2213 |
2178 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { | 2214 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { |
2179 class VideoCodecConfigObserver : public test::SendTest, | 2215 class VideoCodecConfigObserver : public test::SendTest, |
2180 public test::FakeEncoder { | 2216 public test::FakeEncoder { |
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2546 // default values. | 2582 // default values. |
2547 static const int kMinBitrateKbps = 137; | 2583 static const int kMinBitrateKbps = 137; |
2548 static const int kStartBitrateKbps = 345; | 2584 static const int kStartBitrateKbps = 345; |
2549 static const int kLowerMaxBitrateKbps = 312; | 2585 static const int kLowerMaxBitrateKbps = 312; |
2550 static const int kMaxBitrateKbps = 413; | 2586 static const int kMaxBitrateKbps = 413; |
2551 static const int kIncreasedStartBitrateKbps = 451; | 2587 static const int kIncreasedStartBitrateKbps = 451; |
2552 static const int kIncreasedMaxBitrateKbps = 597; | 2588 static const int kIncreasedMaxBitrateKbps = 597; |
2553 class EncoderBitrateThresholdObserver : public test::SendTest, | 2589 class EncoderBitrateThresholdObserver : public test::SendTest, |
2554 public test::FakeEncoder { | 2590 public test::FakeEncoder { |
2555 public: | 2591 public: |
2556 EncoderBitrateThresholdObserver() | 2592 explicit EncoderBitrateThresholdObserver( |
| 2593 test::SingleThreadedTaskQueue* task_queue) |
2557 : SendTest(kDefaultTimeoutMs), | 2594 : SendTest(kDefaultTimeoutMs), |
2558 FakeEncoder(Clock::GetRealTimeClock()), | 2595 FakeEncoder(Clock::GetRealTimeClock()), |
| 2596 task_queue_(task_queue), |
2559 init_encode_event_(false, false), | 2597 init_encode_event_(false, false), |
2560 bitrate_changed_event_(false, false), | 2598 bitrate_changed_event_(false, false), |
2561 target_bitrate_(0), | 2599 target_bitrate_(0), |
2562 num_initializations_(0), | 2600 num_initializations_(0), |
2563 call_(nullptr), | 2601 call_(nullptr), |
2564 send_stream_(nullptr) {} | 2602 send_stream_(nullptr) {} |
2565 | 2603 |
2566 private: | 2604 private: |
2567 int32_t InitEncode(const VideoCodec* codecSettings, | 2605 int32_t InitEncode(const VideoCodec* codecSettings, |
2568 int32_t numberOfCores, | 2606 int32_t numberOfCores, |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2673 } | 2711 } |
2674 | 2712 |
2675 void PerformTest() override { | 2713 void PerformTest() override { |
2676 ASSERT_TRUE( | 2714 ASSERT_TRUE( |
2677 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)) | 2715 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)) |
2678 << "Timed out while waiting for encoder to be configured."; | 2716 << "Timed out while waiting for encoder to be configured."; |
2679 WaitForSetRates(kStartBitrateKbps); | 2717 WaitForSetRates(kStartBitrateKbps); |
2680 Call::Config::BitrateConfig bitrate_config; | 2718 Call::Config::BitrateConfig bitrate_config; |
2681 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; | 2719 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; |
2682 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; | 2720 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; |
2683 call_->SetBitrateConfig(bitrate_config); | 2721 task_queue_->SendTask([this, &bitrate_config]() { |
| 2722 call_->SetBitrateConfig(bitrate_config); |
| 2723 }); |
2684 // Encoder rate is capped by EncoderConfig max_bitrate_bps. | 2724 // Encoder rate is capped by EncoderConfig max_bitrate_bps. |
2685 WaitForSetRates(kMaxBitrateKbps); | 2725 WaitForSetRates(kMaxBitrateKbps); |
2686 encoder_config_.max_bitrate_bps = kLowerMaxBitrateKbps * 1000; | 2726 encoder_config_.max_bitrate_bps = kLowerMaxBitrateKbps * 1000; |
2687 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); | 2727 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); |
2688 ASSERT_TRUE( | 2728 ASSERT_TRUE( |
2689 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); | 2729 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
2690 EXPECT_EQ(2, num_initializations_) | 2730 EXPECT_EQ(2, num_initializations_) |
2691 << "Encoder should have been reconfigured with the new value."; | 2731 << "Encoder should have been reconfigured with the new value."; |
2692 WaitForSetRates(kLowerMaxBitrateKbps); | 2732 WaitForSetRates(kLowerMaxBitrateKbps); |
2693 | 2733 |
2694 encoder_config_.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; | 2734 encoder_config_.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; |
2695 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); | 2735 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); |
2696 ASSERT_TRUE( | 2736 ASSERT_TRUE( |
2697 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); | 2737 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
2698 EXPECT_EQ(3, num_initializations_) | 2738 EXPECT_EQ(3, num_initializations_) |
2699 << "Encoder should have been reconfigured with the new value."; | 2739 << "Encoder should have been reconfigured with the new value."; |
2700 // Expected target bitrate is the start bitrate set in the call to | 2740 // Expected target bitrate is the start bitrate set in the call to |
2701 // call_->SetBitrateConfig. | 2741 // call_->SetBitrateConfig. |
2702 WaitForSetRates(kIncreasedStartBitrateKbps); | 2742 WaitForSetRates(kIncreasedStartBitrateKbps); |
2703 } | 2743 } |
2704 | 2744 |
| 2745 test::SingleThreadedTaskQueue* const task_queue_; |
2705 rtc::Event init_encode_event_; | 2746 rtc::Event init_encode_event_; |
2706 rtc::Event bitrate_changed_event_; | 2747 rtc::Event bitrate_changed_event_; |
2707 rtc::CriticalSection crit_; | 2748 rtc::CriticalSection crit_; |
2708 uint32_t target_bitrate_ GUARDED_BY(&crit_); | 2749 uint32_t target_bitrate_ GUARDED_BY(&crit_); |
2709 | 2750 |
2710 int num_initializations_; | 2751 int num_initializations_; |
2711 webrtc::Call* call_; | 2752 webrtc::Call* call_; |
2712 webrtc::VideoSendStream* send_stream_; | 2753 webrtc::VideoSendStream* send_stream_; |
2713 webrtc::VideoEncoderConfig encoder_config_; | 2754 webrtc::VideoEncoderConfig encoder_config_; |
2714 } test; | 2755 } test(&task_queue_); |
2715 | 2756 |
2716 RunBaseTest(&test); | 2757 RunBaseTest(&test); |
2717 } | 2758 } |
2718 | 2759 |
2719 TEST_F(VideoSendStreamTest, ReportsSentResolution) { | 2760 TEST_F(VideoSendStreamTest, ReportsSentResolution) { |
2720 static const size_t kNumStreams = 3; | 2761 static const size_t kNumStreams = 3; |
2721 // Unusual resolutions to make sure that they are the ones being reported. | 2762 // Unusual resolutions to make sure that they are the ones being reported. |
2722 static const struct { | 2763 static const struct { |
2723 int width; | 2764 int width; |
2724 int height; | 2765 int height; |
(...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3295 | 3336 |
3296 // This test verifies that overhead is removed from the bandwidth estimate by | 3337 // This test verifies that overhead is removed from the bandwidth estimate by |
3297 // testing that the maximum possible target payload rate is smaller than the | 3338 // testing that the maximum possible target payload rate is smaller than the |
3298 // maximum bandwidth estimate by the overhead rate. | 3339 // maximum bandwidth estimate by the overhead rate. |
3299 TEST_F(VideoSendStreamTest, RemoveOverheadFromBandwidth) { | 3340 TEST_F(VideoSendStreamTest, RemoveOverheadFromBandwidth) { |
3300 test::ScopedFieldTrials override_field_trials( | 3341 test::ScopedFieldTrials override_field_trials( |
3301 "WebRTC-SendSideBwe-WithOverhead/Enabled/"); | 3342 "WebRTC-SendSideBwe-WithOverhead/Enabled/"); |
3302 class RemoveOverheadFromBandwidthTest : public test::EndToEndTest, | 3343 class RemoveOverheadFromBandwidthTest : public test::EndToEndTest, |
3303 public test::FakeEncoder { | 3344 public test::FakeEncoder { |
3304 public: | 3345 public: |
3305 RemoveOverheadFromBandwidthTest() | 3346 explicit RemoveOverheadFromBandwidthTest( |
| 3347 test::SingleThreadedTaskQueue* task_queue) |
3306 : EndToEndTest(test::CallTest::kDefaultTimeoutMs), | 3348 : EndToEndTest(test::CallTest::kDefaultTimeoutMs), |
3307 FakeEncoder(Clock::GetRealTimeClock()), | 3349 FakeEncoder(Clock::GetRealTimeClock()), |
| 3350 task_queue_(task_queue), |
3308 call_(nullptr), | 3351 call_(nullptr), |
3309 max_bitrate_bps_(0), | 3352 max_bitrate_bps_(0), |
3310 first_packet_sent_(false), | 3353 first_packet_sent_(false), |
3311 bitrate_changed_event_(false, false) {} | 3354 bitrate_changed_event_(false, false) {} |
3312 | 3355 |
3313 int32_t SetRateAllocation(const BitrateAllocation& bitrate, | 3356 int32_t SetRateAllocation(const BitrateAllocation& bitrate, |
3314 uint32_t frameRate) override { | 3357 uint32_t frameRate) override { |
3315 rtc::CritScope lock(&crit_); | 3358 rtc::CritScope lock(&crit_); |
3316 // Wait for the first sent packet so that videosendstream knows | 3359 // Wait for the first sent packet so that videosendstream knows |
3317 // rtp_overhead. | 3360 // rtp_overhead. |
(...skipping 24 matching lines...) Expand all Loading... |
3342 } | 3385 } |
3343 | 3386 |
3344 void PerformTest() override { | 3387 void PerformTest() override { |
3345 Call::Config::BitrateConfig bitrate_config; | 3388 Call::Config::BitrateConfig bitrate_config; |
3346 constexpr int kStartBitrateBps = 60000; | 3389 constexpr int kStartBitrateBps = 60000; |
3347 constexpr int kMaxBitrateBps = 60000; | 3390 constexpr int kMaxBitrateBps = 60000; |
3348 constexpr int kMinBitrateBps = 10000; | 3391 constexpr int kMinBitrateBps = 10000; |
3349 bitrate_config.start_bitrate_bps = kStartBitrateBps; | 3392 bitrate_config.start_bitrate_bps = kStartBitrateBps; |
3350 bitrate_config.max_bitrate_bps = kMaxBitrateBps; | 3393 bitrate_config.max_bitrate_bps = kMaxBitrateBps; |
3351 bitrate_config.min_bitrate_bps = kMinBitrateBps; | 3394 bitrate_config.min_bitrate_bps = kMinBitrateBps; |
3352 call_->SetBitrateConfig(bitrate_config); | 3395 task_queue_->SendTask([this, &bitrate_config]() { |
3353 call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, 40); | 3396 call_->SetBitrateConfig(bitrate_config); |
| 3397 call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, 40); |
| 3398 }); |
3354 | 3399 |
3355 // At a bitrate of 60kbps with a packet size of 1200B video and an | 3400 // At a bitrate of 60kbps with a packet size of 1200B video and an |
3356 // overhead of 40B per packet video produces 2240bps overhead. | 3401 // overhead of 40B per packet video produces 2240bps overhead. |
3357 // So the encoder BW should be set to 57760bps. | 3402 // So the encoder BW should be set to 57760bps. |
3358 bitrate_changed_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs); | 3403 bitrate_changed_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs); |
3359 { | 3404 { |
3360 rtc::CritScope lock(&crit_); | 3405 rtc::CritScope lock(&crit_); |
3361 EXPECT_LE(max_bitrate_bps_, 57760u); | 3406 EXPECT_LE(max_bitrate_bps_, 57760u); |
3362 } | 3407 } |
3363 } | 3408 } |
3364 | 3409 |
3365 private: | 3410 private: |
| 3411 test::SingleThreadedTaskQueue* const task_queue_; |
3366 Call* call_; | 3412 Call* call_; |
3367 rtc::CriticalSection crit_; | 3413 rtc::CriticalSection crit_; |
3368 uint32_t max_bitrate_bps_ GUARDED_BY(&crit_); | 3414 uint32_t max_bitrate_bps_ GUARDED_BY(&crit_); |
3369 bool first_packet_sent_ GUARDED_BY(&crit_); | 3415 bool first_packet_sent_ GUARDED_BY(&crit_); |
3370 rtc::Event bitrate_changed_event_; | 3416 rtc::Event bitrate_changed_event_; |
3371 } test; | 3417 } test(&task_queue_); |
3372 | |
3373 RunBaseTest(&test); | 3418 RunBaseTest(&test); |
3374 } | 3419 } |
3375 | 3420 |
3376 TEST_F(VideoSendStreamTest, SendsKeepAlive) { | 3421 TEST_F(VideoSendStreamTest, SendsKeepAlive) { |
3377 const int kTimeoutMs = 50; // Really short timeout for testing. | 3422 const int kTimeoutMs = 50; // Really short timeout for testing. |
3378 | 3423 |
3379 class KeepaliveObserver : public test::SendTest { | 3424 class KeepaliveObserver : public test::SendTest { |
3380 public: | 3425 public: |
3381 KeepaliveObserver() : SendTest(kDefaultTimeoutMs) {} | 3426 KeepaliveObserver() : SendTest(kDefaultTimeoutMs) {} |
3382 | 3427 |
(...skipping 30 matching lines...) Expand all Loading... |
3413 capturer_ = frame_generator_capturer; | 3458 capturer_ = frame_generator_capturer; |
3414 } | 3459 } |
3415 | 3460 |
3416 test::FrameGeneratorCapturer* capturer_ = nullptr; | 3461 test::FrameGeneratorCapturer* capturer_ = nullptr; |
3417 } test; | 3462 } test; |
3418 | 3463 |
3419 RunBaseTest(&test); | 3464 RunBaseTest(&test); |
3420 } | 3465 } |
3421 | 3466 |
3422 } // namespace webrtc | 3467 } // namespace webrtc |
OLD | NEW |