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

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

Issue 1429943004: AcmReceiver::InsertPacket and NetEq::InsertPacket: Take ArrayView arguments (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fix log message Created 5 years, 1 month 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) 2011 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2011 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 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 rtp_source_.reset(test::RtpFileSource::Create(rtp_file)); 336 rtp_source_.reset(test::RtpFileSource::Create(rtp_file));
337 } 337 }
338 338
339 void NetEqDecodingTest::Process(size_t* out_len) { 339 void NetEqDecodingTest::Process(size_t* out_len) {
340 // Check if time to receive. 340 // Check if time to receive.
341 while (packet_ && sim_clock_ >= packet_->time_ms()) { 341 while (packet_ && sim_clock_ >= packet_->time_ms()) {
342 if (packet_->payload_length_bytes() > 0) { 342 if (packet_->payload_length_bytes() > 0) {
343 WebRtcRTPHeader rtp_header; 343 WebRtcRTPHeader rtp_header;
344 packet_->ConvertHeader(&rtp_header); 344 packet_->ConvertHeader(&rtp_header);
345 ASSERT_EQ(0, neteq_->InsertPacket( 345 ASSERT_EQ(0, neteq_->InsertPacket(
346 rtp_header, packet_->payload(), 346 rtp_header,
347 packet_->payload_length_bytes(), 347 rtc::ArrayView<const uint8_t>(
348 static_cast<uint32_t>( 348 packet_->payload(), packet_->payload_length_bytes()),
349 packet_->time_ms() * (output_sample_rate_ / 1000)))); 349 static_cast<uint32_t>(packet_->time_ms() *
350 (output_sample_rate_ / 1000))));
350 } 351 }
351 // Get next packet. 352 // Get next packet.
352 packet_.reset(rtp_source_->NextPacket()); 353 packet_.reset(rtp_source_->NextPacket());
353 } 354 }
354 355
355 // Get audio from NetEq. 356 // Get audio from NetEq.
356 NetEqOutputType type; 357 NetEqOutputType type;
357 int num_channels; 358 int num_channels;
358 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, out_len, 359 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, out_len,
359 &num_channels, &type)); 360 &num_channels, &type));
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 config_.playout_mode = kPlayoutFax; 489 config_.playout_mode = kPlayoutFax;
489 } 490 }
490 }; 491 };
491 492
492 TEST_F(NetEqDecodingTestFaxMode, TestFrameWaitingTimeStatistics) { 493 TEST_F(NetEqDecodingTestFaxMode, TestFrameWaitingTimeStatistics) {
493 // Insert 30 dummy packets at once. Each packet contains 10 ms 16 kHz audio. 494 // Insert 30 dummy packets at once. Each packet contains 10 ms 16 kHz audio.
494 size_t num_frames = 30; 495 size_t num_frames = 30;
495 const size_t kSamples = 10 * 16; 496 const size_t kSamples = 10 * 16;
496 const size_t kPayloadBytes = kSamples * 2; 497 const size_t kPayloadBytes = kSamples * 2;
497 for (size_t i = 0; i < num_frames; ++i) { 498 for (size_t i = 0; i < num_frames; ++i) {
498 uint16_t payload[kSamples] = {0}; 499 const uint8_t payload[kPayloadBytes] = {0};
499 WebRtcRTPHeader rtp_info; 500 WebRtcRTPHeader rtp_info;
500 rtp_info.header.sequenceNumber = i; 501 rtp_info.header.sequenceNumber = i;
501 rtp_info.header.timestamp = i * kSamples; 502 rtp_info.header.timestamp = i * kSamples;
502 rtp_info.header.ssrc = 0x1234; // Just an arbitrary SSRC. 503 rtp_info.header.ssrc = 0x1234; // Just an arbitrary SSRC.
503 rtp_info.header.payloadType = 94; // PCM16b WB codec. 504 rtp_info.header.payloadType = 94; // PCM16b WB codec.
504 rtp_info.header.markerBit = 0; 505 rtp_info.header.markerBit = 0;
505 ASSERT_EQ(0, neteq_->InsertPacket( 506 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, 0));
506 rtp_info,
507 reinterpret_cast<uint8_t*>(payload),
508 kPayloadBytes, 0));
509 } 507 }
510 // Pull out all data. 508 // Pull out all data.
511 for (size_t i = 0; i < num_frames; ++i) { 509 for (size_t i = 0; i < num_frames; ++i) {
512 size_t out_len; 510 size_t out_len;
513 int num_channels; 511 int num_channels;
514 NetEqOutputType type; 512 NetEqOutputType type;
515 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len, 513 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len,
516 &num_channels, &type)); 514 &num_channels, &type));
517 ASSERT_EQ(kBlockSize16kHz, out_len); 515 ASSERT_EQ(kBlockSize16kHz, out_len);
518 } 516 }
(...skipping 23 matching lines...) Expand all
542 const size_t kSamples = 10 * 16; 540 const size_t kSamples = 10 * 16;
543 const size_t kPayloadBytes = kSamples * 2; 541 const size_t kPayloadBytes = kSamples * 2;
544 while (frame_index < kNumFrames) { 542 while (frame_index < kNumFrames) {
545 // Insert one packet each time, except every 10th time where we insert two 543 // Insert one packet each time, except every 10th time where we insert two
546 // packets at once. This will create a negative clock-drift of approx. 10%. 544 // packets at once. This will create a negative clock-drift of approx. 10%.
547 int num_packets = (frame_index % 10 == 0 ? 2 : 1); 545 int num_packets = (frame_index % 10 == 0 ? 2 : 1);
548 for (int n = 0; n < num_packets; ++n) { 546 for (int n = 0; n < num_packets; ++n) {
549 uint8_t payload[kPayloadBytes] = {0}; 547 uint8_t payload[kPayloadBytes] = {0};
550 WebRtcRTPHeader rtp_info; 548 WebRtcRTPHeader rtp_info;
551 PopulateRtpInfo(frame_index, frame_index * kSamples, &rtp_info); 549 PopulateRtpInfo(frame_index, frame_index * kSamples, &rtp_info);
552 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, kPayloadBytes, 0)); 550 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, 0));
553 ++frame_index; 551 ++frame_index;
554 } 552 }
555 553
556 // Pull out data once. 554 // Pull out data once.
557 size_t out_len; 555 size_t out_len;
558 int num_channels; 556 int num_channels;
559 NetEqOutputType type; 557 NetEqOutputType type;
560 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len, 558 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len,
561 &num_channels, &type)); 559 &num_channels, &type));
562 ASSERT_EQ(kBlockSize16kHz, out_len); 560 ASSERT_EQ(kBlockSize16kHz, out_len);
(...skipping 10 matching lines...) Expand all
573 const size_t kSamples = 10 * 16; 571 const size_t kSamples = 10 * 16;
574 const size_t kPayloadBytes = kSamples * 2; 572 const size_t kPayloadBytes = kSamples * 2;
575 for (int i = 0; i < kNumFrames; ++i) { 573 for (int i = 0; i < kNumFrames; ++i) {
576 // Insert one packet each time, except every 10th time where we don't insert 574 // Insert one packet each time, except every 10th time where we don't insert
577 // any packet. This will create a positive clock-drift of approx. 11%. 575 // any packet. This will create a positive clock-drift of approx. 11%.
578 int num_packets = (i % 10 == 9 ? 0 : 1); 576 int num_packets = (i % 10 == 9 ? 0 : 1);
579 for (int n = 0; n < num_packets; ++n) { 577 for (int n = 0; n < num_packets; ++n) {
580 uint8_t payload[kPayloadBytes] = {0}; 578 uint8_t payload[kPayloadBytes] = {0};
581 WebRtcRTPHeader rtp_info; 579 WebRtcRTPHeader rtp_info;
582 PopulateRtpInfo(frame_index, frame_index * kSamples, &rtp_info); 580 PopulateRtpInfo(frame_index, frame_index * kSamples, &rtp_info);
583 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, kPayloadBytes, 0)); 581 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, 0));
584 ++frame_index; 582 ++frame_index;
585 } 583 }
586 584
587 // Pull out data once. 585 // Pull out data once.
588 size_t out_len; 586 size_t out_len;
589 int num_channels; 587 int num_channels;
590 NetEqOutputType type; 588 NetEqOutputType type;
591 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len, 589 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len,
592 &num_channels, &type)); 590 &num_channels, &type));
593 ASSERT_EQ(kBlockSize16kHz, out_len); 591 ASSERT_EQ(kBlockSize16kHz, out_len);
(...skipping 22 matching lines...) Expand all
616 614
617 // Insert speech for 5 seconds. 615 // Insert speech for 5 seconds.
618 const int kSpeechDurationMs = 5000; 616 const int kSpeechDurationMs = 5000;
619 for (t_ms = 0; t_ms < kSpeechDurationMs; t_ms += 10) { 617 for (t_ms = 0; t_ms < kSpeechDurationMs; t_ms += 10) {
620 // Each turn in this for loop is 10 ms. 618 // Each turn in this for loop is 10 ms.
621 while (next_input_time_ms <= t_ms) { 619 while (next_input_time_ms <= t_ms) {
622 // Insert one 30 ms speech frame. 620 // Insert one 30 ms speech frame.
623 uint8_t payload[kPayloadBytes] = {0}; 621 uint8_t payload[kPayloadBytes] = {0};
624 WebRtcRTPHeader rtp_info; 622 WebRtcRTPHeader rtp_info;
625 PopulateRtpInfo(seq_no, timestamp, &rtp_info); 623 PopulateRtpInfo(seq_no, timestamp, &rtp_info);
626 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, kPayloadBytes, 0)); 624 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, 0));
627 ++seq_no; 625 ++seq_no;
628 timestamp += kSamples; 626 timestamp += kSamples;
629 next_input_time_ms += static_cast<double>(kFrameSizeMs) * drift_factor; 627 next_input_time_ms += static_cast<double>(kFrameSizeMs) * drift_factor;
630 } 628 }
631 // Pull out data once. 629 // Pull out data once.
632 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len, 630 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len,
633 &num_channels, &type)); 631 &num_channels, &type));
634 ASSERT_EQ(kBlockSize16kHz, out_len); 632 ASSERT_EQ(kBlockSize16kHz, out_len);
635 } 633 }
636 634
637 EXPECT_EQ(kOutputNormal, type); 635 EXPECT_EQ(kOutputNormal, type);
638 int32_t delay_before = timestamp - PlayoutTimestamp(); 636 int32_t delay_before = timestamp - PlayoutTimestamp();
639 637
640 // Insert CNG for 1 minute (= 60000 ms). 638 // Insert CNG for 1 minute (= 60000 ms).
641 const int kCngPeriodMs = 100; 639 const int kCngPeriodMs = 100;
642 const int kCngPeriodSamples = kCngPeriodMs * 16; // Period in 16 kHz samples. 640 const int kCngPeriodSamples = kCngPeriodMs * 16; // Period in 16 kHz samples.
643 const int kCngDurationMs = 60000; 641 const int kCngDurationMs = 60000;
644 for (; t_ms < kSpeechDurationMs + kCngDurationMs; t_ms += 10) { 642 for (; t_ms < kSpeechDurationMs + kCngDurationMs; t_ms += 10) {
645 // Each turn in this for loop is 10 ms. 643 // Each turn in this for loop is 10 ms.
646 while (next_input_time_ms <= t_ms) { 644 while (next_input_time_ms <= t_ms) {
647 // Insert one CNG frame each 100 ms. 645 // Insert one CNG frame each 100 ms.
648 uint8_t payload[kPayloadBytes]; 646 uint8_t payload[kPayloadBytes];
649 size_t payload_len; 647 size_t payload_len;
650 WebRtcRTPHeader rtp_info; 648 WebRtcRTPHeader rtp_info;
651 PopulateCng(seq_no, timestamp, &rtp_info, payload, &payload_len); 649 PopulateCng(seq_no, timestamp, &rtp_info, payload, &payload_len);
652 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, payload_len, 0)); 650 ASSERT_EQ(0, neteq_->InsertPacket(
651 rtp_info,
652 rtc::ArrayView<const uint8_t>(payload, payload_len), 0));
653 ++seq_no; 653 ++seq_no;
654 timestamp += kCngPeriodSamples; 654 timestamp += kCngPeriodSamples;
655 next_input_time_ms += static_cast<double>(kCngPeriodMs) * drift_factor; 655 next_input_time_ms += static_cast<double>(kCngPeriodMs) * drift_factor;
656 } 656 }
657 // Pull out data once. 657 // Pull out data once.
658 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len, 658 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len,
659 &num_channels, &type)); 659 &num_channels, &type));
660 ASSERT_EQ(kBlockSize16kHz, out_len); 660 ASSERT_EQ(kBlockSize16kHz, out_len);
661 } 661 }
662 662
(...skipping 26 matching lines...) Expand all
689 kMaxBlockSize, out_data_, &out_len, &num_channels, &type)); 689 kMaxBlockSize, out_data_, &out_len, &num_channels, &type));
690 ASSERT_EQ(kBlockSize16kHz, out_len); 690 ASSERT_EQ(kBlockSize16kHz, out_len);
691 EXPECT_EQ(kOutputCNG, type); 691 EXPECT_EQ(kOutputCNG, type);
692 t_ms += 10; 692 t_ms += 10;
693 } 693 }
694 // Insert one CNG frame each 100 ms. 694 // Insert one CNG frame each 100 ms.
695 uint8_t payload[kPayloadBytes]; 695 uint8_t payload[kPayloadBytes];
696 size_t payload_len; 696 size_t payload_len;
697 WebRtcRTPHeader rtp_info; 697 WebRtcRTPHeader rtp_info;
698 PopulateCng(seq_no, timestamp, &rtp_info, payload, &payload_len); 698 PopulateCng(seq_no, timestamp, &rtp_info, payload, &payload_len);
699 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, payload_len, 0)); 699 ASSERT_EQ(0, neteq_->InsertPacket(
700 rtp_info,
701 rtc::ArrayView<const uint8_t>(payload, payload_len), 0));
700 ++seq_no; 702 ++seq_no;
701 timestamp += kCngPeriodSamples; 703 timestamp += kCngPeriodSamples;
702 next_input_time_ms += kCngPeriodMs * drift_factor; 704 next_input_time_ms += kCngPeriodMs * drift_factor;
703 } 705 }
704 } 706 }
705 707
706 // Insert speech again until output type is speech. 708 // Insert speech again until output type is speech.
707 double speech_restart_time_ms = t_ms; 709 double speech_restart_time_ms = t_ms;
708 while (type != kOutputNormal) { 710 while (type != kOutputNormal) {
709 // Each turn in this for loop is 10 ms. 711 // Each turn in this for loop is 10 ms.
710 while (next_input_time_ms <= t_ms) { 712 while (next_input_time_ms <= t_ms) {
711 // Insert one 30 ms speech frame. 713 // Insert one 30 ms speech frame.
712 uint8_t payload[kPayloadBytes] = {0}; 714 uint8_t payload[kPayloadBytes] = {0};
713 WebRtcRTPHeader rtp_info; 715 WebRtcRTPHeader rtp_info;
714 PopulateRtpInfo(seq_no, timestamp, &rtp_info); 716 PopulateRtpInfo(seq_no, timestamp, &rtp_info);
715 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, kPayloadBytes, 0)); 717 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, 0));
716 ++seq_no; 718 ++seq_no;
717 timestamp += kSamples; 719 timestamp += kSamples;
718 next_input_time_ms += kFrameSizeMs * drift_factor; 720 next_input_time_ms += kFrameSizeMs * drift_factor;
719 } 721 }
720 // Pull out data once. 722 // Pull out data once.
721 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len, 723 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len,
722 &num_channels, &type)); 724 &num_channels, &type));
723 ASSERT_EQ(kBlockSize16kHz, out_len); 725 ASSERT_EQ(kBlockSize16kHz, out_len);
724 // Increase clock. 726 // Increase clock.
725 t_ms += 10; 727 t_ms += 10;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
816 kDelayToleranceMs, 818 kDelayToleranceMs,
817 kMaxTimeToSpeechMs); 819 kMaxTimeToSpeechMs);
818 } 820 }
819 821
820 TEST_F(NetEqDecodingTest, UnknownPayloadType) { 822 TEST_F(NetEqDecodingTest, UnknownPayloadType) {
821 const size_t kPayloadBytes = 100; 823 const size_t kPayloadBytes = 100;
822 uint8_t payload[kPayloadBytes] = {0}; 824 uint8_t payload[kPayloadBytes] = {0};
823 WebRtcRTPHeader rtp_info; 825 WebRtcRTPHeader rtp_info;
824 PopulateRtpInfo(0, 0, &rtp_info); 826 PopulateRtpInfo(0, 0, &rtp_info);
825 rtp_info.header.payloadType = 1; // Not registered as a decoder. 827 rtp_info.header.payloadType = 1; // Not registered as a decoder.
826 EXPECT_EQ(NetEq::kFail, 828 EXPECT_EQ(NetEq::kFail, neteq_->InsertPacket(rtp_info, payload, 0));
827 neteq_->InsertPacket(rtp_info, payload, kPayloadBytes, 0));
828 EXPECT_EQ(NetEq::kUnknownRtpPayloadType, neteq_->LastError()); 829 EXPECT_EQ(NetEq::kUnknownRtpPayloadType, neteq_->LastError());
829 } 830 }
830 831
831 #if defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX) 832 #if defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX)
832 #define IF_ISAC(x) x 833 #define IF_ISAC(x) x
833 #else 834 #else
834 #define IF_ISAC(x) DISABLED_##x 835 #define IF_ISAC(x) DISABLED_##x
835 #endif 836 #endif
836 837
837 TEST_F(NetEqDecodingTest, DISABLED_ON_ANDROID(IF_ISAC(DecoderError))) { 838 TEST_F(NetEqDecodingTest, DISABLED_ON_ANDROID(IF_ISAC(DecoderError))) {
838 const size_t kPayloadBytes = 100; 839 const size_t kPayloadBytes = 100;
839 uint8_t payload[kPayloadBytes] = {0}; 840 uint8_t payload[kPayloadBytes] = {0};
840 WebRtcRTPHeader rtp_info; 841 WebRtcRTPHeader rtp_info;
841 PopulateRtpInfo(0, 0, &rtp_info); 842 PopulateRtpInfo(0, 0, &rtp_info);
842 rtp_info.header.payloadType = 103; // iSAC, but the payload is invalid. 843 rtp_info.header.payloadType = 103; // iSAC, but the payload is invalid.
843 EXPECT_EQ(0, neteq_->InsertPacket(rtp_info, payload, kPayloadBytes, 0)); 844 EXPECT_EQ(0, neteq_->InsertPacket(rtp_info, payload, 0));
844 NetEqOutputType type; 845 NetEqOutputType type;
845 // Set all of |out_data_| to 1, and verify that it was set to 0 by the call 846 // Set all of |out_data_| to 1, and verify that it was set to 0 by the call
846 // to GetAudio. 847 // to GetAudio.
847 for (size_t i = 0; i < kMaxBlockSize; ++i) { 848 for (size_t i = 0; i < kMaxBlockSize; ++i) {
848 out_data_[i] = 1; 849 out_data_[i] = 1;
849 } 850 }
850 int num_channels; 851 int num_channels;
851 size_t samples_per_channel; 852 size_t samples_per_channel;
852 EXPECT_EQ(NetEq::kFail, 853 EXPECT_EQ(NetEq::kFail,
853 neteq_->GetAudio(kMaxBlockSize, out_data_, 854 neteq_->GetAudio(kMaxBlockSize, out_data_,
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
940 uint32_t receive_timestamp = 0; 941 uint32_t receive_timestamp = 0;
941 for (int n = 0; n < 10; ++n) { // Insert few packets and get audio. 942 for (int n = 0; n < 10; ++n) { // Insert few packets and get audio.
942 auto block = input.GetNextBlock(); 943 auto block = input.GetNextBlock();
943 ASSERT_EQ(expected_samples_per_channel, block.size()); 944 ASSERT_EQ(expected_samples_per_channel, block.size());
944 size_t enc_len_bytes = 945 size_t enc_len_bytes =
945 WebRtcPcm16b_Encode(block.data(), block.size(), payload); 946 WebRtcPcm16b_Encode(block.data(), block.size(), payload);
946 ASSERT_EQ(enc_len_bytes, expected_samples_per_channel * 2); 947 ASSERT_EQ(enc_len_bytes, expected_samples_per_channel * 2);
947 948
948 number_channels = 0; 949 number_channels = 0;
949 samples_per_channel = 0; 950 samples_per_channel = 0;
950 ASSERT_EQ(0, 951 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, rtc::ArrayView<const uint8_t>(
951 neteq_->InsertPacket(rtp_info, payload, enc_len_bytes, 952 payload, enc_len_bytes),
952 receive_timestamp)); 953 receive_timestamp));
953 ASSERT_EQ(0, 954 ASSERT_EQ(0,
954 neteq_->GetAudio(kBlockSize32kHz, 955 neteq_->GetAudio(kBlockSize32kHz,
955 output, 956 output,
956 &samples_per_channel, 957 &samples_per_channel,
957 &number_channels, 958 &number_channels,
958 &type)); 959 &type));
959 ASSERT_EQ(1, number_channels); 960 ASSERT_EQ(1, number_channels);
960 ASSERT_EQ(expected_samples_per_channel, samples_per_channel); 961 ASSERT_EQ(expected_samples_per_channel, samples_per_channel);
961 ASSERT_EQ(kOutputNormal, type); 962 ASSERT_EQ(kOutputNormal, type);
962 963
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
1101 1102
1102 PopulateRtpInfo(0, 0, &rtp_info); 1103 PopulateRtpInfo(0, 0, &rtp_info);
1103 rtp_info.header.payloadType = kPcm16WbPayloadType; 1104 rtp_info.header.payloadType = kPcm16WbPayloadType;
1104 1105
1105 // The first packet injected cannot be sync-packet. 1106 // The first packet injected cannot be sync-packet.
1106 EXPECT_EQ(-1, neteq_->InsertSyncPacket(rtp_info, receive_timestamp)); 1107 EXPECT_EQ(-1, neteq_->InsertSyncPacket(rtp_info, receive_timestamp));
1107 1108
1108 // Payload length of 10 ms PCM16 16 kHz. 1109 // Payload length of 10 ms PCM16 16 kHz.
1109 const size_t kPayloadBytes = kBlockSize16kHz * sizeof(int16_t); 1110 const size_t kPayloadBytes = kBlockSize16kHz * sizeof(int16_t);
1110 uint8_t payload[kPayloadBytes] = {0}; 1111 uint8_t payload[kPayloadBytes] = {0};
1111 ASSERT_EQ(0, neteq_->InsertPacket( 1112 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, receive_timestamp));
1112 rtp_info, payload, kPayloadBytes, receive_timestamp));
1113 1113
1114 // Next packet. Last packet contained 10 ms audio. 1114 // Next packet. Last packet contained 10 ms audio.
1115 rtp_info.header.sequenceNumber++; 1115 rtp_info.header.sequenceNumber++;
1116 rtp_info.header.timestamp += kBlockSize16kHz; 1116 rtp_info.header.timestamp += kBlockSize16kHz;
1117 receive_timestamp += kBlockSize16kHz; 1117 receive_timestamp += kBlockSize16kHz;
1118 1118
1119 // Unacceptable payload types CNG, AVT (DTMF), RED. 1119 // Unacceptable payload types CNG, AVT (DTMF), RED.
1120 rtp_info.header.payloadType = kCngNbPayloadType; 1120 rtp_info.header.payloadType = kCngNbPayloadType;
1121 EXPECT_EQ(-1, neteq_->InsertSyncPacket(rtp_info, receive_timestamp)); 1121 EXPECT_EQ(-1, neteq_->InsertSyncPacket(rtp_info, receive_timestamp));
1122 1122
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1164 for (size_t n = 0; n < kPayloadBytes; ++n) { 1164 for (size_t n = 0; n < kPayloadBytes; ++n) {
1165 payload[n] = (rand() & 0xF0) + 1; // Non-zero random sequence. 1165 payload[n] = (rand() & 0xF0) + 1; // Non-zero random sequence.
1166 } 1166 }
1167 // Insert some packets which decode to noise. We are not interested in 1167 // Insert some packets which decode to noise. We are not interested in
1168 // actual decoded values. 1168 // actual decoded values.
1169 NetEqOutputType output_type; 1169 NetEqOutputType output_type;
1170 int num_channels; 1170 int num_channels;
1171 size_t samples_per_channel; 1171 size_t samples_per_channel;
1172 uint32_t receive_timestamp = 0; 1172 uint32_t receive_timestamp = 0;
1173 for (int n = 0; n < 100; ++n) { 1173 for (int n = 0; n < 100; ++n) {
1174 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, kPayloadBytes, 1174 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, receive_timestamp));
1175 receive_timestamp));
1176 ASSERT_EQ(0, neteq_->GetAudio(kBlockSize16kHz, decoded, 1175 ASSERT_EQ(0, neteq_->GetAudio(kBlockSize16kHz, decoded,
1177 &samples_per_channel, &num_channels, 1176 &samples_per_channel, &num_channels,
1178 &output_type)); 1177 &output_type));
1179 ASSERT_EQ(kBlockSize16kHz, samples_per_channel); 1178 ASSERT_EQ(kBlockSize16kHz, samples_per_channel);
1180 ASSERT_EQ(1, num_channels); 1179 ASSERT_EQ(1, num_channels);
1181 1180
1182 rtp_info.header.sequenceNumber++; 1181 rtp_info.header.sequenceNumber++;
1183 rtp_info.header.timestamp += kBlockSize16kHz; 1182 rtp_info.header.timestamp += kBlockSize16kHz;
1184 receive_timestamp += kBlockSize16kHz; 1183 receive_timestamp += kBlockSize16kHz;
1185 } 1184 }
(...skipping 14 matching lines...) Expand all
1200 EXPECT_TRUE(IsAllZero(decoded, samples_per_channel * num_channels)); 1199 EXPECT_TRUE(IsAllZero(decoded, samples_per_channel * num_channels));
1201 } 1200 }
1202 rtp_info.header.sequenceNumber++; 1201 rtp_info.header.sequenceNumber++;
1203 rtp_info.header.timestamp += kBlockSize16kHz; 1202 rtp_info.header.timestamp += kBlockSize16kHz;
1204 receive_timestamp += kBlockSize16kHz; 1203 receive_timestamp += kBlockSize16kHz;
1205 } 1204 }
1206 1205
1207 // We insert regular packets, if sync packet are not correctly buffered then 1206 // We insert regular packets, if sync packet are not correctly buffered then
1208 // network statistics would show some packet loss. 1207 // network statistics would show some packet loss.
1209 for (int n = 0; n <= algorithmic_frame_delay + 10; ++n) { 1208 for (int n = 0; n <= algorithmic_frame_delay + 10; ++n) {
1210 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, kPayloadBytes, 1209 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, receive_timestamp));
1211 receive_timestamp));
1212 ASSERT_EQ(0, neteq_->GetAudio(kBlockSize16kHz, decoded, 1210 ASSERT_EQ(0, neteq_->GetAudio(kBlockSize16kHz, decoded,
1213 &samples_per_channel, &num_channels, 1211 &samples_per_channel, &num_channels,
1214 &output_type)); 1212 &output_type));
1215 if (n >= algorithmic_frame_delay + 1) { 1213 if (n >= algorithmic_frame_delay + 1) {
1216 // Expect that this frame contain samples from regular RTP. 1214 // Expect that this frame contain samples from regular RTP.
1217 EXPECT_TRUE(IsAllNonZero(decoded, samples_per_channel * num_channels)); 1215 EXPECT_TRUE(IsAllNonZero(decoded, samples_per_channel * num_channels));
1218 } 1216 }
1219 rtp_info.header.sequenceNumber++; 1217 rtp_info.header.sequenceNumber++;
1220 rtp_info.header.timestamp += kBlockSize16kHz; 1218 rtp_info.header.timestamp += kBlockSize16kHz;
1221 receive_timestamp += kBlockSize16kHz; 1219 receive_timestamp += kBlockSize16kHz;
(...skipping 21 matching lines...) Expand all
1243 payload[n] = (rand() & 0xF0) + 1; // Non-zero random sequence. 1241 payload[n] = (rand() & 0xF0) + 1; // Non-zero random sequence.
1244 } 1242 }
1245 // Insert some packets which decode to noise. We are not interested in 1243 // Insert some packets which decode to noise. We are not interested in
1246 // actual decoded values. 1244 // actual decoded values.
1247 NetEqOutputType output_type; 1245 NetEqOutputType output_type;
1248 int num_channels; 1246 int num_channels;
1249 size_t samples_per_channel; 1247 size_t samples_per_channel;
1250 uint32_t receive_timestamp = 0; 1248 uint32_t receive_timestamp = 0;
1251 int algorithmic_frame_delay = algorithmic_delay_ms_ / 10 + 1; 1249 int algorithmic_frame_delay = algorithmic_delay_ms_ / 10 + 1;
1252 for (int n = 0; n < algorithmic_frame_delay; ++n) { 1250 for (int n = 0; n < algorithmic_frame_delay; ++n) {
1253 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, kPayloadBytes, 1251 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, receive_timestamp));
1254 receive_timestamp));
1255 ASSERT_EQ(0, neteq_->GetAudio(kBlockSize16kHz, decoded, 1252 ASSERT_EQ(0, neteq_->GetAudio(kBlockSize16kHz, decoded,
1256 &samples_per_channel, &num_channels, 1253 &samples_per_channel, &num_channels,
1257 &output_type)); 1254 &output_type));
1258 ASSERT_EQ(kBlockSize16kHz, samples_per_channel); 1255 ASSERT_EQ(kBlockSize16kHz, samples_per_channel);
1259 ASSERT_EQ(1, num_channels); 1256 ASSERT_EQ(1, num_channels);
1260 rtp_info.header.sequenceNumber++; 1257 rtp_info.header.sequenceNumber++;
1261 rtp_info.header.timestamp += kBlockSize16kHz; 1258 rtp_info.header.timestamp += kBlockSize16kHz;
1262 receive_timestamp += kBlockSize16kHz; 1259 receive_timestamp += kBlockSize16kHz;
1263 } 1260 }
1264 const int kNumSyncPackets = 10; 1261 const int kNumSyncPackets = 10;
(...skipping 11 matching lines...) Expand all
1276 NetEqNetworkStatistics network_stats; 1273 NetEqNetworkStatistics network_stats;
1277 ASSERT_EQ(0, neteq_->NetworkStatistics(&network_stats)); 1274 ASSERT_EQ(0, neteq_->NetworkStatistics(&network_stats));
1278 EXPECT_EQ(kNumSyncPackets * 10 + algorithmic_delay_ms_, 1275 EXPECT_EQ(kNumSyncPackets * 10 + algorithmic_delay_ms_,
1279 network_stats.current_buffer_size_ms); 1276 network_stats.current_buffer_size_ms);
1280 1277
1281 // Rewind |rtp_info| to that of the first sync packet. 1278 // Rewind |rtp_info| to that of the first sync packet.
1282 memcpy(&rtp_info, &first_sync_packet_rtp_info, sizeof(rtp_info)); 1279 memcpy(&rtp_info, &first_sync_packet_rtp_info, sizeof(rtp_info));
1283 1280
1284 // Insert. 1281 // Insert.
1285 for (int n = 0; n < kNumSyncPackets; ++n) { 1282 for (int n = 0; n < kNumSyncPackets; ++n) {
1286 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, kPayloadBytes, 1283 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, receive_timestamp));
1287 receive_timestamp));
1288 rtp_info.header.sequenceNumber++; 1284 rtp_info.header.sequenceNumber++;
1289 rtp_info.header.timestamp += kBlockSize16kHz; 1285 rtp_info.header.timestamp += kBlockSize16kHz;
1290 receive_timestamp += kBlockSize16kHz; 1286 receive_timestamp += kBlockSize16kHz;
1291 } 1287 }
1292 1288
1293 // Decode. 1289 // Decode.
1294 for (int n = 0; n < kNumSyncPackets; ++n) { 1290 for (int n = 0; n < kNumSyncPackets; ++n) {
1295 ASSERT_EQ(0, neteq_->GetAudio(kBlockSize16kHz, decoded, 1291 ASSERT_EQ(0, neteq_->GetAudio(kBlockSize16kHz, decoded,
1296 &samples_per_channel, &num_channels, 1292 &samples_per_channel, &num_channels,
1297 &output_type)); 1293 &output_type));
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1329 for (double t_ms = 0; t_ms < kSpeechDurationMs; t_ms += 10) { 1325 for (double t_ms = 0; t_ms < kSpeechDurationMs; t_ms += 10) {
1330 // Each turn in this for loop is 10 ms. 1326 // Each turn in this for loop is 10 ms.
1331 while (next_input_time_ms <= t_ms) { 1327 while (next_input_time_ms <= t_ms) {
1332 // Insert one 30 ms speech frame. 1328 // Insert one 30 ms speech frame.
1333 uint8_t payload[kPayloadBytes] = {0}; 1329 uint8_t payload[kPayloadBytes] = {0};
1334 WebRtcRTPHeader rtp_info; 1330 WebRtcRTPHeader rtp_info;
1335 PopulateRtpInfo(seq_no, timestamp, &rtp_info); 1331 PopulateRtpInfo(seq_no, timestamp, &rtp_info);
1336 if (drop_seq_numbers.find(seq_no) == drop_seq_numbers.end()) { 1332 if (drop_seq_numbers.find(seq_no) == drop_seq_numbers.end()) {
1337 // This sequence number was not in the set to drop. Insert it. 1333 // This sequence number was not in the set to drop. Insert it.
1338 ASSERT_EQ(0, 1334 ASSERT_EQ(0,
1339 neteq_->InsertPacket(rtp_info, payload, kPayloadBytes, 1335 neteq_->InsertPacket(rtp_info, payload, receive_timestamp));
1340 receive_timestamp));
1341 ++packets_inserted; 1336 ++packets_inserted;
1342 } 1337 }
1343 NetEqNetworkStatistics network_stats; 1338 NetEqNetworkStatistics network_stats;
1344 ASSERT_EQ(0, neteq_->NetworkStatistics(&network_stats)); 1339 ASSERT_EQ(0, neteq_->NetworkStatistics(&network_stats));
1345 1340
1346 // Due to internal NetEq logic, preferred buffer-size is about 4 times the 1341 // Due to internal NetEq logic, preferred buffer-size is about 4 times the
1347 // packet size for first few packets. Therefore we refrain from checking 1342 // packet size for first few packets. Therefore we refrain from checking
1348 // the criteria. 1343 // the criteria.
1349 if (packets_inserted > 4) { 1344 if (packets_inserted > 4) {
1350 // Expect preferred and actual buffer size to be no more than 2 frames. 1345 // Expect preferred and actual buffer size to be no more than 2 frames.
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1418 algorithmic_delay_ms_ * kSampleRateKhz, 5 * kSampleRateKhz / 8); 1413 algorithmic_delay_ms_ * kSampleRateKhz, 5 * kSampleRateKhz / 8);
1419 // Insert three speech packets. Three are needed to get the frame length 1414 // Insert three speech packets. Three are needed to get the frame length
1420 // correct. 1415 // correct.
1421 size_t out_len; 1416 size_t out_len;
1422 int num_channels; 1417 int num_channels;
1423 NetEqOutputType type; 1418 NetEqOutputType type;
1424 uint8_t payload[kPayloadBytes] = {0}; 1419 uint8_t payload[kPayloadBytes] = {0};
1425 WebRtcRTPHeader rtp_info; 1420 WebRtcRTPHeader rtp_info;
1426 for (int i = 0; i < 3; ++i) { 1421 for (int i = 0; i < 3; ++i) {
1427 PopulateRtpInfo(seq_no, timestamp, &rtp_info); 1422 PopulateRtpInfo(seq_no, timestamp, &rtp_info);
1428 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, kPayloadBytes, 0)); 1423 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, 0));
1429 ++seq_no; 1424 ++seq_no;
1430 timestamp += kSamples; 1425 timestamp += kSamples;
1431 1426
1432 // Pull audio once. 1427 // Pull audio once.
1433 ASSERT_EQ(0, 1428 ASSERT_EQ(0,
1434 neteq_->GetAudio( 1429 neteq_->GetAudio(
1435 kMaxBlockSize, out_data_, &out_len, &num_channels, &type)); 1430 kMaxBlockSize, out_data_, &out_len, &num_channels, &type));
1436 ASSERT_EQ(kBlockSize16kHz, out_len); 1431 ASSERT_EQ(kBlockSize16kHz, out_len);
1437 } 1432 }
1438 // Verify speech output. 1433 // Verify speech output.
1439 EXPECT_EQ(kOutputNormal, type); 1434 EXPECT_EQ(kOutputNormal, type);
1440 1435
1441 // Insert same CNG packet twice. 1436 // Insert same CNG packet twice.
1442 const int kCngPeriodMs = 100; 1437 const int kCngPeriodMs = 100;
1443 const int kCngPeriodSamples = kCngPeriodMs * kSampleRateKhz; 1438 const int kCngPeriodSamples = kCngPeriodMs * kSampleRateKhz;
1444 size_t payload_len; 1439 size_t payload_len;
1445 PopulateCng(seq_no, timestamp, &rtp_info, payload, &payload_len); 1440 PopulateCng(seq_no, timestamp, &rtp_info, payload, &payload_len);
1446 // This is the first time this CNG packet is inserted. 1441 // This is the first time this CNG packet is inserted.
1447 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, payload_len, 0)); 1442 ASSERT_EQ(
1443 0, neteq_->InsertPacket(
1444 rtp_info, rtc::ArrayView<const uint8_t>(payload, payload_len), 0));
1448 1445
1449 // Pull audio once and make sure CNG is played. 1446 // Pull audio once and make sure CNG is played.
1450 ASSERT_EQ(0, 1447 ASSERT_EQ(0,
1451 neteq_->GetAudio( 1448 neteq_->GetAudio(
1452 kMaxBlockSize, out_data_, &out_len, &num_channels, &type)); 1449 kMaxBlockSize, out_data_, &out_len, &num_channels, &type));
1453 ASSERT_EQ(kBlockSize16kHz, out_len); 1450 ASSERT_EQ(kBlockSize16kHz, out_len);
1454 EXPECT_EQ(kOutputCNG, type); 1451 EXPECT_EQ(kOutputCNG, type);
1455 EXPECT_EQ(timestamp - algorithmic_delay_samples, PlayoutTimestamp()); 1452 EXPECT_EQ(timestamp - algorithmic_delay_samples, PlayoutTimestamp());
1456 1453
1457 // Insert the same CNG packet again. Note that at this point it is old, since 1454 // Insert the same CNG packet again. Note that at this point it is old, since
1458 // we have already decoded the first copy of it. 1455 // we have already decoded the first copy of it.
1459 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, payload_len, 0)); 1456 ASSERT_EQ(
1457 0, neteq_->InsertPacket(
1458 rtp_info, rtc::ArrayView<const uint8_t>(payload, payload_len), 0));
1460 1459
1461 // Pull audio until we have played |kCngPeriodMs| of CNG. Start at 10 ms since 1460 // Pull audio until we have played |kCngPeriodMs| of CNG. Start at 10 ms since
1462 // we have already pulled out CNG once. 1461 // we have already pulled out CNG once.
1463 for (int cng_time_ms = 10; cng_time_ms < kCngPeriodMs; cng_time_ms += 10) { 1462 for (int cng_time_ms = 10; cng_time_ms < kCngPeriodMs; cng_time_ms += 10) {
1464 ASSERT_EQ(0, 1463 ASSERT_EQ(0,
1465 neteq_->GetAudio( 1464 neteq_->GetAudio(
1466 kMaxBlockSize, out_data_, &out_len, &num_channels, &type)); 1465 kMaxBlockSize, out_data_, &out_len, &num_channels, &type));
1467 ASSERT_EQ(kBlockSize16kHz, out_len); 1466 ASSERT_EQ(kBlockSize16kHz, out_len);
1468 EXPECT_EQ(kOutputCNG, type); 1467 EXPECT_EQ(kOutputCNG, type);
1469 EXPECT_EQ(timestamp - algorithmic_delay_samples, 1468 EXPECT_EQ(timestamp - algorithmic_delay_samples,
1470 PlayoutTimestamp()); 1469 PlayoutTimestamp());
1471 } 1470 }
1472 1471
1473 // Insert speech again. 1472 // Insert speech again.
1474 ++seq_no; 1473 ++seq_no;
1475 timestamp += kCngPeriodSamples; 1474 timestamp += kCngPeriodSamples;
1476 PopulateRtpInfo(seq_no, timestamp, &rtp_info); 1475 PopulateRtpInfo(seq_no, timestamp, &rtp_info);
1477 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, kPayloadBytes, 0)); 1476 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, 0));
1478 1477
1479 // Pull audio once and verify that the output is speech again. 1478 // Pull audio once and verify that the output is speech again.
1480 ASSERT_EQ(0, 1479 ASSERT_EQ(0,
1481 neteq_->GetAudio( 1480 neteq_->GetAudio(
1482 kMaxBlockSize, out_data_, &out_len, &num_channels, &type)); 1481 kMaxBlockSize, out_data_, &out_len, &num_channels, &type));
1483 ASSERT_EQ(kBlockSize16kHz, out_len); 1482 ASSERT_EQ(kBlockSize16kHz, out_len);
1484 EXPECT_EQ(kOutputNormal, type); 1483 EXPECT_EQ(kOutputNormal, type);
1485 EXPECT_EQ(timestamp + kSamples - algorithmic_delay_samples, 1484 EXPECT_EQ(timestamp + kSamples - algorithmic_delay_samples,
1486 PlayoutTimestamp()); 1485 PlayoutTimestamp());
1487 } 1486 }
(...skipping 14 matching lines...) Expand all
1502 const int kSamples = kFrameSizeMs * kSampleRateKhz; 1501 const int kSamples = kFrameSizeMs * kSampleRateKhz;
1503 const int kPayloadBytes = kSamples * 2; 1502 const int kPayloadBytes = kSamples * 2;
1504 const int kCngPeriodMs = 100; 1503 const int kCngPeriodMs = 100;
1505 const int kCngPeriodSamples = kCngPeriodMs * kSampleRateKhz; 1504 const int kCngPeriodSamples = kCngPeriodMs * kSampleRateKhz;
1506 size_t payload_len; 1505 size_t payload_len;
1507 1506
1508 uint8_t payload[kPayloadBytes] = {0}; 1507 uint8_t payload[kPayloadBytes] = {0};
1509 WebRtcRTPHeader rtp_info; 1508 WebRtcRTPHeader rtp_info;
1510 1509
1511 PopulateCng(seq_no, timestamp, &rtp_info, payload, &payload_len); 1510 PopulateCng(seq_no, timestamp, &rtp_info, payload, &payload_len);
1512 ASSERT_EQ(NetEq::kOK, 1511 ASSERT_EQ(
1513 neteq_->InsertPacket(rtp_info, payload, payload_len, 0)); 1512 NetEq::kOK,
1513 neteq_->InsertPacket(
1514 rtp_info, rtc::ArrayView<const uint8_t>(payload, payload_len), 0));
1514 ++seq_no; 1515 ++seq_no;
1515 timestamp += kCngPeriodSamples; 1516 timestamp += kCngPeriodSamples;
1516 1517
1517 // Pull audio once and make sure CNG is played. 1518 // Pull audio once and make sure CNG is played.
1518 size_t out_len; 1519 size_t out_len;
1519 int num_channels; 1520 int num_channels;
1520 NetEqOutputType type; 1521 NetEqOutputType type;
1521 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len, 1522 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len,
1522 &num_channels, &type)); 1523 &num_channels, &type));
1523 ASSERT_EQ(kBlockSize16kHz, out_len); 1524 ASSERT_EQ(kBlockSize16kHz, out_len);
1524 EXPECT_EQ(kOutputCNG, type); 1525 EXPECT_EQ(kOutputCNG, type);
1525 1526
1526 // Insert some speech packets. 1527 // Insert some speech packets.
1527 for (int i = 0; i < 3; ++i) { 1528 for (int i = 0; i < 3; ++i) {
1528 PopulateRtpInfo(seq_no, timestamp, &rtp_info); 1529 PopulateRtpInfo(seq_no, timestamp, &rtp_info);
1529 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, kPayloadBytes, 0)); 1530 ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, 0));
1530 ++seq_no; 1531 ++seq_no;
1531 timestamp += kSamples; 1532 timestamp += kSamples;
1532 1533
1533 // Pull audio once. 1534 // Pull audio once.
1534 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len, 1535 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len,
1535 &num_channels, &type)); 1536 &num_channels, &type));
1536 ASSERT_EQ(kBlockSize16kHz, out_len); 1537 ASSERT_EQ(kBlockSize16kHz, out_len);
1537 } 1538 }
1538 // Verify speech output. 1539 // Verify speech output.
1539 EXPECT_EQ(kOutputNormal, type); 1540 EXPECT_EQ(kOutputNormal, type);
1540 } 1541 }
1541 1542
1542 } // namespace webrtc 1543 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698