| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include "base/macros.h" | 8 #include "base/macros.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/test/simple_test_tick_clock.h" | 10 #include "base/test/simple_test_tick_clock.h" |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 EXPECT_EQ((*golden_packet)[x], packet->data[x]) << | 58 EXPECT_EQ((*golden_packet)[x], packet->data[x]) << |
| 59 "x = " << x << " / " << golden_packet->size(); | 59 "x = " << x << " / " << golden_packet->size(); |
| 60 if ((*golden_packet)[x] != packet->data[x]) { | 60 if ((*golden_packet)[x] != packet->data[x]) { |
| 61 if (++diffs > 5) | 61 if (++diffs > 5) |
| 62 break; | 62 break; |
| 63 } | 63 } |
| 64 } | 64 } |
| 65 } | 65 } |
| 66 } | 66 } |
| 67 | 67 |
| 68 static RtpTimeTicks test_rtp_timestamp() { |
| 69 return RtpTimeTicks().Expand(kRtpTimestamp); |
| 70 } |
| 71 |
| 68 scoped_ptr<RtcpBuilder> rtcp_builder_; | 72 scoped_ptr<RtcpBuilder> rtcp_builder_; |
| 69 | 73 |
| 70 DISALLOW_COPY_AND_ASSIGN(RtcpBuilderTest); | 74 DISALLOW_COPY_AND_ASSIGN(RtcpBuilderTest); |
| 71 }; | 75 }; |
| 72 | 76 |
| 73 TEST_F(RtcpBuilderTest, RtcpReceiverReport) { | 77 TEST_F(RtcpBuilderTest, RtcpReceiverReport) { |
| 74 // Receiver report with report block. | 78 // Receiver report with report block. |
| 75 TestRtcpPacketBuilder p2; | 79 TestRtcpPacketBuilder p2; |
| 76 p2.AddRr(kSendingSsrc, 1); | 80 p2.AddRr(kSendingSsrc, 1); |
| 77 p2.AddRb(kMediaSsrc); | 81 p2.AddRb(kMediaSsrc); |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events; | 193 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events; |
| 190 | 194 |
| 191 ExpectPacketEQ(p.GetPacket(), rtcp_builder_->BuildRtcpFromReceiver( | 195 ExpectPacketEQ(p.GetPacket(), rtcp_builder_->BuildRtcpFromReceiver( |
| 192 &report_block, &rrtr, &cast_message, | 196 &report_block, &rrtr, &cast_message, |
| 193 &rtcp_events, kDefaultDelay)); | 197 &rtcp_events, kDefaultDelay)); |
| 194 | 198 |
| 195 base::SimpleTestTickClock testing_clock; | 199 base::SimpleTestTickClock testing_clock; |
| 196 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | 200 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); |
| 197 | 201 |
| 198 p.AddReceiverLog(kSendingSsrc); | 202 p.AddReceiverLog(kSendingSsrc); |
| 199 p.AddReceiverFrameLog(kRtpTimestamp, 2, kTimeBaseMs); | 203 p.AddReceiverFrameLog(test_rtp_timestamp().lower_32_bits(), 2, kTimeBaseMs); |
| 200 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0); | 204 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0); |
| 201 p.AddReceiverEventLog(kLostPacketId1, PACKET_RECEIVED, kTimeDelayMs); | 205 p.AddReceiverEventLog(kLostPacketId1, PACKET_RECEIVED, kTimeDelayMs); |
| 202 | 206 |
| 203 FrameEvent frame_event; | 207 FrameEvent frame_event; |
| 204 frame_event.rtp_timestamp = kRtpTimestamp; | 208 frame_event.rtp_timestamp = test_rtp_timestamp(); |
| 205 frame_event.type = FRAME_ACK_SENT; | 209 frame_event.type = FRAME_ACK_SENT; |
| 206 frame_event.media_type = VIDEO_EVENT; | 210 frame_event.media_type = VIDEO_EVENT; |
| 207 frame_event.timestamp = testing_clock.NowTicks(); | 211 frame_event.timestamp = testing_clock.NowTicks(); |
| 208 event_subscriber.OnReceiveFrameEvent(frame_event); | 212 event_subscriber.OnReceiveFrameEvent(frame_event); |
| 209 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); | 213 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); |
| 210 | 214 |
| 211 PacketEvent packet_event; | 215 PacketEvent packet_event; |
| 212 packet_event.rtp_timestamp = kRtpTimestamp; | 216 packet_event.rtp_timestamp = test_rtp_timestamp(); |
| 213 packet_event.type = PACKET_RECEIVED; | 217 packet_event.type = PACKET_RECEIVED; |
| 214 packet_event.media_type = VIDEO_EVENT; | 218 packet_event.media_type = VIDEO_EVENT; |
| 215 packet_event.timestamp = testing_clock.NowTicks(); | 219 packet_event.timestamp = testing_clock.NowTicks(); |
| 216 packet_event.packet_id = kLostPacketId1; | 220 packet_event.packet_id = kLostPacketId1; |
| 217 event_subscriber.OnReceivePacketEvent(packet_event); | 221 event_subscriber.OnReceivePacketEvent(packet_event); |
| 218 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); | 222 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); |
| 219 EXPECT_EQ(2u, rtcp_events.size()); | 223 EXPECT_EQ(2u, rtcp_events.size()); |
| 220 | 224 |
| 221 ExpectPacketEQ(p.GetPacket(), rtcp_builder_->BuildRtcpFromReceiver( | 225 ExpectPacketEQ(p.GetPacket(), rtcp_builder_->BuildRtcpFromReceiver( |
| 222 &report_block, &rrtr, &cast_message, | 226 &report_block, &rrtr, &cast_message, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 235 | 239 |
| 236 base::SimpleTestTickClock testing_clock; | 240 base::SimpleTestTickClock testing_clock; |
| 237 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | 241 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); |
| 238 | 242 |
| 239 p.AddReceiverLog(kSendingSsrc); | 243 p.AddReceiverLog(kSendingSsrc); |
| 240 | 244 |
| 241 int num_events = kMaxEventsPerRTCP; | 245 int num_events = kMaxEventsPerRTCP; |
| 242 | 246 |
| 243 EXPECT_LE(num_events, static_cast<int>(kRtcpMaxReceiverLogMessages)); | 247 EXPECT_LE(num_events, static_cast<int>(kRtcpMaxReceiverLogMessages)); |
| 244 p.AddReceiverFrameLog( | 248 p.AddReceiverFrameLog( |
| 245 kRtpTimestamp + 2345, | 249 (test_rtp_timestamp() + RtpTimeDelta::FromTicks(2345)).lower_32_bits(), |
| 246 num_events, | 250 num_events, |
| 247 kTimeBaseMs); | 251 kTimeBaseMs); |
| 248 for (int i = 0; i < num_events; i++) { | 252 for (int i = 0; i < num_events; i++) { |
| 249 p.AddReceiverEventLog(kLostPacketId1, PACKET_RECEIVED, | 253 p.AddReceiverEventLog(kLostPacketId1, PACKET_RECEIVED, |
| 250 static_cast<uint16_t>(kTimeDelayMs * i)); | 254 static_cast<uint16_t>(kTimeDelayMs * i)); |
| 251 } | 255 } |
| 252 | 256 |
| 253 | 257 |
| 254 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); | 258 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); |
| 255 | 259 |
| 256 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { | 260 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { |
| 257 PacketEvent packet_event; | 261 PacketEvent packet_event; |
| 258 packet_event.rtp_timestamp = kRtpTimestamp + 2345; | 262 packet_event.rtp_timestamp = |
| 263 test_rtp_timestamp() + RtpTimeDelta::FromTicks(2345); |
| 259 packet_event.type = PACKET_RECEIVED; | 264 packet_event.type = PACKET_RECEIVED; |
| 260 packet_event.media_type = VIDEO_EVENT; | 265 packet_event.media_type = VIDEO_EVENT; |
| 261 packet_event.timestamp = testing_clock.NowTicks(); | 266 packet_event.timestamp = testing_clock.NowTicks(); |
| 262 packet_event.packet_id = kLostPacketId1; | 267 packet_event.packet_id = kLostPacketId1; |
| 263 event_subscriber.OnReceivePacketEvent(packet_event); | 268 event_subscriber.OnReceivePacketEvent(packet_event); |
| 264 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); | 269 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); |
| 265 } | 270 } |
| 266 | 271 |
| 267 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events; | 272 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events; |
| 268 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); | 273 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 283 RtcpReportBlock report_block = GetReportBlock(); | 288 RtcpReportBlock report_block = GetReportBlock(); |
| 284 | 289 |
| 285 base::SimpleTestTickClock testing_clock; | 290 base::SimpleTestTickClock testing_clock; |
| 286 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | 291 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); |
| 287 | 292 |
| 288 p.AddReceiverLog(kSendingSsrc); | 293 p.AddReceiverLog(kSendingSsrc); |
| 289 | 294 |
| 290 int num_events = kMaxEventsPerRTCP; | 295 int num_events = kMaxEventsPerRTCP; |
| 291 | 296 |
| 292 for (int i = 0; i < num_events; i++) { | 297 for (int i = 0; i < num_events; i++) { |
| 293 p.AddReceiverFrameLog(kRtpTimestamp + i, 1, kTimeBaseMs + i * kTimeDelayMs); | 298 p.AddReceiverFrameLog( |
| 299 (test_rtp_timestamp() + RtpTimeDelta::FromTicks(i)).lower_32_bits(), |
| 300 1, kTimeBaseMs + i * kTimeDelayMs); |
| 294 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0); | 301 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0); |
| 295 } | 302 } |
| 296 | 303 |
| 297 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); | 304 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); |
| 298 | 305 |
| 299 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { | 306 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { |
| 300 FrameEvent frame_event; | 307 FrameEvent frame_event; |
| 301 frame_event.rtp_timestamp = kRtpTimestamp + static_cast<int>(i); | 308 frame_event.rtp_timestamp = |
| 309 test_rtp_timestamp() + RtpTimeDelta::FromTicks(i); |
| 302 frame_event.type = FRAME_ACK_SENT; | 310 frame_event.type = FRAME_ACK_SENT; |
| 303 frame_event.media_type = VIDEO_EVENT; | 311 frame_event.media_type = VIDEO_EVENT; |
| 304 frame_event.timestamp = testing_clock.NowTicks(); | 312 frame_event.timestamp = testing_clock.NowTicks(); |
| 305 event_subscriber.OnReceiveFrameEvent(frame_event); | 313 event_subscriber.OnReceiveFrameEvent(frame_event); |
| 306 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); | 314 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); |
| 307 } | 315 } |
| 308 | 316 |
| 309 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events; | 317 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events; |
| 310 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); | 318 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); |
| 311 | 319 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 325 | 333 |
| 326 base::SimpleTestTickClock testing_clock; | 334 base::SimpleTestTickClock testing_clock; |
| 327 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); | 335 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); |
| 328 | 336 |
| 329 p.AddReceiverLog(kSendingSsrc); | 337 p.AddReceiverLog(kSendingSsrc); |
| 330 | 338 |
| 331 // Log 11 events for a single frame, each |kTimeBetweenEventsMs| apart. | 339 // Log 11 events for a single frame, each |kTimeBetweenEventsMs| apart. |
| 332 // Only last 10 events will be sent because the first event is more than | 340 // Only last 10 events will be sent because the first event is more than |
| 333 // 4095 milliseconds away from latest event. | 341 // 4095 milliseconds away from latest event. |
| 334 const int kTimeBetweenEventsMs = 410; | 342 const int kTimeBetweenEventsMs = 410; |
| 335 p.AddReceiverFrameLog(kRtpTimestamp, 10, kTimeBaseMs + kTimeBetweenEventsMs); | 343 p.AddReceiverFrameLog(test_rtp_timestamp().lower_32_bits(), 10, |
| 344 kTimeBaseMs + kTimeBetweenEventsMs); |
| 336 for (int i = 0; i < 10; ++i) { | 345 for (int i = 0; i < 10; ++i) { |
| 337 p.AddReceiverEventLog(0, FRAME_ACK_SENT, i * kTimeBetweenEventsMs); | 346 p.AddReceiverEventLog(0, FRAME_ACK_SENT, i * kTimeBetweenEventsMs); |
| 338 } | 347 } |
| 339 | 348 |
| 340 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); | 349 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); |
| 341 for (int i = 0; i < 11; ++i) { | 350 for (int i = 0; i < 11; ++i) { |
| 342 FrameEvent frame_event; | 351 FrameEvent frame_event; |
| 343 frame_event.rtp_timestamp = kRtpTimestamp; | 352 frame_event.rtp_timestamp = test_rtp_timestamp(); |
| 344 frame_event.type = FRAME_ACK_SENT; | 353 frame_event.type = FRAME_ACK_SENT; |
| 345 frame_event.media_type = VIDEO_EVENT; | 354 frame_event.media_type = VIDEO_EVENT; |
| 346 frame_event.timestamp = testing_clock.NowTicks(); | 355 frame_event.timestamp = testing_clock.NowTicks(); |
| 347 event_subscriber.OnReceiveFrameEvent(frame_event); | 356 event_subscriber.OnReceiveFrameEvent(frame_event); |
| 348 testing_clock.Advance( | 357 testing_clock.Advance( |
| 349 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); | 358 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); |
| 350 } | 359 } |
| 351 | 360 |
| 352 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events; | 361 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events; |
| 353 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); | 362 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 370 size_t packet_count = kNumResends * kResendDelay + 10; | 379 size_t packet_count = kNumResends * kResendDelay + 10; |
| 371 for (size_t i = 0; i < packet_count; i++) { | 380 for (size_t i = 0; i < packet_count; i++) { |
| 372 TestRtcpPacketBuilder p; | 381 TestRtcpPacketBuilder p; |
| 373 p.AddRr(kSendingSsrc, 1); | 382 p.AddRr(kSendingSsrc, 1); |
| 374 p.AddRb(kMediaSsrc); | 383 p.AddRb(kMediaSsrc); |
| 375 | 384 |
| 376 p.AddReceiverLog(kSendingSsrc); | 385 p.AddReceiverLog(kSendingSsrc); |
| 377 | 386 |
| 378 int num_events = (i + kResendDelay) / kResendDelay; | 387 int num_events = (i + kResendDelay) / kResendDelay; |
| 379 num_events = std::min<int>(num_events, kNumResends); | 388 num_events = std::min<int>(num_events, kNumResends); |
| 380 p.AddReceiverFrameLog(kRtpTimestamp, num_events, | 389 p.AddReceiverFrameLog(test_rtp_timestamp().lower_32_bits(), num_events, |
| 381 time_base_ms - (num_events - 1) * kResendDelay * | 390 time_base_ms - (num_events - 1) * kResendDelay * |
| 382 kTimeBetweenEventsMs); | 391 kTimeBetweenEventsMs); |
| 383 for (int i = 0; i < num_events; i++) { | 392 for (int i = 0; i < num_events; i++) { |
| 384 p.AddReceiverEventLog(0, FRAME_ACK_SENT, | 393 p.AddReceiverEventLog(0, FRAME_ACK_SENT, |
| 385 base::checked_cast<uint16_t>(i * kResendDelay * | 394 base::checked_cast<uint16_t>(i * kResendDelay * |
| 386 kTimeBetweenEventsMs)); | 395 kTimeBetweenEventsMs)); |
| 387 } | 396 } |
| 388 | 397 |
| 389 FrameEvent frame_event; | 398 FrameEvent frame_event; |
| 390 frame_event.rtp_timestamp = kRtpTimestamp; | 399 frame_event.rtp_timestamp = test_rtp_timestamp(); |
| 391 frame_event.type = FRAME_ACK_SENT; | 400 frame_event.type = FRAME_ACK_SENT; |
| 392 frame_event.media_type = VIDEO_EVENT; | 401 frame_event.media_type = VIDEO_EVENT; |
| 393 frame_event.timestamp = testing_clock.NowTicks(); | 402 frame_event.timestamp = testing_clock.NowTicks(); |
| 394 event_subscriber.OnReceiveFrameEvent(frame_event); | 403 event_subscriber.OnReceiveFrameEvent(frame_event); |
| 395 | 404 |
| 396 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events; | 405 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events; |
| 397 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); | 406 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events); |
| 398 | 407 |
| 399 ExpectPacketEQ(p.GetPacket(), | 408 ExpectPacketEQ(p.GetPacket(), |
| 400 rtcp_builder_->BuildRtcpFromReceiver( | 409 rtcp_builder_->BuildRtcpFromReceiver( |
| 401 &report_block, NULL, NULL, &rtcp_events, kDefaultDelay)); | 410 &report_block, NULL, NULL, &rtcp_events, kDefaultDelay)); |
| 402 | 411 |
| 403 testing_clock.Advance( | 412 testing_clock.Advance( |
| 404 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); | 413 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); |
| 405 time_base_ms += kTimeBetweenEventsMs; | 414 time_base_ms += kTimeBetweenEventsMs; |
| 406 } | 415 } |
| 407 } | 416 } |
| 408 | 417 |
| 409 TEST_F(RtcpBuilderTest, RtcpSenderReport) { | 418 TEST_F(RtcpBuilderTest, RtcpSenderReport) { |
| 410 RtcpSenderInfo sender_info; | 419 RtcpSenderInfo sender_info; |
| 411 sender_info.ntp_seconds = kNtpHigh; | 420 sender_info.ntp_seconds = kNtpHigh; |
| 412 sender_info.ntp_fraction = kNtpLow; | 421 sender_info.ntp_fraction = kNtpLow; |
| 413 sender_info.rtp_timestamp = kRtpTimestamp; | 422 sender_info.rtp_timestamp = test_rtp_timestamp(); |
| 414 sender_info.send_packet_count = kSendPacketCount; | 423 sender_info.send_packet_count = kSendPacketCount; |
| 415 sender_info.send_octet_count = kSendOctetCount; | 424 sender_info.send_octet_count = kSendOctetCount; |
| 416 | 425 |
| 417 // Sender report. | 426 // Sender report. |
| 418 TestRtcpPacketBuilder p; | 427 TestRtcpPacketBuilder p; |
| 419 p.AddSr(kSendingSsrc, 0); | 428 p.AddSr(kSendingSsrc, 0); |
| 420 | 429 |
| 421 ExpectPacketEQ(p.GetPacket(), | 430 ExpectPacketEQ(p.GetPacket(), |
| 422 rtcp_builder_->BuildRtcpFromSender(sender_info)); | 431 rtcp_builder_->BuildRtcpFromSender(sender_info)); |
| 423 } | 432 } |
| 424 | 433 |
| 425 } // namespace cast | 434 } // namespace cast |
| 426 } // namespace media | 435 } // namespace media |
| OLD | NEW |