| 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" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 | 62 |
| 63 class RtcpPeer : public Rtcp { | 63 class RtcpPeer : public Rtcp { |
| 64 public: | 64 public: |
| 65 RtcpPeer(base::TickClock* clock, | 65 RtcpPeer(base::TickClock* clock, |
| 66 RtcpSenderFeedback* sender_feedback, | 66 RtcpSenderFeedback* sender_feedback, |
| 67 PacedPacketSender* const paced_packet_sender, | 67 PacedPacketSender* const paced_packet_sender, |
| 68 RtpSenderStatistics* rtp_sender_statistics, | 68 RtpSenderStatistics* rtp_sender_statistics, |
| 69 RtpReceiverStatistics* rtp_receiver_statistics, | 69 RtpReceiverStatistics* rtp_receiver_statistics, |
| 70 RtcpMode rtcp_mode, | 70 RtcpMode rtcp_mode, |
| 71 const base::TimeDelta& rtcp_interval, | 71 const base::TimeDelta& rtcp_interval, |
| 72 bool sending_media, | |
| 73 uint32 local_ssrc, | 72 uint32 local_ssrc, |
| 73 uint32 remote_ssrc, |
| 74 const std::string& c_name) | 74 const std::string& c_name) |
| 75 : Rtcp(clock, | 75 : Rtcp(clock, |
| 76 sender_feedback, | 76 sender_feedback, |
| 77 paced_packet_sender, | 77 paced_packet_sender, |
| 78 rtp_sender_statistics, | 78 rtp_sender_statistics, |
| 79 rtp_receiver_statistics, | 79 rtp_receiver_statistics, |
| 80 rtcp_mode, | 80 rtcp_mode, |
| 81 rtcp_interval, | 81 rtcp_interval, |
| 82 sending_media, | |
| 83 local_ssrc, | 82 local_ssrc, |
| 83 remote_ssrc, |
| 84 c_name) { | 84 c_name) { |
| 85 } | 85 } |
| 86 | 86 |
| 87 using Rtcp::CheckForWrapAround; | 87 using Rtcp::CheckForWrapAround; |
| 88 using Rtcp::OnReceivedLipSyncInfo; | 88 using Rtcp::OnReceivedLipSyncInfo; |
| 89 }; | 89 }; |
| 90 | 90 |
| 91 class RtcpTest : public ::testing::Test { | 91 class RtcpTest : public ::testing::Test { |
| 92 protected: | 92 protected: |
| 93 RtcpTest() | 93 RtcpTest() |
| (...skipping 16 matching lines...) Expand all Loading... |
| 110 TEST_F(RtcpTest, TimeToSend) { | 110 TEST_F(RtcpTest, TimeToSend) { |
| 111 base::TimeTicks start_time; | 111 base::TimeTicks start_time; |
| 112 start_time += base::TimeDelta::FromMilliseconds(kStartMillisecond); | 112 start_time += base::TimeDelta::FromMilliseconds(kStartMillisecond); |
| 113 Rtcp rtcp(&testing_clock_, | 113 Rtcp rtcp(&testing_clock_, |
| 114 &mock_sender_feedback_, | 114 &mock_sender_feedback_, |
| 115 &transport_, | 115 &transport_, |
| 116 NULL, | 116 NULL, |
| 117 NULL, | 117 NULL, |
| 118 kRtcpCompound, | 118 kRtcpCompound, |
| 119 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 119 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 120 true, // Media sender. | |
| 121 kSenderSsrc, | 120 kSenderSsrc, |
| 121 kReceiverSsrc, |
| 122 kCName); | 122 kCName); |
| 123 transport_.SetRtcpReceiver(&rtcp); | 123 transport_.SetRtcpReceiver(&rtcp); |
| 124 EXPECT_LE(start_time, rtcp.TimeToSendNextRtcpReport()); | 124 EXPECT_LE(start_time, rtcp.TimeToSendNextRtcpReport()); |
| 125 EXPECT_GE(start_time + base::TimeDelta::FromMilliseconds( | 125 EXPECT_GE(start_time + base::TimeDelta::FromMilliseconds( |
| 126 kRtcpIntervalMs * 3 / 2), | 126 kRtcpIntervalMs * 3 / 2), |
| 127 rtcp.TimeToSendNextRtcpReport()); | 127 rtcp.TimeToSendNextRtcpReport()); |
| 128 base::TimeDelta delta = rtcp.TimeToSendNextRtcpReport() - start_time; | 128 base::TimeDelta delta = rtcp.TimeToSendNextRtcpReport() - start_time; |
| 129 testing_clock_.Advance(delta); | 129 testing_clock_.Advance(delta); |
| 130 EXPECT_EQ(testing_clock_.NowTicks(), rtcp.TimeToSendNextRtcpReport()); | 130 EXPECT_EQ(testing_clock_.NowTicks(), rtcp.TimeToSendNextRtcpReport()); |
| 131 } | 131 } |
| 132 | 132 |
| 133 TEST_F(RtcpTest, BasicSenderReport) { | 133 TEST_F(RtcpTest, BasicSenderReport) { |
| 134 Rtcp rtcp(&testing_clock_, | 134 Rtcp rtcp(&testing_clock_, |
| 135 &mock_sender_feedback_, | 135 &mock_sender_feedback_, |
| 136 &transport_, | 136 &transport_, |
| 137 NULL, | 137 NULL, |
| 138 NULL, | 138 NULL, |
| 139 kRtcpCompound, | 139 kRtcpCompound, |
| 140 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 140 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 141 true, // Media sender. | |
| 142 kSenderSsrc, | 141 kSenderSsrc, |
| 142 kReceiverSsrc, |
| 143 kCName); | 143 kCName); |
| 144 transport_.SetRtcpReceiver(&rtcp); | 144 transport_.SetRtcpReceiver(&rtcp); |
| 145 rtcp.SendRtcpReport(kUnknownSsrc); | 145 rtcp.SendRtcpFromRtpSender(NULL); |
| 146 } | 146 } |
| 147 | 147 |
| 148 TEST_F(RtcpTest, BasicReceiverReport) { | 148 TEST_F(RtcpTest, BasicReceiverReport) { |
| 149 Rtcp rtcp(&testing_clock_, | 149 Rtcp rtcp(&testing_clock_, |
| 150 &mock_sender_feedback_, | 150 &mock_sender_feedback_, |
| 151 &transport_, | 151 &transport_, |
| 152 NULL, | 152 NULL, |
| 153 NULL, | 153 NULL, |
| 154 kRtcpCompound, | 154 kRtcpCompound, |
| 155 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 155 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 156 false, // Media receiver. | |
| 157 kSenderSsrc, | 156 kSenderSsrc, |
| 157 kReceiverSsrc, |
| 158 kCName); | 158 kCName); |
| 159 transport_.SetRtcpReceiver(&rtcp); | 159 transport_.SetRtcpReceiver(&rtcp); |
| 160 rtcp.SetRemoteSSRC(kSenderSsrc); | 160 rtcp.SendRtcpFromRtpReceiver(NULL, NULL); |
| 161 rtcp.SendRtcpReport(kSenderSsrc); | |
| 162 } | 161 } |
| 163 | 162 |
| 164 TEST_F(RtcpTest, BasicCast) { | 163 TEST_F(RtcpTest, BasicCast) { |
| 165 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(1); | 164 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(1); |
| 166 | 165 |
| 167 // Media receiver. | 166 // Media receiver. |
| 168 Rtcp rtcp(&testing_clock_, | 167 Rtcp rtcp(&testing_clock_, |
| 169 &mock_sender_feedback_, | 168 &mock_sender_feedback_, |
| 170 &transport_, | 169 &transport_, |
| 171 NULL, | 170 NULL, |
| 172 NULL, | 171 NULL, |
| 173 kRtcpReducedSize, | 172 kRtcpReducedSize, |
| 174 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 173 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 175 false, | 174 kSenderSsrc, |
| 176 kSenderSsrc, | 175 kSenderSsrc, |
| 177 kCName); | 176 kCName); |
| 178 transport_.SetRtcpReceiver(&rtcp); | 177 transport_.SetRtcpReceiver(&rtcp); |
| 179 rtcp.SetRemoteSSRC(kSenderSsrc); | |
| 180 RtcpCastMessage cast_message(kSenderSsrc); | 178 RtcpCastMessage cast_message(kSenderSsrc); |
| 181 cast_message.ack_frame_id_ = kAckFrameId; | 179 cast_message.ack_frame_id_ = kAckFrameId; |
| 182 PacketIdSet missing_packets; | 180 PacketIdSet missing_packets; |
| 183 cast_message.missing_frames_and_packets_[ | 181 cast_message.missing_frames_and_packets_[ |
| 184 kLostFrameId] = missing_packets; | 182 kLostFrameId] = missing_packets; |
| 185 | 183 |
| 186 missing_packets.insert(kLostPacketId1); | 184 missing_packets.insert(kLostPacketId1); |
| 187 missing_packets.insert(kLostPacketId2); | 185 missing_packets.insert(kLostPacketId2); |
| 188 missing_packets.insert(kLostPacketId3); | 186 missing_packets.insert(kLostPacketId3); |
| 189 cast_message.missing_frames_and_packets_[ | 187 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = |
| 190 kFrameIdWithLostPackets] = missing_packets; | 188 missing_packets; |
| 191 rtcp.SendRtcpCast(cast_message); | 189 rtcp.SendRtcpFromRtpReceiver(&cast_message, NULL); |
| 192 } | 190 } |
| 193 | 191 |
| 194 TEST_F(RtcpTest, Rtt) { | 192 TEST_F(RtcpTest, RttReducedSizeRtcp) { |
| 195 // Media receiver. | 193 // Media receiver. |
| 196 LocalRtcpTransport receiver_transport(&testing_clock_); | 194 LocalRtcpTransport receiver_transport(&testing_clock_); |
| 197 Rtcp rtcp_receiver(&testing_clock_, | 195 Rtcp rtcp_receiver(&testing_clock_, |
| 198 &mock_sender_feedback_, | 196 &mock_sender_feedback_, |
| 199 &receiver_transport, | 197 &receiver_transport, |
| 200 NULL, | 198 NULL, |
| 201 NULL, | 199 NULL, |
| 202 kRtcpReducedSize, | 200 kRtcpReducedSize, |
| 203 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 201 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 204 false, | |
| 205 kReceiverSsrc, | 202 kReceiverSsrc, |
| 203 kSenderSsrc, |
| 206 kCName); | 204 kCName); |
| 207 | 205 |
| 208 // Media sender. | 206 // Media sender. |
| 209 LocalRtcpTransport sender_transport(&testing_clock_); | 207 LocalRtcpTransport sender_transport(&testing_clock_); |
| 210 Rtcp rtcp_sender(&testing_clock_, | 208 Rtcp rtcp_sender(&testing_clock_, |
| 211 &mock_sender_feedback_, | 209 &mock_sender_feedback_, |
| 212 &sender_transport, | 210 &sender_transport, |
| 213 NULL, | 211 NULL, |
| 214 NULL, | 212 NULL, |
| 215 kRtcpReducedSize, | 213 kRtcpReducedSize, |
| 216 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 214 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 217 true, | |
| 218 kSenderSsrc, | 215 kSenderSsrc, |
| 216 kReceiverSsrc, |
| 219 kCName); | 217 kCName); |
| 220 | 218 |
| 221 receiver_transport.SetRtcpReceiver(&rtcp_sender); | 219 receiver_transport.SetRtcpReceiver(&rtcp_sender); |
| 222 sender_transport.SetRtcpReceiver(&rtcp_receiver); | 220 sender_transport.SetRtcpReceiver(&rtcp_receiver); |
| 223 | 221 |
| 224 rtcp_sender.SetRemoteSSRC(kReceiverSsrc); | |
| 225 rtcp_receiver.SetRemoteSSRC(kSenderSsrc); | |
| 226 | |
| 227 base::TimeDelta rtt; | 222 base::TimeDelta rtt; |
| 228 base::TimeDelta avg_rtt; | 223 base::TimeDelta avg_rtt; |
| 229 base::TimeDelta min_rtt; | 224 base::TimeDelta min_rtt; |
| 230 base::TimeDelta max_rtt; | 225 base::TimeDelta max_rtt; |
| 231 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 226 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 232 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 227 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 233 | 228 |
| 234 rtcp_sender.SendRtcpReport(kSenderSsrc); | 229 rtcp_sender.SendRtcpFromRtpSender(NULL); |
| 235 rtcp_receiver.SendRtcpReport(kSenderSsrc); | 230 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
| 236 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 231 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 237 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 232 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 238 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); | 233 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); |
| 239 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); | 234 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); |
| 240 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); | 235 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); |
| 241 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); | 236 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 242 rtcp_sender.SendRtcpReport(kSenderSsrc); | 237 rtcp_sender.SendRtcpFromRtpSender(NULL); |
| 243 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 238 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 244 | 239 |
| 245 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); | 240 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); |
| 246 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); | 241 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); |
| 247 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); | 242 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); |
| 248 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); | 243 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 244 } |
| 245 |
| 246 TEST_F(RtcpTest, Rtt) { |
| 247 // Media receiver. |
| 248 LocalRtcpTransport receiver_transport(&testing_clock_); |
| 249 Rtcp rtcp_receiver(&testing_clock_, |
| 250 &mock_sender_feedback_, |
| 251 &receiver_transport, |
| 252 NULL, |
| 253 NULL, |
| 254 kRtcpCompound, |
| 255 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 256 kReceiverSsrc, |
| 257 kSenderSsrc, |
| 258 kCName); |
| 259 |
| 260 // Media sender. |
| 261 LocalRtcpTransport sender_transport(&testing_clock_); |
| 262 Rtcp rtcp_sender(&testing_clock_, |
| 263 &mock_sender_feedback_, |
| 264 &sender_transport, |
| 265 NULL, |
| 266 NULL, |
| 267 kRtcpCompound, |
| 268 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 269 kSenderSsrc, |
| 270 kReceiverSsrc, |
| 271 kCName); |
| 272 |
| 273 receiver_transport.SetRtcpReceiver(&rtcp_sender); |
| 274 sender_transport.SetRtcpReceiver(&rtcp_receiver); |
| 275 |
| 276 base::TimeDelta rtt; |
| 277 base::TimeDelta avg_rtt; |
| 278 base::TimeDelta min_rtt; |
| 279 base::TimeDelta max_rtt; |
| 280 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 281 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 282 |
| 283 rtcp_sender.SendRtcpFromRtpSender(NULL); |
| 284 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
| 285 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 286 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 287 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); |
| 288 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); |
| 289 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); |
| 290 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 291 |
| 292 rtcp_sender.SendRtcpFromRtpSender(NULL); |
| 293 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 294 EXPECT_NEAR(2 * kAddedDelay, rtt.InMilliseconds(), 1); |
| 295 EXPECT_NEAR(2 * kAddedDelay, avg_rtt.InMilliseconds(), 1); |
| 296 EXPECT_NEAR(2 * kAddedDelay, min_rtt.InMilliseconds(), 1); |
| 297 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 249 | 298 |
| 250 receiver_transport.SetShortDelay(); | 299 receiver_transport.SetShortDelay(); |
| 251 sender_transport.SetShortDelay(); | 300 sender_transport.SetShortDelay(); |
| 252 rtcp_receiver.SendRtcpReport(kSenderSsrc); | 301 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
| 253 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 302 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 254 | |
| 255 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 1); | 303 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, rtt.InMilliseconds(), 1); |
| 256 EXPECT_NEAR((kAddedShortDelay + 3 * kAddedDelay) / 2, | 304 EXPECT_NEAR((kAddedShortDelay + 3 * kAddedDelay) / 2, |
| 257 avg_rtt.InMilliseconds(), | 305 avg_rtt.InMilliseconds(), |
| 258 1); | 306 1); |
| 259 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, min_rtt.InMilliseconds(), 1); | 307 EXPECT_NEAR(kAddedDelay + kAddedShortDelay, min_rtt.InMilliseconds(), 1); |
| 260 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); | 308 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 261 rtcp_sender.SendRtcpReport(kSenderSsrc); | 309 |
| 310 rtcp_sender.SendRtcpFromRtpSender(NULL); |
| 262 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 311 EXPECT_TRUE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 263 | |
| 264 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1); | 312 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1); |
| 265 EXPECT_NEAR((2 * kAddedShortDelay + 2 * kAddedDelay) / 2, | 313 EXPECT_NEAR((2 * kAddedShortDelay + 2 * kAddedDelay) / 2, |
| 266 avg_rtt.InMilliseconds(), | 314 avg_rtt.InMilliseconds(), |
| 267 1); | 315 1); |
| 268 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1); | 316 EXPECT_NEAR(2 * kAddedShortDelay, min_rtt.InMilliseconds(), 1); |
| 269 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); | 317 EXPECT_NEAR(2 * kAddedDelay, max_rtt.InMilliseconds(), 1); |
| 318 |
| 319 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
| 320 EXPECT_TRUE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
| 321 EXPECT_NEAR(2 * kAddedShortDelay, rtt.InMilliseconds(), 1); |
| 322 EXPECT_NEAR(2 * kAddedShortDelay, min_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); |
| 270 } | 330 } |
| 271 | 331 |
| 272 TEST_F(RtcpTest, NtpAndTime) { | 332 TEST_F(RtcpTest, NtpAndTime) { |
| 273 const int64 kSecondsbetweenYear1900and2010 = GG_INT64_C(40176 * 24 * 60 * 60); | 333 const int64 kSecondsbetweenYear1900and2010 = GG_INT64_C(40176 * 24 * 60 * 60); |
| 274 const int64 kSecondsbetweenYear1900and2030 = GG_INT64_C(47481 * 24 * 60 * 60); | 334 const int64 kSecondsbetweenYear1900and2030 = GG_INT64_C(47481 * 24 * 60 * 60); |
| 275 | 335 |
| 276 uint32 ntp_seconds_1 = 0; | 336 uint32 ntp_seconds_1 = 0; |
| 277 uint32 ntp_fractions_1 = 0; | 337 uint32 ntp_fractions_1 = 0; |
| 278 base::TimeTicks input_time = base::TimeTicks::Now(); | 338 base::TimeTicks input_time = base::TimeTicks::Now(); |
| 279 ConvertTimeTicksToNtp(input_time, &ntp_seconds_1, &ntp_fractions_1); | 339 ConvertTimeTicksToNtp(input_time, &ntp_seconds_1, &ntp_fractions_1); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 302 } | 362 } |
| 303 | 363 |
| 304 TEST_F(RtcpTest, WrapAround) { | 364 TEST_F(RtcpTest, WrapAround) { |
| 305 RtcpPeer rtcp_peer(&testing_clock_, | 365 RtcpPeer rtcp_peer(&testing_clock_, |
| 306 &mock_sender_feedback_, | 366 &mock_sender_feedback_, |
| 307 NULL, | 367 NULL, |
| 308 NULL, | 368 NULL, |
| 309 NULL, | 369 NULL, |
| 310 kRtcpReducedSize, | 370 kRtcpReducedSize, |
| 311 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 371 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 312 false, | |
| 313 kReceiverSsrc, | 372 kReceiverSsrc, |
| 373 kSenderSsrc, |
| 314 kCName); | 374 kCName); |
| 315 uint32 new_timestamp = 0; | 375 uint32 new_timestamp = 0; |
| 316 uint32 old_timestamp = 0; | 376 uint32 old_timestamp = 0; |
| 317 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); | 377 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); |
| 318 new_timestamp = 1234567890; | 378 new_timestamp = 1234567890; |
| 319 old_timestamp = 1234567000; | 379 old_timestamp = 1234567000; |
| 320 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); | 380 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); |
| 321 new_timestamp = 1234567000; | 381 new_timestamp = 1234567000; |
| 322 old_timestamp = 1234567890; | 382 old_timestamp = 1234567890; |
| 323 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); | 383 EXPECT_EQ(0, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); |
| 324 new_timestamp = 123; | 384 new_timestamp = 123; |
| 325 old_timestamp = 4234567890u; | 385 old_timestamp = 4234567890u; |
| 326 EXPECT_EQ(1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); | 386 EXPECT_EQ(1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); |
| 327 new_timestamp = 4234567890u; | 387 new_timestamp = 4234567890u; |
| 328 old_timestamp = 123; | 388 old_timestamp = 123; |
| 329 EXPECT_EQ(-1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); | 389 EXPECT_EQ(-1, rtcp_peer.CheckForWrapAround(new_timestamp, old_timestamp)); |
| 330 } | 390 } |
| 331 | 391 |
| 332 TEST_F(RtcpTest, RtpTimestampInSenderTime) { | 392 TEST_F(RtcpTest, RtpTimestampInSenderTime) { |
| 333 RtcpPeer rtcp_peer(&testing_clock_, | 393 RtcpPeer rtcp_peer(&testing_clock_, |
| 334 &mock_sender_feedback_, | 394 &mock_sender_feedback_, |
| 335 NULL, | 395 NULL, |
| 336 NULL, | 396 NULL, |
| 337 NULL, | 397 NULL, |
| 338 kRtcpReducedSize, | 398 kRtcpReducedSize, |
| 339 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 399 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
| 340 false, | |
| 341 kReceiverSsrc, | 400 kReceiverSsrc, |
| 401 kSenderSsrc, |
| 342 kCName); | 402 kCName); |
| 343 int frequency = 32000; | 403 int frequency = 32000; |
| 344 uint32 rtp_timestamp = 64000; | 404 uint32 rtp_timestamp = 64000; |
| 345 base::TimeTicks rtp_timestamp_in_ticks; | 405 base::TimeTicks rtp_timestamp_in_ticks; |
| 346 | 406 |
| 347 // Test fail before we get a OnReceivedLipSyncInfo. | 407 // Test fail before we get a OnReceivedLipSyncInfo. |
| 348 EXPECT_FALSE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, | 408 EXPECT_FALSE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, |
| 349 &rtp_timestamp_in_ticks)); | 409 &rtp_timestamp_in_ticks)); |
| 350 | 410 |
| 351 uint32 ntp_seconds = 0; | 411 uint32 ntp_seconds = 0; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions); | 447 rtcp_peer.OnReceivedLipSyncInfo(rtp_timestamp, ntp_seconds, ntp_fractions); |
| 388 rtp_timestamp = 64000; | 448 rtp_timestamp = 64000; |
| 389 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, | 449 EXPECT_TRUE(rtcp_peer.RtpTimestampInSenderTime(frequency, rtp_timestamp, |
| 390 &rtp_timestamp_in_ticks)); | 450 &rtp_timestamp_in_ticks)); |
| 391 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(4000), | 451 EXPECT_EQ(input_time + base::TimeDelta::FromMilliseconds(4000), |
| 392 rtp_timestamp_in_ticks); | 452 rtp_timestamp_in_ticks); |
| 393 } | 453 } |
| 394 | 454 |
| 395 } // namespace cast | 455 } // namespace cast |
| 396 } // namespace media | 456 } // namespace media |
| OLD | NEW |