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 <stdint.h> | 5 #include <stdint.h> |
6 | 6 |
7 #include "base/test/simple_test_tick_clock.h" | 7 #include "base/test/simple_test_tick_clock.h" |
8 #include "media/cast/cast_defines.h" | 8 #include "media/cast/cast_defines.h" |
9 #include "media/cast/cast_environment.h" | 9 #include "media/cast/cast_environment.h" |
10 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h" | 10 #include "media/cast/rtcp/mock_rtcp_receiver_feedback.h" |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 : Rtcp(cast_environment, | 137 : Rtcp(cast_environment, |
138 sender_feedback, | 138 sender_feedback, |
139 transport_sender, | 139 transport_sender, |
140 paced_packet_sender, | 140 paced_packet_sender, |
141 rtp_receiver_statistics, | 141 rtp_receiver_statistics, |
142 rtcp_mode, | 142 rtcp_mode, |
143 rtcp_interval, | 143 rtcp_interval, |
144 local_ssrc, | 144 local_ssrc, |
145 remote_ssrc, | 145 remote_ssrc, |
146 c_name, | 146 c_name, |
147 true) {} | 147 AUDIO_EVENT) {} |
148 | 148 |
149 using Rtcp::OnReceivedNtp; | 149 using Rtcp::OnReceivedNtp; |
150 using Rtcp::OnReceivedLipSyncInfo; | 150 using Rtcp::OnReceivedLipSyncInfo; |
151 }; | 151 }; |
152 | 152 |
153 class RtcpTest : public ::testing::Test { | 153 class RtcpTest : public ::testing::Test { |
154 protected: | 154 protected: |
155 RtcpTest() | 155 RtcpTest() |
156 : testing_clock_(new base::SimpleTestTickClock()), | 156 : testing_clock_(new base::SimpleTestTickClock()), |
157 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)), | 157 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)), |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 Rtcp rtcp(cast_environment_, | 212 Rtcp rtcp(cast_environment_, |
213 &mock_sender_feedback_, | 213 &mock_sender_feedback_, |
214 transport_sender_.get(), | 214 transport_sender_.get(), |
215 &receiver_to_sender_, | 215 &receiver_to_sender_, |
216 NULL, | 216 NULL, |
217 kRtcpCompound, | 217 kRtcpCompound, |
218 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 218 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
219 kSenderSsrc, | 219 kSenderSsrc, |
220 kReceiverSsrc, | 220 kReceiverSsrc, |
221 kCName, | 221 kCName, |
222 true); | 222 AUDIO_EVENT); |
223 receiver_to_sender_.set_rtcp_receiver(&rtcp); | 223 receiver_to_sender_.set_rtcp_receiver(&rtcp); |
224 EXPECT_LE(start_time, rtcp.TimeToSendNextRtcpReport()); | 224 EXPECT_LE(start_time, rtcp.TimeToSendNextRtcpReport()); |
225 EXPECT_GE( | 225 EXPECT_GE( |
226 start_time + base::TimeDelta::FromMilliseconds(kRtcpIntervalMs * 3 / 2), | 226 start_time + base::TimeDelta::FromMilliseconds(kRtcpIntervalMs * 3 / 2), |
227 rtcp.TimeToSendNextRtcpReport()); | 227 rtcp.TimeToSendNextRtcpReport()); |
228 base::TimeDelta delta = rtcp.TimeToSendNextRtcpReport() - start_time; | 228 base::TimeDelta delta = rtcp.TimeToSendNextRtcpReport() - start_time; |
229 testing_clock_->Advance(delta); | 229 testing_clock_->Advance(delta); |
230 EXPECT_EQ(testing_clock_->NowTicks(), rtcp.TimeToSendNextRtcpReport()); | 230 EXPECT_EQ(testing_clock_->NowTicks(), rtcp.TimeToSendNextRtcpReport()); |
231 } | 231 } |
232 | 232 |
233 TEST_F(RtcpTest, BasicSenderReport) { | 233 TEST_F(RtcpTest, BasicSenderReport) { |
234 Rtcp rtcp(cast_environment_, | 234 Rtcp rtcp(cast_environment_, |
235 &mock_sender_feedback_, | 235 &mock_sender_feedback_, |
236 transport_sender_.get(), | 236 transport_sender_.get(), |
237 NULL, | 237 NULL, |
238 NULL, | 238 NULL, |
239 kRtcpCompound, | 239 kRtcpCompound, |
240 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 240 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
241 kSenderSsrc, | 241 kSenderSsrc, |
242 kReceiverSsrc, | 242 kReceiverSsrc, |
243 kCName, | 243 kCName, |
244 true); | 244 AUDIO_EVENT); |
245 sender_to_receiver_.set_rtcp_receiver(&rtcp); | 245 sender_to_receiver_.set_rtcp_receiver(&rtcp); |
246 rtcp.SendRtcpFromRtpSender(base::TimeTicks(), 0); | 246 rtcp.SendRtcpFromRtpSender(base::TimeTicks(), 0); |
247 } | 247 } |
248 | 248 |
249 TEST_F(RtcpTest, BasicReceiverReport) { | 249 TEST_F(RtcpTest, BasicReceiverReport) { |
250 Rtcp rtcp(cast_environment_, | 250 Rtcp rtcp(cast_environment_, |
251 &mock_sender_feedback_, | 251 &mock_sender_feedback_, |
252 NULL, | 252 NULL, |
253 &receiver_to_sender_, | 253 &receiver_to_sender_, |
254 NULL, | 254 NULL, |
255 kRtcpCompound, | 255 kRtcpCompound, |
256 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 256 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
257 kSenderSsrc, | 257 kSenderSsrc, |
258 kReceiverSsrc, | 258 kReceiverSsrc, |
259 kCName, | 259 kCName, |
260 true); | 260 AUDIO_EVENT); |
261 receiver_to_sender_.set_rtcp_receiver(&rtcp); | 261 receiver_to_sender_.set_rtcp_receiver(&rtcp); |
262 rtcp.SendRtcpFromRtpReceiver(NULL, NULL); | 262 rtcp.SendRtcpFromRtpReceiver(NULL, NULL); |
263 } | 263 } |
264 | 264 |
265 TEST_F(RtcpTest, BasicCast) { | 265 TEST_F(RtcpTest, BasicCast) { |
266 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(1); | 266 EXPECT_CALL(mock_sender_feedback_, OnReceivedCastFeedback(_)).Times(1); |
267 | 267 |
268 // Media receiver. | 268 // Media receiver. |
269 Rtcp rtcp(cast_environment_, | 269 Rtcp rtcp(cast_environment_, |
270 &mock_sender_feedback_, | 270 &mock_sender_feedback_, |
271 NULL, | 271 NULL, |
272 &receiver_to_sender_, | 272 &receiver_to_sender_, |
273 NULL, | 273 NULL, |
274 kRtcpReducedSize, | 274 kRtcpReducedSize, |
275 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 275 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
276 kSenderSsrc, | 276 kSenderSsrc, |
277 kSenderSsrc, | 277 kSenderSsrc, |
278 kCName, | 278 kCName, |
279 true); | 279 AUDIO_EVENT); |
280 receiver_to_sender_.set_rtcp_receiver(&rtcp); | 280 receiver_to_sender_.set_rtcp_receiver(&rtcp); |
281 RtcpCastMessage cast_message(kSenderSsrc); | 281 RtcpCastMessage cast_message(kSenderSsrc); |
282 cast_message.ack_frame_id_ = kAckFrameId; | 282 cast_message.ack_frame_id_ = kAckFrameId; |
283 PacketIdSet missing_packets; | 283 PacketIdSet missing_packets; |
284 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; | 284 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; |
285 | 285 |
286 missing_packets.insert(kLostPacketId1); | 286 missing_packets.insert(kLostPacketId1); |
287 missing_packets.insert(kLostPacketId2); | 287 missing_packets.insert(kLostPacketId2); |
288 missing_packets.insert(kLostPacketId3); | 288 missing_packets.insert(kLostPacketId3); |
289 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = | 289 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = |
290 missing_packets; | 290 missing_packets; |
291 rtcp.SendRtcpFromRtpReceiver(&cast_message, NULL); | 291 rtcp.SendRtcpFromRtpReceiver(&cast_message, NULL); |
292 } | 292 } |
293 | 293 |
294 TEST_F(RtcpTest, RttReducedSizeRtcp) { | 294 TEST_F(RtcpTest, RttReducedSizeRtcp) { |
295 // Media receiver. | 295 // Media receiver. |
296 Rtcp rtcp_receiver(cast_environment_, | 296 Rtcp rtcp_receiver(cast_environment_, |
297 &mock_sender_feedback_, | 297 &mock_sender_feedback_, |
298 NULL, | 298 NULL, |
299 &receiver_to_sender_, | 299 &receiver_to_sender_, |
300 NULL, | 300 NULL, |
301 kRtcpReducedSize, | 301 kRtcpReducedSize, |
302 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 302 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
303 kReceiverSsrc, | 303 kReceiverSsrc, |
304 kSenderSsrc, | 304 kSenderSsrc, |
305 kCName, | 305 kCName, |
306 true); | 306 AUDIO_EVENT); |
307 | 307 |
308 // Media sender. | 308 // Media sender. |
309 Rtcp rtcp_sender(cast_environment_, | 309 Rtcp rtcp_sender(cast_environment_, |
310 &mock_sender_feedback_, | 310 &mock_sender_feedback_, |
311 transport_sender_.get(), | 311 transport_sender_.get(), |
312 NULL, | 312 NULL, |
313 NULL, | 313 NULL, |
314 kRtcpReducedSize, | 314 kRtcpReducedSize, |
315 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 315 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
316 kSenderSsrc, | 316 kSenderSsrc, |
317 kReceiverSsrc, | 317 kReceiverSsrc, |
318 kCName, | 318 kCName, |
319 true); | 319 AUDIO_EVENT); |
320 | 320 |
321 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); | 321 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); |
322 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); | 322 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); |
323 | 323 |
324 base::TimeDelta rtt; | 324 base::TimeDelta rtt; |
325 base::TimeDelta avg_rtt; | 325 base::TimeDelta avg_rtt; |
326 base::TimeDelta min_rtt; | 326 base::TimeDelta min_rtt; |
327 base::TimeDelta max_rtt; | 327 base::TimeDelta max_rtt; |
328 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 328 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
329 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 329 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
(...skipping 22 matching lines...) Expand all Loading... |
352 Rtcp rtcp_receiver(cast_environment_, | 352 Rtcp rtcp_receiver(cast_environment_, |
353 &mock_sender_feedback_, | 353 &mock_sender_feedback_, |
354 NULL, | 354 NULL, |
355 &receiver_to_sender_, | 355 &receiver_to_sender_, |
356 NULL, | 356 NULL, |
357 kRtcpCompound, | 357 kRtcpCompound, |
358 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 358 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
359 kReceiverSsrc, | 359 kReceiverSsrc, |
360 kSenderSsrc, | 360 kSenderSsrc, |
361 kCName, | 361 kCName, |
362 true); | 362 AUDIO_EVENT); |
363 | 363 |
364 // Media sender. | 364 // Media sender. |
365 Rtcp rtcp_sender(cast_environment_, | 365 Rtcp rtcp_sender(cast_environment_, |
366 &mock_sender_feedback_, | 366 &mock_sender_feedback_, |
367 transport_sender_.get(), | 367 transport_sender_.get(), |
368 NULL, | 368 NULL, |
369 NULL, | 369 NULL, |
370 kRtcpCompound, | 370 kRtcpCompound, |
371 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 371 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
372 kSenderSsrc, | 372 kSenderSsrc, |
373 kReceiverSsrc, | 373 kReceiverSsrc, |
374 kCName, | 374 kCName, |
375 true); | 375 AUDIO_EVENT); |
376 | 376 |
377 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); | 377 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); |
378 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); | 378 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); |
379 | 379 |
380 base::TimeDelta rtt; | 380 base::TimeDelta rtt; |
381 base::TimeDelta avg_rtt; | 381 base::TimeDelta avg_rtt; |
382 base::TimeDelta min_rtt; | 382 base::TimeDelta min_rtt; |
383 base::TimeDelta max_rtt; | 383 base::TimeDelta max_rtt; |
384 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 384 EXPECT_FALSE(rtcp_sender.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
385 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); | 385 EXPECT_FALSE(rtcp_receiver.Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 Rtcp rtcp_receiver(cast_environment_, | 445 Rtcp rtcp_receiver(cast_environment_, |
446 &mock_sender_feedback_, | 446 &mock_sender_feedback_, |
447 NULL, | 447 NULL, |
448 &receiver_to_sender_, | 448 &receiver_to_sender_, |
449 NULL, | 449 NULL, |
450 kRtcpReducedSize, | 450 kRtcpReducedSize, |
451 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 451 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
452 kReceiverSsrc, | 452 kReceiverSsrc, |
453 kSenderSsrc, | 453 kSenderSsrc, |
454 kCName, | 454 kCName, |
455 true); | 455 AUDIO_EVENT); |
456 | 456 |
457 // Media sender. | 457 // Media sender. |
458 Rtcp rtcp_sender(cast_environment_, | 458 Rtcp rtcp_sender(cast_environment_, |
459 &mock_sender_feedback_, | 459 &mock_sender_feedback_, |
460 transport_sender_.get(), | 460 transport_sender_.get(), |
461 NULL, | 461 NULL, |
462 NULL, | 462 NULL, |
463 kRtcpReducedSize, | 463 kRtcpReducedSize, |
464 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), | 464 base::TimeDelta::FromMilliseconds(kRtcpIntervalMs), |
465 kSenderSsrc, | 465 kSenderSsrc, |
466 kReceiverSsrc, | 466 kReceiverSsrc, |
467 kCName, | 467 kCName, |
468 true); | 468 AUDIO_EVENT); |
469 | 469 |
470 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); | 470 receiver_to_sender_.set_rtcp_receiver(&rtcp_sender); |
471 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); | 471 sender_to_receiver_.set_rtcp_receiver(&rtcp_receiver); |
472 | 472 |
473 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); | 473 rtcp_receiver.SendRtcpFromRtpReceiver(NULL, NULL); |
474 rtcp_sender.SendRtcpFromRtpSender(testing_clock_->NowTicks(), 0); | 474 rtcp_sender.SendRtcpFromRtpSender(testing_clock_->NowTicks(), 0); |
475 RunTasks(33); | 475 RunTasks(33); |
476 | 476 |
477 base::TimeDelta rtt; | 477 base::TimeDelta rtt; |
478 base::TimeDelta avg_rtt; | 478 base::TimeDelta avg_rtt; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
538 base::TimeTicks out_3 = ConvertNtpToTimeTicks(ntp_seconds_3, ntp_fraction_3); | 538 base::TimeTicks out_3 = ConvertNtpToTimeTicks(ntp_seconds_3, ntp_fraction_3); |
539 EXPECT_EQ(input_time, out_3); // Verify inverse. | 539 EXPECT_EQ(input_time, out_3); // Verify inverse. |
540 | 540 |
541 // Verify delta. | 541 // Verify delta. |
542 EXPECT_EQ((out_3 - out_2), time_delta); | 542 EXPECT_EQ((out_3 - out_2), time_delta); |
543 EXPECT_NEAR((ntp_fraction_3 - ntp_fraction_2), 0xffffffff / 2, 1); | 543 EXPECT_NEAR((ntp_fraction_3 - ntp_fraction_2), 0xffffffff / 2, 1); |
544 } | 544 } |
545 | 545 |
546 } // namespace cast | 546 } // namespace cast |
547 } // namespace media | 547 } // namespace media |
OLD | NEW |