OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
6 #include "base/test/simple_test_tick_clock.h" | 6 #include "base/test/simple_test_tick_clock.h" |
7 #include "media/cast/cast_environment.h" | 7 #include "media/cast/cast_environment.h" |
8 #include "media/cast/net/cast_transport_config.h" | 8 #include "media/cast/net/cast_transport_config.h" |
9 #include "media/cast/net/cast_transport_defines.h" | 9 #include "media/cast/net/cast_transport_defines.h" |
10 #include "media/cast/net/pacing/paced_sender.h" | 10 #include "media/cast/net/pacing/paced_sender.h" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 EXPECT_EQ((*golden_packet)[x], packet->data[x]) << | 54 EXPECT_EQ((*golden_packet)[x], packet->data[x]) << |
55 "x = " << x << " / " << golden_packet->size(); | 55 "x = " << x << " / " << golden_packet->size(); |
56 if ((*golden_packet)[x] != packet->data[x]) { | 56 if ((*golden_packet)[x] != packet->data[x]) { |
57 if (++diffs > 5) | 57 if (++diffs > 5) |
58 break; | 58 break; |
59 } | 59 } |
60 } | 60 } |
61 } | 61 } |
62 } | 62 } |
63 | 63 |
| 64 static RtpTimeTicks test_rtp_timestamp() { |
| 65 return RtpTimeTicks().Expand(kRtpTimestamp); |
| 66 } |
| 67 |
64 scoped_ptr<RtcpBuilder> rtcp_builder_; | 68 scoped_ptr<RtcpBuilder> rtcp_builder_; |
65 | 69 |
66 DISALLOW_COPY_AND_ASSIGN(RtcpBuilderTest); | 70 DISALLOW_COPY_AND_ASSIGN(RtcpBuilderTest); |
67 }; | 71 }; |
68 | 72 |
69 TEST_F(RtcpBuilderTest, RtcpReceiverReport) { | 73 TEST_F(RtcpBuilderTest, RtcpReceiverReport) { |
70 // Receiver report with report block. | 74 // Receiver report with report block. |
71 TestRtcpPacketBuilder p2; | 75 TestRtcpPacketBuilder p2; |
72 p2.AddRr(kSendingSsrc, 1); | 76 p2.AddRr(kSendingSsrc, 1); |
73 p2.AddRb(kMediaSsrc); | 77 p2.AddRb(kMediaSsrc); |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 &report_block, | 206 &report_block, |
203 &rrtr, | 207 &rrtr, |
204 &cast_message, | 208 &cast_message, |
205 &rtcp_events, | 209 &rtcp_events, |
206 kDefaultDelay)); | 210 kDefaultDelay)); |
207 | 211 |
208 base::SimpleTestTickClock testing_clock; | 212 base::SimpleTestTickClock testing_clock; |
209 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | 213 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); |
210 | 214 |
211 p.AddReceiverLog(kSendingSsrc); | 215 p.AddReceiverLog(kSendingSsrc); |
212 p.AddReceiverFrameLog(kRtpTimestamp, 2, kTimeBaseMs); | 216 p.AddReceiverFrameLog(test_rtp_timestamp().lower_32_bits(), 2, kTimeBaseMs); |
213 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0); | 217 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0); |
214 p.AddReceiverEventLog(kLostPacketId1, PACKET_RECEIVED, kTimeDelayMs); | 218 p.AddReceiverEventLog(kLostPacketId1, PACKET_RECEIVED, kTimeDelayMs); |
215 | 219 |
216 FrameEvent frame_event; | 220 FrameEvent frame_event; |
217 frame_event.rtp_timestamp = kRtpTimestamp; | 221 frame_event.rtp_timestamp = test_rtp_timestamp(); |
218 frame_event.type = FRAME_ACK_SENT; | 222 frame_event.type = FRAME_ACK_SENT; |
219 frame_event.media_type = VIDEO_EVENT; | 223 frame_event.media_type = VIDEO_EVENT; |
220 frame_event.timestamp = testing_clock.NowTicks(); | 224 frame_event.timestamp = testing_clock.NowTicks(); |
221 event_subscriber.OnReceiveFrameEvent(frame_event); | 225 event_subscriber.OnReceiveFrameEvent(frame_event); |
222 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); | 226 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); |
223 | 227 |
224 PacketEvent packet_event; | 228 PacketEvent packet_event; |
225 packet_event.rtp_timestamp = kRtpTimestamp; | 229 packet_event.rtp_timestamp = test_rtp_timestamp(); |
226 packet_event.type = PACKET_RECEIVED; | 230 packet_event.type = PACKET_RECEIVED; |
227 packet_event.media_type = VIDEO_EVENT; | 231 packet_event.media_type = VIDEO_EVENT; |
228 packet_event.timestamp = testing_clock.NowTicks(); | 232 packet_event.timestamp = testing_clock.NowTicks(); |
229 packet_event.packet_id = kLostPacketId1; | 233 packet_event.packet_id = kLostPacketId1; |
230 event_subscriber.OnReceivePacketEvent(packet_event); | 234 event_subscriber.OnReceivePacketEvent(packet_event); |
231 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); | 235 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); |
232 EXPECT_EQ(2u, rtcp_events.size()); | 236 EXPECT_EQ(2u, rtcp_events.size()); |
233 | 237 |
234 ExpectPacketEQ( | 238 ExpectPacketEQ( |
235 p.GetPacket().Pass(), | 239 p.GetPacket().Pass(), |
(...skipping 17 matching lines...) Expand all Loading... |
253 | 257 |
254 base::SimpleTestTickClock testing_clock; | 258 base::SimpleTestTickClock testing_clock; |
255 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | 259 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); |
256 | 260 |
257 p.AddReceiverLog(kSendingSsrc); | 261 p.AddReceiverLog(kSendingSsrc); |
258 | 262 |
259 int num_events = kMaxEventsPerRTCP; | 263 int num_events = kMaxEventsPerRTCP; |
260 | 264 |
261 EXPECT_LE(num_events, static_cast<int>(kRtcpMaxReceiverLogMessages)); | 265 EXPECT_LE(num_events, static_cast<int>(kRtcpMaxReceiverLogMessages)); |
262 p.AddReceiverFrameLog( | 266 p.AddReceiverFrameLog( |
263 kRtpTimestamp + 2345, | 267 (test_rtp_timestamp() + RtpTimeDelta::FromTicks(2345)).lower_32_bits(), |
264 num_events, | 268 num_events, |
265 kTimeBaseMs); | 269 kTimeBaseMs); |
266 for (int i = 0; i < num_events; i++) { | 270 for (int i = 0; i < num_events; i++) { |
267 p.AddReceiverEventLog( | 271 p.AddReceiverEventLog( |
268 kLostPacketId1, | 272 kLostPacketId1, |
269 PACKET_RECEIVED, | 273 PACKET_RECEIVED, |
270 static_cast<uint16>(kTimeDelayMs * i)); | 274 static_cast<uint16>(kTimeDelayMs * i)); |
271 } | 275 } |
272 | 276 |
273 | 277 |
274 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); | 278 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); |
275 | 279 |
276 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { | 280 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { |
277 PacketEvent packet_event; | 281 PacketEvent packet_event; |
278 packet_event.rtp_timestamp = kRtpTimestamp + 2345; | 282 packet_event.rtp_timestamp = |
| 283 test_rtp_timestamp() + RtpTimeDelta::FromTicks(2345); |
279 packet_event.type = PACKET_RECEIVED; | 284 packet_event.type = PACKET_RECEIVED; |
280 packet_event.media_type = VIDEO_EVENT; | 285 packet_event.media_type = VIDEO_EVENT; |
281 packet_event.timestamp = testing_clock.NowTicks(); | 286 packet_event.timestamp = testing_clock.NowTicks(); |
282 packet_event.packet_id = kLostPacketId1; | 287 packet_event.packet_id = kLostPacketId1; |
283 event_subscriber.OnReceivePacketEvent(packet_event); | 288 event_subscriber.OnReceivePacketEvent(packet_event); |
284 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); | 289 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); |
285 } | 290 } |
286 | 291 |
287 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events; | 292 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events; |
288 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); | 293 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); |
(...skipping 18 matching lines...) Expand all Loading... |
307 RtcpReportBlock report_block = GetReportBlock(); | 312 RtcpReportBlock report_block = GetReportBlock(); |
308 | 313 |
309 base::SimpleTestTickClock testing_clock; | 314 base::SimpleTestTickClock testing_clock; |
310 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | 315 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); |
311 | 316 |
312 p.AddReceiverLog(kSendingSsrc); | 317 p.AddReceiverLog(kSendingSsrc); |
313 | 318 |
314 int num_events = kMaxEventsPerRTCP; | 319 int num_events = kMaxEventsPerRTCP; |
315 | 320 |
316 for (int i = 0; i < num_events; i++) { | 321 for (int i = 0; i < num_events; i++) { |
317 p.AddReceiverFrameLog(kRtpTimestamp + i, 1, kTimeBaseMs + i * kTimeDelayMs); | 322 p.AddReceiverFrameLog( |
| 323 (test_rtp_timestamp() + RtpTimeDelta::FromTicks(i)).lower_32_bits(), |
| 324 1, kTimeBaseMs + i * kTimeDelayMs); |
318 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0); | 325 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0); |
319 } | 326 } |
320 | 327 |
321 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); | 328 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); |
322 | 329 |
323 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { | 330 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { |
324 FrameEvent frame_event; | 331 FrameEvent frame_event; |
325 frame_event.rtp_timestamp = kRtpTimestamp + static_cast<int>(i); | 332 frame_event.rtp_timestamp = |
| 333 test_rtp_timestamp() + RtpTimeDelta::FromTicks(i); |
326 frame_event.type = FRAME_ACK_SENT; | 334 frame_event.type = FRAME_ACK_SENT; |
327 frame_event.media_type = VIDEO_EVENT; | 335 frame_event.media_type = VIDEO_EVENT; |
328 frame_event.timestamp = testing_clock.NowTicks(); | 336 frame_event.timestamp = testing_clock.NowTicks(); |
329 event_subscriber.OnReceiveFrameEvent(frame_event); | 337 event_subscriber.OnReceiveFrameEvent(frame_event); |
330 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); | 338 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); |
331 } | 339 } |
332 | 340 |
333 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events; | 341 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events; |
334 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); | 342 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); |
335 | 343 |
(...skipping 17 matching lines...) Expand all Loading... |
353 | 361 |
354 base::SimpleTestTickClock testing_clock; | 362 base::SimpleTestTickClock testing_clock; |
355 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | 363 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); |
356 | 364 |
357 p.AddReceiverLog(kSendingSsrc); | 365 p.AddReceiverLog(kSendingSsrc); |
358 | 366 |
359 // Log 11 events for a single frame, each |kTimeBetweenEventsMs| apart. | 367 // Log 11 events for a single frame, each |kTimeBetweenEventsMs| apart. |
360 // Only last 10 events will be sent because the first event is more than | 368 // Only last 10 events will be sent because the first event is more than |
361 // 4095 milliseconds away from latest event. | 369 // 4095 milliseconds away from latest event. |
362 const int kTimeBetweenEventsMs = 410; | 370 const int kTimeBetweenEventsMs = 410; |
363 p.AddReceiverFrameLog(kRtpTimestamp, 10, kTimeBaseMs + kTimeBetweenEventsMs); | 371 p.AddReceiverFrameLog(test_rtp_timestamp().lower_32_bits(), 10, |
| 372 kTimeBaseMs + kTimeBetweenEventsMs); |
364 for (int i = 0; i < 10; ++i) { | 373 for (int i = 0; i < 10; ++i) { |
365 p.AddReceiverEventLog(0, FRAME_ACK_SENT, i * kTimeBetweenEventsMs); | 374 p.AddReceiverEventLog(0, FRAME_ACK_SENT, i * kTimeBetweenEventsMs); |
366 } | 375 } |
367 | 376 |
368 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); | 377 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); |
369 for (int i = 0; i < 11; ++i) { | 378 for (int i = 0; i < 11; ++i) { |
370 FrameEvent frame_event; | 379 FrameEvent frame_event; |
371 frame_event.rtp_timestamp = kRtpTimestamp; | 380 frame_event.rtp_timestamp = test_rtp_timestamp(); |
372 frame_event.type = FRAME_ACK_SENT; | 381 frame_event.type = FRAME_ACK_SENT; |
373 frame_event.media_type = VIDEO_EVENT; | 382 frame_event.media_type = VIDEO_EVENT; |
374 frame_event.timestamp = testing_clock.NowTicks(); | 383 frame_event.timestamp = testing_clock.NowTicks(); |
375 event_subscriber.OnReceiveFrameEvent(frame_event); | 384 event_subscriber.OnReceiveFrameEvent(frame_event); |
376 testing_clock.Advance( | 385 testing_clock.Advance( |
377 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); | 386 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); |
378 } | 387 } |
379 | 388 |
380 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events; | 389 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events; |
381 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); | 390 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); |
(...skipping 20 matching lines...) Expand all Loading... |
402 size_t packet_count = kNumResends * kResendDelay + 10; | 411 size_t packet_count = kNumResends * kResendDelay + 10; |
403 for (size_t i = 0; i < packet_count; i++) { | 412 for (size_t i = 0; i < packet_count; i++) { |
404 TestRtcpPacketBuilder p; | 413 TestRtcpPacketBuilder p; |
405 p.AddRr(kSendingSsrc, 1); | 414 p.AddRr(kSendingSsrc, 1); |
406 p.AddRb(kMediaSsrc); | 415 p.AddRb(kMediaSsrc); |
407 | 416 |
408 p.AddReceiverLog(kSendingSsrc); | 417 p.AddReceiverLog(kSendingSsrc); |
409 | 418 |
410 int num_events = (i + kResendDelay) / kResendDelay; | 419 int num_events = (i + kResendDelay) / kResendDelay; |
411 num_events = std::min<int>(num_events, kNumResends); | 420 num_events = std::min<int>(num_events, kNumResends); |
412 p.AddReceiverFrameLog(kRtpTimestamp, num_events, | 421 p.AddReceiverFrameLog(test_rtp_timestamp().lower_32_bits(), num_events, |
413 time_base_ms - (num_events - 1) * kResendDelay * | 422 time_base_ms - (num_events - 1) * kResendDelay * |
414 kTimeBetweenEventsMs); | 423 kTimeBetweenEventsMs); |
415 for (int i = 0; i < num_events; i++) { | 424 for (int i = 0; i < num_events; i++) { |
416 p.AddReceiverEventLog( | 425 p.AddReceiverEventLog( |
417 0, FRAME_ACK_SENT, | 426 0, FRAME_ACK_SENT, |
418 base::checked_cast<uint16>(i * kResendDelay * kTimeBetweenEventsMs)); | 427 base::checked_cast<uint16>(i * kResendDelay * kTimeBetweenEventsMs)); |
419 } | 428 } |
420 | 429 |
421 FrameEvent frame_event; | 430 FrameEvent frame_event; |
422 frame_event.rtp_timestamp = kRtpTimestamp; | 431 frame_event.rtp_timestamp = test_rtp_timestamp(); |
423 frame_event.type = FRAME_ACK_SENT; | 432 frame_event.type = FRAME_ACK_SENT; |
424 frame_event.media_type = VIDEO_EVENT; | 433 frame_event.media_type = VIDEO_EVENT; |
425 frame_event.timestamp = testing_clock.NowTicks(); | 434 frame_event.timestamp = testing_clock.NowTicks(); |
426 event_subscriber.OnReceiveFrameEvent(frame_event); | 435 event_subscriber.OnReceiveFrameEvent(frame_event); |
427 | 436 |
428 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events; | 437 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events; |
429 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); | 438 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); |
430 | 439 |
431 ExpectPacketEQ(p.GetPacket().Pass(), | 440 ExpectPacketEQ(p.GetPacket().Pass(), |
432 rtcp_builder_->BuildRtcpFromReceiver( | 441 rtcp_builder_->BuildRtcpFromReceiver( |
433 &report_block, | 442 &report_block, |
434 NULL, | 443 NULL, |
435 NULL, | 444 NULL, |
436 &rtcp_events, | 445 &rtcp_events, |
437 kDefaultDelay)); | 446 kDefaultDelay)); |
438 | 447 |
439 testing_clock.Advance( | 448 testing_clock.Advance( |
440 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); | 449 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); |
441 time_base_ms += kTimeBetweenEventsMs; | 450 time_base_ms += kTimeBetweenEventsMs; |
442 } | 451 } |
443 } | 452 } |
444 | 453 |
445 TEST_F(RtcpBuilderTest, RtcpSenderReport) { | 454 TEST_F(RtcpBuilderTest, RtcpSenderReport) { |
446 RtcpSenderInfo sender_info; | 455 RtcpSenderInfo sender_info; |
447 sender_info.ntp_seconds = kNtpHigh; | 456 sender_info.ntp_seconds = kNtpHigh; |
448 sender_info.ntp_fraction = kNtpLow; | 457 sender_info.ntp_fraction = kNtpLow; |
449 sender_info.rtp_timestamp = kRtpTimestamp; | 458 sender_info.rtp_timestamp = test_rtp_timestamp(); |
450 sender_info.send_packet_count = kSendPacketCount; | 459 sender_info.send_packet_count = kSendPacketCount; |
451 sender_info.send_octet_count = kSendOctetCount; | 460 sender_info.send_octet_count = kSendOctetCount; |
452 | 461 |
453 // Sender report. | 462 // Sender report. |
454 TestRtcpPacketBuilder p; | 463 TestRtcpPacketBuilder p; |
455 p.AddSr(kSendingSsrc, 0); | 464 p.AddSr(kSendingSsrc, 0); |
456 | 465 |
457 ExpectPacketEQ(p.GetPacket().Pass(), | 466 ExpectPacketEQ(p.GetPacket().Pass(), |
458 rtcp_builder_->BuildRtcpFromSender(sender_info)); | 467 rtcp_builder_->BuildRtcpFromSender(sender_info)); |
459 } | 468 } |
460 | 469 |
461 } // namespace cast | 470 } // namespace cast |
462 } // namespace media | 471 } // namespace media |
OLD | NEW |