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 |