| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 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 | 10 |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 12 | 12 |
| 13 #include "webrtc/common_types.h" | 13 #include "webrtc/common_types.h" |
| 14 #include "webrtc/modules/remote_bitrate_estimator/include/bwe_defines.h" | 14 #include "webrtc/modules/remote_bitrate_estimator/include/bwe_defines.h" |
| 15 #include "webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitra
te_observer.h" | 15 #include "webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitra
te_observer.h" |
| 16 #include "webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_singl
e_stream.h" | 16 #include "webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_singl
e_stream.h" |
| 17 #include "webrtc/modules/rtp_rtcp/mocks/mock_rtcp_observers.h" |
| 17 #include "webrtc/modules/rtp_rtcp/source/rtcp_receiver.h" | 18 #include "webrtc/modules/rtp_rtcp/source/rtcp_receiver.h" |
| 18 #include "webrtc/modules/rtp_rtcp/source/rtcp_sender.h" | 19 #include "webrtc/modules/rtp_rtcp/source/rtcp_sender.h" |
| 19 #include "webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.h" | 20 #include "webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.h" |
| 20 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" | |
| 21 #include "webrtc/test/null_transport.h" | 21 #include "webrtc/test/null_transport.h" |
| 22 #include "webrtc/typedefs.h" | 22 #include "webrtc/typedefs.h" |
| 23 | 23 |
| 24 namespace webrtc { | 24 namespace webrtc { |
| 25 namespace { | 25 namespace { |
| 26 using ::testing::_; |
| 26 | 27 |
| 27 class TestTransport : public Transport { | 28 class TestTransport : public Transport { |
| 28 public: | 29 public: |
| 29 explicit TestTransport(RTCPReceiver* rtcp_receiver) | 30 explicit TestTransport(RTCPReceiver* rtcp_receiver) |
| 30 : rtcp_receiver_(rtcp_receiver) {} | 31 : rtcp_receiver_(rtcp_receiver) {} |
| 31 | 32 |
| 32 bool SendRtp(const uint8_t* /*data*/, | 33 bool SendRtp(const uint8_t* /*data*/, |
| 33 size_t /*len*/, | 34 size_t /*len*/, |
| 34 const PacketOptions& options) override { | 35 const PacketOptions& options) override { |
| 35 return false; | 36 return false; |
| 36 } | 37 } |
| 37 bool SendRtcp(const uint8_t* packet, size_t packetLength) override { | 38 bool SendRtcp(const uint8_t* packet, size_t packetLength) override { |
| 38 RTCPUtility::RTCPParserV2 rtcpParser(packet, packetLength, | 39 EXPECT_TRUE(rtcp_receiver_->IncomingPacket(packet, packetLength)); |
| 39 true); // Allow non-compound RTCP | |
| 40 | |
| 41 EXPECT_TRUE(rtcpParser.IsValid()); | |
| 42 RTCPHelp::RTCPPacketInformation rtcpPacketInformation; | |
| 43 EXPECT_EQ(0, rtcp_receiver_->IncomingRTCPPacket(rtcpPacketInformation, | |
| 44 &rtcpParser)); | |
| 45 | |
| 46 EXPECT_EQ((uint32_t)kRtcpRemb, | |
| 47 rtcpPacketInformation.rtcpPacketTypeFlags & kRtcpRemb); | |
| 48 EXPECT_EQ((uint32_t)1234, | |
| 49 rtcpPacketInformation.receiverEstimatedMaxBitrate); | |
| 50 return true; | 40 return true; |
| 51 } | 41 } |
| 52 | 42 |
| 53 private: | 43 private: |
| 54 RTCPReceiver* rtcp_receiver_; | 44 RTCPReceiver* rtcp_receiver_; |
| 55 }; | 45 }; |
| 56 | 46 |
| 57 class RtcpFormatRembTest : public ::testing::Test { | 47 class RtcpFormatRembTest : public ::testing::Test { |
| 58 protected: | 48 protected: |
| 59 RtcpFormatRembTest() | 49 RtcpFormatRembTest() |
| (...skipping 13 matching lines...) Expand all Loading... |
| 73 | 63 |
| 74 OverUseDetectorOptions over_use_detector_options_; | 64 OverUseDetectorOptions over_use_detector_options_; |
| 75 Clock* system_clock_; | 65 Clock* system_clock_; |
| 76 ModuleRtpRtcpImpl* dummy_rtp_rtcp_impl_; | 66 ModuleRtpRtcpImpl* dummy_rtp_rtcp_impl_; |
| 77 rtc::scoped_ptr<ReceiveStatistics> receive_statistics_; | 67 rtc::scoped_ptr<ReceiveStatistics> receive_statistics_; |
| 78 RTCPSender* rtcp_sender_; | 68 RTCPSender* rtcp_sender_; |
| 79 RTCPReceiver* rtcp_receiver_; | 69 RTCPReceiver* rtcp_receiver_; |
| 80 TestTransport* test_transport_; | 70 TestTransport* test_transport_; |
| 81 test::NullTransport null_transport_; | 71 test::NullTransport null_transport_; |
| 82 MockRemoteBitrateObserver remote_bitrate_observer_; | 72 MockRemoteBitrateObserver remote_bitrate_observer_; |
| 73 MockRtcpBandwidthObserver test_bitrate_observer_; |
| 83 rtc::scoped_ptr<RemoteBitrateEstimator> remote_bitrate_estimator_; | 74 rtc::scoped_ptr<RemoteBitrateEstimator> remote_bitrate_estimator_; |
| 84 }; | 75 }; |
| 85 | 76 |
| 86 void RtcpFormatRembTest::SetUp() { | 77 void RtcpFormatRembTest::SetUp() { |
| 87 RtpRtcp::Configuration configuration; | 78 RtpRtcp::Configuration configuration; |
| 88 configuration.audio = false; | 79 configuration.audio = false; |
| 89 configuration.clock = system_clock_; | 80 configuration.clock = system_clock_; |
| 90 configuration.remote_bitrate_estimator = remote_bitrate_estimator_.get(); | 81 configuration.remote_bitrate_estimator = remote_bitrate_estimator_.get(); |
| 91 configuration.outgoing_transport = &null_transport_; | 82 configuration.outgoing_transport = &null_transport_; |
| 92 dummy_rtp_rtcp_impl_ = new ModuleRtpRtcpImpl(configuration); | 83 dummy_rtp_rtcp_impl_ = new ModuleRtpRtcpImpl(configuration); |
| 93 rtcp_receiver_ = new RTCPReceiver(system_clock_, false, nullptr, nullptr, | 84 rtcp_receiver_ = |
| 94 nullptr, nullptr, dummy_rtp_rtcp_impl_); | 85 new RTCPReceiver(system_clock_, false, nullptr, &test_bitrate_observer_, |
| 86 nullptr, nullptr, dummy_rtp_rtcp_impl_); |
| 95 test_transport_ = new TestTransport(rtcp_receiver_); | 87 test_transport_ = new TestTransport(rtcp_receiver_); |
| 96 rtcp_sender_ = new RTCPSender(false, system_clock_, receive_statistics_.get(), | 88 rtcp_sender_ = new RTCPSender(false, system_clock_, receive_statistics_.get(), |
| 97 nullptr, nullptr, test_transport_); | 89 nullptr, nullptr, test_transport_); |
| 98 } | 90 } |
| 99 | 91 |
| 100 void RtcpFormatRembTest::TearDown() { | 92 void RtcpFormatRembTest::TearDown() { |
| 101 delete rtcp_sender_; | 93 delete rtcp_sender_; |
| 102 delete rtcp_receiver_; | 94 delete rtcp_receiver_; |
| 103 delete dummy_rtp_rtcp_impl_; | 95 delete dummy_rtp_rtcp_impl_; |
| 104 delete test_transport_; | 96 delete test_transport_; |
| 105 } | 97 } |
| 106 | 98 |
| 107 TEST_F(RtcpFormatRembTest, TestRembStatus) { | 99 TEST_F(RtcpFormatRembTest, TestRembStatus) { |
| 108 EXPECT_FALSE(rtcp_sender_->REMB()); | 100 EXPECT_FALSE(rtcp_sender_->REMB()); |
| 109 rtcp_sender_->SetREMBStatus(true); | 101 rtcp_sender_->SetREMBStatus(true); |
| 110 EXPECT_TRUE(rtcp_sender_->REMB()); | 102 EXPECT_TRUE(rtcp_sender_->REMB()); |
| 111 rtcp_sender_->SetREMBStatus(false); | 103 rtcp_sender_->SetREMBStatus(false); |
| 112 EXPECT_FALSE(rtcp_sender_->REMB()); | 104 EXPECT_FALSE(rtcp_sender_->REMB()); |
| 113 } | 105 } |
| 114 | 106 |
| 115 TEST_F(RtcpFormatRembTest, TestNonCompund) { | 107 TEST_F(RtcpFormatRembTest, TestNonCompund) { |
| 116 uint32_t SSRC = 456789; | 108 uint32_t SSRC = 456789; |
| 117 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); | 109 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); |
| 118 rtcp_sender_->SetREMBData(1234, std::vector<uint32_t>(1, SSRC)); | 110 rtcp_sender_->SetREMBData(1234, std::vector<uint32_t>(1, SSRC)); |
| 119 RTCPSender::FeedbackState feedback_state = | 111 RTCPSender::FeedbackState feedback_state = |
| 120 dummy_rtp_rtcp_impl_->GetFeedbackState(); | 112 dummy_rtp_rtcp_impl_->GetFeedbackState(); |
| 113 EXPECT_CALL(test_bitrate_observer_, OnReceivedRtcpReceiverReport(_, _, _)) |
| 114 .Times(0); |
| 115 EXPECT_CALL(test_bitrate_observer_, OnReceivedEstimatedBitrate(1234)); |
| 121 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state, kRtcpRemb)); | 116 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state, kRtcpRemb)); |
| 122 } | 117 } |
| 123 | 118 |
| 124 TEST_F(RtcpFormatRembTest, TestCompund) { | 119 TEST_F(RtcpFormatRembTest, TestCompund) { |
| 125 uint32_t SSRCs[2] = {456789, 98765}; | 120 uint32_t SSRCs[2] = {456789, 98765}; |
| 126 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); | 121 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); |
| 127 rtcp_sender_->SetREMBData(1234, std::vector<uint32_t>(SSRCs, SSRCs + 2)); | 122 rtcp_sender_->SetREMBData(1234, std::vector<uint32_t>(SSRCs, SSRCs + 2)); |
| 128 RTCPSender::FeedbackState feedback_state = | 123 RTCPSender::FeedbackState feedback_state = |
| 129 dummy_rtp_rtcp_impl_->GetFeedbackState(); | 124 dummy_rtp_rtcp_impl_->GetFeedbackState(); |
| 125 EXPECT_CALL(test_bitrate_observer_, OnReceivedRtcpReceiverReport(_, _, _)); |
| 126 EXPECT_CALL(test_bitrate_observer_, OnReceivedEstimatedBitrate(1234)); |
| 130 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state, kRtcpRemb)); | 127 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state, kRtcpRemb)); |
| 131 } | 128 } |
| 132 } // namespace | 129 } // namespace |
| 133 } // namespace webrtc | 130 } // namespace webrtc |
| OLD | NEW |