| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/test/simple_test_tick_clock.h" | 5 #include "base/test/simple_test_tick_clock.h" |
| 6 #include "media/cast/cast_defines.h" | 6 #include "media/cast/cast_defines.h" |
| 7 #include "media/cast/pacing/paced_sender.h" | 7 #include "media/cast/pacing/paced_sender.h" |
| 8 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h" | 8 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h" |
| 9 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h" | 9 #include "media/cast/rtcp/mock_rtcp_sender_feedback.h" |
| 10 #include "media/cast/rtcp/rtcp.h" | 10 #include "media/cast/rtcp/rtcp.h" |
| 11 #include "media/cast/rtcp/test_rtcp_packet_builder.h" | 11 #include "media/cast/rtcp/test_rtcp_packet_builder.h" |
| 12 #include "testing/gmock/include/gmock/gmock.h" | 12 #include "testing/gmock/include/gmock/gmock.h" |
| 13 | 13 |
| 14 namespace media { | 14 namespace media { |
| 15 namespace cast { | 15 namespace cast { |
| 16 | 16 |
| 17 using testing::_; | 17 using testing::_; |
| 18 | 18 |
| 19 static const uint32 kSenderSsrc = 0x10203; | 19 static const uint32 kSenderSsrc = 0x10203; |
| 20 static const uint32 kReceiverSsrc = 0x40506; | 20 static const uint32 kReceiverSsrc = 0x40506; |
| 21 static const uint32 kUnknownSsrc = 0xDEAD; | |
| 22 static const std::string kCName("test@10.1.1.1"); | 21 static const std::string kCName("test@10.1.1.1"); |
| 23 static const uint32 kRtcpIntervalMs = 500; | 22 static const uint32 kRtcpIntervalMs = 500; |
| 24 static const int64 kStartMillisecond = GG_INT64_C(12345678900000); | 23 static const int64 kStartMillisecond = GG_INT64_C(12345678900000); |
| 25 static const int64 kAddedDelay = 123; | 24 static const int64 kAddedDelay = 123; |
| 26 static const int64 kAddedShortDelay= 100; | 25 static const int64 kAddedShortDelay= 100; |
| 27 | 26 |
| 28 class LocalRtcpTransport : public PacedPacketSender { | 27 class LocalRtcpTransport : public PacedPacketSender { |
| 29 public: | 28 public: |
| 30 explicit LocalRtcpTransport(base::SimpleTestTickClock* testing_clock) | 29 explicit LocalRtcpTransport(base::SimpleTestTickClock* testing_clock) |
| 31 : drop_packets_(false), | 30 : drop_packets_(false), |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 | 68 |
| 70 class RtcpPeer : public Rtcp { | 69 class RtcpPeer : public Rtcp { |
| 71 public: | 70 public: |
| 72 RtcpPeer(base::TickClock* clock, | 71 RtcpPeer(base::TickClock* clock, |
| 73 RtcpSenderFeedback* sender_feedback, | 72 RtcpSenderFeedback* sender_feedback, |
| 74 PacedPacketSender* const paced_packet_sender, | 73 PacedPacketSender* const paced_packet_sender, |
| 75 RtpSenderStatistics* rtp_sender_statistics, | 74 RtpSenderStatistics* rtp_sender_statistics, |
| 76 RtpReceiverStatistics* rtp_receiver_statistics, | 75 RtpReceiverStatistics* rtp_receiver_statistics, |
| 77 RtcpMode rtcp_mode, | 76 RtcpMode rtcp_mode, |
| 78 const base::TimeDelta& rtcp_interval, | 77 const base::TimeDelta& rtcp_interval, |
| 79 bool sending_media, | |
| 80 uint32 local_ssrc, | 78 uint32 local_ssrc, |
| 79 uint32 remote_ssrc, |
| 81 const std::string& c_name) | 80 const std::string& c_name) |
| 82 : Rtcp(clock, | 81 : Rtcp(clock, |
| 83 sender_feedback, | 82 sender_feedback, |
| 84 paced_packet_sender, | 83 paced_packet_sender, |
| 85 rtp_sender_statistics, | 84 rtp_sender_statistics, |
| 86 rtp_receiver_statistics, | 85 rtp_receiver_statistics, |
| 87 rtcp_mode, | 86 rtcp_mode, |
| 88 rtcp_interval, | 87 rtcp_interval, |
| 89 sending_media, | |
| 90 local_ssrc, | 88 local_ssrc, |
| 89 remote_ssrc, |
| 91 c_name) { | 90 c_name) { |
| 92 } | 91 } |
| 93 | 92 |
| 94 using Rtcp::CheckForWrapAround; | 93 using Rtcp::CheckForWrapAround; |
| 95 using Rtcp::OnReceivedLipSyncInfo; | 94 using Rtcp::OnReceivedLipSyncInfo; |
| 96 }; | 95 }; |
| 97 | 96 |
| 98 class RtcpTest : public ::testing::Test { | 97 class RtcpTest : public ::testing::Test { |
| 99 protected: | 98 protected: |
| 100 RtcpTest() | 99 RtcpTest() |
| (...skipping 16 matching lines...) Expand all Loading... |
| 117 TEST_F(RtcpTest, TimeToSend) { | 116 TEST_F(RtcpTest, TimeToSend) { |
| 118 base::TimeTicks start_time; | 117 base::TimeTicks start_time; |
| 119 start_time += base::TimeDelta::FromMilliseconds(kStartMillisecond); | 118 start_time += base::TimeDelta::FromMilliseconds(kStartMillisecond); |
| 120 Rtcp rtcp(&testing_clock_, | 119 Rtcp rtcp(&testing_clock_, |
| 121 &mock_sender_feedback_, | 120 &mock_sender_feedback_, |
| 122 &transport_, | 121 &transport_, |
| 123 NULL, | 122 NULL, |
| 124 NULL, | 123 NULL, |
| 125 kRtcpCompound, | 124 kRtcpCompound, |
| 126 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 125 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 127 true, // Media sender. | |
| 128 kSenderSsrc, | 126 kSenderSsrc, |
| 127 kReceiverSsrc, |
| 129 kCName); | 128 kCName); |
| 130 transport_.SetRtcpReceiver(&rtcp); | 129 transport_.SetRtcpReceiver(&rtcp); |
| 131 EXPECT_LE(start_time, rtcp.TimeToSendNextRtcpReport()); | 130 EXPECT_LE(start_time, rtcp.TimeToSendNextRtcpReport()); |
| 132 EXPECT_GE(start_time + base::TimeDelta::FromMilliseconds( | 131 EXPECT_GE(start_time + base::TimeDelta::FromMilliseconds( |
| 133 kRtcpIntervalMs * 3 / 2), | 132 kRtcpIntervalMs * 3 / 2), |
| 134 rtcp.TimeToSendNextRtcpReport()); | 133 rtcp.TimeToSendNextRtcpReport()); |
| 135 base::TimeDelta delta = rtcp.TimeToSendNextRtcpReport() - start_time; | 134 base::TimeDelta delta = rtcp.TimeToSendNextRtcpReport() - start_time; |
| 136 testing_clock_.Advance(delta); | 135 testing_clock_.Advance(delta); |
| 137 EXPECT_EQ(testing_clock_.NowTicks(), rtcp.TimeToSendNextRtcpReport()); | 136 EXPECT_EQ(testing_clock_.NowTicks(), rtcp.TimeToSendNextRtcpReport()); |
| 138 } | 137 } |
| 139 | 138 |
| 140 TEST_F(RtcpTest, BasicSenderReport) { | 139 TEST_F(RtcpTest, BasicSenderReport) { |
| 141 Rtcp rtcp(&testing_clock_, | 140 Rtcp rtcp(&testing_clock_, |
| 142 &mock_sender_feedback_, | 141 &mock_sender_feedback_, |
| 143 &transport_, | 142 &transport_, |
| 144 NULL, | 143 NULL, |
| 145 NULL, | 144 NULL, |
| 146 kRtcpCompound, | 145 kRtcpCompound, |
| 147 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 146 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 148 true, // Media sender. | |
| 149 kSenderSsrc, | 147 kSenderSsrc, |
| 148 kReceiverSsrc, |
| 150 kCName); | 149 kCName); |
| 151 transport_.SetRtcpReceiver(&rtcp); | 150 transport_.SetRtcpReceiver(&rtcp); |
| 152 rtcp.SendRtcpReport(kUnknownSsrc); | 151 rtcp.SendRtcpFromRtpSender(NULL); |
| 153 } | 152 } |
| 154 | 153 |
| 155 TEST_F(RtcpTest, BasicReceiverReport) { | 154 TEST_F(RtcpTest, BasicReceiverReport) { |
| 156 Rtcp rtcp(&testing_clock_, | 155 Rtcp rtcp(&testing_clock_, |
| 157 &mock_sender_feedback_, | 156 &mock_sender_feedback_, |
| 158 &transport_, | 157 &transport_, |
| 159 NULL, | 158 NULL, |
| 160 NULL, | 159 NULL, |
| 161 kRtcpCompound, | 160 kRtcpCompound, |
| 162 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 161 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 163 false, // Media receiver. | |
| 164 kSenderSsrc, | 162 kSenderSsrc, |
| 163 kReceiverSsrc, |
| 165 kCName); | 164 kCName); |
| 166 transport_.SetRtcpReceiver(&rtcp); | 165 transport_.SetRtcpReceiver(&rtcp); |
| 167 rtcp.SetRemoteSSRC(kSenderSsrc); | 166 rtcp.SendRtcpFromRtpReceiver(NULL, NULL); |
| 168 rtcp.SendRtcpReport(kSenderSsrc); | |
| 169 } | 167 } |
| 170 | 168 |
| 171 TEST_F(RtcpTest, BasicCast) { | 169 TEST_F(RtcpTest, BasicCast) { |
| 172 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(1); | 170 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(1); |
| 173 | 171 |
| 174 // Media receiver. | 172 // Media receiver. |
| 175 Rtcp rtcp(&testing_clock_, | 173 Rtcp rtcp(&testing_clock_, |
| 176 &mock_sender_feedback_, | 174 &mock_sender_feedback_, |
| 177 &transport_, | 175 &transport_, |
| 178 NULL, | 176 NULL, |
| 179 NULL, | 177 NULL, |
| 180 kRtcpReducedSize, | 178 kRtcpReducedSize, |
| 181 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 179 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 182 false, | 180 kSenderSsrc, |
| 183 kSenderSsrc, | 181 kSenderSsrc, |
| 184 kCName); | 182 kCName); |
| 185 transport_.SetRtcpReceiver(&rtcp); | 183 transport_.SetRtcpReceiver(&rtcp); |
| 186 rtcp.SetRemoteSSRC(kSenderSsrc); | |
| 187 RtcpCastMessage cast_message(kSenderSsrc); | 184 RtcpCastMessage cast_message(kSenderSsrc); |
| 188 cast_message.ack_frame_id_ = kAckFrameId; | 185 cast_message.ack_frame_id_ = kAckFrameId; |
| 189 PacketIdSet missing_packets; | 186 PacketIdSet missing_packets; |
| 190 cast_message.missing_frames_and_packets_[ | 187 cast_message.missing_frames_and_packets_[ |
| 191 kLostFrameId] = missing_packets; | 188 kLostFrameId] = missing_packets; |
| 192 | 189 |
| 193 missing_packets.insert(kLostPacketId1); | 190 missing_packets.insert(kLostPacketId1); |
| 194 missing_packets.insert(kLostPacketId2); | 191 missing_packets.insert(kLostPacketId2); |
| 195 missing_packets.insert(kLostPacketId3); | 192 missing_packets.insert(kLostPacketId3); |
| 196 cast_message.missing_frames_and_packets_[ | 193 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = |
| 197 kFrameIdWithLostPackets] = missing_packets; | 194 missing_packets; |
| 198 rtcp.SendRtcpCast(cast_message); | 195 rtcp.SendRtcpFromRtpReceiver(&cast_message, NULL); |
| 199 } | 196 } |
| 200 | 197 |
| 201 TEST_F(RtcpTest, Rtt) { | 198 TEST_F(RtcpTest, RttReducedSizeRtcp) { |
| 202 // Media receiver. | 199 // Media receiver. |
| 203 LocalRtcpTransport receiver_transport(&testing_clock_); | 200 LocalRtcpTransport receiver_transport(&testing_clock_); |
| 204 Rtcp rtcp_receiver(&testing_clock_, | 201 Rtcp rtcp_receiver(&testing_clock_, |
| 205 &mock_sender_feedback_, | 202 &mock_sender_feedback_, |
| 206 &receiver_transport, | 203 &receiver_transport, |
| 207 NULL, | 204 NULL, |
| 208 NULL, | 205 NULL, |
| 209 kRtcpReducedSize, | 206 kRtcpReducedSize, |
| 210 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 207 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 211 false, | |
| 212 kReceiverSsrc, | 208 kReceiverSsrc, |
| 209 kSenderSsrc, |
| 213 kCName); | 210 kCName); |
| 214 | 211 |
| 215 // Media sender. | 212 // Media sender. |
| 216 LocalRtcpTransport sender_transport(&testing_clock_); | 213 LocalRtcpTransport sender_transport(&testing_clock_); |
| 217 Rtcp rtcp_sender(&testing_clock_, | 214 Rtcp rtcp_sender(&testing_clock_, |
| 218 &mock_sender_feedback_, | 215 &mock_sender_feedback_, |
| 219 &sender_transport, | 216 &sender_transport, |
| 220 NULL, | 217 NULL, |
| 221 NULL, | 218 NULL, |
| 222 kRtcpReducedSize, | 219 kRtcpReducedSize, |
| 223 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 220 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 224 true, | |
| 225 kSenderSsrc, | 221 kSenderSsrc, |
| 222 kReceiverSsrc, |
| 226 kCName); | 223 kCName); |
| 227 | 224 |
| 228 receiver_transport.SetRtcpReceiver(&rtcp_sender); | 225 receiver_transport.SetRtcpReceiver(&rtcp_sender); |
| 229 sender_transport.SetRtcpReceiver(&rtcp_receiver); | 226 sender_transport.SetRtcpReceiver(&rtcp_receiver); |
| 230 | 227 |
| 231 rtcp_sender.SetRemoteSSRC(kReceiverSsrc); | |
| 232 rtcp_receiver.SetRemoteSSRC(kSenderSsrc); | |
| 233 | |
| 234 base::TimeDelta rtt; | 228 base::TimeDelta rtt; |
| 235 base::TimeDelta avg_rtt; | 229 base::TimeDelta avg_rtt; |
| 236 base::TimeDelta min_rtt; | 230 base::TimeDelta min_rtt; |
| 237 base::TimeDelta max_rtt; | 231 base::TimeDelta max_rtt; |
| 238 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 232 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 239 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 233 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 240 | 234 |
| 241 rtcp_sender.SendRtcpReport(kSenderSsrc); | 235 rtcp_sender.SendRtcpFromRtpSender(NULL); |
| 242 rtcp_receiver.SendRtcpReport(kSenderSsrc); | 236 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
| 243 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 237 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 244 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 238 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 245 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); | 239 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); |
| 246 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); | 240 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); |
| 247 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); | 241 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); |
| 248 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); | 242 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 249 rtcp_sender.SendRtcpReport(kSenderSsrc); | 243 rtcp_sender.SendRtcpFromRtpSender(NULL); |
| 250 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 244 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 251 | 245 |
| 252 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); | 246 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); |
| 253 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); | 247 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); |
| 254 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); | 248 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); |
| 255 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); | 249 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 250 } |
| 251 |
| 252 TEST_F(RtcpTest, Rtt) { |
| 253 // Media receiver. |
| 254 LocalRtcpTransport receiver_transport(&testing_clock_); |
| 255 Rtcp rtcp_receiver(&testing_clock_, |
| 256 &mock_sender_feedback_, |
| 257 &receiver_transport, |
| 258 NULL, |
| 259 NULL, |
| 260 kRtcpCompound, |
| 261 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 262 kReceiverSsrc, |
| 263 kSenderSsrc, |
| 264 kCName); |
| 265 |
| 266 // Media sender. |
| 267 LocalRtcpTransport sender_transport(&testing_clock_); |
| 268 Rtcp rtcp_sender(&testing_clock_, |
| 269 &mock_sender_feedback_, |
| 270 &sender_transport, |
| 271 NULL, |
| 272 NULL, |
| 273 kRtcpCompound, |
| 274 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 275 kSenderSsrc, |
| 276 kReceiverSsrc, |
| 277 kCName); |
| 278 |
| 279 receiver_transport.SetRtcpReceiver(&rtcp_sender); |
| 280 sender_transport.SetRtcpReceiver(&rtcp_receiver); |
| 281 |
| 282 base::TimeDelta rtt; |
| 283 base::TimeDelta avg_rtt; |
| 284 base::TimeDelta min_rtt; |
| 285 base::TimeDelta max_rtt; |
| 286 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 287 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 288 |
| 289 rtcp_sender.SendRtcpFromRtpSender(NULL); |
| 290 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
| 291 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 292 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 293 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); |
| 294 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); |
| 295 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); |
| 296 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 297 |
| 298 rtcp_sender.SendRtcpFromRtpSender(NULL); |
| 299 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 300 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); |
| 301 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); |
| 302 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); |
| 303 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 256 | 304 |
| 257 receiver_transport.SetShortDelay(); | 305 receiver_transport.SetShortDelay(); |
| 258 sender_transport.SetShortDelay(); | 306 sender_transport.SetShortDelay(); |
| 259 rtcp_receiver.SendRtcpReport(kSenderSsrc); | 307 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
| 260 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 308 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 261 | |
| 262 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 1); | 309 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 1); |
| 263 EXPECT_NEAR((kAddedShortDelay + 3 * kAddedDelay) / 2, | 310 EXPECT_NEAR((kAddedShortDelay + 3 * kAddedDelay) / 2, |
| 264 avg_rtt.InMilliseconds(), | 311 avg_rtt.InMilliseconds(), |
| 265 1); | 312 1); |
| 266 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, min_rtt.InMilliseconds(), 1); | 313 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, min_rtt.InMilliseconds(), 1); |
| 267 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); | 314 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 268 rtcp_sender.SendRtcpReport(kSenderSsrc); | 315 |
| 316 rtcp_sender.SendRtcpFromRtpSender(NULL); |
| 269 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 317 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 270 | |
| 271 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1); | 318 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1); |
| 272 EXPECT_NEAR((2 * kAddedShortDelay + 2 * kAddedDelay) / 2, | 319 EXPECT_NEAR((2 * kAddedShortDelay + 2 * kAddedDelay) / 2, |
| 273 avg_rtt.InMilliseconds(), | 320 avg_rtt.InMilliseconds(), |
| 274 1); | 321 1); |
| 275 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1); | 322 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1); |
| 276 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); | 323 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 324 |
| 325 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
| 326 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 327 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1); |
| 328 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1); |
| 329 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 330 |
| 331 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
| 332 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 333 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1); |
| 334 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1); |
| 335 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 277 } | 336 } |
| 278 | 337 |
| 279 TEST_F(RtcpTest, RttWithPacketLoss) { | 338 TEST_F(RtcpTest, RttWithPacketLoss) { |
| 280 // Media receiver. | 339 // Media receiver. |
| 281 LocalRtcpTransport receiver_transport(&testing_clock_); | 340 LocalRtcpTransport receiver_transport(&testing_clock_); |
| 282 Rtcp rtcp_receiver(&testing_clock_, | 341 Rtcp rtcp_receiver(&testing_clock_, |
| 283 &mock_sender_feedback_, | 342 &mock_sender_feedback_, |
| 284 &receiver_transport, | 343 &receiver_transport, |
| 285 NULL, | 344 NULL, |
| 286 NULL, | 345 NULL, |
| 287 kRtcpReducedSize, | 346 kRtcpReducedSize, |
| 288 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 347 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 289 false, | 348 kSenderSsrc, |
| 290 kReceiverSsrc, | 349 kReceiverSsrc, |
| 291 kCName); | 350 kCName); |
| 292 | 351 |
| 293 // Media sender. | 352 // Media sender. |
| 294 LocalRtcpTransport sender_transport(&testing_clock_); | 353 LocalRtcpTransport sender_transport(&testing_clock_); |
| 295 Rtcp rtcp_sender(&testing_clock_, | 354 Rtcp rtcp_sender(&testing_clock_, |
| 296 &mock_sender_feedback_, | 355 &mock_sender_feedback_, |
| 297 &sender_transport, | 356 &sender_transport, |
| 298 NULL, | 357 NULL, |
| 299 NULL, | 358 NULL, |
| 300 kRtcpReducedSize, | 359 kRtcpReducedSize, |
| 301 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 360 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 302 true, | 361 kReceiverSsrc, |
| 303 kSenderSsrc, | 362 kSenderSsrc, |
| 304 kCName); | 363 kCName); |
| 305 | 364 |
| 306 receiver_transport.SetRtcpReceiver(&rtcp_sender); | 365 receiver_transport.SetRtcpReceiver(&rtcp_sender); |
| 307 sender_transport.SetRtcpReceiver(&rtcp_receiver); | 366 sender_transport.SetRtcpReceiver(&rtcp_receiver); |
| 308 | 367 |
| 309 rtcp_sender.SetRemoteSSRC(kReceiverSsrc); | 368 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
| 310 rtcp_receiver.SetRemoteSSRC(kSenderSsrc); | 369 rtcp_sender.SendRtcpFromRtpSender(NULL); |
| 311 | |
| 312 rtcp_receiver.SendRtcpReport(kSenderSsrc); | |
| 313 rtcp_sender.SendRtcpReport(kSenderSsrc); | |
| 314 | 370 |
| 315 base::TimeDelta rtt; | 371 base::TimeDelta rtt; |
| 316 base::TimeDelta avg_rtt; | 372 base::TimeDelta avg_rtt; |
| 317 base::TimeDelta min_rtt; | 373 base::TimeDelta min_rtt; |
| 318 base::TimeDelta max_rtt; | 374 base::TimeDelta max_rtt; |
| 319 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 375 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 320 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 376 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 321 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); | 377 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); |
| 322 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); | 378 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); |
| 323 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); | 379 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); |
| 324 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); | 380 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 325 | 381 |
| 326 receiver_transport.SetShortDelay(); | 382 receiver_transport.SetShortDelay(); |
| 327 sender_transport.SetShortDelay(); | 383 sender_transport.SetShortDelay(); |
| 328 receiver_transport.SetDropPackets(true); | 384 receiver_transport.SetDropPackets(true); |
| 329 | 385 |
| 330 rtcp_receiver.SendRtcpReport(kSenderSsrc); | 386 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
| 331 rtcp_sender.SendRtcpReport(kSenderSsrc); | 387 rtcp_sender.SendRtcpFromRtpSender(NULL); |
| 332 | 388 |
| 333 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 389 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 334 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 1); | 390 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 1); |
| 335 } | 391 } |
| 336 | 392 |
| 337 TEST_F(RtcpTest, NtpAndTime) { | 393 TEST_F(RtcpTest, NtpAndTime) { |
| 338 const int64 kSecondsbetweenYear1900and2010 = GG_INT64_C(40176 * 24 * 60 * 60); | 394 const int64 kSecondsbetweenYear1900and2010 = GG_INT64_C(40176 * 24 * 60 * 60); |
| 339 const int64 kSecondsbetweenYear1900and2030 = GG_INT64_C(47481 * 24 * 60 * 60); | 395 const int64 kSecondsbetweenYear1900and2030 = GG_INT64_C(47481 * 24 * 60 * 60); |
| 340 | 396 |
| 341 uint32 ntp_seconds_1 = 0; | 397 uint32 ntp_seconds_1 = 0; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 367 } | 423 } |
| 368 | 424 |
| 369 TEST_F(RtcpTest, WrapAround) { | 425 TEST_F(RtcpTest, WrapAround) { |
| 370 RtcpPeer rtcp_peer(&testing_clock_, | 426 RtcpPeer rtcp_peer(&testing_clock_, |
| 371 &mock_sender_feedback_, | 427 &mock_sender_feedback_, |
| 372 NULL, | 428 NULL, |
| 373 NULL, | 429 NULL, |
| 374 NULL, | 430 NULL, |
| 375 kRtcpReducedSize, | 431 kRtcpReducedSize, |
| 376 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 432 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 377 false, | |
| 378 kReceiverSsrc, | 433 kReceiverSsrc, |
| 434 kSenderSsrc, |
| 379 kCName); | 435 kCName); |
| 380 uint32 new_timestamp = 0; | 436 uint32 new_timestamp = 0; |
| 381 uint32 old_timestamp = 0; | 437 uint32 old_timestamp = 0; |
| 382 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); | 438 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); |
| 383 new_timestamp = 1234567890; | 439 new_timestamp = 1234567890; |
| 384 old_timestamp = 1234567000; | 440 old_timestamp = 1234567000; |
| 385 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); | 441 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); |
| 386 new_timestamp = 1234567000; | 442 new_timestamp = 1234567000; |
| 387 old_timestamp = 1234567890; | 443 old_timestamp = 1234567890; |
| 388 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); | 444 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); |
| 389 new_timestamp = 123; | 445 new_timestamp = 123; |
| 390 old_timestamp = 4234567890u; | 446 old_timestamp = 4234567890u; |
| 391 EXPECT_EQ(1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); | 447 EXPECT_EQ(1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); |
| 392 new_timestamp = 4234567890u; | 448 new_timestamp = 4234567890u; |
| 393 old_timestamp = 123; | 449 old_timestamp = 123; |
| 394 EXPECT_EQ(-1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); | 450 EXPECT_EQ(-1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); |
| 395 } | 451 } |
| 396 | 452 |
| 397 TEST_F(RtcpTest, RtpTimestampInSenderTime) { | 453 TEST_F(RtcpTest, RtpTimestampInSenderTime) { |
| 398 RtcpPeer rtcp_peer(&testing_clock_, | 454 RtcpPeer rtcp_peer(&testing_clock_, |
| 399 &mock_sender_feedback_, | 455 &mock_sender_feedback_, |
| 400 NULL, | 456 NULL, |
| 401 NULL, | 457 NULL, |
| 402 NULL, | 458 NULL, |
| 403 kRtcpReducedSize, | 459 kRtcpReducedSize, |
| 404 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 460 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 405 false, | |
| 406 kReceiverSsrc, | 461 kReceiverSsrc, |
| 462 kSenderSsrc, |
| 407 kCName); | 463 kCName); |
| 408 int frequency = 32000; | 464 int frequency = 32000; |
| 409 uint32 rtp_timestamp = 64000; | 465 uint32 rtp_timestamp = 64000; |
| 410 base::TimeTicks rtp_timestamp_in_ticks; | 466 base::TimeTicks rtp_timestamp_in_ticks; |
| 411 | 467 |
| 412 // Test fail before we get a OnReceivedLipSyncInfo. | 468 // Test fail before we get a OnReceivedLipSyncInfo. |
| 413 EXPECT_FALSE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, | 469 EXPECT_FALSE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, |
| 414 &rtp_timestamp_in_ticks)); | 470 &rtp_timestamp_in_ticks)); |
| 415 | 471 |
| 416 uint32 ntp_seconds = 0; | 472 uint32 ntp_seconds = 0; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 452 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions); | 508 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions); |
| 453 rtp_timestamp = 64000; | 509 rtp_timestamp = 64000; |
| 454 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, | 510 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, |
| 455 &rtp_timestamp_in_ticks)); | 511 &rtp_timestamp_in_ticks)); |
| 456 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(4000), | 512 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(4000), |
| 457 rtp_timestamp_in_ticks); | 513 rtp_timestamp_in_ticks); |
| 458 } | 514 } |
| 459 | 515 |
| 460 } // namespace cast | 516 } // namespace cast |
| 461 } // namespace media | 517 } // namespace media |
| OLD | NEW |