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 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 for (uint8_t i = 0; i <= 3; ++i) { | 303 for (uint8_t i = 0; i <= 3; ++i) { |
304 // Create packet with payload type |i|, payload length 10 bytes, all 0. | 304 // Create packet with payload type |i|, payload length 10 bytes, all 0. |
305 Packet* packet = CreatePacket(i, 10, 0); | 305 Packet* packet = CreatePacket(i, 10, 0); |
306 packet_list.push_back(packet); | 306 packet_list.push_back(packet); |
307 } | 307 } |
308 | 308 |
309 // Use a real DecoderDatabase object here instead of a mock, since it is | 309 // Use a real DecoderDatabase object here instead of a mock, since it is |
310 // easier to just register the payload types and let the actual implementation | 310 // easier to just register the payload types and let the actual implementation |
311 // do its job. | 311 // do its job. |
312 DecoderDatabase decoder_database; | 312 DecoderDatabase decoder_database; |
313 decoder_database.RegisterPayload(0, kDecoderCNGnb); | 313 decoder_database.RegisterPayload(0, NetEqDecoder::kDecoderCNGnb); |
314 decoder_database.RegisterPayload(1, kDecoderPCMu); | 314 decoder_database.RegisterPayload(1, NetEqDecoder::kDecoderPCMu); |
315 decoder_database.RegisterPayload(2, kDecoderAVT); | 315 decoder_database.RegisterPayload(2, NetEqDecoder::kDecoderAVT); |
316 decoder_database.RegisterPayload(3, kDecoderILBC); | 316 decoder_database.RegisterPayload(3, NetEqDecoder::kDecoderILBC); |
317 | 317 |
318 PayloadSplitter splitter; | 318 PayloadSplitter splitter; |
319 splitter.CheckRedPayloads(&packet_list, decoder_database); | 319 splitter.CheckRedPayloads(&packet_list, decoder_database); |
320 | 320 |
321 ASSERT_EQ(3u, packet_list.size()); // Should have dropped the last packet. | 321 ASSERT_EQ(3u, packet_list.size()); // Should have dropped the last packet. |
322 // Verify packets. The loop verifies that payload types 0, 1, and 2 are in the | 322 // Verify packets. The loop verifies that payload types 0, 1, and 2 are in the |
323 // list. | 323 // list. |
324 for (int i = 0; i <= 2; ++i) { | 324 for (int i = 0; i <= 2; ++i) { |
325 Packet* packet = packet_list.front(); | 325 Packet* packet = packet_list.front(); |
326 VerifyPacket(packet, 10, i, kSequenceNumber, kBaseTimestamp, 0, true); | 326 VerifyPacket(packet, 10, i, kSequenceNumber, kBaseTimestamp, 0, true); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 for (uint8_t i = 0; i < 6; ++i) { | 365 for (uint8_t i = 0; i < 6; ++i) { |
366 // Let the payload type be |i|, and the payload value 10 * |i|. | 366 // Let the payload type be |i|, and the payload value 10 * |i|. |
367 packet_list.push_back(CreatePacket(i, kPayloadLength, 10 * i)); | 367 packet_list.push_back(CreatePacket(i, kPayloadLength, 10 * i)); |
368 } | 368 } |
369 | 369 |
370 MockDecoderDatabase decoder_database; | 370 MockDecoderDatabase decoder_database; |
371 // Tell the mock decoder database to return DecoderInfo structs with different | 371 // Tell the mock decoder database to return DecoderInfo structs with different |
372 // codec types. | 372 // codec types. |
373 // Use scoped pointers to avoid having to delete them later. | 373 // Use scoped pointers to avoid having to delete them later. |
374 rtc::scoped_ptr<DecoderDatabase::DecoderInfo> info0( | 374 rtc::scoped_ptr<DecoderDatabase::DecoderInfo> info0( |
375 new DecoderDatabase::DecoderInfo(kDecoderISAC, 16000, NULL, false)); | 375 new DecoderDatabase::DecoderInfo(NetEqDecoder::kDecoderISAC, 16000, NULL, |
| 376 false)); |
376 EXPECT_CALL(decoder_database, GetDecoderInfo(0)) | 377 EXPECT_CALL(decoder_database, GetDecoderInfo(0)) |
377 .WillRepeatedly(Return(info0.get())); | 378 .WillRepeatedly(Return(info0.get())); |
378 rtc::scoped_ptr<DecoderDatabase::DecoderInfo> info1( | 379 rtc::scoped_ptr<DecoderDatabase::DecoderInfo> info1( |
379 new DecoderDatabase::DecoderInfo(kDecoderISACswb, 32000, NULL, false)); | 380 new DecoderDatabase::DecoderInfo(NetEqDecoder::kDecoderISACswb, 32000, |
| 381 NULL, false)); |
380 EXPECT_CALL(decoder_database, GetDecoderInfo(1)) | 382 EXPECT_CALL(decoder_database, GetDecoderInfo(1)) |
381 .WillRepeatedly(Return(info1.get())); | 383 .WillRepeatedly(Return(info1.get())); |
382 rtc::scoped_ptr<DecoderDatabase::DecoderInfo> info2( | 384 rtc::scoped_ptr<DecoderDatabase::DecoderInfo> info2( |
383 new DecoderDatabase::DecoderInfo(kDecoderRED, 8000, NULL, false)); | 385 new DecoderDatabase::DecoderInfo(NetEqDecoder::kDecoderRED, 8000, NULL, |
| 386 false)); |
384 EXPECT_CALL(decoder_database, GetDecoderInfo(2)) | 387 EXPECT_CALL(decoder_database, GetDecoderInfo(2)) |
385 .WillRepeatedly(Return(info2.get())); | 388 .WillRepeatedly(Return(info2.get())); |
386 rtc::scoped_ptr<DecoderDatabase::DecoderInfo> info3( | 389 rtc::scoped_ptr<DecoderDatabase::DecoderInfo> info3( |
387 new DecoderDatabase::DecoderInfo(kDecoderAVT, 8000, NULL, false)); | 390 new DecoderDatabase::DecoderInfo(NetEqDecoder::kDecoderAVT, 8000, NULL, |
| 391 false)); |
388 EXPECT_CALL(decoder_database, GetDecoderInfo(3)) | 392 EXPECT_CALL(decoder_database, GetDecoderInfo(3)) |
389 .WillRepeatedly(Return(info3.get())); | 393 .WillRepeatedly(Return(info3.get())); |
390 rtc::scoped_ptr<DecoderDatabase::DecoderInfo> info4( | 394 rtc::scoped_ptr<DecoderDatabase::DecoderInfo> info4( |
391 new DecoderDatabase::DecoderInfo(kDecoderCNGnb, 8000, NULL, false)); | 395 new DecoderDatabase::DecoderInfo(NetEqDecoder::kDecoderCNGnb, 8000, NULL, |
| 396 false)); |
392 EXPECT_CALL(decoder_database, GetDecoderInfo(4)) | 397 EXPECT_CALL(decoder_database, GetDecoderInfo(4)) |
393 .WillRepeatedly(Return(info4.get())); | 398 .WillRepeatedly(Return(info4.get())); |
394 rtc::scoped_ptr<DecoderDatabase::DecoderInfo> info5( | 399 rtc::scoped_ptr<DecoderDatabase::DecoderInfo> info5( |
395 new DecoderDatabase::DecoderInfo(kDecoderArbitrary, 8000, NULL, false)); | 400 new DecoderDatabase::DecoderInfo(NetEqDecoder::kDecoderArbitrary, 8000, |
| 401 NULL, false)); |
396 EXPECT_CALL(decoder_database, GetDecoderInfo(5)) | 402 EXPECT_CALL(decoder_database, GetDecoderInfo(5)) |
397 .WillRepeatedly(Return(info5.get())); | 403 .WillRepeatedly(Return(info5.get())); |
398 | 404 |
399 PayloadSplitter splitter; | 405 PayloadSplitter splitter; |
400 EXPECT_EQ(0, splitter.SplitAudio(&packet_list, decoder_database)); | 406 EXPECT_EQ(0, splitter.SplitAudio(&packet_list, decoder_database)); |
401 EXPECT_EQ(6u, packet_list.size()); | 407 EXPECT_EQ(6u, packet_list.size()); |
402 | 408 |
403 // Check that all payloads are intact. | 409 // Check that all payloads are intact. |
404 uint8_t payload_type = 0; | 410 uint8_t payload_type = 0; |
405 PacketList::iterator it = packet_list.begin(); | 411 PacketList::iterator it = packet_list.begin(); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 | 451 |
446 // The destructor is called when decoder_database goes out of scope. | 452 // The destructor is called when decoder_database goes out of scope. |
447 EXPECT_CALL(decoder_database, Die()); | 453 EXPECT_CALL(decoder_database, Die()); |
448 } | 454 } |
449 | 455 |
450 class SplitBySamplesTest : public ::testing::TestWithParam<NetEqDecoder> { | 456 class SplitBySamplesTest : public ::testing::TestWithParam<NetEqDecoder> { |
451 protected: | 457 protected: |
452 virtual void SetUp() { | 458 virtual void SetUp() { |
453 decoder_type_ = GetParam(); | 459 decoder_type_ = GetParam(); |
454 switch (decoder_type_) { | 460 switch (decoder_type_) { |
455 case kDecoderPCMu: | 461 case NetEqDecoder::kDecoderPCMu: |
456 case kDecoderPCMa: | 462 case NetEqDecoder::kDecoderPCMa: |
457 bytes_per_ms_ = 8; | 463 bytes_per_ms_ = 8; |
458 samples_per_ms_ = 8; | 464 samples_per_ms_ = 8; |
459 break; | 465 break; |
460 case kDecoderPCMu_2ch: | 466 case NetEqDecoder::kDecoderPCMu_2ch: |
461 case kDecoderPCMa_2ch: | 467 case NetEqDecoder::kDecoderPCMa_2ch: |
462 bytes_per_ms_ = 2 * 8; | 468 bytes_per_ms_ = 2 * 8; |
463 samples_per_ms_ = 8; | 469 samples_per_ms_ = 8; |
464 break; | 470 break; |
465 case kDecoderG722: | 471 case NetEqDecoder::kDecoderG722: |
466 bytes_per_ms_ = 8; | 472 bytes_per_ms_ = 8; |
467 samples_per_ms_ = 16; | 473 samples_per_ms_ = 16; |
468 break; | 474 break; |
469 case kDecoderPCM16B: | 475 case NetEqDecoder::kDecoderPCM16B: |
470 bytes_per_ms_ = 16; | 476 bytes_per_ms_ = 16; |
471 samples_per_ms_ = 8; | 477 samples_per_ms_ = 8; |
472 break; | 478 break; |
473 case kDecoderPCM16Bwb: | 479 case NetEqDecoder::kDecoderPCM16Bwb: |
474 bytes_per_ms_ = 32; | 480 bytes_per_ms_ = 32; |
475 samples_per_ms_ = 16; | 481 samples_per_ms_ = 16; |
476 break; | 482 break; |
477 case kDecoderPCM16Bswb32kHz: | 483 case NetEqDecoder::kDecoderPCM16Bswb32kHz: |
478 bytes_per_ms_ = 64; | 484 bytes_per_ms_ = 64; |
479 samples_per_ms_ = 32; | 485 samples_per_ms_ = 32; |
480 break; | 486 break; |
481 case kDecoderPCM16Bswb48kHz: | 487 case NetEqDecoder::kDecoderPCM16Bswb48kHz: |
482 bytes_per_ms_ = 96; | 488 bytes_per_ms_ = 96; |
483 samples_per_ms_ = 48; | 489 samples_per_ms_ = 48; |
484 break; | 490 break; |
485 case kDecoderPCM16B_2ch: | 491 case NetEqDecoder::kDecoderPCM16B_2ch: |
486 bytes_per_ms_ = 2 * 16; | 492 bytes_per_ms_ = 2 * 16; |
487 samples_per_ms_ = 8; | 493 samples_per_ms_ = 8; |
488 break; | 494 break; |
489 case kDecoderPCM16Bwb_2ch: | 495 case NetEqDecoder::kDecoderPCM16Bwb_2ch: |
490 bytes_per_ms_ = 2 * 32; | 496 bytes_per_ms_ = 2 * 32; |
491 samples_per_ms_ = 16; | 497 samples_per_ms_ = 16; |
492 break; | 498 break; |
493 case kDecoderPCM16Bswb32kHz_2ch: | 499 case NetEqDecoder::kDecoderPCM16Bswb32kHz_2ch: |
494 bytes_per_ms_ = 2 * 64; | 500 bytes_per_ms_ = 2 * 64; |
495 samples_per_ms_ = 32; | 501 samples_per_ms_ = 32; |
496 break; | 502 break; |
497 case kDecoderPCM16Bswb48kHz_2ch: | 503 case NetEqDecoder::kDecoderPCM16Bswb48kHz_2ch: |
498 bytes_per_ms_ = 2 * 96; | 504 bytes_per_ms_ = 2 * 96; |
499 samples_per_ms_ = 48; | 505 samples_per_ms_ = 48; |
500 break; | 506 break; |
501 case kDecoderPCM16B_5ch: | 507 case NetEqDecoder::kDecoderPCM16B_5ch: |
502 bytes_per_ms_ = 5 * 16; | 508 bytes_per_ms_ = 5 * 16; |
503 samples_per_ms_ = 8; | 509 samples_per_ms_ = 8; |
504 break; | 510 break; |
505 default: | 511 default: |
506 assert(false); | 512 assert(false); |
507 break; | 513 break; |
508 } | 514 } |
509 } | 515 } |
510 size_t bytes_per_ms_; | 516 size_t bytes_per_ms_; |
511 int samples_per_ms_; | 517 int samples_per_ms_; |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
562 delete (*it); | 568 delete (*it); |
563 it = packet_list.erase(it); | 569 it = packet_list.erase(it); |
564 ++i; | 570 ++i; |
565 } | 571 } |
566 | 572 |
567 // The destructor is called when decoder_database goes out of scope. | 573 // The destructor is called when decoder_database goes out of scope. |
568 EXPECT_CALL(decoder_database, Die()); | 574 EXPECT_CALL(decoder_database, Die()); |
569 } | 575 } |
570 | 576 |
571 INSTANTIATE_TEST_CASE_P( | 577 INSTANTIATE_TEST_CASE_P( |
572 PayloadSplitter, SplitBySamplesTest, | 578 PayloadSplitter, |
573 ::testing::Values(kDecoderPCMu, kDecoderPCMa, kDecoderPCMu_2ch, | 579 SplitBySamplesTest, |
574 kDecoderPCMa_2ch, kDecoderG722, kDecoderPCM16B, | 580 ::testing::Values(NetEqDecoder::kDecoderPCMu, |
575 kDecoderPCM16Bwb, kDecoderPCM16Bswb32kHz, | 581 NetEqDecoder::kDecoderPCMa, |
576 kDecoderPCM16Bswb48kHz, kDecoderPCM16B_2ch, | 582 NetEqDecoder::kDecoderPCMu_2ch, |
577 kDecoderPCM16Bwb_2ch, kDecoderPCM16Bswb32kHz_2ch, | 583 NetEqDecoder::kDecoderPCMa_2ch, |
578 kDecoderPCM16Bswb48kHz_2ch, kDecoderPCM16B_5ch)); | 584 NetEqDecoder::kDecoderG722, |
579 | 585 NetEqDecoder::kDecoderPCM16B, |
| 586 NetEqDecoder::kDecoderPCM16Bwb, |
| 587 NetEqDecoder::kDecoderPCM16Bswb32kHz, |
| 588 NetEqDecoder::kDecoderPCM16Bswb48kHz, |
| 589 NetEqDecoder::kDecoderPCM16B_2ch, |
| 590 NetEqDecoder::kDecoderPCM16Bwb_2ch, |
| 591 NetEqDecoder::kDecoderPCM16Bswb32kHz_2ch, |
| 592 NetEqDecoder::kDecoderPCM16Bswb48kHz_2ch, |
| 593 NetEqDecoder::kDecoderPCM16B_5ch)); |
580 | 594 |
581 class SplitIlbcTest : public ::testing::TestWithParam<std::pair<int, int> > { | 595 class SplitIlbcTest : public ::testing::TestWithParam<std::pair<int, int> > { |
582 protected: | 596 protected: |
583 virtual void SetUp() { | 597 virtual void SetUp() { |
584 const std::pair<int, int> parameters = GetParam(); | 598 const std::pair<int, int> parameters = GetParam(); |
585 num_frames_ = parameters.first; | 599 num_frames_ = parameters.first; |
586 frame_length_ms_ = parameters.second; | 600 frame_length_ms_ = parameters.second; |
587 frame_length_bytes_ = (frame_length_ms_ == 20) ? 38 : 50; | 601 frame_length_bytes_ = (frame_length_ms_ == 20) ? 38 : 50; |
588 } | 602 } |
589 size_t num_frames_; | 603 size_t num_frames_; |
(...skipping 12 matching lines...) Expand all Loading... |
602 for (size_t i = 0; i < packet->payload_length; ++i) { | 616 for (size_t i = 0; i < packet->payload_length; ++i) { |
603 packet->payload[i] = static_cast<uint8_t>(i); | 617 packet->payload[i] = static_cast<uint8_t>(i); |
604 } | 618 } |
605 packet_list.push_back(packet); | 619 packet_list.push_back(packet); |
606 | 620 |
607 MockDecoderDatabase decoder_database; | 621 MockDecoderDatabase decoder_database; |
608 // Tell the mock decoder database to return DecoderInfo structs with different | 622 // Tell the mock decoder database to return DecoderInfo structs with different |
609 // codec types. | 623 // codec types. |
610 // Use scoped pointers to avoid having to delete them later. | 624 // Use scoped pointers to avoid having to delete them later. |
611 rtc::scoped_ptr<DecoderDatabase::DecoderInfo> info( | 625 rtc::scoped_ptr<DecoderDatabase::DecoderInfo> info( |
612 new DecoderDatabase::DecoderInfo(kDecoderILBC, 8000, NULL, false)); | 626 new DecoderDatabase::DecoderInfo(NetEqDecoder::kDecoderILBC, 8000, NULL, |
| 627 false)); |
613 EXPECT_CALL(decoder_database, GetDecoderInfo(kPayloadType)) | 628 EXPECT_CALL(decoder_database, GetDecoderInfo(kPayloadType)) |
614 .WillRepeatedly(Return(info.get())); | 629 .WillRepeatedly(Return(info.get())); |
615 | 630 |
616 PayloadSplitter splitter; | 631 PayloadSplitter splitter; |
617 EXPECT_EQ(0, splitter.SplitAudio(&packet_list, decoder_database)); | 632 EXPECT_EQ(0, splitter.SplitAudio(&packet_list, decoder_database)); |
618 EXPECT_EQ(num_frames_, packet_list.size()); | 633 EXPECT_EQ(num_frames_, packet_list.size()); |
619 | 634 |
620 PacketList::iterator it = packet_list.begin(); | 635 PacketList::iterator it = packet_list.begin(); |
621 int frame_num = 0; | 636 int frame_num = 0; |
622 uint8_t payload_value = 0; | 637 uint8_t payload_value = 0; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
665 // Test too large payload size. | 680 // Test too large payload size. |
666 TEST(IlbcPayloadSplitter, TooLargePayload) { | 681 TEST(IlbcPayloadSplitter, TooLargePayload) { |
667 PacketList packet_list; | 682 PacketList packet_list; |
668 static const uint8_t kPayloadType = 17; // Just a random number. | 683 static const uint8_t kPayloadType = 17; // Just a random number. |
669 size_t kPayloadLengthBytes = 950; | 684 size_t kPayloadLengthBytes = 950; |
670 Packet* packet = CreatePacket(kPayloadType, kPayloadLengthBytes, 0); | 685 Packet* packet = CreatePacket(kPayloadType, kPayloadLengthBytes, 0); |
671 packet_list.push_back(packet); | 686 packet_list.push_back(packet); |
672 | 687 |
673 MockDecoderDatabase decoder_database; | 688 MockDecoderDatabase decoder_database; |
674 rtc::scoped_ptr<DecoderDatabase::DecoderInfo> info( | 689 rtc::scoped_ptr<DecoderDatabase::DecoderInfo> info( |
675 new DecoderDatabase::DecoderInfo(kDecoderILBC, 8000, NULL, false)); | 690 new DecoderDatabase::DecoderInfo(NetEqDecoder::kDecoderILBC, 8000, NULL, |
| 691 false)); |
676 EXPECT_CALL(decoder_database, GetDecoderInfo(kPayloadType)) | 692 EXPECT_CALL(decoder_database, GetDecoderInfo(kPayloadType)) |
677 .WillRepeatedly(Return(info.get())); | 693 .WillRepeatedly(Return(info.get())); |
678 | 694 |
679 PayloadSplitter splitter; | 695 PayloadSplitter splitter; |
680 EXPECT_EQ(PayloadSplitter::kTooLargePayload, | 696 EXPECT_EQ(PayloadSplitter::kTooLargePayload, |
681 splitter.SplitAudio(&packet_list, decoder_database)); | 697 splitter.SplitAudio(&packet_list, decoder_database)); |
682 EXPECT_EQ(1u, packet_list.size()); | 698 EXPECT_EQ(1u, packet_list.size()); |
683 | 699 |
684 // Delete the packets and payloads to avoid having the test leak memory. | 700 // Delete the packets and payloads to avoid having the test leak memory. |
685 PacketList::iterator it = packet_list.begin(); | 701 PacketList::iterator it = packet_list.begin(); |
(...skipping 10 matching lines...) Expand all Loading... |
696 // Payload not an integer number of frames. | 712 // Payload not an integer number of frames. |
697 TEST(IlbcPayloadSplitter, UnevenPayload) { | 713 TEST(IlbcPayloadSplitter, UnevenPayload) { |
698 PacketList packet_list; | 714 PacketList packet_list; |
699 static const uint8_t kPayloadType = 17; // Just a random number. | 715 static const uint8_t kPayloadType = 17; // Just a random number. |
700 size_t kPayloadLengthBytes = 39; // Not an even number of frames. | 716 size_t kPayloadLengthBytes = 39; // Not an even number of frames. |
701 Packet* packet = CreatePacket(kPayloadType, kPayloadLengthBytes, 0); | 717 Packet* packet = CreatePacket(kPayloadType, kPayloadLengthBytes, 0); |
702 packet_list.push_back(packet); | 718 packet_list.push_back(packet); |
703 | 719 |
704 MockDecoderDatabase decoder_database; | 720 MockDecoderDatabase decoder_database; |
705 rtc::scoped_ptr<DecoderDatabase::DecoderInfo> info( | 721 rtc::scoped_ptr<DecoderDatabase::DecoderInfo> info( |
706 new DecoderDatabase::DecoderInfo(kDecoderILBC, 8000, NULL, false)); | 722 new DecoderDatabase::DecoderInfo(NetEqDecoder::kDecoderILBC, 8000, NULL, |
| 723 false)); |
707 EXPECT_CALL(decoder_database, GetDecoderInfo(kPayloadType)) | 724 EXPECT_CALL(decoder_database, GetDecoderInfo(kPayloadType)) |
708 .WillRepeatedly(Return(info.get())); | 725 .WillRepeatedly(Return(info.get())); |
709 | 726 |
710 PayloadSplitter splitter; | 727 PayloadSplitter splitter; |
711 EXPECT_EQ(PayloadSplitter::kFrameSplitError, | 728 EXPECT_EQ(PayloadSplitter::kFrameSplitError, |
712 splitter.SplitAudio(&packet_list, decoder_database)); | 729 splitter.SplitAudio(&packet_list, decoder_database)); |
713 EXPECT_EQ(1u, packet_list.size()); | 730 EXPECT_EQ(1u, packet_list.size()); |
714 | 731 |
715 // Delete the packets and payloads to avoid having the test leak memory. | 732 // Delete the packets and payloads to avoid having the test leak memory. |
716 PacketList::iterator it = packet_list.begin(); | 733 PacketList::iterator it = packet_list.begin(); |
717 while (it != packet_list.end()) { | 734 while (it != packet_list.end()) { |
718 delete [] (*it)->payload; | 735 delete [] (*it)->payload; |
719 delete (*it); | 736 delete (*it); |
720 it = packet_list.erase(it); | 737 it = packet_list.erase(it); |
721 } | 738 } |
722 | 739 |
723 // The destructor is called when decoder_database goes out of scope. | 740 // The destructor is called when decoder_database goes out of scope. |
724 EXPECT_CALL(decoder_database, Die()); | 741 EXPECT_CALL(decoder_database, Die()); |
725 } | 742 } |
726 | 743 |
727 TEST(FecPayloadSplitter, MixedPayload) { | 744 TEST(FecPayloadSplitter, MixedPayload) { |
728 PacketList packet_list; | 745 PacketList packet_list; |
729 DecoderDatabase decoder_database; | 746 DecoderDatabase decoder_database; |
730 | 747 |
731 decoder_database.RegisterPayload(0, kDecoderOpus); | 748 decoder_database.RegisterPayload(0, NetEqDecoder::kDecoderOpus); |
732 decoder_database.RegisterPayload(1, kDecoderPCMu); | 749 decoder_database.RegisterPayload(1, NetEqDecoder::kDecoderPCMu); |
733 | 750 |
734 Packet* packet = CreatePacket(0, 10, 0xFF, true); | 751 Packet* packet = CreatePacket(0, 10, 0xFF, true); |
735 packet_list.push_back(packet); | 752 packet_list.push_back(packet); |
736 | 753 |
737 packet = CreatePacket(0, 10, 0); // Non-FEC Opus payload. | 754 packet = CreatePacket(0, 10, 0); // Non-FEC Opus payload. |
738 packet_list.push_back(packet); | 755 packet_list.push_back(packet); |
739 | 756 |
740 packet = CreatePacket(1, 10, 0); // Non-Opus payload. | 757 packet = CreatePacket(1, 10, 0); // Non-Opus payload. |
741 packet_list.push_back(packet); | 758 packet_list.push_back(packet); |
742 | 759 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
778 delete [] packet->payload; | 795 delete [] packet->payload; |
779 delete packet; | 796 delete packet; |
780 } | 797 } |
781 | 798 |
782 TEST(FecPayloadSplitter, EmbedFecInRed) { | 799 TEST(FecPayloadSplitter, EmbedFecInRed) { |
783 PacketList packet_list; | 800 PacketList packet_list; |
784 DecoderDatabase decoder_database; | 801 DecoderDatabase decoder_database; |
785 | 802 |
786 const int kTimestampOffset = 20 * 48; // 20 ms * 48 kHz. | 803 const int kTimestampOffset = 20 * 48; // 20 ms * 48 kHz. |
787 uint8_t payload_types[] = {0, 0}; | 804 uint8_t payload_types[] = {0, 0}; |
788 decoder_database.RegisterPayload(0, kDecoderOpus); | 805 decoder_database.RegisterPayload(0, NetEqDecoder::kDecoderOpus); |
789 Packet* packet = CreateRedPayload(2, payload_types, kTimestampOffset, true); | 806 Packet* packet = CreateRedPayload(2, payload_types, kTimestampOffset, true); |
790 packet_list.push_back(packet); | 807 packet_list.push_back(packet); |
791 | 808 |
792 PayloadSplitter splitter; | 809 PayloadSplitter splitter; |
793 EXPECT_EQ(PayloadSplitter::kOK, | 810 EXPECT_EQ(PayloadSplitter::kOK, |
794 splitter.SplitRed(&packet_list)); | 811 splitter.SplitRed(&packet_list)); |
795 EXPECT_EQ(PayloadSplitter::kOK, | 812 EXPECT_EQ(PayloadSplitter::kOK, |
796 splitter.SplitFec(&packet_list, &decoder_database)); | 813 splitter.SplitFec(&packet_list, &decoder_database)); |
797 | 814 |
798 EXPECT_EQ(4u, packet_list.size()); | 815 EXPECT_EQ(4u, packet_list.size()); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
836 EXPECT_EQ(kBaseTimestamp - kTimestampOffset, packet->header.timestamp); | 853 EXPECT_EQ(kBaseTimestamp - kTimestampOffset, packet->header.timestamp); |
837 EXPECT_EQ(kPayloadLength, packet->payload_length); | 854 EXPECT_EQ(kPayloadLength, packet->payload_length); |
838 EXPECT_TRUE(packet->primary); | 855 EXPECT_TRUE(packet->primary); |
839 EXPECT_EQ(packet->payload[3], 0); | 856 EXPECT_EQ(packet->payload[3], 0); |
840 delete [] packet->payload; | 857 delete [] packet->payload; |
841 delete packet; | 858 delete packet; |
842 packet_list.pop_front(); | 859 packet_list.pop_front(); |
843 } | 860 } |
844 | 861 |
845 } // namespace webrtc | 862 } // namespace webrtc |
OLD | NEW |