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

Side by Side Diff: webrtc/video/video_send_stream_tests.cc

Issue 2998923002: Use SingleThreadedTaskQueue in DirectTransport (Closed)
Patch Set: Appease win_msvc_rel. Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« webrtc/test/direct_transport.h ('K') | « webrtc/video/video_quality_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698