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> | 10 #include <algorithm> |
(...skipping 1515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1526 | 1526 |
1527 private: | 1527 private: |
1528 uint32_t first_media_ssrc_; | 1528 uint32_t first_media_ssrc_; |
1529 std::map<uint32_t, uint32_t> rtx_to_media_ssrcs_; | 1529 std::map<uint32_t, uint32_t> rtx_to_media_ssrcs_; |
1530 RtpExtensionHeaderObserver* observer_; | 1530 RtpExtensionHeaderObserver* observer_; |
1531 } tester; | 1531 } tester; |
1532 | 1532 |
1533 tester.RunTest(); | 1533 tester.RunTest(); |
1534 } | 1534 } |
1535 | 1535 |
1536 TEST_F(EndToEndTest, ReceivesTransportFeedback) { | 1536 void TransportFeedbackTest(bool feedback_enabled) { |
1537 static const int kExtensionId = 5; | 1537 static const int kExtensionId = 5; |
1538 | |
1539 class TransportFeedbackObserver : public test::DirectTransport { | 1538 class TransportFeedbackObserver : public test::DirectTransport { |
1540 public: | 1539 public: |
1541 TransportFeedbackObserver(Call* receiver_call, rtc::Event* done_event) | 1540 TransportFeedbackObserver(Call* receiver_call, rtc::Event* done_event) |
1542 : DirectTransport(receiver_call), done_(done_event) {} | 1541 : DirectTransport(receiver_call), done_(done_event) {} |
1543 virtual ~TransportFeedbackObserver() {} | 1542 virtual ~TransportFeedbackObserver() {} |
1544 | 1543 |
1545 bool SendRtcp(const uint8_t* data, size_t length) override { | 1544 bool SendRtcp(const uint8_t* data, size_t length) override { |
1546 RTCPUtility::RTCPParserV2 parser(data, length, true); | 1545 RTCPUtility::RTCPParserV2 parser(data, length, true); |
1547 EXPECT_TRUE(parser.IsValid()); | 1546 EXPECT_TRUE(parser.IsValid()); |
1548 | 1547 |
1549 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); | 1548 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); |
1550 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { | 1549 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { |
1551 if (packet_type == RTCPUtility::RTCPPacketTypes::kTransportFeedback) { | 1550 if (packet_type == RTCPUtility::RTCPPacketTypes::kTransportFeedback) { |
1552 done_->Set(); | 1551 done_->Set(); |
1553 break; | 1552 break; |
1554 } | 1553 } |
1555 packet_type = parser.Iterate(); | 1554 packet_type = parser.Iterate(); |
1556 } | 1555 } |
1557 | 1556 |
1558 return test::DirectTransport::SendRtcp(data, length); | 1557 return test::DirectTransport::SendRtcp(data, length); |
1559 } | 1558 } |
1560 | 1559 |
1561 rtc::Event* done_; | 1560 rtc::Event* done_; |
1562 }; | 1561 }; |
1563 | 1562 |
1564 class TransportFeedbackTester : public MultiStreamTest { | 1563 class TransportFeedbackTester : public MultiStreamTest { |
1565 public: | 1564 public: |
1566 TransportFeedbackTester() : done_(false, false) {} | 1565 explicit TransportFeedbackTester(bool feedback_enabled) |
| 1566 : feedback_enabled_(feedback_enabled), done_(false, false) {} |
1567 virtual ~TransportFeedbackTester() {} | 1567 virtual ~TransportFeedbackTester() {} |
1568 | 1568 |
1569 protected: | 1569 protected: |
1570 void Wait() override { | 1570 void Wait() override { |
1571 EXPECT_TRUE(done_.Wait(CallTest::kDefaultTimeoutMs)); | 1571 const int64_t kDisabledFeedbackTimeoutMs = 5000; |
| 1572 EXPECT_EQ(feedback_enabled_, done_.Wait(feedback_enabled_ |
| 1573 ? test::CallTest::kDefaultTimeoutMs |
| 1574 : kDisabledFeedbackTimeoutMs)); |
1572 } | 1575 } |
1573 | 1576 |
1574 void UpdateSendConfig( | 1577 void UpdateSendConfig( |
1575 size_t stream_index, | 1578 size_t stream_index, |
1576 VideoSendStream::Config* send_config, | 1579 VideoSendStream::Config* send_config, |
1577 VideoEncoderConfig* encoder_config, | 1580 VideoEncoderConfig* encoder_config, |
1578 test::FrameGeneratorCapturer** frame_generator) override { | 1581 test::FrameGeneratorCapturer** frame_generator) override { |
1579 send_config->rtp.extensions.push_back( | 1582 send_config->rtp.extensions.push_back( |
1580 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); | 1583 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); |
1581 } | 1584 } |
1582 | 1585 |
1583 void UpdateReceiveConfig( | 1586 void UpdateReceiveConfig( |
1584 size_t stream_index, | 1587 size_t stream_index, |
1585 VideoReceiveStream::Config* receive_config) override { | 1588 VideoReceiveStream::Config* receive_config) override { |
1586 receive_config->rtp.extensions.push_back( | 1589 receive_config->rtp.extensions.push_back( |
1587 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); | 1590 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); |
| 1591 receive_config->rtp.transport_cc = feedback_enabled_; |
1588 } | 1592 } |
1589 | 1593 |
1590 test::DirectTransport* CreateReceiveTransport( | 1594 test::DirectTransport* CreateReceiveTransport( |
1591 Call* receiver_call) override { | 1595 Call* receiver_call) override { |
1592 return new TransportFeedbackObserver(receiver_call, &done_); | 1596 return new TransportFeedbackObserver(receiver_call, &done_); |
1593 } | 1597 } |
1594 | 1598 |
1595 private: | 1599 private: |
| 1600 const bool feedback_enabled_; |
1596 rtc::Event done_; | 1601 rtc::Event done_; |
1597 } tester; | 1602 } tester(feedback_enabled); |
1598 tester.RunTest(); | 1603 tester.RunTest(); |
1599 } | 1604 } |
| 1605 |
| 1606 TEST_F(EndToEndTest, ReceivesTransportFeedback) { |
| 1607 TransportFeedbackTest(true); |
| 1608 } |
| 1609 |
| 1610 TEST_F(EndToEndTest, TransportFeedbackNotConfigured) { |
| 1611 TransportFeedbackTest(false); |
| 1612 } |
| 1613 |
1600 TEST_F(EndToEndTest, ObserversEncodedFrames) { | 1614 TEST_F(EndToEndTest, ObserversEncodedFrames) { |
1601 class EncodedFrameTestObserver : public EncodedFrameObserver { | 1615 class EncodedFrameTestObserver : public EncodedFrameObserver { |
1602 public: | 1616 public: |
1603 EncodedFrameTestObserver() | 1617 EncodedFrameTestObserver() |
1604 : length_(0), | 1618 : length_(0), |
1605 frame_type_(kEmptyFrame), | 1619 frame_type_(kEmptyFrame), |
1606 called_(EventWrapper::Create()) {} | 1620 called_(EventWrapper::Create()) {} |
1607 virtual ~EncodedFrameTestObserver() {} | 1621 virtual ~EncodedFrameTestObserver() {} |
1608 | 1622 |
1609 virtual void EncodedFrameCallback(const EncodedFrame& encoded_frame) { | 1623 virtual void EncodedFrameCallback(const EncodedFrame& encoded_frame) { |
(...skipping 1570 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3180 EXPECT_TRUE(default_receive_config.rtp.rtx.empty()) | 3194 EXPECT_TRUE(default_receive_config.rtp.rtx.empty()) |
3181 << "Enabling RTX requires rtpmap: rtx negotiation."; | 3195 << "Enabling RTX requires rtpmap: rtx negotiation."; |
3182 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) | 3196 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) |
3183 << "Enabling RTP extensions require negotiation."; | 3197 << "Enabling RTP extensions require negotiation."; |
3184 | 3198 |
3185 VerifyEmptyNackConfig(default_receive_config.rtp.nack); | 3199 VerifyEmptyNackConfig(default_receive_config.rtp.nack); |
3186 VerifyEmptyFecConfig(default_receive_config.rtp.fec); | 3200 VerifyEmptyFecConfig(default_receive_config.rtp.fec); |
3187 } | 3201 } |
3188 | 3202 |
3189 } // namespace webrtc | 3203 } // namespace webrtc |
OLD | NEW |