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