| 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 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 459 &decoder_, NetEqDecoder::kDecoderPCM16B, | 459 &decoder_, NetEqDecoder::kDecoderPCM16B, |
| 460 "dummy name", kPayloadType, kSampleRateHz)); | 460 "dummy name", kPayloadType, kSampleRateHz)); |
| 461 | 461 |
| 462 // Insert one packet. | 462 // Insert one packet. |
| 463 EXPECT_EQ(NetEq::kOK, | 463 EXPECT_EQ(NetEq::kOK, |
| 464 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 464 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); |
| 465 | 465 |
| 466 // Pull audio once. | 466 // Pull audio once. |
| 467 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); | 467 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); |
| 468 AudioFrame output; | 468 AudioFrame output; |
| 469 NetEqOutputType type; | 469 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); |
| 470 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &type)); | |
| 471 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); | 470 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); |
| 472 EXPECT_EQ(1u, output.num_channels_); | 471 EXPECT_EQ(1u, output.num_channels_); |
| 473 EXPECT_EQ(kOutputNormal, type); | 472 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_); |
| 474 | 473 |
| 475 // Start with a simple check that the fake decoder is behaving as expected. | 474 // Start with a simple check that the fake decoder is behaving as expected. |
| 476 EXPECT_EQ(kPayloadLengthSamples, | 475 EXPECT_EQ(kPayloadLengthSamples, |
| 477 static_cast<size_t>(decoder_.next_value() - 1)); | 476 static_cast<size_t>(decoder_.next_value() - 1)); |
| 478 | 477 |
| 479 // The value of the last of the output samples is the same as the number of | 478 // The value of the last of the output samples is the same as the number of |
| 480 // samples played from the decoded packet. Thus, this number + the RTP | 479 // samples played from the decoded packet. Thus, this number + the RTP |
| 481 // timestamp should match the playout timestamp. | 480 // timestamp should match the playout timestamp. |
| 482 uint32_t timestamp = 0; | 481 uint32_t timestamp = 0; |
| 483 EXPECT_TRUE(neteq_->GetPlayoutTimestamp(×tamp)); | 482 EXPECT_TRUE(neteq_->GetPlayoutTimestamp(×tamp)); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 &mock_decoder, NetEqDecoder::kDecoderPCM16B, | 534 &mock_decoder, NetEqDecoder::kDecoderPCM16B, |
| 536 "dummy name", kPayloadType, kSampleRateHz)); | 535 "dummy name", kPayloadType, kSampleRateHz)); |
| 537 | 536 |
| 538 // Insert one packet. | 537 // Insert one packet. |
| 539 EXPECT_EQ(NetEq::kOK, | 538 EXPECT_EQ(NetEq::kOK, |
| 540 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 539 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); |
| 541 | 540 |
| 542 // Pull audio once. | 541 // Pull audio once. |
| 543 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); | 542 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); |
| 544 AudioFrame output; | 543 AudioFrame output; |
| 545 NetEqOutputType type; | 544 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); |
| 546 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &type)); | |
| 547 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); | 545 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); |
| 548 EXPECT_EQ(1u, output.num_channels_); | 546 EXPECT_EQ(1u, output.num_channels_); |
| 549 EXPECT_EQ(kOutputNormal, type); | 547 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_); |
| 550 | 548 |
| 551 // Insert two more packets. The first one is out of order, and is already too | 549 // Insert two more packets. The first one is out of order, and is already too |
| 552 // old, the second one is the expected next packet. | 550 // old, the second one is the expected next packet. |
| 553 rtp_header.header.sequenceNumber -= 1; | 551 rtp_header.header.sequenceNumber -= 1; |
| 554 rtp_header.header.timestamp -= kPayloadLengthSamples; | 552 rtp_header.header.timestamp -= kPayloadLengthSamples; |
| 555 payload[0] = 1; | 553 payload[0] = 1; |
| 556 EXPECT_EQ(NetEq::kOK, | 554 EXPECT_EQ(NetEq::kOK, |
| 557 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 555 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); |
| 558 rtp_header.header.sequenceNumber += 2; | 556 rtp_header.header.sequenceNumber += 2; |
| 559 rtp_header.header.timestamp += 2 * kPayloadLengthSamples; | 557 rtp_header.header.timestamp += 2 * kPayloadLengthSamples; |
| 560 payload[0] = 2; | 558 payload[0] = 2; |
| 561 EXPECT_EQ(NetEq::kOK, | 559 EXPECT_EQ(NetEq::kOK, |
| 562 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 560 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); |
| 563 | 561 |
| 564 // Expect only the second packet to be decoded (the one with "2" as the first | 562 // Expect only the second packet to be decoded (the one with "2" as the first |
| 565 // payload byte). | 563 // payload byte). |
| 566 EXPECT_CALL(mock_decoder, DecodeInternal(Pointee(2), kPayloadLengthBytes, | 564 EXPECT_CALL(mock_decoder, DecodeInternal(Pointee(2), kPayloadLengthBytes, |
| 567 kSampleRateHz, _, _)) | 565 kSampleRateHz, _, _)) |
| 568 .WillOnce(DoAll(SetArrayArgument<3>(dummy_output, | 566 .WillOnce(DoAll(SetArrayArgument<3>(dummy_output, |
| 569 dummy_output + kPayloadLengthSamples), | 567 dummy_output + kPayloadLengthSamples), |
| 570 SetArgPointee<4>(AudioDecoder::kSpeech), | 568 SetArgPointee<4>(AudioDecoder::kSpeech), |
| 571 Return(kPayloadLengthSamples))); | 569 Return(kPayloadLengthSamples))); |
| 572 | 570 |
| 573 // Pull audio once. | 571 // Pull audio once. |
| 574 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &type)); | 572 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); |
| 575 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); | 573 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); |
| 576 EXPECT_EQ(1u, output.num_channels_); | 574 EXPECT_EQ(1u, output.num_channels_); |
| 577 EXPECT_EQ(kOutputNormal, type); | 575 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_); |
| 578 | 576 |
| 579 // Now check the packet buffer, and make sure it is empty, since the | 577 // Now check the packet buffer, and make sure it is empty, since the |
| 580 // out-of-order packet should have been discarded. | 578 // out-of-order packet should have been discarded. |
| 581 EXPECT_TRUE(packet_buffer_->Empty()); | 579 EXPECT_TRUE(packet_buffer_->Empty()); |
| 582 | 580 |
| 583 EXPECT_CALL(mock_decoder, Die()); | 581 EXPECT_CALL(mock_decoder, Die()); |
| 584 } | 582 } |
| 585 | 583 |
| 586 // This test verifies that NetEq can handle the situation where the first | 584 // This test verifies that NetEq can handle the situation where the first |
| 587 // incoming packet is rejected. | 585 // incoming packet is rejected. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 604 | 602 |
| 605 // Insert one packet. Note that we have not registered any payload type, so | 603 // Insert one packet. Note that we have not registered any payload type, so |
| 606 // this packet will be rejected. | 604 // this packet will be rejected. |
| 607 EXPECT_EQ(NetEq::kFail, | 605 EXPECT_EQ(NetEq::kFail, |
| 608 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 606 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); |
| 609 EXPECT_EQ(NetEq::kUnknownRtpPayloadType, neteq_->LastError()); | 607 EXPECT_EQ(NetEq::kUnknownRtpPayloadType, neteq_->LastError()); |
| 610 | 608 |
| 611 // Pull audio once. | 609 // Pull audio once. |
| 612 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); | 610 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); |
| 613 AudioFrame output; | 611 AudioFrame output; |
| 614 NetEqOutputType type; | 612 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); |
| 615 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &type)); | |
| 616 ASSERT_LE(output.samples_per_channel_, kMaxOutputSize); | 613 ASSERT_LE(output.samples_per_channel_, kMaxOutputSize); |
| 617 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); | 614 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); |
| 618 EXPECT_EQ(1u, output.num_channels_); | 615 EXPECT_EQ(1u, output.num_channels_); |
| 619 EXPECT_EQ(kOutputPLC, type); | 616 EXPECT_EQ(AudioFrame::kPLC, output.speech_type_); |
| 620 | 617 |
| 621 // Register the payload type. | 618 // Register the payload type. |
| 622 EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType( | 619 EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType( |
| 623 NetEqDecoder::kDecoderPCM16B, "", kPayloadType)); | 620 NetEqDecoder::kDecoderPCM16B, "", kPayloadType)); |
| 624 | 621 |
| 625 // Insert 10 packets. | 622 // Insert 10 packets. |
| 626 for (size_t i = 0; i < 10; ++i) { | 623 for (size_t i = 0; i < 10; ++i) { |
| 627 rtp_header.header.sequenceNumber++; | 624 rtp_header.header.sequenceNumber++; |
| 628 rtp_header.header.timestamp += kPayloadLengthSamples; | 625 rtp_header.header.timestamp += kPayloadLengthSamples; |
| 629 EXPECT_EQ(NetEq::kOK, | 626 EXPECT_EQ(NetEq::kOK, |
| 630 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 627 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); |
| 631 EXPECT_EQ(i + 1, packet_buffer_->NumPacketsInBuffer()); | 628 EXPECT_EQ(i + 1, packet_buffer_->NumPacketsInBuffer()); |
| 632 } | 629 } |
| 633 | 630 |
| 634 // Pull audio repeatedly and make sure we get normal output, that is not PLC. | 631 // Pull audio repeatedly and make sure we get normal output, that is not PLC. |
| 635 for (size_t i = 0; i < 3; ++i) { | 632 for (size_t i = 0; i < 3; ++i) { |
| 636 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &type)); | 633 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); |
| 637 ASSERT_LE(output.samples_per_channel_, kMaxOutputSize); | 634 ASSERT_LE(output.samples_per_channel_, kMaxOutputSize); |
| 638 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); | 635 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); |
| 639 EXPECT_EQ(1u, output.num_channels_); | 636 EXPECT_EQ(1u, output.num_channels_); |
| 640 EXPECT_EQ(kOutputNormal, type) | 637 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_) |
| 641 << "NetEq did not decode the packets as expected."; | 638 << "NetEq did not decode the packets as expected."; |
| 642 } | 639 } |
| 643 } | 640 } |
| 644 | 641 |
| 645 // This test verifies that NetEq can handle comfort noise and enters/quits codec | 642 // This test verifies that NetEq can handle comfort noise and enters/quits codec |
| 646 // internal CNG mode properly. | 643 // internal CNG mode properly. |
| 647 TEST_F(NetEqImplTest, CodecInternalCng) { | 644 TEST_F(NetEqImplTest, CodecInternalCng) { |
| 648 UseNoMocks(); | 645 UseNoMocks(); |
| 649 CreateInstance(); | 646 CreateInstance(); |
| 650 | 647 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 712 payload[0] = 1; | 709 payload[0] = 1; |
| 713 rtp_header.header.sequenceNumber++; | 710 rtp_header.header.sequenceNumber++; |
| 714 rtp_header.header.timestamp += kPayloadLengthSamples; | 711 rtp_header.header.timestamp += kPayloadLengthSamples; |
| 715 EXPECT_EQ(NetEq::kOK, | 712 EXPECT_EQ(NetEq::kOK, |
| 716 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 713 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); |
| 717 | 714 |
| 718 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateKhz); | 715 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateKhz); |
| 719 AudioFrame output; | 716 AudioFrame output; |
| 720 uint32_t timestamp; | 717 uint32_t timestamp; |
| 721 uint32_t last_timestamp; | 718 uint32_t last_timestamp; |
| 722 NetEqOutputType type; | 719 AudioFrame::SpeechType expected_type[8] = { |
| 723 NetEqOutputType expected_type[8] = { | 720 AudioFrame::kNormalSpeech, AudioFrame::kNormalSpeech, |
| 724 kOutputNormal, kOutputNormal, | 721 AudioFrame::kCNG, AudioFrame::kCNG, |
| 725 kOutputCNG, kOutputCNG, | 722 AudioFrame::kCNG, AudioFrame::kCNG, |
| 726 kOutputCNG, kOutputCNG, | 723 AudioFrame::kNormalSpeech, AudioFrame::kNormalSpeech |
| 727 kOutputNormal, kOutputNormal | |
| 728 }; | 724 }; |
| 729 int expected_timestamp_increment[8] = { | 725 int expected_timestamp_increment[8] = { |
| 730 -1, // will not be used. | 726 -1, // will not be used. |
| 731 10 * kSampleRateKhz, | 727 10 * kSampleRateKhz, |
| 732 0, 0, // timestamp does not increase during CNG mode. | 728 0, 0, // timestamp does not increase during CNG mode. |
| 733 0, 0, | 729 0, 0, |
| 734 50 * kSampleRateKhz, 10 * kSampleRateKhz | 730 50 * kSampleRateKhz, 10 * kSampleRateKhz |
| 735 }; | 731 }; |
| 736 | 732 |
| 737 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &type)); | 733 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); |
| 738 EXPECT_TRUE(neteq_->GetPlayoutTimestamp(&last_timestamp)); | 734 EXPECT_TRUE(neteq_->GetPlayoutTimestamp(&last_timestamp)); |
| 739 | 735 |
| 740 for (size_t i = 1; i < 6; ++i) { | 736 for (size_t i = 1; i < 6; ++i) { |
| 741 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); | 737 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); |
| 742 EXPECT_EQ(1u, output.num_channels_); | 738 EXPECT_EQ(1u, output.num_channels_); |
| 743 EXPECT_EQ(expected_type[i - 1], type); | 739 EXPECT_EQ(expected_type[i - 1], output.speech_type_); |
| 744 EXPECT_TRUE(neteq_->GetPlayoutTimestamp(×tamp)); | 740 EXPECT_TRUE(neteq_->GetPlayoutTimestamp(×tamp)); |
| 745 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &type)); | 741 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); |
| 746 EXPECT_TRUE(neteq_->GetPlayoutTimestamp(×tamp)); | 742 EXPECT_TRUE(neteq_->GetPlayoutTimestamp(×tamp)); |
| 747 EXPECT_EQ(timestamp, last_timestamp + expected_timestamp_increment[i]); | 743 EXPECT_EQ(timestamp, last_timestamp + expected_timestamp_increment[i]); |
| 748 last_timestamp = timestamp; | 744 last_timestamp = timestamp; |
| 749 } | 745 } |
| 750 | 746 |
| 751 // Insert third packet, which leaves a gap from last packet. | 747 // Insert third packet, which leaves a gap from last packet. |
| 752 payload[0] = 2; | 748 payload[0] = 2; |
| 753 rtp_header.header.sequenceNumber += 2; | 749 rtp_header.header.sequenceNumber += 2; |
| 754 rtp_header.header.timestamp += 2 * kPayloadLengthSamples; | 750 rtp_header.header.timestamp += 2 * kPayloadLengthSamples; |
| 755 EXPECT_EQ(NetEq::kOK, | 751 EXPECT_EQ(NetEq::kOK, |
| 756 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 752 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); |
| 757 | 753 |
| 758 for (size_t i = 6; i < 8; ++i) { | 754 for (size_t i = 6; i < 8; ++i) { |
| 759 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); | 755 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); |
| 760 EXPECT_EQ(1u, output.num_channels_); | 756 EXPECT_EQ(1u, output.num_channels_); |
| 761 EXPECT_EQ(expected_type[i - 1], type); | 757 EXPECT_EQ(expected_type[i - 1], output.speech_type_); |
| 762 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &type)); | 758 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); |
| 763 EXPECT_TRUE(neteq_->GetPlayoutTimestamp(×tamp)); | 759 EXPECT_TRUE(neteq_->GetPlayoutTimestamp(×tamp)); |
| 764 EXPECT_EQ(timestamp, last_timestamp + expected_timestamp_increment[i]); | 760 EXPECT_EQ(timestamp, last_timestamp + expected_timestamp_increment[i]); |
| 765 last_timestamp = timestamp; | 761 last_timestamp = timestamp; |
| 766 } | 762 } |
| 767 | 763 |
| 768 // Now check the packet buffer, and make sure it is empty. | 764 // Now check the packet buffer, and make sure it is empty. |
| 769 EXPECT_TRUE(packet_buffer_->Empty()); | 765 EXPECT_TRUE(packet_buffer_->Empty()); |
| 770 | 766 |
| 771 EXPECT_CALL(mock_decoder, Die()); | 767 EXPECT_CALL(mock_decoder, Die()); |
| 772 } | 768 } |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 841 // Insert another packet. | 837 // Insert another packet. |
| 842 payload[0] = kSecondPayloadValue; // This will make Decode() successful. | 838 payload[0] = kSecondPayloadValue; // This will make Decode() successful. |
| 843 rtp_header.header.sequenceNumber++; | 839 rtp_header.header.sequenceNumber++; |
| 844 // The second timestamp needs to be at least 30 ms after the first to make | 840 // The second timestamp needs to be at least 30 ms after the first to make |
| 845 // the second packet get decoded. | 841 // the second packet get decoded. |
| 846 rtp_header.header.timestamp += 3 * kPayloadLengthSamples; | 842 rtp_header.header.timestamp += 3 * kPayloadLengthSamples; |
| 847 EXPECT_EQ(NetEq::kOK, | 843 EXPECT_EQ(NetEq::kOK, |
| 848 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 844 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); |
| 849 | 845 |
| 850 AudioFrame output; | 846 AudioFrame output; |
| 851 NetEqOutputType type; | |
| 852 // First call to GetAudio will try to decode the "faulty" packet. | 847 // First call to GetAudio will try to decode the "faulty" packet. |
| 853 // Expect kFail return value... | 848 // Expect kFail return value... |
| 854 EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output, &type)); | 849 EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output)); |
| 855 // ... and kOtherDecoderError error code. | 850 // ... and kOtherDecoderError error code. |
| 856 EXPECT_EQ(NetEq::kOtherDecoderError, neteq_->LastError()); | 851 EXPECT_EQ(NetEq::kOtherDecoderError, neteq_->LastError()); |
| 857 // Output size and number of channels should be correct. | 852 // Output size and number of channels should be correct. |
| 858 const size_t kExpectedOutputSize = 10 * (kSampleRateHz / 1000) * kChannels; | 853 const size_t kExpectedOutputSize = 10 * (kSampleRateHz / 1000) * kChannels; |
| 859 EXPECT_EQ(kExpectedOutputSize, output.samples_per_channel_ * kChannels); | 854 EXPECT_EQ(kExpectedOutputSize, output.samples_per_channel_ * kChannels); |
| 860 EXPECT_EQ(kChannels, output.num_channels_); | 855 EXPECT_EQ(kChannels, output.num_channels_); |
| 861 | 856 |
| 862 // Second call to GetAudio will decode the packet that is ok. No errors are | 857 // Second call to GetAudio will decode the packet that is ok. No errors are |
| 863 // expected. | 858 // expected. |
| 864 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &type)); | 859 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); |
| 865 EXPECT_EQ(kExpectedOutputSize, output.samples_per_channel_ * kChannels); | 860 EXPECT_EQ(kExpectedOutputSize, output.samples_per_channel_ * kChannels); |
| 866 EXPECT_EQ(kChannels, output.num_channels_); | 861 EXPECT_EQ(kChannels, output.num_channels_); |
| 867 } | 862 } |
| 868 | 863 |
| 869 // This test inserts packets until the buffer is flushed. After that, it asks | 864 // This test inserts packets until the buffer is flushed. After that, it asks |
| 870 // NetEq for the network statistics. The purpose of the test is to make sure | 865 // NetEq for the network statistics. The purpose of the test is to make sure |
| 871 // that even though the buffer size increment is negative (which it becomes when | 866 // that even though the buffer size increment is negative (which it becomes when |
| 872 // the packet causing a flush is inserted), the packet length stored in the | 867 // the packet causing a flush is inserted), the packet length stored in the |
| 873 // decision logic remains valid. | 868 // decision logic remains valid. |
| 874 TEST_F(NetEqImplTest, FloodBufferAndGetNetworkStats) { | 869 TEST_F(NetEqImplTest, FloodBufferAndGetNetworkStats) { |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 947 | 942 |
| 948 // Insert one packet. | 943 // Insert one packet. |
| 949 EXPECT_EQ(NetEq::kOK, | 944 EXPECT_EQ(NetEq::kOK, |
| 950 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 945 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); |
| 951 | 946 |
| 952 EXPECT_EQ(5u, neteq_->sync_buffer_for_test()->FutureLength()); | 947 EXPECT_EQ(5u, neteq_->sync_buffer_for_test()->FutureLength()); |
| 953 | 948 |
| 954 // Pull audio once. | 949 // Pull audio once. |
| 955 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); | 950 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); |
| 956 AudioFrame output; | 951 AudioFrame output; |
| 957 NetEqOutputType type; | 952 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); |
| 958 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &type)); | |
| 959 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); | 953 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); |
| 960 EXPECT_EQ(1u, output.num_channels_); | 954 EXPECT_EQ(1u, output.num_channels_); |
| 961 EXPECT_EQ(kOutputNormal, type); | 955 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_); |
| 962 | 956 |
| 963 EXPECT_CALL(mock_decoder, Die()); | 957 EXPECT_CALL(mock_decoder, Die()); |
| 964 } | 958 } |
| 965 | 959 |
| 966 // This test checks the behavior of NetEq when audio decoder fails. | 960 // This test checks the behavior of NetEq when audio decoder fails. |
| 967 TEST_F(NetEqImplTest, DecodingError) { | 961 TEST_F(NetEqImplTest, DecodingError) { |
| 968 UseNoMocks(); | 962 UseNoMocks(); |
| 969 CreateInstance(); | 963 CreateInstance(); |
| 970 | 964 |
| 971 const uint8_t kPayloadType = 17; // Just an arbitrary number. | 965 const uint8_t kPayloadType = 17; // Just an arbitrary number. |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1040 for (int i = 0; i < 6; ++i) { | 1034 for (int i = 0; i < 6; ++i) { |
| 1041 rtp_header.header.sequenceNumber += 1; | 1035 rtp_header.header.sequenceNumber += 1; |
| 1042 rtp_header.header.timestamp += kFrameLengthSamples; | 1036 rtp_header.header.timestamp += kFrameLengthSamples; |
| 1043 EXPECT_EQ(NetEq::kOK, | 1037 EXPECT_EQ(NetEq::kOK, |
| 1044 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 1038 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); |
| 1045 } | 1039 } |
| 1046 | 1040 |
| 1047 // Pull audio. | 1041 // Pull audio. |
| 1048 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); | 1042 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); |
| 1049 AudioFrame output; | 1043 AudioFrame output; |
| 1050 NetEqOutputType type; | 1044 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); |
| 1051 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &type)); | |
| 1052 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); | 1045 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); |
| 1053 EXPECT_EQ(1u, output.num_channels_); | 1046 EXPECT_EQ(1u, output.num_channels_); |
| 1054 EXPECT_EQ(kOutputNormal, type); | 1047 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_); |
| 1055 | 1048 |
| 1056 // Pull audio again. Decoder fails. | 1049 // Pull audio again. Decoder fails. |
| 1057 EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output, &type)); | 1050 EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output)); |
| 1058 EXPECT_EQ(NetEq::kDecoderErrorCode, neteq_->LastError()); | 1051 EXPECT_EQ(NetEq::kDecoderErrorCode, neteq_->LastError()); |
| 1059 EXPECT_EQ(kDecoderErrorCode, neteq_->LastDecoderError()); | 1052 EXPECT_EQ(kDecoderErrorCode, neteq_->LastDecoderError()); |
| 1060 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); | 1053 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); |
| 1061 EXPECT_EQ(1u, output.num_channels_); | 1054 EXPECT_EQ(1u, output.num_channels_); |
| 1062 // TODO(minyue): should NetEq better give kOutputPLC, since it is actually an | 1055 // We are not expecting anything for output.speech_type_, since an error was |
| 1063 // expansion. | 1056 // returned. |
| 1064 EXPECT_EQ(kOutputNormal, type); | |
| 1065 | 1057 |
| 1066 // Pull audio again, should continue an expansion. | 1058 // Pull audio again, should continue an expansion. |
| 1067 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &type)); | 1059 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); |
| 1068 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); | 1060 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); |
| 1069 EXPECT_EQ(1u, output.num_channels_); | 1061 EXPECT_EQ(1u, output.num_channels_); |
| 1070 EXPECT_EQ(kOutputPLC, type); | 1062 EXPECT_EQ(AudioFrame::kPLC, output.speech_type_); |
| 1071 | 1063 |
| 1072 // Pull audio again, should behave normal. | 1064 // Pull audio again, should behave normal. |
| 1073 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &type)); | 1065 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); |
| 1074 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); | 1066 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); |
| 1075 EXPECT_EQ(1u, output.num_channels_); | 1067 EXPECT_EQ(1u, output.num_channels_); |
| 1076 EXPECT_EQ(kOutputNormal, type); | 1068 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_); |
| 1077 | 1069 |
| 1078 EXPECT_CALL(mock_decoder, Die()); | 1070 EXPECT_CALL(mock_decoder, Die()); |
| 1079 } | 1071 } |
| 1080 | 1072 |
| 1081 // This test checks the behavior of NetEq when audio decoder fails during CNG. | 1073 // This test checks the behavior of NetEq when audio decoder fails during CNG. |
| 1082 TEST_F(NetEqImplTest, DecodingErrorDuringInternalCng) { | 1074 TEST_F(NetEqImplTest, DecodingErrorDuringInternalCng) { |
| 1083 UseNoMocks(); | 1075 UseNoMocks(); |
| 1084 CreateInstance(); | 1076 CreateInstance(); |
| 1085 | 1077 |
| 1086 const uint8_t kPayloadType = 17; // Just an arbitrary number. | 1078 const uint8_t kPayloadType = 17; // Just an arbitrary number. |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1151 for (int i = 0; i < 2; ++i) { | 1143 for (int i = 0; i < 2; ++i) { |
| 1152 rtp_header.header.sequenceNumber += 1; | 1144 rtp_header.header.sequenceNumber += 1; |
| 1153 rtp_header.header.timestamp += kFrameLengthSamples; | 1145 rtp_header.header.timestamp += kFrameLengthSamples; |
| 1154 EXPECT_EQ(NetEq::kOK, | 1146 EXPECT_EQ(NetEq::kOK, |
| 1155 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 1147 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); |
| 1156 } | 1148 } |
| 1157 | 1149 |
| 1158 // Pull audio. | 1150 // Pull audio. |
| 1159 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); | 1151 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); |
| 1160 AudioFrame output; | 1152 AudioFrame output; |
| 1161 NetEqOutputType type; | 1153 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); |
| 1162 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &type)); | |
| 1163 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); | 1154 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); |
| 1164 EXPECT_EQ(1u, output.num_channels_); | 1155 EXPECT_EQ(1u, output.num_channels_); |
| 1165 EXPECT_EQ(kOutputCNG, type); | 1156 EXPECT_EQ(AudioFrame::kCNG, output.speech_type_); |
| 1166 | 1157 |
| 1167 // Pull audio again. Decoder fails. | 1158 // Pull audio again. Decoder fails. |
| 1168 EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output, &type)); | 1159 EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output)); |
| 1169 EXPECT_EQ(NetEq::kDecoderErrorCode, neteq_->LastError()); | 1160 EXPECT_EQ(NetEq::kDecoderErrorCode, neteq_->LastError()); |
| 1170 EXPECT_EQ(kDecoderErrorCode, neteq_->LastDecoderError()); | 1161 EXPECT_EQ(kDecoderErrorCode, neteq_->LastDecoderError()); |
| 1171 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); | 1162 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); |
| 1172 EXPECT_EQ(1u, output.num_channels_); | 1163 EXPECT_EQ(1u, output.num_channels_); |
| 1173 // TODO(minyue): should NetEq better give kOutputPLC, since it is actually an | 1164 // We are not expecting anything for output.speech_type_, since an error was |
| 1174 // expansion. | 1165 // returned. |
| 1175 EXPECT_EQ(kOutputCNG, type); | |
| 1176 | 1166 |
| 1177 // Pull audio again, should resume codec CNG. | 1167 // Pull audio again, should resume codec CNG. |
| 1178 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &type)); | 1168 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); |
| 1179 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); | 1169 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); |
| 1180 EXPECT_EQ(1u, output.num_channels_); | 1170 EXPECT_EQ(1u, output.num_channels_); |
| 1181 EXPECT_EQ(kOutputCNG, type); | 1171 EXPECT_EQ(AudioFrame::kCNG, output.speech_type_); |
| 1182 | 1172 |
| 1183 EXPECT_CALL(mock_decoder, Die()); | 1173 EXPECT_CALL(mock_decoder, Die()); |
| 1184 } | 1174 } |
| 1185 | 1175 |
| 1186 // Tests that the return value from last_output_sample_rate_hz() is equal to the | 1176 // Tests that the return value from last_output_sample_rate_hz() is equal to the |
| 1187 // configured inital sample rate. | 1177 // configured inital sample rate. |
| 1188 TEST_F(NetEqImplTest, InitialLastOutputSampleRate) { | 1178 TEST_F(NetEqImplTest, InitialLastOutputSampleRate) { |
| 1189 UseNoMocks(); | 1179 UseNoMocks(); |
| 1190 config_.sample_rate_hz = 48000; | 1180 config_.sample_rate_hz = 48000; |
| 1191 CreateInstance(); | 1181 CreateInstance(); |
| 1192 EXPECT_EQ(48000, neteq_->last_output_sample_rate_hz()); | 1182 EXPECT_EQ(48000, neteq_->last_output_sample_rate_hz()); |
| 1193 } | 1183 } |
| 1194 | 1184 |
| 1195 }// namespace webrtc | 1185 }// namespace webrtc |
| OLD | NEW |