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 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 TEST_F(VideoSendStreamTest, CanStartStartedStream) { | 69 TEST_F(VideoSendStreamTest, CanStartStartedStream) { |
70 CreateSenderCall(Call::Config(event_log_.get())); | 70 task_queue_.SendTask([this]() { |
| 71 CreateSenderCall(Call::Config(event_log_.get())); |
71 | 72 |
72 test::NullTransport transport; | 73 test::NullTransport transport; |
73 CreateSendConfig(1, 0, 0, &transport); | 74 CreateSendConfig(1, 0, 0, &transport); |
74 CreateVideoStreams(); | 75 CreateVideoStreams(); |
75 video_send_stream_->Start(); | 76 video_send_stream_->Start(); |
76 video_send_stream_->Start(); | 77 video_send_stream_->Start(); |
77 DestroyStreams(); | 78 DestroyStreams(); |
| 79 DestroyCalls(); |
| 80 }); |
78 } | 81 } |
79 | 82 |
80 TEST_F(VideoSendStreamTest, CanStopStoppedStream) { | 83 TEST_F(VideoSendStreamTest, CanStopStoppedStream) { |
81 CreateSenderCall(Call::Config(event_log_.get())); | 84 task_queue_.SendTask([this]() { |
| 85 CreateSenderCall(Call::Config(event_log_.get())); |
82 | 86 |
83 test::NullTransport transport; | 87 test::NullTransport transport; |
84 CreateSendConfig(1, 0, 0, &transport); | 88 CreateSendConfig(1, 0, 0, &transport); |
85 CreateVideoStreams(); | 89 CreateVideoStreams(); |
86 video_send_stream_->Stop(); | 90 video_send_stream_->Stop(); |
87 video_send_stream_->Stop(); | 91 video_send_stream_->Stop(); |
88 DestroyStreams(); | 92 DestroyStreams(); |
| 93 DestroyCalls(); |
| 94 }); |
89 } | 95 } |
90 | 96 |
91 TEST_F(VideoSendStreamTest, SupportsCName) { | 97 TEST_F(VideoSendStreamTest, SupportsCName) { |
92 static std::string kCName = "PjQatC14dGfbVwGPUOA9IH7RlsFDbWl4AhXEiDsBizo="; | 98 static std::string kCName = "PjQatC14dGfbVwGPUOA9IH7RlsFDbWl4AhXEiDsBizo="; |
93 class CNameObserver : public test::SendTest { | 99 class CNameObserver : public test::SendTest { |
94 public: | 100 public: |
95 CNameObserver() : SendTest(kDefaultTimeoutMs) {} | 101 CNameObserver() : SendTest(kDefaultTimeoutMs) {} |
96 | 102 |
97 private: | 103 private: |
98 Action OnSendRtcp(const uint8_t* packet, size_t length) override { | 104 Action OnSendRtcp(const uint8_t* packet, size_t length) override { |
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
473 | 479 |
474 if (sent_media_ && sent_ulpfec_) { | 480 if (sent_media_ && sent_ulpfec_) { |
475 observation_complete_.Set(); | 481 observation_complete_.Set(); |
476 } | 482 } |
477 | 483 |
478 prev_header_ = header; | 484 prev_header_ = header; |
479 | 485 |
480 return SEND_PACKET; | 486 return SEND_PACKET; |
481 } | 487 } |
482 | 488 |
483 test::PacketTransport* CreateSendTransport(Call* sender_call) override { | 489 test::PacketTransport* CreateSendTransport( |
| 490 test::SingleThreadedTaskQueueForTesting* task_queue, |
| 491 Call* sender_call) override { |
484 // At low RTT (< kLowRttNackMs) -> NACK only, no FEC. | 492 // At low RTT (< kLowRttNackMs) -> NACK only, no FEC. |
485 // Configure some network delay. | 493 // Configure some network delay. |
486 const int kNetworkDelayMs = 100; | 494 const int kNetworkDelayMs = 100; |
487 FakeNetworkPipe::Config config; | 495 FakeNetworkPipe::Config config; |
488 config.loss_percent = 5; | 496 config.loss_percent = 5; |
489 config.queue_delay_ms = kNetworkDelayMs; | 497 config.queue_delay_ms = kNetworkDelayMs; |
490 return new test::PacketTransport( | 498 return new test::PacketTransport( |
491 sender_call, this, test::PacketTransport::kSender, | 499 task_queue, sender_call, this, test::PacketTransport::kSender, |
492 VideoSendStreamTest::payload_type_map_, config); | 500 VideoSendStreamTest::payload_type_map_, config); |
493 } | 501 } |
494 | 502 |
495 void ModifyVideoConfigs( | 503 void ModifyVideoConfigs( |
496 VideoSendStream::Config* send_config, | 504 VideoSendStream::Config* send_config, |
497 std::vector<VideoReceiveStream::Config>* receive_configs, | 505 std::vector<VideoReceiveStream::Config>* receive_configs, |
498 VideoEncoderConfig* encoder_config) override { | 506 VideoEncoderConfig* encoder_config) override { |
499 if (use_nack_) { | 507 if (use_nack_) { |
500 send_config->rtp.nack.rtp_history_ms = | 508 send_config->rtp.nack.rtp_history_ms = |
501 (*receive_configs)[0].rtp.nack.rtp_history_ms = | 509 (*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); | 637 EXPECT_TRUE(header.extension.hasTransportSequenceNumber); |
630 } | 638 } |
631 | 639 |
632 if (sent_media_ && sent_flexfec_) { | 640 if (sent_media_ && sent_flexfec_) { |
633 observation_complete_.Set(); | 641 observation_complete_.Set(); |
634 } | 642 } |
635 | 643 |
636 return SEND_PACKET; | 644 return SEND_PACKET; |
637 } | 645 } |
638 | 646 |
639 test::PacketTransport* CreateSendTransport(Call* sender_call) override { | 647 test::PacketTransport* CreateSendTransport( |
| 648 test::SingleThreadedTaskQueueForTesting* task_queue, |
| 649 Call* sender_call) override { |
640 // At low RTT (< kLowRttNackMs) -> NACK only, no FEC. | 650 // At low RTT (< kLowRttNackMs) -> NACK only, no FEC. |
641 // Therefore we need some network delay. | 651 // Therefore we need some network delay. |
642 const int kNetworkDelayMs = 100; | 652 const int kNetworkDelayMs = 100; |
643 FakeNetworkPipe::Config config; | 653 FakeNetworkPipe::Config config; |
644 config.loss_percent = 5; | 654 config.loss_percent = 5; |
645 config.queue_delay_ms = kNetworkDelayMs; | 655 config.queue_delay_ms = kNetworkDelayMs; |
646 return new test::PacketTransport( | 656 return new test::PacketTransport( |
647 sender_call, this, test::PacketTransport::kSender, | 657 task_queue, sender_call, this, test::PacketTransport::kSender, |
648 VideoSendStreamTest::payload_type_map_, config); | 658 VideoSendStreamTest::payload_type_map_, config); |
649 } | 659 } |
650 | 660 |
651 void ModifyVideoConfigs( | 661 void ModifyVideoConfigs( |
652 VideoSendStream::Config* send_config, | 662 VideoSendStream::Config* send_config, |
653 std::vector<VideoReceiveStream::Config>* receive_configs, | 663 std::vector<VideoReceiveStream::Config>* receive_configs, |
654 VideoEncoderConfig* encoder_config) override { | 664 VideoEncoderConfig* encoder_config) override { |
655 if (use_nack_) { | 665 if (use_nack_) { |
656 send_config->rtp.nack.rtp_history_ms = | 666 send_config->rtp.nack.rtp_history_ms = |
657 (*receive_configs)[0].rtp.nack.rtp_history_ms = | 667 (*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 { | 1340 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
1331 rtc::CritScope lock(&crit_); | 1341 rtc::CritScope lock(&crit_); |
1332 | 1342 |
1333 RTPHeader header; | 1343 RTPHeader header; |
1334 parser_->Parse(packet, length, &header); | 1344 parser_->Parse(packet, length, &header); |
1335 padding_length_ += header.paddingLength; | 1345 padding_length_ += header.paddingLength; |
1336 total_length_ += length; | 1346 total_length_ += length; |
1337 return SEND_PACKET; | 1347 return SEND_PACKET; |
1338 } | 1348 } |
1339 | 1349 |
1340 test::PacketTransport* CreateSendTransport(Call* sender_call) override { | 1350 test::PacketTransport* CreateSendTransport( |
| 1351 test::SingleThreadedTaskQueueForTesting* task_queue, |
| 1352 Call* sender_call) override { |
1341 const int kNetworkDelayMs = 50; | 1353 const int kNetworkDelayMs = 50; |
1342 FakeNetworkPipe::Config config; | 1354 FakeNetworkPipe::Config config; |
1343 config.loss_percent = 10; | 1355 config.loss_percent = 10; |
1344 config.link_capacity_kbps = kCapacityKbps; | 1356 config.link_capacity_kbps = kCapacityKbps; |
1345 config.queue_delay_ms = kNetworkDelayMs; | 1357 config.queue_delay_ms = kNetworkDelayMs; |
1346 return new test::PacketTransport(sender_call, this, | 1358 return new test::PacketTransport(task_queue, sender_call, this, |
1347 test::PacketTransport::kSender, | 1359 test::PacketTransport::kSender, |
1348 payload_type_map_, config); | 1360 payload_type_map_, config); |
1349 } | 1361 } |
1350 | 1362 |
1351 void ModifyVideoConfigs( | 1363 void ModifyVideoConfigs( |
1352 VideoSendStream::Config* send_config, | 1364 VideoSendStream::Config* send_config, |
1353 std::vector<VideoReceiveStream::Config>* receive_configs, | 1365 std::vector<VideoReceiveStream::Config>* receive_configs, |
1354 VideoEncoderConfig* encoder_config) override { | 1366 VideoEncoderConfig* encoder_config) override { |
1355 // Turn on RTX. | 1367 // Turn on RTX. |
1356 send_config->rtp.rtx.payload_type = kFakeVideoSendPayloadType; | 1368 send_config->rtp.rtx.payload_type = kFakeVideoSendPayloadType; |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1469 | 1481 |
1470 RunBaseTest(&test); | 1482 RunBaseTest(&test); |
1471 } | 1483 } |
1472 | 1484 |
1473 TEST_F(VideoSendStreamTest, ChangingNetworkRoute) { | 1485 TEST_F(VideoSendStreamTest, ChangingNetworkRoute) { |
1474 static const int kStartBitrateBps = 300000; | 1486 static const int kStartBitrateBps = 300000; |
1475 static const int kNewMaxBitrateBps = 1234567; | 1487 static const int kNewMaxBitrateBps = 1234567; |
1476 static const uint8_t kExtensionId = test::kTransportSequenceNumberExtensionId; | 1488 static const uint8_t kExtensionId = test::kTransportSequenceNumberExtensionId; |
1477 class ChangingNetworkRouteTest : public test::EndToEndTest { | 1489 class ChangingNetworkRouteTest : public test::EndToEndTest { |
1478 public: | 1490 public: |
1479 ChangingNetworkRouteTest() | 1491 explicit ChangingNetworkRouteTest( |
1480 : EndToEndTest(test::CallTest::kDefaultTimeoutMs), call_(nullptr) { | 1492 test::SingleThreadedTaskQueueForTesting* task_queue) |
| 1493 : EndToEndTest(test::CallTest::kDefaultTimeoutMs), |
| 1494 task_queue_(task_queue), |
| 1495 call_(nullptr) { |
1481 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( | 1496 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( |
1482 kRtpExtensionTransportSequenceNumber, kExtensionId)); | 1497 kRtpExtensionTransportSequenceNumber, kExtensionId)); |
1483 } | 1498 } |
1484 | 1499 |
1485 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { | 1500 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { |
1486 call_ = sender_call; | 1501 call_ = sender_call; |
1487 } | 1502 } |
1488 | 1503 |
1489 void ModifyVideoConfigs( | 1504 void ModifyVideoConfigs( |
1490 VideoSendStream::Config* send_config, | 1505 VideoSendStream::Config* send_config, |
(...skipping 20 matching lines...) Expand all Loading... |
1511 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 1526 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
1512 if (call_->GetStats().send_bandwidth_bps > kStartBitrateBps) { | 1527 if (call_->GetStats().send_bandwidth_bps > kStartBitrateBps) { |
1513 observation_complete_.Set(); | 1528 observation_complete_.Set(); |
1514 } | 1529 } |
1515 | 1530 |
1516 return SEND_PACKET; | 1531 return SEND_PACKET; |
1517 } | 1532 } |
1518 | 1533 |
1519 void PerformTest() override { | 1534 void PerformTest() override { |
1520 rtc::NetworkRoute new_route(true, 10, 20, -1); | 1535 rtc::NetworkRoute new_route(true, 10, 20, -1); |
1521 call_->OnNetworkRouteChanged("transport", new_route); | |
1522 Call::Config::BitrateConfig bitrate_config; | 1536 Call::Config::BitrateConfig bitrate_config; |
1523 bitrate_config.start_bitrate_bps = kStartBitrateBps; | 1537 |
1524 call_->SetBitrateConfig(bitrate_config); | 1538 task_queue_->SendTask([this, &new_route, &bitrate_config]() { |
| 1539 call_->OnNetworkRouteChanged("transport", new_route); |
| 1540 bitrate_config.start_bitrate_bps = kStartBitrateBps; |
| 1541 call_->SetBitrateConfig(bitrate_config); |
| 1542 }); |
| 1543 |
1525 EXPECT_TRUE(Wait()) | 1544 EXPECT_TRUE(Wait()) |
1526 << "Timed out while waiting for start bitrate to be exceeded."; | 1545 << "Timed out while waiting for start bitrate to be exceeded."; |
1527 | 1546 |
1528 bitrate_config.start_bitrate_bps = -1; | 1547 task_queue_->SendTask([this, &new_route, &bitrate_config]() { |
1529 bitrate_config.max_bitrate_bps = kNewMaxBitrateBps; | 1548 bitrate_config.start_bitrate_bps = -1; |
1530 call_->SetBitrateConfig(bitrate_config); | 1549 bitrate_config.max_bitrate_bps = kNewMaxBitrateBps; |
1531 // TODO(holmer): We should set the last sent packet id here and verify | 1550 call_->SetBitrateConfig(bitrate_config); |
1532 // that we correctly ignore any packet loss reported prior to that id. | 1551 // TODO(holmer): We should set the last sent packet id here and verify |
1533 ++new_route.local_network_id; | 1552 // that we correctly ignore any packet loss reported prior to that id. |
1534 call_->OnNetworkRouteChanged("transport", new_route); | 1553 ++new_route.local_network_id; |
1535 EXPECT_GE(call_->GetStats().send_bandwidth_bps, kStartBitrateBps); | 1554 call_->OnNetworkRouteChanged("transport", new_route); |
| 1555 EXPECT_GE(call_->GetStats().send_bandwidth_bps, kStartBitrateBps); |
| 1556 }); |
1536 } | 1557 } |
1537 | 1558 |
1538 private: | 1559 private: |
| 1560 test::SingleThreadedTaskQueueForTesting* const task_queue_; |
1539 Call* call_; | 1561 Call* call_; |
1540 } test; | 1562 } test(&task_queue_); |
1541 | 1563 |
1542 RunBaseTest(&test); | 1564 RunBaseTest(&test); |
1543 } | 1565 } |
1544 | 1566 |
1545 TEST_F(VideoSendStreamTest, ChangingTransportOverhead) { | 1567 TEST_F(VideoSendStreamTest, ChangingTransportOverhead) { |
1546 class ChangingTransportOverheadTest : public test::EndToEndTest { | 1568 class ChangingTransportOverheadTest : public test::EndToEndTest { |
1547 public: | 1569 public: |
1548 ChangingTransportOverheadTest() | 1570 explicit ChangingTransportOverheadTest( |
| 1571 test::SingleThreadedTaskQueueForTesting* task_queue) |
1549 : EndToEndTest(test::CallTest::kDefaultTimeoutMs), | 1572 : EndToEndTest(test::CallTest::kDefaultTimeoutMs), |
| 1573 task_queue_(task_queue), |
1550 call_(nullptr), | 1574 call_(nullptr), |
1551 packets_sent_(0), | 1575 packets_sent_(0), |
1552 transport_overhead_(0) {} | 1576 transport_overhead_(0) {} |
1553 | 1577 |
1554 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { | 1578 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { |
1555 call_ = sender_call; | 1579 call_ = sender_call; |
1556 } | 1580 } |
1557 | 1581 |
1558 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 1582 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
1559 EXPECT_LE(length, kMaxRtpPacketSize); | 1583 EXPECT_LE(length, kMaxRtpPacketSize); |
1560 rtc::CritScope cs(&lock_); | 1584 rtc::CritScope cs(&lock_); |
1561 if (++packets_sent_ < 100) | 1585 if (++packets_sent_ < 100) |
1562 return SEND_PACKET; | 1586 return SEND_PACKET; |
1563 observation_complete_.Set(); | 1587 observation_complete_.Set(); |
1564 return SEND_PACKET; | 1588 return SEND_PACKET; |
1565 } | 1589 } |
1566 | 1590 |
1567 void ModifyVideoConfigs( | 1591 void ModifyVideoConfigs( |
1568 VideoSendStream::Config* send_config, | 1592 VideoSendStream::Config* send_config, |
1569 std::vector<VideoReceiveStream::Config>* receive_configs, | 1593 std::vector<VideoReceiveStream::Config>* receive_configs, |
1570 VideoEncoderConfig* encoder_config) override { | 1594 VideoEncoderConfig* encoder_config) override { |
1571 send_config->rtp.max_packet_size = kMaxRtpPacketSize; | 1595 send_config->rtp.max_packet_size = kMaxRtpPacketSize; |
1572 } | 1596 } |
1573 | 1597 |
1574 void PerformTest() override { | 1598 void PerformTest() override { |
1575 transport_overhead_ = 100; | 1599 task_queue_->SendTask([this]() { |
1576 call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, | 1600 transport_overhead_ = 100; |
1577 transport_overhead_); | 1601 call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, |
| 1602 transport_overhead_); |
| 1603 }); |
| 1604 |
1578 EXPECT_TRUE(Wait()); | 1605 EXPECT_TRUE(Wait()); |
| 1606 |
1579 { | 1607 { |
1580 rtc::CritScope cs(&lock_); | 1608 rtc::CritScope cs(&lock_); |
1581 packets_sent_ = 0; | 1609 packets_sent_ = 0; |
1582 } | 1610 } |
1583 transport_overhead_ = 500; | 1611 |
1584 call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, | 1612 task_queue_->SendTask([this]() { |
1585 transport_overhead_); | 1613 transport_overhead_ = 500; |
| 1614 call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, |
| 1615 transport_overhead_); |
| 1616 }); |
| 1617 |
1586 EXPECT_TRUE(Wait()); | 1618 EXPECT_TRUE(Wait()); |
1587 } | 1619 } |
1588 | 1620 |
1589 private: | 1621 private: |
| 1622 test::SingleThreadedTaskQueueForTesting* const task_queue_; |
1590 Call* call_; | 1623 Call* call_; |
1591 rtc::CriticalSection lock_; | 1624 rtc::CriticalSection lock_; |
1592 int packets_sent_ GUARDED_BY(lock_); | 1625 int packets_sent_ GUARDED_BY(lock_); |
1593 int transport_overhead_; | 1626 int transport_overhead_; |
1594 const size_t kMaxRtpPacketSize = 1000; | 1627 const size_t kMaxRtpPacketSize = 1000; |
1595 } test; | 1628 } test(&task_queue_); |
1596 | 1629 |
1597 RunBaseTest(&test); | 1630 RunBaseTest(&test); |
1598 } | 1631 } |
1599 | 1632 |
1600 // Test class takes takes as argument a switch selecting if type switch should | 1633 // 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 | 1634 // 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 | 1635 // 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 | 1636 // recreate it. Stopping and recreating the stream can only be done on the main |
1604 // thread and in the context of VideoSendStreamTest (not BaseTest). | 1637 // thread and in the context of VideoSendStreamTest (not BaseTest). |
1605 template <typename T> | 1638 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, | 1742 auto reset_fun = [](const VideoSendStream::Config& send_stream_config, |
1710 const VideoEncoderConfig& encoder_config) {}; | 1743 const VideoEncoderConfig& encoder_config) {}; |
1711 MaxPaddingSetTest<decltype(reset_fun)> test(false, &reset_fun); | 1744 MaxPaddingSetTest<decltype(reset_fun)> test(false, &reset_fun); |
1712 RunBaseTest(&test); | 1745 RunBaseTest(&test); |
1713 } | 1746 } |
1714 | 1747 |
1715 TEST_F(VideoSendStreamTest, RespectsMinTransmitBitrateAfterContentSwitch) { | 1748 TEST_F(VideoSendStreamTest, RespectsMinTransmitBitrateAfterContentSwitch) { |
1716 // Function for removing and recreating the send stream with a new config. | 1749 // Function for removing and recreating the send stream with a new config. |
1717 auto reset_fun = [this](const VideoSendStream::Config& send_stream_config, | 1750 auto reset_fun = [this](const VideoSendStream::Config& send_stream_config, |
1718 const VideoEncoderConfig& encoder_config) { | 1751 const VideoEncoderConfig& encoder_config) { |
1719 Stop(); | 1752 task_queue_.SendTask([this, &send_stream_config, &encoder_config]() { |
1720 sender_call_->DestroyVideoSendStream(video_send_stream_); | 1753 Stop(); |
1721 video_send_config_ = send_stream_config.Copy(); | 1754 sender_call_->DestroyVideoSendStream(video_send_stream_); |
1722 video_encoder_config_ = encoder_config.Copy(); | 1755 video_send_config_ = send_stream_config.Copy(); |
1723 video_send_stream_ = sender_call_->CreateVideoSendStream( | 1756 video_encoder_config_ = encoder_config.Copy(); |
1724 video_send_config_.Copy(), video_encoder_config_.Copy()); | 1757 video_send_stream_ = sender_call_->CreateVideoSendStream( |
1725 video_send_stream_->SetSource( | 1758 video_send_config_.Copy(), video_encoder_config_.Copy()); |
1726 frame_generator_capturer_.get(), | 1759 video_send_stream_->SetSource( |
1727 VideoSendStream::DegradationPreference::kMaintainResolution); | 1760 frame_generator_capturer_.get(), |
1728 Start(); | 1761 VideoSendStream::DegradationPreference::kMaintainResolution); |
| 1762 Start(); |
| 1763 }); |
1729 }; | 1764 }; |
1730 MaxPaddingSetTest<decltype(reset_fun)> test(true, &reset_fun); | 1765 MaxPaddingSetTest<decltype(reset_fun)> test(true, &reset_fun); |
1731 RunBaseTest(&test); | 1766 RunBaseTest(&test); |
1732 } | 1767 } |
1733 | 1768 |
1734 // This test verifies that new frame sizes reconfigures encoders even though not | 1769 // 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 | 1770 // (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 | 1771 // 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 | 1772 // same source that will be sent later, which just means that we're ready |
1738 // earlier. | 1773 // earlier. |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1784 return 0; | 1819 return 0; |
1785 } | 1820 } |
1786 | 1821 |
1787 rtc::CriticalSection crit_; | 1822 rtc::CriticalSection crit_; |
1788 rtc::Event init_encode_called_; | 1823 rtc::Event init_encode_called_; |
1789 size_t number_of_initializations_ GUARDED_BY(&crit_); | 1824 size_t number_of_initializations_ GUARDED_BY(&crit_); |
1790 int last_initialized_frame_width_ GUARDED_BY(&crit_); | 1825 int last_initialized_frame_width_ GUARDED_BY(&crit_); |
1791 int last_initialized_frame_height_ GUARDED_BY(&crit_); | 1826 int last_initialized_frame_height_ GUARDED_BY(&crit_); |
1792 }; | 1827 }; |
1793 | 1828 |
1794 CreateSenderCall(Call::Config(event_log_.get())); | |
1795 test::NullTransport transport; | 1829 test::NullTransport transport; |
1796 CreateSendConfig(1, 0, 0, &transport); | |
1797 EncoderObserver encoder; | 1830 EncoderObserver encoder; |
1798 video_send_config_.encoder_settings.encoder = &encoder; | 1831 |
1799 CreateVideoStreams(); | 1832 task_queue_.SendTask([this, &transport, &encoder]() { |
1800 CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, | 1833 CreateSenderCall(Call::Config(event_log_.get())); |
1801 kDefaultHeight); | 1834 CreateSendConfig(1, 0, 0, &transport); |
1802 frame_generator_capturer_->Start(); | 1835 video_send_config_.encoder_settings.encoder = &encoder; |
| 1836 CreateVideoStreams(); |
| 1837 CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, |
| 1838 kDefaultHeight); |
| 1839 frame_generator_capturer_->Start(); |
| 1840 }); |
1803 | 1841 |
1804 encoder.WaitForResolution(kDefaultWidth, kDefaultHeight); | 1842 encoder.WaitForResolution(kDefaultWidth, kDefaultHeight); |
1805 frame_generator_capturer_->ChangeResolution(kDefaultWidth * 2, | 1843 |
1806 kDefaultHeight * 2); | 1844 task_queue_.SendTask([this]() { |
| 1845 frame_generator_capturer_->ChangeResolution(kDefaultWidth * 2, |
| 1846 kDefaultHeight * 2); |
| 1847 }); |
| 1848 |
1807 encoder.WaitForResolution(kDefaultWidth * 2, kDefaultHeight * 2); | 1849 encoder.WaitForResolution(kDefaultWidth * 2, kDefaultHeight * 2); |
1808 DestroyStreams(); | 1850 |
| 1851 task_queue_.SendTask([this]() { |
| 1852 DestroyStreams(); |
| 1853 DestroyCalls(); |
| 1854 }); |
1809 } | 1855 } |
1810 | 1856 |
1811 TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) { | 1857 TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) { |
1812 class StartBitrateObserver : public test::FakeEncoder { | 1858 class StartBitrateObserver : public test::FakeEncoder { |
1813 public: | 1859 public: |
1814 StartBitrateObserver() | 1860 StartBitrateObserver() |
1815 : FakeEncoder(Clock::GetRealTimeClock()), | 1861 : FakeEncoder(Clock::GetRealTimeClock()), |
1816 start_bitrate_changed_(false, false), | 1862 start_bitrate_changed_(false, false), |
1817 start_bitrate_kbps_(0) {} | 1863 start_bitrate_kbps_(0) {} |
1818 int32_t InitEncode(const VideoCodec* config, | 1864 int32_t InitEncode(const VideoCodec* config, |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1930 return false; | 1976 return false; |
1931 } | 1977 } |
1932 | 1978 |
1933 private: | 1979 private: |
1934 rtc::CriticalSection crit_; | 1980 rtc::CriticalSection crit_; |
1935 rtc::Event encoder_init_; | 1981 rtc::Event encoder_init_; |
1936 rtc::Event bitrate_changed_; | 1982 rtc::Event bitrate_changed_; |
1937 rtc::Optional<int> bitrate_kbps_ GUARDED_BY(crit_); | 1983 rtc::Optional<int> bitrate_kbps_ GUARDED_BY(crit_); |
1938 }; | 1984 }; |
1939 | 1985 |
1940 CreateSenderCall(Call::Config(event_log_.get())); | 1986 test::NullTransport transport; |
| 1987 StartStopBitrateObserver encoder; |
1941 | 1988 |
1942 test::NullTransport transport; | 1989 task_queue_.SendTask([this, &transport, &encoder]() { |
1943 CreateSendConfig(1, 0, 0, &transport); | 1990 CreateSenderCall(Call::Config(event_log_.get())); |
| 1991 CreateSendConfig(1, 0, 0, &transport); |
1944 | 1992 |
1945 sender_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp); | 1993 sender_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp); |
1946 | 1994 |
1947 StartStopBitrateObserver encoder; | 1995 video_send_config_.encoder_settings.encoder = &encoder; |
1948 video_send_config_.encoder_settings.encoder = &encoder; | 1996 video_send_config_.encoder_settings.internal_source = true; |
1949 video_send_config_.encoder_settings.internal_source = true; | |
1950 | 1997 |
1951 CreateVideoStreams(); | 1998 CreateVideoStreams(); |
| 1999 }); |
1952 | 2000 |
1953 EXPECT_TRUE(encoder.WaitForEncoderInit()); | 2001 EXPECT_TRUE(encoder.WaitForEncoderInit()); |
1954 | 2002 |
1955 video_send_stream_->Start(); | 2003 task_queue_.SendTask([this]() { |
| 2004 video_send_stream_->Start(); |
| 2005 }); |
1956 EXPECT_TRUE(encoder.WaitBitrateChanged(true)); | 2006 EXPECT_TRUE(encoder.WaitBitrateChanged(true)); |
1957 | 2007 |
1958 video_send_stream_->Stop(); | 2008 task_queue_.SendTask([this]() { |
| 2009 video_send_stream_->Stop(); |
| 2010 }); |
1959 EXPECT_TRUE(encoder.WaitBitrateChanged(false)); | 2011 EXPECT_TRUE(encoder.WaitBitrateChanged(false)); |
1960 | 2012 |
1961 video_send_stream_->Start(); | 2013 task_queue_.SendTask([this]() { |
| 2014 video_send_stream_->Start(); |
| 2015 }); |
1962 EXPECT_TRUE(encoder.WaitBitrateChanged(true)); | 2016 EXPECT_TRUE(encoder.WaitBitrateChanged(true)); |
1963 | 2017 |
1964 DestroyStreams(); | 2018 task_queue_.SendTask([this]() { |
| 2019 DestroyStreams(); |
| 2020 DestroyCalls(); |
| 2021 }); |
1965 } | 2022 } |
1966 | 2023 |
1967 TEST_F(VideoSendStreamTest, CapturesTextureAndVideoFrames) { | 2024 TEST_F(VideoSendStreamTest, CapturesTextureAndVideoFrames) { |
1968 class FrameObserver : public rtc::VideoSinkInterface<VideoFrame> { | 2025 class FrameObserver : public rtc::VideoSinkInterface<VideoFrame> { |
1969 public: | 2026 public: |
1970 FrameObserver() : output_frame_event_(false, false) {} | 2027 FrameObserver() : output_frame_event_(false, false) {} |
1971 | 2028 |
1972 void OnFrame(const VideoFrame& video_frame) override { | 2029 void OnFrame(const VideoFrame& video_frame) override { |
1973 output_frames_.push_back(video_frame); | 2030 output_frames_.push_back(video_frame); |
1974 output_frame_event_.Set(); | 2031 output_frame_event_.Set(); |
(...skipping 10 matching lines...) Expand all Loading... |
1985 } | 2042 } |
1986 | 2043 |
1987 private: | 2044 private: |
1988 // Delivered output frames. | 2045 // Delivered output frames. |
1989 std::vector<VideoFrame> output_frames_; | 2046 std::vector<VideoFrame> output_frames_; |
1990 | 2047 |
1991 // Indicate an output frame has arrived. | 2048 // Indicate an output frame has arrived. |
1992 rtc::Event output_frame_event_; | 2049 rtc::Event output_frame_event_; |
1993 }; | 2050 }; |
1994 | 2051 |
1995 // Initialize send stream. | 2052 test::NullTransport transport; |
1996 CreateSenderCall(Call::Config(event_log_.get())); | 2053 FrameObserver observer; |
| 2054 std::vector<VideoFrame> input_frames; |
1997 | 2055 |
1998 test::NullTransport transport; | 2056 task_queue_.SendTask([this, &transport, &observer, &input_frames]() { |
1999 CreateSendConfig(1, 0, 0, &transport); | 2057 // Initialize send stream. |
2000 FrameObserver observer; | 2058 CreateSenderCall(Call::Config(event_log_.get())); |
2001 video_send_config_.pre_encode_callback = &observer; | |
2002 CreateVideoStreams(); | |
2003 | 2059 |
2004 // Prepare five input frames. Send ordinary VideoFrame and texture frames | 2060 CreateSendConfig(1, 0, 0, &transport); |
2005 // alternatively. | 2061 video_send_config_.pre_encode_callback = &observer; |
2006 std::vector<VideoFrame> input_frames; | 2062 CreateVideoStreams(); |
2007 int width = 168; | |
2008 int height = 132; | |
2009 | 2063 |
2010 input_frames.push_back(test::FakeNativeBuffer::CreateFrame( | 2064 // Prepare five input frames. Send ordinary VideoFrame and texture frames |
2011 width, height, 1, 1, kVideoRotation_0)); | 2065 // alternatively. |
2012 input_frames.push_back(test::FakeNativeBuffer::CreateFrame( | 2066 int width = 168; |
2013 width, height, 2, 2, kVideoRotation_0)); | 2067 int height = 132; |
2014 input_frames.push_back(CreateVideoFrame(width, height, 3)); | |
2015 input_frames.push_back(CreateVideoFrame(width, height, 4)); | |
2016 input_frames.push_back(test::FakeNativeBuffer::CreateFrame( | |
2017 width, height, 5, 5, kVideoRotation_0)); | |
2018 | 2068 |
2019 video_send_stream_->Start(); | 2069 input_frames.push_back(test::FakeNativeBuffer::CreateFrame( |
2020 test::FrameForwarder forwarder; | 2070 width, height, 1, 1, kVideoRotation_0)); |
2021 video_send_stream_->SetSource( | 2071 input_frames.push_back(test::FakeNativeBuffer::CreateFrame( |
2022 &forwarder, VideoSendStream::DegradationPreference::kMaintainFramerate); | 2072 width, height, 2, 2, kVideoRotation_0)); |
2023 for (size_t i = 0; i < input_frames.size(); i++) { | 2073 input_frames.push_back(CreateVideoFrame(width, height, 3)); |
2024 forwarder.IncomingCapturedFrame(input_frames[i]); | 2074 input_frames.push_back(CreateVideoFrame(width, height, 4)); |
2025 // Wait until the output frame is received before sending the next input | 2075 input_frames.push_back(test::FakeNativeBuffer::CreateFrame( |
2026 // frame. Or the previous input frame may be replaced without delivering. | 2076 width, height, 5, 5, kVideoRotation_0)); |
2027 observer.WaitOutputFrame(); | 2077 |
2028 } | 2078 video_send_stream_->Start(); |
2029 video_send_stream_->Stop(); | 2079 test::FrameForwarder forwarder; |
2030 video_send_stream_->SetSource( | 2080 video_send_stream_->SetSource( |
2031 nullptr, VideoSendStream::DegradationPreference::kMaintainFramerate); | 2081 &forwarder, VideoSendStream::DegradationPreference::kMaintainFramerate); |
| 2082 for (size_t i = 0; i < input_frames.size(); i++) { |
| 2083 forwarder.IncomingCapturedFrame(input_frames[i]); |
| 2084 // Wait until the output frame is received before sending the next input |
| 2085 // frame. Or the previous input frame may be replaced without delivering. |
| 2086 observer.WaitOutputFrame(); |
| 2087 } |
| 2088 video_send_stream_->Stop(); |
| 2089 video_send_stream_->SetSource( |
| 2090 nullptr, VideoSendStream::DegradationPreference::kMaintainFramerate); |
| 2091 }); |
2032 | 2092 |
2033 // Test if the input and output frames are the same. render_time_ms and | 2093 // Test if the input and output frames are the same. render_time_ms and |
2034 // timestamp are not compared because capturer sets those values. | 2094 // timestamp are not compared because capturer sets those values. |
2035 ExpectEqualFramesVector(input_frames, observer.output_frames()); | 2095 ExpectEqualFramesVector(input_frames, observer.output_frames()); |
2036 | 2096 |
2037 DestroyStreams(); | 2097 task_queue_.SendTask([this]() { |
| 2098 DestroyStreams(); |
| 2099 DestroyCalls(); |
| 2100 }); |
2038 } | 2101 } |
2039 | 2102 |
2040 void ExpectEqualFramesVector(const std::vector<VideoFrame>& frames1, | 2103 void ExpectEqualFramesVector(const std::vector<VideoFrame>& frames1, |
2041 const std::vector<VideoFrame>& frames2) { | 2104 const std::vector<VideoFrame>& frames2) { |
2042 EXPECT_EQ(frames1.size(), frames2.size()); | 2105 EXPECT_EQ(frames1.size(), frames2.size()); |
2043 for (size_t i = 0; i < std::min(frames1.size(), frames2.size()); ++i) | 2106 for (size_t i = 0; i < std::min(frames1.size(), frames2.size()); ++i) |
2044 // Compare frame buffers, since we don't care about differing timestamps. | 2107 // Compare frame buffers, since we don't care about differing timestamps. |
2045 EXPECT_TRUE(test::FrameBufsEqual(frames1[i].video_frame_buffer(), | 2108 EXPECT_TRUE(test::FrameBufsEqual(frames1[i].video_frame_buffer(), |
2046 frames2[i].video_frame_buffer())); | 2109 frames2[i].video_frame_buffer())); |
2047 } | 2110 } |
2048 | 2111 |
2049 VideoFrame CreateVideoFrame(int width, int height, uint8_t data) { | 2112 VideoFrame CreateVideoFrame(int width, int height, uint8_t data) { |
2050 const int kSizeY = width * height * 2; | 2113 const int kSizeY = width * height * 2; |
2051 std::unique_ptr<uint8_t[]> buffer(new uint8_t[kSizeY]); | 2114 std::unique_ptr<uint8_t[]> buffer(new uint8_t[kSizeY]); |
2052 memset(buffer.get(), data, kSizeY); | 2115 memset(buffer.get(), data, kSizeY); |
2053 VideoFrame frame(I420Buffer::Create(width, height), kVideoRotation_0, data); | 2116 VideoFrame frame(I420Buffer::Create(width, height), kVideoRotation_0, data); |
2054 frame.set_timestamp(data); | 2117 frame.set_timestamp(data); |
2055 // Use data as a ms timestamp. | 2118 // Use data as a ms timestamp. |
2056 frame.set_timestamp_us(data * rtc::kNumMicrosecsPerMillisec); | 2119 frame.set_timestamp_us(data * rtc::kNumMicrosecsPerMillisec); |
2057 return frame; | 2120 return frame; |
2058 } | 2121 } |
2059 | 2122 |
2060 TEST_F(VideoSendStreamTest, EncoderIsProperlyInitializedAndDestroyed) { | 2123 TEST_F(VideoSendStreamTest, EncoderIsProperlyInitializedAndDestroyed) { |
2061 class EncoderStateObserver : public test::SendTest, public VideoEncoder { | 2124 class EncoderStateObserver : public test::SendTest, public VideoEncoder { |
2062 public: | 2125 public: |
2063 EncoderStateObserver() | 2126 explicit EncoderStateObserver( |
| 2127 test::SingleThreadedTaskQueueForTesting* task_queue) |
2064 : SendTest(kDefaultTimeoutMs), | 2128 : SendTest(kDefaultTimeoutMs), |
| 2129 task_queue_(task_queue), |
2065 stream_(nullptr), | 2130 stream_(nullptr), |
2066 initialized_(false), | 2131 initialized_(false), |
2067 callback_registered_(false), | 2132 callback_registered_(false), |
2068 num_releases_(0), | 2133 num_releases_(0), |
2069 released_(false) {} | 2134 released_(false) {} |
2070 | 2135 |
2071 bool IsReleased() { | 2136 bool IsReleased() { |
2072 rtc::CritScope lock(&crit_); | 2137 rtc::CritScope lock(&crit_); |
2073 return released_; | 2138 return released_; |
2074 } | 2139 } |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2141 void ModifyVideoConfigs( | 2206 void ModifyVideoConfigs( |
2142 VideoSendStream::Config* send_config, | 2207 VideoSendStream::Config* send_config, |
2143 std::vector<VideoReceiveStream::Config>* receive_configs, | 2208 std::vector<VideoReceiveStream::Config>* receive_configs, |
2144 VideoEncoderConfig* encoder_config) override { | 2209 VideoEncoderConfig* encoder_config) override { |
2145 send_config->encoder_settings.encoder = this; | 2210 send_config->encoder_settings.encoder = this; |
2146 encoder_config_ = encoder_config->Copy(); | 2211 encoder_config_ = encoder_config->Copy(); |
2147 } | 2212 } |
2148 | 2213 |
2149 void PerformTest() override { | 2214 void PerformTest() override { |
2150 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; | 2215 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; |
2151 EXPECT_EQ(0u, num_releases()); | 2216 |
2152 stream_->ReconfigureVideoEncoder(std::move(encoder_config_)); | 2217 task_queue_->SendTask([this]() { |
2153 EXPECT_EQ(0u, num_releases()); | 2218 EXPECT_EQ(0u, num_releases()); |
2154 stream_->Stop(); | 2219 stream_->ReconfigureVideoEncoder(std::move(encoder_config_)); |
2155 // Encoder should not be released before destroying the VideoSendStream. | 2220 EXPECT_EQ(0u, num_releases()); |
2156 EXPECT_FALSE(IsReleased()); | 2221 stream_->Stop(); |
2157 EXPECT_TRUE(IsReadyForEncode()); | 2222 // Encoder should not be released before destroying the VideoSendStream. |
2158 stream_->Start(); | 2223 EXPECT_FALSE(IsReleased()); |
| 2224 EXPECT_TRUE(IsReadyForEncode()); |
| 2225 stream_->Start(); |
| 2226 }); |
| 2227 |
2159 // Sanity check, make sure we still encode frames with this encoder. | 2228 // Sanity check, make sure we still encode frames with this encoder. |
2160 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; | 2229 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; |
2161 } | 2230 } |
2162 | 2231 |
| 2232 test::SingleThreadedTaskQueueForTesting* const task_queue_; |
2163 rtc::CriticalSection crit_; | 2233 rtc::CriticalSection crit_; |
2164 VideoSendStream* stream_; | 2234 VideoSendStream* stream_; |
2165 bool initialized_ GUARDED_BY(crit_); | 2235 bool initialized_ GUARDED_BY(crit_); |
2166 bool callback_registered_ GUARDED_BY(crit_); | 2236 bool callback_registered_ GUARDED_BY(crit_); |
2167 size_t num_releases_ GUARDED_BY(crit_); | 2237 size_t num_releases_ GUARDED_BY(crit_); |
2168 bool released_ GUARDED_BY(crit_); | 2238 bool released_ GUARDED_BY(crit_); |
2169 VideoEncoderConfig encoder_config_; | 2239 VideoEncoderConfig encoder_config_; |
2170 } test_encoder; | 2240 } test_encoder(&task_queue_); |
2171 | 2241 |
2172 RunBaseTest(&test_encoder); | 2242 RunBaseTest(&test_encoder); |
2173 | 2243 |
2174 EXPECT_TRUE(test_encoder.IsReleased()); | 2244 EXPECT_TRUE(test_encoder.IsReleased()); |
2175 EXPECT_EQ(1u, test_encoder.num_releases()); | 2245 EXPECT_EQ(1u, test_encoder.num_releases()); |
2176 } | 2246 } |
2177 | 2247 |
2178 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { | 2248 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { |
2179 class VideoCodecConfigObserver : public test::SendTest, | 2249 class VideoCodecConfigObserver : public test::SendTest, |
2180 public test::FakeEncoder { | 2250 public test::FakeEncoder { |
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2546 // default values. | 2616 // default values. |
2547 static const int kMinBitrateKbps = 137; | 2617 static const int kMinBitrateKbps = 137; |
2548 static const int kStartBitrateKbps = 345; | 2618 static const int kStartBitrateKbps = 345; |
2549 static const int kLowerMaxBitrateKbps = 312; | 2619 static const int kLowerMaxBitrateKbps = 312; |
2550 static const int kMaxBitrateKbps = 413; | 2620 static const int kMaxBitrateKbps = 413; |
2551 static const int kIncreasedStartBitrateKbps = 451; | 2621 static const int kIncreasedStartBitrateKbps = 451; |
2552 static const int kIncreasedMaxBitrateKbps = 597; | 2622 static const int kIncreasedMaxBitrateKbps = 597; |
2553 class EncoderBitrateThresholdObserver : public test::SendTest, | 2623 class EncoderBitrateThresholdObserver : public test::SendTest, |
2554 public test::FakeEncoder { | 2624 public test::FakeEncoder { |
2555 public: | 2625 public: |
2556 EncoderBitrateThresholdObserver() | 2626 explicit EncoderBitrateThresholdObserver( |
| 2627 test::SingleThreadedTaskQueueForTesting* task_queue) |
2557 : SendTest(kDefaultTimeoutMs), | 2628 : SendTest(kDefaultTimeoutMs), |
2558 FakeEncoder(Clock::GetRealTimeClock()), | 2629 FakeEncoder(Clock::GetRealTimeClock()), |
| 2630 task_queue_(task_queue), |
2559 init_encode_event_(false, false), | 2631 init_encode_event_(false, false), |
2560 bitrate_changed_event_(false, false), | 2632 bitrate_changed_event_(false, false), |
2561 target_bitrate_(0), | 2633 target_bitrate_(0), |
2562 num_initializations_(0), | 2634 num_initializations_(0), |
2563 call_(nullptr), | 2635 call_(nullptr), |
2564 send_stream_(nullptr) {} | 2636 send_stream_(nullptr) {} |
2565 | 2637 |
2566 private: | 2638 private: |
2567 int32_t InitEncode(const VideoCodec* codecSettings, | 2639 int32_t InitEncode(const VideoCodec* codecSettings, |
2568 int32_t numberOfCores, | 2640 int32_t numberOfCores, |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2673 } | 2745 } |
2674 | 2746 |
2675 void PerformTest() override { | 2747 void PerformTest() override { |
2676 ASSERT_TRUE( | 2748 ASSERT_TRUE( |
2677 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)) | 2749 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)) |
2678 << "Timed out while waiting for encoder to be configured."; | 2750 << "Timed out while waiting for encoder to be configured."; |
2679 WaitForSetRates(kStartBitrateKbps); | 2751 WaitForSetRates(kStartBitrateKbps); |
2680 Call::Config::BitrateConfig bitrate_config; | 2752 Call::Config::BitrateConfig bitrate_config; |
2681 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; | 2753 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; |
2682 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; | 2754 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; |
2683 call_->SetBitrateConfig(bitrate_config); | 2755 task_queue_->SendTask([this, &bitrate_config]() { |
| 2756 call_->SetBitrateConfig(bitrate_config); |
| 2757 }); |
2684 // Encoder rate is capped by EncoderConfig max_bitrate_bps. | 2758 // Encoder rate is capped by EncoderConfig max_bitrate_bps. |
2685 WaitForSetRates(kMaxBitrateKbps); | 2759 WaitForSetRates(kMaxBitrateKbps); |
2686 encoder_config_.max_bitrate_bps = kLowerMaxBitrateKbps * 1000; | 2760 encoder_config_.max_bitrate_bps = kLowerMaxBitrateKbps * 1000; |
2687 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); | 2761 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); |
2688 ASSERT_TRUE( | 2762 ASSERT_TRUE( |
2689 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); | 2763 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
2690 EXPECT_EQ(2, num_initializations_) | 2764 EXPECT_EQ(2, num_initializations_) |
2691 << "Encoder should have been reconfigured with the new value."; | 2765 << "Encoder should have been reconfigured with the new value."; |
2692 WaitForSetRates(kLowerMaxBitrateKbps); | 2766 WaitForSetRates(kLowerMaxBitrateKbps); |
2693 | 2767 |
2694 encoder_config_.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; | 2768 encoder_config_.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; |
2695 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); | 2769 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); |
2696 ASSERT_TRUE( | 2770 ASSERT_TRUE( |
2697 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); | 2771 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
2698 EXPECT_EQ(3, num_initializations_) | 2772 EXPECT_EQ(3, num_initializations_) |
2699 << "Encoder should have been reconfigured with the new value."; | 2773 << "Encoder should have been reconfigured with the new value."; |
2700 // Expected target bitrate is the start bitrate set in the call to | 2774 // Expected target bitrate is the start bitrate set in the call to |
2701 // call_->SetBitrateConfig. | 2775 // call_->SetBitrateConfig. |
2702 WaitForSetRates(kIncreasedStartBitrateKbps); | 2776 WaitForSetRates(kIncreasedStartBitrateKbps); |
2703 } | 2777 } |
2704 | 2778 |
| 2779 test::SingleThreadedTaskQueueForTesting* const task_queue_; |
2705 rtc::Event init_encode_event_; | 2780 rtc::Event init_encode_event_; |
2706 rtc::Event bitrate_changed_event_; | 2781 rtc::Event bitrate_changed_event_; |
2707 rtc::CriticalSection crit_; | 2782 rtc::CriticalSection crit_; |
2708 uint32_t target_bitrate_ GUARDED_BY(&crit_); | 2783 uint32_t target_bitrate_ GUARDED_BY(&crit_); |
2709 | 2784 |
2710 int num_initializations_; | 2785 int num_initializations_; |
2711 webrtc::Call* call_; | 2786 webrtc::Call* call_; |
2712 webrtc::VideoSendStream* send_stream_; | 2787 webrtc::VideoSendStream* send_stream_; |
2713 webrtc::VideoEncoderConfig encoder_config_; | 2788 webrtc::VideoEncoderConfig encoder_config_; |
2714 } test; | 2789 } test(&task_queue_); |
2715 | 2790 |
2716 RunBaseTest(&test); | 2791 RunBaseTest(&test); |
2717 } | 2792 } |
2718 | 2793 |
2719 TEST_F(VideoSendStreamTest, ReportsSentResolution) { | 2794 TEST_F(VideoSendStreamTest, ReportsSentResolution) { |
2720 static const size_t kNumStreams = 3; | 2795 static const size_t kNumStreams = 3; |
2721 // Unusual resolutions to make sure that they are the ones being reported. | 2796 // Unusual resolutions to make sure that they are the ones being reported. |
2722 static const struct { | 2797 static const struct { |
2723 int width; | 2798 int width; |
2724 int height; | 2799 int height; |
(...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3295 | 3370 |
3296 // This test verifies that overhead is removed from the bandwidth estimate by | 3371 // 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 | 3372 // testing that the maximum possible target payload rate is smaller than the |
3298 // maximum bandwidth estimate by the overhead rate. | 3373 // maximum bandwidth estimate by the overhead rate. |
3299 TEST_F(VideoSendStreamTest, RemoveOverheadFromBandwidth) { | 3374 TEST_F(VideoSendStreamTest, RemoveOverheadFromBandwidth) { |
3300 test::ScopedFieldTrials override_field_trials( | 3375 test::ScopedFieldTrials override_field_trials( |
3301 "WebRTC-SendSideBwe-WithOverhead/Enabled/"); | 3376 "WebRTC-SendSideBwe-WithOverhead/Enabled/"); |
3302 class RemoveOverheadFromBandwidthTest : public test::EndToEndTest, | 3377 class RemoveOverheadFromBandwidthTest : public test::EndToEndTest, |
3303 public test::FakeEncoder { | 3378 public test::FakeEncoder { |
3304 public: | 3379 public: |
3305 RemoveOverheadFromBandwidthTest() | 3380 explicit RemoveOverheadFromBandwidthTest( |
| 3381 test::SingleThreadedTaskQueueForTesting* task_queue) |
3306 : EndToEndTest(test::CallTest::kDefaultTimeoutMs), | 3382 : EndToEndTest(test::CallTest::kDefaultTimeoutMs), |
3307 FakeEncoder(Clock::GetRealTimeClock()), | 3383 FakeEncoder(Clock::GetRealTimeClock()), |
| 3384 task_queue_(task_queue), |
3308 call_(nullptr), | 3385 call_(nullptr), |
3309 max_bitrate_bps_(0), | 3386 max_bitrate_bps_(0), |
3310 first_packet_sent_(false), | 3387 first_packet_sent_(false), |
3311 bitrate_changed_event_(false, false) {} | 3388 bitrate_changed_event_(false, false) {} |
3312 | 3389 |
3313 int32_t SetRateAllocation(const BitrateAllocation& bitrate, | 3390 int32_t SetRateAllocation(const BitrateAllocation& bitrate, |
3314 uint32_t frameRate) override { | 3391 uint32_t frameRate) override { |
3315 rtc::CritScope lock(&crit_); | 3392 rtc::CritScope lock(&crit_); |
3316 // Wait for the first sent packet so that videosendstream knows | 3393 // Wait for the first sent packet so that videosendstream knows |
3317 // rtp_overhead. | 3394 // rtp_overhead. |
(...skipping 24 matching lines...) Expand all Loading... |
3342 } | 3419 } |
3343 | 3420 |
3344 void PerformTest() override { | 3421 void PerformTest() override { |
3345 Call::Config::BitrateConfig bitrate_config; | 3422 Call::Config::BitrateConfig bitrate_config; |
3346 constexpr int kStartBitrateBps = 60000; | 3423 constexpr int kStartBitrateBps = 60000; |
3347 constexpr int kMaxBitrateBps = 60000; | 3424 constexpr int kMaxBitrateBps = 60000; |
3348 constexpr int kMinBitrateBps = 10000; | 3425 constexpr int kMinBitrateBps = 10000; |
3349 bitrate_config.start_bitrate_bps = kStartBitrateBps; | 3426 bitrate_config.start_bitrate_bps = kStartBitrateBps; |
3350 bitrate_config.max_bitrate_bps = kMaxBitrateBps; | 3427 bitrate_config.max_bitrate_bps = kMaxBitrateBps; |
3351 bitrate_config.min_bitrate_bps = kMinBitrateBps; | 3428 bitrate_config.min_bitrate_bps = kMinBitrateBps; |
3352 call_->SetBitrateConfig(bitrate_config); | 3429 task_queue_->SendTask([this, &bitrate_config]() { |
3353 call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, 40); | 3430 call_->SetBitrateConfig(bitrate_config); |
| 3431 call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, 40); |
| 3432 }); |
3354 | 3433 |
3355 // At a bitrate of 60kbps with a packet size of 1200B video and an | 3434 // At a bitrate of 60kbps with a packet size of 1200B video and an |
3356 // overhead of 40B per packet video produces 2240bps overhead. | 3435 // overhead of 40B per packet video produces 2240bps overhead. |
3357 // So the encoder BW should be set to 57760bps. | 3436 // So the encoder BW should be set to 57760bps. |
3358 bitrate_changed_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs); | 3437 bitrate_changed_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs); |
3359 { | 3438 { |
3360 rtc::CritScope lock(&crit_); | 3439 rtc::CritScope lock(&crit_); |
3361 EXPECT_LE(max_bitrate_bps_, 57760u); | 3440 EXPECT_LE(max_bitrate_bps_, 57760u); |
3362 } | 3441 } |
3363 } | 3442 } |
3364 | 3443 |
3365 private: | 3444 private: |
| 3445 test::SingleThreadedTaskQueueForTesting* const task_queue_; |
3366 Call* call_; | 3446 Call* call_; |
3367 rtc::CriticalSection crit_; | 3447 rtc::CriticalSection crit_; |
3368 uint32_t max_bitrate_bps_ GUARDED_BY(&crit_); | 3448 uint32_t max_bitrate_bps_ GUARDED_BY(&crit_); |
3369 bool first_packet_sent_ GUARDED_BY(&crit_); | 3449 bool first_packet_sent_ GUARDED_BY(&crit_); |
3370 rtc::Event bitrate_changed_event_; | 3450 rtc::Event bitrate_changed_event_; |
3371 } test; | 3451 } test(&task_queue_); |
3372 | |
3373 RunBaseTest(&test); | 3452 RunBaseTest(&test); |
3374 } | 3453 } |
3375 | 3454 |
3376 TEST_F(VideoSendStreamTest, SendsKeepAlive) { | 3455 TEST_F(VideoSendStreamTest, SendsKeepAlive) { |
3377 const int kTimeoutMs = 50; // Really short timeout for testing. | 3456 const int kTimeoutMs = 50; // Really short timeout for testing. |
3378 | 3457 |
3379 class KeepaliveObserver : public test::SendTest { | 3458 class KeepaliveObserver : public test::SendTest { |
3380 public: | 3459 public: |
3381 KeepaliveObserver() : SendTest(kDefaultTimeoutMs) {} | 3460 KeepaliveObserver() : SendTest(kDefaultTimeoutMs) {} |
3382 | 3461 |
(...skipping 30 matching lines...) Expand all Loading... |
3413 capturer_ = frame_generator_capturer; | 3492 capturer_ = frame_generator_capturer; |
3414 } | 3493 } |
3415 | 3494 |
3416 test::FrameGeneratorCapturer* capturer_ = nullptr; | 3495 test::FrameGeneratorCapturer* capturer_ = nullptr; |
3417 } test; | 3496 } test; |
3418 | 3497 |
3419 RunBaseTest(&test); | 3498 RunBaseTest(&test); |
3420 } | 3499 } |
3421 | 3500 |
3422 } // namespace webrtc | 3501 } // namespace webrtc |
OLD | NEW |