| 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 |