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