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

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

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