OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 | 52 |
53 Packet* PacketGenerator::NextPacket(int payload_size_bytes) { | 53 Packet* PacketGenerator::NextPacket(int payload_size_bytes) { |
54 Packet* packet = new Packet; | 54 Packet* packet = new Packet; |
55 packet->header.sequenceNumber = seq_no_; | 55 packet->header.sequenceNumber = seq_no_; |
56 packet->header.timestamp = ts_; | 56 packet->header.timestamp = ts_; |
57 packet->header.payloadType = pt_; | 57 packet->header.payloadType = pt_; |
58 packet->header.markerBit = false; | 58 packet->header.markerBit = false; |
59 packet->header.ssrc = 0x12345678; | 59 packet->header.ssrc = 0x12345678; |
60 packet->header.numCSRCs = 0; | 60 packet->header.numCSRCs = 0; |
61 packet->header.paddingLength = 0; | 61 packet->header.paddingLength = 0; |
62 packet->payload_length = payload_size_bytes; | |
63 packet->primary = true; | 62 packet->primary = true; |
64 packet->payload = new uint8_t[payload_size_bytes]; | 63 packet->payload.SetSize(payload_size_bytes); |
65 ++seq_no_; | 64 ++seq_no_; |
66 ts_ += frame_size_; | 65 ts_ += frame_size_; |
67 return packet; | 66 return packet; |
68 } | 67 } |
69 | 68 |
70 struct PacketsToInsert { | 69 struct PacketsToInsert { |
71 uint16_t sequence_number; | 70 uint16_t sequence_number; |
72 uint32_t timestamp; | 71 uint32_t timestamp; |
73 uint8_t payload_type; | 72 uint8_t payload_type; |
74 bool primary; | 73 bool primary; |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 } | 274 } |
276 } | 275 } |
277 | 276 |
278 EXPECT_EQ(kExpectPacketsInBuffer, buffer.NumPacketsInBuffer()); | 277 EXPECT_EQ(kExpectPacketsInBuffer, buffer.NumPacketsInBuffer()); |
279 | 278 |
280 size_t drop_count; | 279 size_t drop_count; |
281 for (size_t i = 0; i < kExpectPacketsInBuffer; ++i) { | 280 for (size_t i = 0; i < kExpectPacketsInBuffer; ++i) { |
282 Packet* packet = buffer.GetNextPacket(&drop_count); | 281 Packet* packet = buffer.GetNextPacket(&drop_count); |
283 EXPECT_EQ(0u, drop_count); | 282 EXPECT_EQ(0u, drop_count); |
284 EXPECT_EQ(packet, expect_order[i]); // Compare pointer addresses. | 283 EXPECT_EQ(packet, expect_order[i]); // Compare pointer addresses. |
285 delete[] packet->payload; | |
286 delete packet; | 284 delete packet; |
287 } | 285 } |
288 EXPECT_TRUE(buffer.Empty()); | 286 EXPECT_TRUE(buffer.Empty()); |
289 } | 287 } |
290 | 288 |
291 TEST(PacketBuffer, DiscardPackets) { | 289 TEST(PacketBuffer, DiscardPackets) { |
292 TickTimer tick_timer; | 290 TickTimer tick_timer; |
293 PacketBuffer buffer(100, &tick_timer); // 100 packets. | 291 PacketBuffer buffer(100, &tick_timer); // 100 packets. |
294 const uint16_t start_seq_no = 17; | 292 const uint16_t start_seq_no = 17; |
295 const uint32_t start_ts = 4711; | 293 const uint32_t start_ts = 4711; |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 ¤t_cng_pt)); | 348 ¤t_cng_pt)); |
351 EXPECT_EQ(10u, buffer.NumPacketsInBuffer()); | 349 EXPECT_EQ(10u, buffer.NumPacketsInBuffer()); |
352 | 350 |
353 // Extract them and make sure that come out in the right order. | 351 // Extract them and make sure that come out in the right order. |
354 uint32_t current_ts = start_ts; | 352 uint32_t current_ts = start_ts; |
355 for (int i = 0; i < 10; ++i) { | 353 for (int i = 0; i < 10; ++i) { |
356 Packet* packet = buffer.GetNextPacket(NULL); | 354 Packet* packet = buffer.GetNextPacket(NULL); |
357 ASSERT_FALSE(packet == NULL); | 355 ASSERT_FALSE(packet == NULL); |
358 EXPECT_EQ(current_ts, packet->header.timestamp); | 356 EXPECT_EQ(current_ts, packet->header.timestamp); |
359 current_ts += ts_increment; | 357 current_ts += ts_increment; |
360 delete [] packet->payload; | |
361 delete packet; | 358 delete packet; |
362 } | 359 } |
363 EXPECT_TRUE(buffer.Empty()); | 360 EXPECT_TRUE(buffer.Empty()); |
364 | 361 |
365 EXPECT_CALL(decoder_database, Die()); // Called when object is deleted. | 362 EXPECT_CALL(decoder_database, Die()); // Called when object is deleted. |
366 } | 363 } |
367 | 364 |
368 TEST(PacketBuffer, Failures) { | 365 TEST(PacketBuffer, Failures) { |
369 const uint16_t start_seq_no = 17; | 366 const uint16_t start_seq_no = 17; |
370 const uint32_t start_ts = 4711; | 367 const uint32_t start_ts = 4711; |
371 const uint32_t ts_increment = 10; | 368 const uint32_t ts_increment = 10; |
372 int payload_len = 100; | 369 int payload_len = 100; |
373 PacketGenerator gen(start_seq_no, start_ts, 0, ts_increment); | 370 PacketGenerator gen(start_seq_no, start_ts, 0, ts_increment); |
374 TickTimer tick_timer; | 371 TickTimer tick_timer; |
375 | 372 |
376 PacketBuffer* buffer = new PacketBuffer(100, &tick_timer); // 100 packets. | 373 PacketBuffer* buffer = new PacketBuffer(100, &tick_timer); // 100 packets. |
377 Packet* packet = NULL; | 374 Packet* packet = NULL; |
378 EXPECT_EQ(PacketBuffer::kInvalidPacket, buffer->InsertPacket(packet)); | 375 EXPECT_EQ(PacketBuffer::kInvalidPacket, buffer->InsertPacket(packet)); |
379 packet = gen.NextPacket(payload_len); | 376 packet = gen.NextPacket(payload_len); |
380 delete [] packet->payload; | 377 packet->payload.Clear(); |
381 packet->payload = NULL; | |
382 EXPECT_EQ(PacketBuffer::kInvalidPacket, buffer->InsertPacket(packet)); | 378 EXPECT_EQ(PacketBuffer::kInvalidPacket, buffer->InsertPacket(packet)); |
383 // Packet is deleted by the PacketBuffer. | 379 // Packet is deleted by the PacketBuffer. |
384 | 380 |
385 // Buffer should still be empty. Test all empty-checks. | 381 // Buffer should still be empty. Test all empty-checks. |
386 uint32_t temp_ts; | 382 uint32_t temp_ts; |
387 EXPECT_EQ(PacketBuffer::kBufferEmpty, buffer->NextTimestamp(&temp_ts)); | 383 EXPECT_EQ(PacketBuffer::kBufferEmpty, buffer->NextTimestamp(&temp_ts)); |
388 EXPECT_EQ(PacketBuffer::kBufferEmpty, | 384 EXPECT_EQ(PacketBuffer::kBufferEmpty, |
389 buffer->NextHigherTimestamp(0, &temp_ts)); | 385 buffer->NextHigherTimestamp(0, &temp_ts)); |
390 EXPECT_EQ(NULL, buffer->NextRtpHeader()); | 386 EXPECT_EQ(NULL, buffer->NextRtpHeader()); |
391 EXPECT_EQ(NULL, buffer->GetNextPacket(NULL)); | 387 EXPECT_EQ(NULL, buffer->GetNextPacket(NULL)); |
392 EXPECT_EQ(PacketBuffer::kBufferEmpty, buffer->DiscardNextPacket()); | 388 EXPECT_EQ(PacketBuffer::kBufferEmpty, buffer->DiscardNextPacket()); |
393 EXPECT_EQ(0, buffer->DiscardAllOldPackets(0)); // 0 packets discarded. | 389 EXPECT_EQ(0, buffer->DiscardAllOldPackets(0)); // 0 packets discarded. |
394 | 390 |
395 // Insert one packet to make the buffer non-empty. | 391 // Insert one packet to make the buffer non-empty. |
396 packet = gen.NextPacket(payload_len); | 392 packet = gen.NextPacket(payload_len); |
397 EXPECT_EQ(PacketBuffer::kOK, buffer->InsertPacket(packet)); | 393 EXPECT_EQ(PacketBuffer::kOK, buffer->InsertPacket(packet)); |
398 EXPECT_EQ(PacketBuffer::kInvalidPointer, buffer->NextTimestamp(NULL)); | 394 EXPECT_EQ(PacketBuffer::kInvalidPointer, buffer->NextTimestamp(NULL)); |
399 EXPECT_EQ(PacketBuffer::kInvalidPointer, | 395 EXPECT_EQ(PacketBuffer::kInvalidPointer, |
400 buffer->NextHigherTimestamp(0, NULL)); | 396 buffer->NextHigherTimestamp(0, NULL)); |
401 delete buffer; | 397 delete buffer; |
402 | 398 |
403 // Insert packet list of three packets, where the second packet has an invalid | 399 // Insert packet list of three packets, where the second packet has an invalid |
404 // payload. Expect first packet to be inserted, and the remaining two to be | 400 // payload. Expect first packet to be inserted, and the remaining two to be |
405 // discarded. | 401 // discarded. |
406 buffer = new PacketBuffer(100, &tick_timer); // 100 packets. | 402 buffer = new PacketBuffer(100, &tick_timer); // 100 packets. |
407 PacketList list; | 403 PacketList list; |
408 list.push_back(gen.NextPacket(payload_len)); // Valid packet. | 404 list.push_back(gen.NextPacket(payload_len)); // Valid packet. |
409 packet = gen.NextPacket(payload_len); | 405 packet = gen.NextPacket(payload_len); |
410 delete [] packet->payload; | 406 packet->payload.Clear(); // Invalid. |
411 packet->payload = NULL; // Invalid. | |
412 list.push_back(packet); | 407 list.push_back(packet); |
413 list.push_back(gen.NextPacket(payload_len)); // Valid packet. | 408 list.push_back(gen.NextPacket(payload_len)); // Valid packet. |
414 MockDecoderDatabase decoder_database; | 409 MockDecoderDatabase decoder_database; |
415 uint8_t current_pt = 0xFF; | 410 uint8_t current_pt = 0xFF; |
416 uint8_t current_cng_pt = 0xFF; | 411 uint8_t current_cng_pt = 0xFF; |
417 EXPECT_EQ(PacketBuffer::kInvalidPacket, | 412 EXPECT_EQ(PacketBuffer::kInvalidPacket, |
418 buffer->InsertPacketList(&list, | 413 buffer->InsertPacketList(&list, |
419 decoder_database, | 414 decoder_database, |
420 ¤t_pt, | 415 ¤t_pt, |
421 ¤t_cng_pt)); | 416 ¤t_cng_pt)); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 a->header.sequenceNumber = b->header.sequenceNumber; | 472 a->header.sequenceNumber = b->header.sequenceNumber; |
478 a->primary = false; | 473 a->primary = false; |
479 b->primary = true; | 474 b->primary = true; |
480 EXPECT_FALSE(*a == *b); | 475 EXPECT_FALSE(*a == *b); |
481 EXPECT_TRUE(*a != *b); | 476 EXPECT_TRUE(*a != *b); |
482 EXPECT_FALSE(*a < *b); | 477 EXPECT_FALSE(*a < *b); |
483 EXPECT_TRUE(*a > *b); | 478 EXPECT_TRUE(*a > *b); |
484 EXPECT_FALSE(*a <= *b); | 479 EXPECT_FALSE(*a <= *b); |
485 EXPECT_TRUE(*a >= *b); | 480 EXPECT_TRUE(*a >= *b); |
486 | 481 |
487 delete [] a->payload; | |
488 delete a; | 482 delete a; |
489 delete [] b->payload; | |
490 delete b; | 483 delete b; |
491 } | 484 } |
492 | 485 |
493 // Test the DeleteFirstPacket DeleteAllPackets methods. | 486 // Test the DeleteFirstPacket DeleteAllPackets methods. |
494 TEST(PacketBuffer, DeleteAllPackets) { | 487 TEST(PacketBuffer, DeleteAllPackets) { |
495 PacketGenerator gen(0, 0, 0, 10); | 488 PacketGenerator gen(0, 0, 0, 10); |
496 PacketList list; | 489 PacketList list; |
497 const int payload_len = 10; | 490 const int payload_len = 10; |
498 | 491 |
499 // Insert 10 small packets. | 492 // Insert 10 small packets. |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
564 // Test the IsObsoleteTimestamp method with different limit timestamps. | 557 // Test the IsObsoleteTimestamp method with different limit timestamps. |
565 TEST(PacketBuffer, IsObsoleteTimestamp) { | 558 TEST(PacketBuffer, IsObsoleteTimestamp) { |
566 TestIsObsoleteTimestamp(0); | 559 TestIsObsoleteTimestamp(0); |
567 TestIsObsoleteTimestamp(1); | 560 TestIsObsoleteTimestamp(1); |
568 TestIsObsoleteTimestamp(0xFFFFFFFF); // -1 in uint32_t. | 561 TestIsObsoleteTimestamp(0xFFFFFFFF); // -1 in uint32_t. |
569 TestIsObsoleteTimestamp(0x80000000); // 2^31. | 562 TestIsObsoleteTimestamp(0x80000000); // 2^31. |
570 TestIsObsoleteTimestamp(0x80000001); // 2^31 + 1. | 563 TestIsObsoleteTimestamp(0x80000001); // 2^31 + 1. |
571 TestIsObsoleteTimestamp(0x7FFFFFFF); // 2^31 - 1. | 564 TestIsObsoleteTimestamp(0x7FFFFFFF); // 2^31 - 1. |
572 } | 565 } |
573 } // namespace webrtc | 566 } // namespace webrtc |
OLD | NEW |