Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: webrtc/modules/audio_coding/neteq/neteq_impl_unittest.cc

Issue 1965733002: NetEq: Implement muted output (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@muted-expand
Patch Set: Add new tests Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 423 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 &decoder_, NetEqDecoder::kDecoderPCM16B, 434 &decoder_, NetEqDecoder::kDecoderPCM16B,
435 "dummy name", kPayloadType, kSampleRateHz)); 435 "dummy name", kPayloadType, kSampleRateHz));
436 436
437 // Insert one packet. 437 // Insert one packet.
438 EXPECT_EQ(NetEq::kOK, 438 EXPECT_EQ(NetEq::kOK,
439 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); 439 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
440 440
441 // Pull audio once. 441 // Pull audio once.
442 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); 442 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000);
443 AudioFrame output; 443 AudioFrame output;
444 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); 444 bool muted;
445 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
446 ASSERT_FALSE(muted);
445 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); 447 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_);
446 EXPECT_EQ(1u, output.num_channels_); 448 EXPECT_EQ(1u, output.num_channels_);
447 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_); 449 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_);
448 450
449 // Start with a simple check that the fake decoder is behaving as expected. 451 // Start with a simple check that the fake decoder is behaving as expected.
450 EXPECT_EQ(kPayloadLengthSamples, 452 EXPECT_EQ(kPayloadLengthSamples,
451 static_cast<size_t>(decoder_.next_value() - 1)); 453 static_cast<size_t>(decoder_.next_value() - 1));
452 454
453 // The value of the last of the output samples is the same as the number of 455 // The value of the last of the output samples is the same as the number of
454 // samples played from the decoded packet. Thus, this number + the RTP 456 // samples played from the decoded packet. Thus, this number + the RTP
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 &mock_decoder, NetEqDecoder::kDecoderPCM16B, 513 &mock_decoder, NetEqDecoder::kDecoderPCM16B,
512 "dummy name", kPayloadType, kSampleRateHz)); 514 "dummy name", kPayloadType, kSampleRateHz));
513 515
514 // Insert one packet. 516 // Insert one packet.
515 EXPECT_EQ(NetEq::kOK, 517 EXPECT_EQ(NetEq::kOK,
516 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); 518 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
517 519
518 // Pull audio once. 520 // Pull audio once.
519 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); 521 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000);
520 AudioFrame output; 522 AudioFrame output;
521 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); 523 bool muted;
524 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
522 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); 525 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_);
523 EXPECT_EQ(1u, output.num_channels_); 526 EXPECT_EQ(1u, output.num_channels_);
524 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_); 527 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_);
525 528
526 // Insert two more packets. The first one is out of order, and is already too 529 // Insert two more packets. The first one is out of order, and is already too
527 // old, the second one is the expected next packet. 530 // old, the second one is the expected next packet.
528 rtp_header.header.sequenceNumber -= 1; 531 rtp_header.header.sequenceNumber -= 1;
529 rtp_header.header.timestamp -= kPayloadLengthSamples; 532 rtp_header.header.timestamp -= kPayloadLengthSamples;
530 payload[0] = 1; 533 payload[0] = 1;
531 EXPECT_EQ(NetEq::kOK, 534 EXPECT_EQ(NetEq::kOK,
532 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); 535 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
533 rtp_header.header.sequenceNumber += 2; 536 rtp_header.header.sequenceNumber += 2;
534 rtp_header.header.timestamp += 2 * kPayloadLengthSamples; 537 rtp_header.header.timestamp += 2 * kPayloadLengthSamples;
535 payload[0] = 2; 538 payload[0] = 2;
536 EXPECT_EQ(NetEq::kOK, 539 EXPECT_EQ(NetEq::kOK,
537 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); 540 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
538 541
539 // Expect only the second packet to be decoded (the one with "2" as the first 542 // Expect only the second packet to be decoded (the one with "2" as the first
540 // payload byte). 543 // payload byte).
541 EXPECT_CALL(mock_decoder, DecodeInternal(Pointee(2), kPayloadLengthBytes, 544 EXPECT_CALL(mock_decoder, DecodeInternal(Pointee(2), kPayloadLengthBytes,
542 kSampleRateHz, _, _)) 545 kSampleRateHz, _, _))
543 .WillOnce(DoAll(SetArrayArgument<3>(dummy_output, 546 .WillOnce(DoAll(SetArrayArgument<3>(dummy_output,
544 dummy_output + kPayloadLengthSamples), 547 dummy_output + kPayloadLengthSamples),
545 SetArgPointee<4>(AudioDecoder::kSpeech), 548 SetArgPointee<4>(AudioDecoder::kSpeech),
546 Return(kPayloadLengthSamples))); 549 Return(kPayloadLengthSamples)));
547 550
548 // Pull audio once. 551 // Pull audio once.
549 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); 552 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
550 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); 553 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_);
551 EXPECT_EQ(1u, output.num_channels_); 554 EXPECT_EQ(1u, output.num_channels_);
552 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_); 555 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_);
553 556
554 // Now check the packet buffer, and make sure it is empty, since the 557 // Now check the packet buffer, and make sure it is empty, since the
555 // out-of-order packet should have been discarded. 558 // out-of-order packet should have been discarded.
556 EXPECT_TRUE(packet_buffer_->Empty()); 559 EXPECT_TRUE(packet_buffer_->Empty());
557 560
558 EXPECT_CALL(mock_decoder, Die()); 561 EXPECT_CALL(mock_decoder, Die());
559 } 562 }
(...skipping 19 matching lines...) Expand all
579 582
580 // Insert one packet. Note that we have not registered any payload type, so 583 // Insert one packet. Note that we have not registered any payload type, so
581 // this packet will be rejected. 584 // this packet will be rejected.
582 EXPECT_EQ(NetEq::kFail, 585 EXPECT_EQ(NetEq::kFail,
583 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); 586 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
584 EXPECT_EQ(NetEq::kUnknownRtpPayloadType, neteq_->LastError()); 587 EXPECT_EQ(NetEq::kUnknownRtpPayloadType, neteq_->LastError());
585 588
586 // Pull audio once. 589 // Pull audio once.
587 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); 590 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000);
588 AudioFrame output; 591 AudioFrame output;
589 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); 592 bool muted;
593 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
590 ASSERT_LE(output.samples_per_channel_, kMaxOutputSize); 594 ASSERT_LE(output.samples_per_channel_, kMaxOutputSize);
591 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); 595 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_);
592 EXPECT_EQ(1u, output.num_channels_); 596 EXPECT_EQ(1u, output.num_channels_);
593 EXPECT_EQ(AudioFrame::kPLC, output.speech_type_); 597 EXPECT_EQ(AudioFrame::kPLC, output.speech_type_);
594 598
595 // Register the payload type. 599 // Register the payload type.
596 EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType( 600 EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType(
597 NetEqDecoder::kDecoderPCM16B, "", kPayloadType)); 601 NetEqDecoder::kDecoderPCM16B, "", kPayloadType));
598 602
599 // Insert 10 packets. 603 // Insert 10 packets.
600 for (size_t i = 0; i < 10; ++i) { 604 for (size_t i = 0; i < 10; ++i) {
601 rtp_header.header.sequenceNumber++; 605 rtp_header.header.sequenceNumber++;
602 rtp_header.header.timestamp += kPayloadLengthSamples; 606 rtp_header.header.timestamp += kPayloadLengthSamples;
603 EXPECT_EQ(NetEq::kOK, 607 EXPECT_EQ(NetEq::kOK,
604 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); 608 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
605 EXPECT_EQ(i + 1, packet_buffer_->NumPacketsInBuffer()); 609 EXPECT_EQ(i + 1, packet_buffer_->NumPacketsInBuffer());
606 } 610 }
607 611
608 // Pull audio repeatedly and make sure we get normal output, that is not PLC. 612 // Pull audio repeatedly and make sure we get normal output, that is not PLC.
609 for (size_t i = 0; i < 3; ++i) { 613 for (size_t i = 0; i < 3; ++i) {
610 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); 614 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
611 ASSERT_LE(output.samples_per_channel_, kMaxOutputSize); 615 ASSERT_LE(output.samples_per_channel_, kMaxOutputSize);
612 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); 616 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_);
613 EXPECT_EQ(1u, output.num_channels_); 617 EXPECT_EQ(1u, output.num_channels_);
614 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_) 618 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_)
615 << "NetEq did not decode the packets as expected."; 619 << "NetEq did not decode the packets as expected.";
616 } 620 }
617 } 621 }
618 622
619 // This test verifies that NetEq can handle comfort noise and enters/quits codec 623 // This test verifies that NetEq can handle comfort noise and enters/quits codec
620 // internal CNG mode properly. 624 // internal CNG mode properly.
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
704 AudioFrame::kNormalSpeech, AudioFrame::kNormalSpeech 708 AudioFrame::kNormalSpeech, AudioFrame::kNormalSpeech
705 }; 709 };
706 int expected_timestamp_increment[8] = { 710 int expected_timestamp_increment[8] = {
707 -1, // will not be used. 711 -1, // will not be used.
708 10 * kSampleRateKhz, 712 10 * kSampleRateKhz,
709 -1, -1, // timestamp will be empty during CNG mode; indicated by -1 here. 713 -1, -1, // timestamp will be empty during CNG mode; indicated by -1 here.
710 -1, -1, 714 -1, -1,
711 50 * kSampleRateKhz, 10 * kSampleRateKhz 715 50 * kSampleRateKhz, 10 * kSampleRateKhz
712 }; 716 };
713 717
714 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); 718 bool muted;
719 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
715 rtc::Optional<uint32_t> last_timestamp = neteq_->GetPlayoutTimestamp(); 720 rtc::Optional<uint32_t> last_timestamp = neteq_->GetPlayoutTimestamp();
716 ASSERT_TRUE(last_timestamp); 721 ASSERT_TRUE(last_timestamp);
717 722
718 // Lambda for verifying the timestamps. 723 // Lambda for verifying the timestamps.
719 auto verify_timestamp = [&last_timestamp, &expected_timestamp_increment]( 724 auto verify_timestamp = [&last_timestamp, &expected_timestamp_increment](
720 rtc::Optional<uint32_t> ts, size_t i) { 725 rtc::Optional<uint32_t> ts, size_t i) {
721 if (expected_timestamp_increment[i] == -1) { 726 if (expected_timestamp_increment[i] == -1) {
722 // Expect to get an empty timestamp value during CNG and PLC. 727 // Expect to get an empty timestamp value during CNG and PLC.
723 EXPECT_FALSE(ts) << "i = " << i; 728 EXPECT_FALSE(ts) << "i = " << i;
724 } else { 729 } else {
725 ASSERT_TRUE(ts) << "i = " << i; 730 ASSERT_TRUE(ts) << "i = " << i;
726 EXPECT_EQ(*ts, *last_timestamp + expected_timestamp_increment[i]) 731 EXPECT_EQ(*ts, *last_timestamp + expected_timestamp_increment[i])
727 << "i = " << i; 732 << "i = " << i;
728 last_timestamp = ts; 733 last_timestamp = ts;
729 } 734 }
730 }; 735 };
731 736
732 for (size_t i = 1; i < 6; ++i) { 737 for (size_t i = 1; i < 6; ++i) {
733 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); 738 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_);
734 EXPECT_EQ(1u, output.num_channels_); 739 EXPECT_EQ(1u, output.num_channels_);
735 EXPECT_EQ(expected_type[i - 1], output.speech_type_); 740 EXPECT_EQ(expected_type[i - 1], output.speech_type_);
736 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); 741 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
737 SCOPED_TRACE(""); 742 SCOPED_TRACE("");
738 verify_timestamp(neteq_->GetPlayoutTimestamp(), i); 743 verify_timestamp(neteq_->GetPlayoutTimestamp(), i);
739 } 744 }
740 745
741 // Insert third packet, which leaves a gap from last packet. 746 // Insert third packet, which leaves a gap from last packet.
742 payload[0] = 2; 747 payload[0] = 2;
743 rtp_header.header.sequenceNumber += 2; 748 rtp_header.header.sequenceNumber += 2;
744 rtp_header.header.timestamp += 2 * kPayloadLengthSamples; 749 rtp_header.header.timestamp += 2 * kPayloadLengthSamples;
745 EXPECT_EQ(NetEq::kOK, 750 EXPECT_EQ(NetEq::kOK,
746 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); 751 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
747 752
748 for (size_t i = 6; i < 8; ++i) { 753 for (size_t i = 6; i < 8; ++i) {
749 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); 754 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_);
750 EXPECT_EQ(1u, output.num_channels_); 755 EXPECT_EQ(1u, output.num_channels_);
751 EXPECT_EQ(expected_type[i - 1], output.speech_type_); 756 EXPECT_EQ(expected_type[i - 1], output.speech_type_);
752 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); 757 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
753 SCOPED_TRACE(""); 758 SCOPED_TRACE("");
754 verify_timestamp(neteq_->GetPlayoutTimestamp(), i); 759 verify_timestamp(neteq_->GetPlayoutTimestamp(), i);
755 } 760 }
756 761
757 // Now check the packet buffer, and make sure it is empty. 762 // Now check the packet buffer, and make sure it is empty.
758 EXPECT_TRUE(packet_buffer_->Empty()); 763 EXPECT_TRUE(packet_buffer_->Empty());
759 764
760 EXPECT_CALL(mock_decoder, Die()); 765 EXPECT_CALL(mock_decoder, Die());
761 } 766 }
762 767
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
834 // Insert another packet. 839 // Insert another packet.
835 payload[0] = kSecondPayloadValue; // This will make Decode() successful. 840 payload[0] = kSecondPayloadValue; // This will make Decode() successful.
836 rtp_header.header.sequenceNumber++; 841 rtp_header.header.sequenceNumber++;
837 // The second timestamp needs to be at least 30 ms after the first to make 842 // The second timestamp needs to be at least 30 ms after the first to make
838 // the second packet get decoded. 843 // the second packet get decoded.
839 rtp_header.header.timestamp += 3 * kPayloadLengthSamples; 844 rtp_header.header.timestamp += 3 * kPayloadLengthSamples;
840 EXPECT_EQ(NetEq::kOK, 845 EXPECT_EQ(NetEq::kOK,
841 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); 846 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
842 847
843 AudioFrame output; 848 AudioFrame output;
849 bool muted;
844 // First call to GetAudio will try to decode the "faulty" packet. 850 // First call to GetAudio will try to decode the "faulty" packet.
845 // Expect kFail return value... 851 // Expect kFail return value...
846 EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output)); 852 EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output, &muted));
847 // ... and kOtherDecoderError error code. 853 // ... and kOtherDecoderError error code.
848 EXPECT_EQ(NetEq::kOtherDecoderError, neteq_->LastError()); 854 EXPECT_EQ(NetEq::kOtherDecoderError, neteq_->LastError());
849 // Output size and number of channels should be correct. 855 // Output size and number of channels should be correct.
850 const size_t kExpectedOutputSize = 10 * (kSampleRateHz / 1000) * kChannels; 856 const size_t kExpectedOutputSize = 10 * (kSampleRateHz / 1000) * kChannels;
851 EXPECT_EQ(kExpectedOutputSize, output.samples_per_channel_ * kChannels); 857 EXPECT_EQ(kExpectedOutputSize, output.samples_per_channel_ * kChannels);
852 EXPECT_EQ(kChannels, output.num_channels_); 858 EXPECT_EQ(kChannels, output.num_channels_);
853 859
854 // Second call to GetAudio will decode the packet that is ok. No errors are 860 // Second call to GetAudio will decode the packet that is ok. No errors are
855 // expected. 861 // expected.
856 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); 862 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
857 EXPECT_EQ(kExpectedOutputSize, output.samples_per_channel_ * kChannels); 863 EXPECT_EQ(kExpectedOutputSize, output.samples_per_channel_ * kChannels);
858 EXPECT_EQ(kChannels, output.num_channels_); 864 EXPECT_EQ(kChannels, output.num_channels_);
859 } 865 }
860 866
861 // This test inserts packets until the buffer is flushed. After that, it asks 867 // This test inserts packets until the buffer is flushed. After that, it asks
862 // NetEq for the network statistics. The purpose of the test is to make sure 868 // NetEq for the network statistics. The purpose of the test is to make sure
863 // that even though the buffer size increment is negative (which it becomes when 869 // that even though the buffer size increment is negative (which it becomes when
864 // the packet causing a flush is inserted), the packet length stored in the 870 // the packet causing a flush is inserted), the packet length stored in the
865 // decision logic remains valid. 871 // decision logic remains valid.
866 TEST_F(NetEqImplTest, FloodBufferAndGetNetworkStats) { 872 TEST_F(NetEqImplTest, FloodBufferAndGetNetworkStats) {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
939 945
940 // Insert one packet. 946 // Insert one packet.
941 EXPECT_EQ(NetEq::kOK, 947 EXPECT_EQ(NetEq::kOK,
942 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); 948 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
943 949
944 EXPECT_EQ(5u, neteq_->sync_buffer_for_test()->FutureLength()); 950 EXPECT_EQ(5u, neteq_->sync_buffer_for_test()->FutureLength());
945 951
946 // Pull audio once. 952 // Pull audio once.
947 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); 953 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000);
948 AudioFrame output; 954 AudioFrame output;
949 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); 955 bool muted;
956 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
950 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); 957 ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_);
951 EXPECT_EQ(1u, output.num_channels_); 958 EXPECT_EQ(1u, output.num_channels_);
952 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_); 959 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_);
953 960
954 EXPECT_CALL(mock_decoder, Die()); 961 EXPECT_CALL(mock_decoder, Die());
955 } 962 }
956 963
957 // This test checks the behavior of NetEq when audio decoder fails. 964 // This test checks the behavior of NetEq when audio decoder fails.
958 TEST_F(NetEqImplTest, DecodingError) { 965 TEST_F(NetEqImplTest, DecodingError) {
959 UseNoMocks(); 966 UseNoMocks();
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1031 for (int i = 0; i < 6; ++i) { 1038 for (int i = 0; i < 6; ++i) {
1032 rtp_header.header.sequenceNumber += 1; 1039 rtp_header.header.sequenceNumber += 1;
1033 rtp_header.header.timestamp += kFrameLengthSamples; 1040 rtp_header.header.timestamp += kFrameLengthSamples;
1034 EXPECT_EQ(NetEq::kOK, 1041 EXPECT_EQ(NetEq::kOK,
1035 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); 1042 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
1036 } 1043 }
1037 1044
1038 // Pull audio. 1045 // Pull audio.
1039 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); 1046 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000);
1040 AudioFrame output; 1047 AudioFrame output;
1041 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); 1048 bool muted;
1049 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
1042 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); 1050 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_);
1043 EXPECT_EQ(1u, output.num_channels_); 1051 EXPECT_EQ(1u, output.num_channels_);
1044 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_); 1052 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_);
1045 1053
1046 // Pull audio again. Decoder fails. 1054 // Pull audio again. Decoder fails.
1047 EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output)); 1055 EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output, &muted));
1048 EXPECT_EQ(NetEq::kDecoderErrorCode, neteq_->LastError()); 1056 EXPECT_EQ(NetEq::kDecoderErrorCode, neteq_->LastError());
1049 EXPECT_EQ(kDecoderErrorCode, neteq_->LastDecoderError()); 1057 EXPECT_EQ(kDecoderErrorCode, neteq_->LastDecoderError());
1050 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); 1058 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_);
1051 EXPECT_EQ(1u, output.num_channels_); 1059 EXPECT_EQ(1u, output.num_channels_);
1052 // We are not expecting anything for output.speech_type_, since an error was 1060 // We are not expecting anything for output.speech_type_, since an error was
1053 // returned. 1061 // returned.
1054 1062
1055 // Pull audio again, should continue an expansion. 1063 // Pull audio again, should continue an expansion.
1056 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); 1064 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
1057 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); 1065 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_);
1058 EXPECT_EQ(1u, output.num_channels_); 1066 EXPECT_EQ(1u, output.num_channels_);
1059 EXPECT_EQ(AudioFrame::kPLC, output.speech_type_); 1067 EXPECT_EQ(AudioFrame::kPLC, output.speech_type_);
1060 1068
1061 // Pull audio again, should behave normal. 1069 // Pull audio again, should behave normal.
1062 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); 1070 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
1063 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); 1071 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_);
1064 EXPECT_EQ(1u, output.num_channels_); 1072 EXPECT_EQ(1u, output.num_channels_);
1065 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_); 1073 EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_);
1066 1074
1067 EXPECT_CALL(mock_decoder, Die()); 1075 EXPECT_CALL(mock_decoder, Die());
1068 } 1076 }
1069 1077
1070 // This test checks the behavior of NetEq when audio decoder fails during CNG. 1078 // This test checks the behavior of NetEq when audio decoder fails during CNG.
1071 TEST_F(NetEqImplTest, DecodingErrorDuringInternalCng) { 1079 TEST_F(NetEqImplTest, DecodingErrorDuringInternalCng) {
1072 UseNoMocks(); 1080 UseNoMocks();
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1140 for (int i = 0; i < 2; ++i) { 1148 for (int i = 0; i < 2; ++i) {
1141 rtp_header.header.sequenceNumber += 1; 1149 rtp_header.header.sequenceNumber += 1;
1142 rtp_header.header.timestamp += kFrameLengthSamples; 1150 rtp_header.header.timestamp += kFrameLengthSamples;
1143 EXPECT_EQ(NetEq::kOK, 1151 EXPECT_EQ(NetEq::kOK,
1144 neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); 1152 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
1145 } 1153 }
1146 1154
1147 // Pull audio. 1155 // Pull audio.
1148 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); 1156 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000);
1149 AudioFrame output; 1157 AudioFrame output;
1150 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); 1158 bool muted;
1159 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
1151 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); 1160 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_);
1152 EXPECT_EQ(1u, output.num_channels_); 1161 EXPECT_EQ(1u, output.num_channels_);
1153 EXPECT_EQ(AudioFrame::kCNG, output.speech_type_); 1162 EXPECT_EQ(AudioFrame::kCNG, output.speech_type_);
1154 1163
1155 // Pull audio again. Decoder fails. 1164 // Pull audio again. Decoder fails.
1156 EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output)); 1165 EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output, &muted));
1157 EXPECT_EQ(NetEq::kDecoderErrorCode, neteq_->LastError()); 1166 EXPECT_EQ(NetEq::kDecoderErrorCode, neteq_->LastError());
1158 EXPECT_EQ(kDecoderErrorCode, neteq_->LastDecoderError()); 1167 EXPECT_EQ(kDecoderErrorCode, neteq_->LastDecoderError());
1159 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); 1168 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_);
1160 EXPECT_EQ(1u, output.num_channels_); 1169 EXPECT_EQ(1u, output.num_channels_);
1161 // We are not expecting anything for output.speech_type_, since an error was 1170 // We are not expecting anything for output.speech_type_, since an error was
1162 // returned. 1171 // returned.
1163 1172
1164 // Pull audio again, should resume codec CNG. 1173 // Pull audio again, should resume codec CNG.
1165 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); 1174 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
1166 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); 1175 EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_);
1167 EXPECT_EQ(1u, output.num_channels_); 1176 EXPECT_EQ(1u, output.num_channels_);
1168 EXPECT_EQ(AudioFrame::kCNG, output.speech_type_); 1177 EXPECT_EQ(AudioFrame::kCNG, output.speech_type_);
1169 1178
1170 EXPECT_CALL(mock_decoder, Die()); 1179 EXPECT_CALL(mock_decoder, Die());
1171 } 1180 }
1172 1181
1173 // Tests that the return value from last_output_sample_rate_hz() is equal to the 1182 // Tests that the return value from last_output_sample_rate_hz() is equal to the
1174 // configured inital sample rate. 1183 // configured inital sample rate.
1175 TEST_F(NetEqImplTest, InitialLastOutputSampleRate) { 1184 TEST_F(NetEqImplTest, InitialLastOutputSampleRate) {
1176 UseNoMocks(); 1185 UseNoMocks();
1177 config_.sample_rate_hz = 48000; 1186 config_.sample_rate_hz = 48000;
1178 CreateInstance(); 1187 CreateInstance();
1179 EXPECT_EQ(48000, neteq_->last_output_sample_rate_hz()); 1188 EXPECT_EQ(48000, neteq_->last_output_sample_rate_hz());
1180 } 1189 }
1181 1190
1182 TEST_F(NetEqImplTest, TickTimerIncrement) { 1191 TEST_F(NetEqImplTest, TickTimerIncrement) {
1183 UseNoMocks(); 1192 UseNoMocks();
1184 CreateInstance(); 1193 CreateInstance();
1185 ASSERT_TRUE(tick_timer_); 1194 ASSERT_TRUE(tick_timer_);
1186 EXPECT_EQ(0u, tick_timer_->ticks()); 1195 EXPECT_EQ(0u, tick_timer_->ticks());
1187 AudioFrame output; 1196 AudioFrame output;
1188 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); 1197 bool muted;
1198 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
1189 EXPECT_EQ(1u, tick_timer_->ticks()); 1199 EXPECT_EQ(1u, tick_timer_->ticks());
1190 } 1200 }
1191 1201
1192 class Decoder120ms : public AudioDecoder { 1202 class Decoder120ms : public AudioDecoder {
1193 public: 1203 public:
1194 Decoder120ms(SpeechType speech_type) 1204 Decoder120ms(SpeechType speech_type)
1195 : next_value_(1), 1205 : next_value_(1),
1196 speech_type_(speech_type) {} 1206 speech_type_(speech_type) {}
1197 1207
1198 int DecodeInternal(const uint8_t* encoded, 1208 int DecodeInternal(const uint8_t* encoded,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1233 CreateInstance(); 1243 CreateInstance();
1234 } 1244 }
1235 1245
1236 uint32_t timestamp_diff_between_packets() const { 1246 uint32_t timestamp_diff_between_packets() const {
1237 return rtc::CheckedDivExact(kSamplingFreq_, 1000u) * 120; 1247 return rtc::CheckedDivExact(kSamplingFreq_, 1000u) * 120;
1238 } 1248 }
1239 1249
1240 uint32_t first_timestamp() const { return 10u; } 1250 uint32_t first_timestamp() const { return 10u; }
1241 1251
1242 void GetFirstPacket() { 1252 void GetFirstPacket() {
1253 bool muted;
1243 for (int i = 0; i < 12; i++) { 1254 for (int i = 0; i < 12; i++) {
1244 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_)); 1255 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
1256 EXPECT_FALSE(muted);
1245 } 1257 }
1246 } 1258 }
1247 1259
1248 void InsertPacket(uint32_t timestamp) { 1260 void InsertPacket(uint32_t timestamp) {
1249 WebRtcRTPHeader rtp_header; 1261 WebRtcRTPHeader rtp_header;
1250 rtp_header.header.payloadType = kPayloadType; 1262 rtp_header.header.payloadType = kPayloadType;
1251 rtp_header.header.sequenceNumber = sequence_number_; 1263 rtp_header.header.sequenceNumber = sequence_number_;
1252 rtp_header.header.timestamp = timestamp; 1264 rtp_header.header.timestamp = timestamp;
1253 rtp_header.header.ssrc = 15; 1265 rtp_header.header.ssrc = 15;
1254 const size_t kPayloadLengthBytes = 1; // This can be arbitrary. 1266 const size_t kPayloadLengthBytes = 1; // This can be arbitrary.
(...skipping 18 matching lines...) Expand all
1273 }; 1285 };
1274 1286
1275 TEST_F(NetEqImplTest120ms, AudioRepetition) { 1287 TEST_F(NetEqImplTest120ms, AudioRepetition) {
1276 config_.playout_mode = kPlayoutFax; 1288 config_.playout_mode = kPlayoutFax;
1277 CreateInstanceNoMocks(); 1289 CreateInstanceNoMocks();
1278 Register120msCodec(AudioDecoder::kSpeech); 1290 Register120msCodec(AudioDecoder::kSpeech);
1279 1291
1280 InsertPacket(first_timestamp()); 1292 InsertPacket(first_timestamp());
1281 GetFirstPacket(); 1293 GetFirstPacket();
1282 1294
1283 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_)); 1295 bool muted;
1296 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
1284 EXPECT_EQ(kAudioRepetition, neteq_->last_operation_for_test()); 1297 EXPECT_EQ(kAudioRepetition, neteq_->last_operation_for_test());
1285 } 1298 }
1286 1299
1287 TEST_F(NetEqImplTest120ms, AlternativePlc) { 1300 TEST_F(NetEqImplTest120ms, AlternativePlc) {
1288 config_.playout_mode = kPlayoutOff; 1301 config_.playout_mode = kPlayoutOff;
1289 CreateInstanceNoMocks(); 1302 CreateInstanceNoMocks();
1290 Register120msCodec(AudioDecoder::kSpeech); 1303 Register120msCodec(AudioDecoder::kSpeech);
1291 1304
1292 InsertPacket(first_timestamp()); 1305 InsertPacket(first_timestamp());
1293 GetFirstPacket(); 1306 GetFirstPacket();
1294 1307
1295 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_)); 1308 bool muted;
1309 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
1296 EXPECT_EQ(kAlternativePlc, neteq_->last_operation_for_test()); 1310 EXPECT_EQ(kAlternativePlc, neteq_->last_operation_for_test());
1297 } 1311 }
1298 1312
1299 TEST_F(NetEqImplTest120ms, CodecInternalCng) { 1313 TEST_F(NetEqImplTest120ms, CodecInternalCng) {
1300 CreateInstanceNoMocks(); 1314 CreateInstanceNoMocks();
1301 Register120msCodec(AudioDecoder::kComfortNoise); 1315 Register120msCodec(AudioDecoder::kComfortNoise);
1302 1316
1303 InsertPacket(first_timestamp()); 1317 InsertPacket(first_timestamp());
1304 GetFirstPacket(); 1318 GetFirstPacket();
1305 1319
1306 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_)); 1320 bool muted;
1321 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
1307 EXPECT_EQ(kCodecInternalCng, neteq_->last_operation_for_test()); 1322 EXPECT_EQ(kCodecInternalCng, neteq_->last_operation_for_test());
1308 } 1323 }
1309 1324
1310 TEST_F(NetEqImplTest120ms, Normal) { 1325 TEST_F(NetEqImplTest120ms, Normal) {
1311 CreateInstanceNoMocks(); 1326 CreateInstanceNoMocks();
1312 Register120msCodec(AudioDecoder::kSpeech); 1327 Register120msCodec(AudioDecoder::kSpeech);
1313 1328
1314 InsertPacket(first_timestamp()); 1329 InsertPacket(first_timestamp());
1315 GetFirstPacket(); 1330 GetFirstPacket();
1316 1331
1317 EXPECT_EQ(kNormal, neteq_->last_operation_for_test()); 1332 EXPECT_EQ(kNormal, neteq_->last_operation_for_test());
1318 } 1333 }
1319 1334
1320 TEST_F(NetEqImplTest120ms, Merge) { 1335 TEST_F(NetEqImplTest120ms, Merge) {
1321 CreateInstanceWithDelayManagerMock(); 1336 CreateInstanceWithDelayManagerMock();
1322 1337
1323 Register120msCodec(AudioDecoder::kSpeech); 1338 Register120msCodec(AudioDecoder::kSpeech);
1324 InsertPacket(first_timestamp()); 1339 InsertPacket(first_timestamp());
1325 1340
1326 GetFirstPacket(); 1341 GetFirstPacket();
1327 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_)); 1342 bool muted;
1343 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
1328 1344
1329 InsertPacket(first_timestamp() + 2 * timestamp_diff_between_packets()); 1345 InsertPacket(first_timestamp() + 2 * timestamp_diff_between_packets());
1330 1346
1331 // Delay manager reports a target level which should cause a Merge. 1347 // Delay manager reports a target level which should cause a Merge.
1332 EXPECT_CALL(*mock_delay_manager_, TargetLevel()).WillOnce(Return(-10)); 1348 EXPECT_CALL(*mock_delay_manager_, TargetLevel()).WillOnce(Return(-10));
1333 1349
1334 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_)); 1350 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
1335 EXPECT_EQ(kMerge, neteq_->last_operation_for_test()); 1351 EXPECT_EQ(kMerge, neteq_->last_operation_for_test());
1336 } 1352 }
1337 1353
1338 TEST_F(NetEqImplTest120ms, Expand) { 1354 TEST_F(NetEqImplTest120ms, Expand) {
1339 CreateInstanceNoMocks(); 1355 CreateInstanceNoMocks();
1340 Register120msCodec(AudioDecoder::kSpeech); 1356 Register120msCodec(AudioDecoder::kSpeech);
1341 1357
1342 InsertPacket(first_timestamp()); 1358 InsertPacket(first_timestamp());
1343 GetFirstPacket(); 1359 GetFirstPacket();
1344 1360
1345 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_)); 1361 bool muted;
1362 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
1346 EXPECT_EQ(kExpand, neteq_->last_operation_for_test()); 1363 EXPECT_EQ(kExpand, neteq_->last_operation_for_test());
1347 } 1364 }
1348 1365
1349 TEST_F(NetEqImplTest120ms, FastAccelerate) { 1366 TEST_F(NetEqImplTest120ms, FastAccelerate) {
1350 CreateInstanceWithDelayManagerMock(); 1367 CreateInstanceWithDelayManagerMock();
1351 Register120msCodec(AudioDecoder::kSpeech); 1368 Register120msCodec(AudioDecoder::kSpeech);
1352 1369
1353 InsertPacket(first_timestamp()); 1370 InsertPacket(first_timestamp());
1354 GetFirstPacket(); 1371 GetFirstPacket();
1355 InsertPacket(first_timestamp() + timestamp_diff_between_packets()); 1372 InsertPacket(first_timestamp() + timestamp_diff_between_packets());
1356 1373
1357 // Delay manager report buffer limit which should cause a FastAccelerate. 1374 // Delay manager report buffer limit which should cause a FastAccelerate.
1358 EXPECT_CALL(*mock_delay_manager_, BufferLimits(_, _)) 1375 EXPECT_CALL(*mock_delay_manager_, BufferLimits(_, _))
1359 .Times(1) 1376 .Times(1)
1360 .WillOnce(DoAll(SetArgPointee<0>(0), SetArgPointee<1>(0))); 1377 .WillOnce(DoAll(SetArgPointee<0>(0), SetArgPointee<1>(0)));
1361 1378
1362 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_)); 1379 bool muted;
1380 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
1363 EXPECT_EQ(kFastAccelerate, neteq_->last_operation_for_test()); 1381 EXPECT_EQ(kFastAccelerate, neteq_->last_operation_for_test());
1364 } 1382 }
1365 1383
1366 TEST_F(NetEqImplTest120ms, PreemptiveExpand) { 1384 TEST_F(NetEqImplTest120ms, PreemptiveExpand) {
1367 CreateInstanceWithDelayManagerMock(); 1385 CreateInstanceWithDelayManagerMock();
1368 Register120msCodec(AudioDecoder::kSpeech); 1386 Register120msCodec(AudioDecoder::kSpeech);
1369 1387
1370 InsertPacket(first_timestamp()); 1388 InsertPacket(first_timestamp());
1371 GetFirstPacket(); 1389 GetFirstPacket();
1372 1390
1373 InsertPacket(first_timestamp() + timestamp_diff_between_packets()); 1391 InsertPacket(first_timestamp() + timestamp_diff_between_packets());
1374 1392
1375 // Delay manager report buffer limit which should cause a PreemptiveExpand. 1393 // Delay manager report buffer limit which should cause a PreemptiveExpand.
1376 EXPECT_CALL(*mock_delay_manager_, BufferLimits(_, _)) 1394 EXPECT_CALL(*mock_delay_manager_, BufferLimits(_, _))
1377 .Times(1) 1395 .Times(1)
1378 .WillOnce(DoAll(SetArgPointee<0>(100), SetArgPointee<1>(100))); 1396 .WillOnce(DoAll(SetArgPointee<0>(100), SetArgPointee<1>(100)));
1379 1397
1380 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_)); 1398 bool muted;
1399 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
1381 EXPECT_EQ(kPreemptiveExpand, neteq_->last_operation_for_test()); 1400 EXPECT_EQ(kPreemptiveExpand, neteq_->last_operation_for_test());
1382 } 1401 }
1383 1402
1384 TEST_F(NetEqImplTest120ms, Accelerate) { 1403 TEST_F(NetEqImplTest120ms, Accelerate) {
1385 CreateInstanceWithDelayManagerMock(); 1404 CreateInstanceWithDelayManagerMock();
1386 Register120msCodec(AudioDecoder::kSpeech); 1405 Register120msCodec(AudioDecoder::kSpeech);
1387 1406
1388 InsertPacket(first_timestamp()); 1407 InsertPacket(first_timestamp());
1389 GetFirstPacket(); 1408 GetFirstPacket();
1390 1409
1391 InsertPacket(first_timestamp() + timestamp_diff_between_packets()); 1410 InsertPacket(first_timestamp() + timestamp_diff_between_packets());
1392 1411
1393 // Delay manager report buffer limit which should cause a Accelerate. 1412 // Delay manager report buffer limit which should cause a Accelerate.
1394 EXPECT_CALL(*mock_delay_manager_, BufferLimits(_, _)) 1413 EXPECT_CALL(*mock_delay_manager_, BufferLimits(_, _))
1395 .Times(1) 1414 .Times(1)
1396 .WillOnce(DoAll(SetArgPointee<0>(1), SetArgPointee<1>(2))); 1415 .WillOnce(DoAll(SetArgPointee<0>(1), SetArgPointee<1>(2)));
1397 1416
1398 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_)); 1417 bool muted;
1418 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted));
1399 EXPECT_EQ(kAccelerate, neteq_->last_operation_for_test()); 1419 EXPECT_EQ(kAccelerate, neteq_->last_operation_for_test());
1400 } 1420 }
1401 1421
1402 }// namespace webrtc 1422 }// namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/audio_coding/neteq/neteq_impl.cc ('k') | webrtc/modules/audio_coding/neteq/neteq_stereo_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698