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

Side by Side Diff: webrtc/modules/audio_coding/neteq/neteq_impl_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) 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 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 EXPECT_CALL(*mock_delay_manager_, SetPacketAudioLength(30)) 352 EXPECT_CALL(*mock_delay_manager_, SetPacketAudioLength(30))
353 .WillOnce(Return(0)); 353 .WillOnce(Return(0));
354 } 354 }
355 355
356 // Expectations for payload splitter. 356 // Expectations for payload splitter.
357 EXPECT_CALL(*mock_payload_splitter_, SplitAudio(_, _)) 357 EXPECT_CALL(*mock_payload_splitter_, SplitAudio(_, _))
358 .Times(2) 358 .Times(2)
359 .WillRepeatedly(Return(PayloadSplitter::kOK)); 359 .WillRepeatedly(Return(PayloadSplitter::kOK));
360 360
361 // Insert first packet. 361 // Insert first packet.
362 neteq_->InsertPacket(rtp_header, payload, kPayloadLength, kFirstReceiveTime); 362 neteq_->InsertPacket(rtp_header, payload, kFirstReceiveTime);
363 363
364 // Insert second packet. 364 // Insert second packet.
365 rtp_header.header.timestamp += 160; 365 rtp_header.header.timestamp += 160;
366 rtp_header.header.sequenceNumber += 1; 366 rtp_header.header.sequenceNumber += 1;
367 neteq_->InsertPacket(rtp_header, payload, kPayloadLength, 367 neteq_->InsertPacket(rtp_header, payload, kFirstReceiveTime + 155);
368 kFirstReceiveTime + 155);
369 } 368 }
370 369
371 TEST_F(NetEqImplTest, InsertPacketsUntilBufferIsFull) { 370 TEST_F(NetEqImplTest, InsertPacketsUntilBufferIsFull) {
372 UseNoMocks(); 371 UseNoMocks();
373 CreateInstance(); 372 CreateInstance();
374 373
375 const int kPayloadLengthSamples = 80; 374 const int kPayloadLengthSamples = 80;
376 const size_t kPayloadLengthBytes = 2 * kPayloadLengthSamples; // PCM 16-bit. 375 const size_t kPayloadLengthBytes = 2 * kPayloadLengthSamples; // PCM 16-bit.
377 const uint8_t kPayloadType = 17; // Just an arbitrary number. 376 const uint8_t kPayloadType = 17; // Just an arbitrary number.
378 const uint32_t kReceiveTime = 17; // Value doesn't matter for this test. 377 const uint32_t kReceiveTime = 17; // Value doesn't matter for this test.
379 uint8_t payload[kPayloadLengthBytes] = {0}; 378 uint8_t payload[kPayloadLengthBytes] = {0};
380 WebRtcRTPHeader rtp_header; 379 WebRtcRTPHeader rtp_header;
381 rtp_header.header.payloadType = kPayloadType; 380 rtp_header.header.payloadType = kPayloadType;
382 rtp_header.header.sequenceNumber = 0x1234; 381 rtp_header.header.sequenceNumber = 0x1234;
383 rtp_header.header.timestamp = 0x12345678; 382 rtp_header.header.timestamp = 0x12345678;
384 rtp_header.header.ssrc = 0x87654321; 383 rtp_header.header.ssrc = 0x87654321;
385 384
386 EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType( 385 EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType(
387 NetEqDecoder::kDecoderPCM16B, kPayloadType)); 386 NetEqDecoder::kDecoderPCM16B, kPayloadType));
388 387
389 // Insert packets. The buffer should not flush. 388 // Insert packets. The buffer should not flush.
390 for (size_t i = 1; i <= config_.max_packets_in_buffer; ++i) { 389 for (size_t i = 1; i <= config_.max_packets_in_buffer; ++i) {
391 EXPECT_EQ(NetEq::kOK, 390 EXPECT_EQ(NetEq::kOK,
392 neteq_->InsertPacket( 391 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
393 rtp_header, payload, kPayloadLengthBytes, kReceiveTime));
394 rtp_header.header.timestamp += kPayloadLengthSamples; 392 rtp_header.header.timestamp += kPayloadLengthSamples;
395 rtp_header.header.sequenceNumber += 1; 393 rtp_header.header.sequenceNumber += 1;
396 EXPECT_EQ(i, packet_buffer_->NumPacketsInBuffer()); 394 EXPECT_EQ(i, packet_buffer_->NumPacketsInBuffer());
397 } 395 }
398 396
399 // Insert one more packet and make sure the buffer got flushed. That is, it 397 // Insert one more packet and make sure the buffer got flushed. That is, it
400 // should only hold one single packet. 398 // should only hold one single packet.
401 EXPECT_EQ(NetEq::kOK, 399 EXPECT_EQ(NetEq::kOK,
402 neteq_->InsertPacket( 400 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
403 rtp_header, payload, kPayloadLengthBytes, kReceiveTime));
404 EXPECT_EQ(1u, packet_buffer_->NumPacketsInBuffer()); 401 EXPECT_EQ(1u, packet_buffer_->NumPacketsInBuffer());
405 const RTPHeader* test_header = packet_buffer_->NextRtpHeader(); 402 const RTPHeader* test_header = packet_buffer_->NextRtpHeader();
406 EXPECT_EQ(rtp_header.header.timestamp, test_header->timestamp); 403 EXPECT_EQ(rtp_header.header.timestamp, test_header->timestamp);
407 EXPECT_EQ(rtp_header.header.sequenceNumber, test_header->sequenceNumber); 404 EXPECT_EQ(rtp_header.header.sequenceNumber, test_header->sequenceNumber);
408 } 405 }
409 406
410 // This test verifies that timestamps propagate from the incoming packets 407 // This test verifies that timestamps propagate from the incoming packets
411 // through to the sync buffer and to the playout timestamp. 408 // through to the sync buffer and to the playout timestamp.
412 TEST_F(NetEqImplTest, VerifyTimestampPropagation) { 409 TEST_F(NetEqImplTest, VerifyTimestampPropagation) {
413 UseNoMocks(); 410 UseNoMocks();
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 private: 453 private:
457 int16_t next_value_; 454 int16_t next_value_;
458 } decoder_; 455 } decoder_;
459 456
460 EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( 457 EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder(
461 &decoder_, NetEqDecoder::kDecoderPCM16B, 458 &decoder_, NetEqDecoder::kDecoderPCM16B,
462 kPayloadType, kSampleRateHz)); 459 kPayloadType, kSampleRateHz));
463 460
464 // Insert one packet. 461 // Insert one packet.
465 EXPECT_EQ(NetEq::kOK, 462 EXPECT_EQ(NetEq::kOK,
466 neteq_->InsertPacket( 463 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
467 rtp_header, payload, kPayloadLengthBytes, kReceiveTime));
468 464
469 // Pull audio once. 465 // Pull audio once.
470 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); 466 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000);
471 int16_t output[kMaxOutputSize]; 467 int16_t output[kMaxOutputSize];
472 size_t samples_per_channel; 468 size_t samples_per_channel;
473 int num_channels; 469 int num_channels;
474 NetEqOutputType type; 470 NetEqOutputType type;
475 EXPECT_EQ( 471 EXPECT_EQ(
476 NetEq::kOK, 472 NetEq::kOK,
477 neteq_->GetAudio( 473 neteq_->GetAudio(
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 .WillOnce(DoAll(SetArrayArgument<4>(dummy_output, 532 .WillOnce(DoAll(SetArrayArgument<4>(dummy_output,
537 dummy_output + kPayloadLengthSamples), 533 dummy_output + kPayloadLengthSamples),
538 SetArgPointee<5>(AudioDecoder::kSpeech), 534 SetArgPointee<5>(AudioDecoder::kSpeech),
539 Return(kPayloadLengthSamples))); 535 Return(kPayloadLengthSamples)));
540 EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( 536 EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder(
541 &mock_decoder, NetEqDecoder::kDecoderPCM16B, 537 &mock_decoder, NetEqDecoder::kDecoderPCM16B,
542 kPayloadType, kSampleRateHz)); 538 kPayloadType, kSampleRateHz));
543 539
544 // Insert one packet. 540 // Insert one packet.
545 EXPECT_EQ(NetEq::kOK, 541 EXPECT_EQ(NetEq::kOK,
546 neteq_->InsertPacket( 542 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
547 rtp_header, payload, kPayloadLengthBytes, kReceiveTime));
548 543
549 // Pull audio once. 544 // Pull audio once.
550 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); 545 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000);
551 int16_t output[kMaxOutputSize]; 546 int16_t output[kMaxOutputSize];
552 size_t samples_per_channel; 547 size_t samples_per_channel;
553 int num_channels; 548 int num_channels;
554 NetEqOutputType type; 549 NetEqOutputType type;
555 EXPECT_EQ( 550 EXPECT_EQ(
556 NetEq::kOK, 551 NetEq::kOK,
557 neteq_->GetAudio( 552 neteq_->GetAudio(
558 kMaxOutputSize, output, &samples_per_channel, &num_channels, &type)); 553 kMaxOutputSize, output, &samples_per_channel, &num_channels, &type));
559 ASSERT_EQ(kMaxOutputSize, samples_per_channel); 554 ASSERT_EQ(kMaxOutputSize, samples_per_channel);
560 EXPECT_EQ(1, num_channels); 555 EXPECT_EQ(1, num_channels);
561 EXPECT_EQ(kOutputNormal, type); 556 EXPECT_EQ(kOutputNormal, type);
562 557
563 // Insert two more packets. The first one is out of order, and is already too 558 // Insert two more packets. The first one is out of order, and is already too
564 // old, the second one is the expected next packet. 559 // old, the second one is the expected next packet.
565 rtp_header.header.sequenceNumber -= 1; 560 rtp_header.header.sequenceNumber -= 1;
566 rtp_header.header.timestamp -= kPayloadLengthSamples; 561 rtp_header.header.timestamp -= kPayloadLengthSamples;
567 payload[0] = 1; 562 payload[0] = 1;
568 EXPECT_EQ(NetEq::kOK, 563 EXPECT_EQ(NetEq::kOK,
569 neteq_->InsertPacket( 564 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
570 rtp_header, payload, kPayloadLengthBytes, kReceiveTime));
571 rtp_header.header.sequenceNumber += 2; 565 rtp_header.header.sequenceNumber += 2;
572 rtp_header.header.timestamp += 2 * kPayloadLengthSamples; 566 rtp_header.header.timestamp += 2 * kPayloadLengthSamples;
573 payload[0] = 2; 567 payload[0] = 2;
574 EXPECT_EQ(NetEq::kOK, 568 EXPECT_EQ(NetEq::kOK,
575 neteq_->InsertPacket( 569 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
576 rtp_header, payload, kPayloadLengthBytes, kReceiveTime));
577 570
578 // Expect only the second packet to be decoded (the one with "2" as the first 571 // Expect only the second packet to be decoded (the one with "2" as the first
579 // payload byte). 572 // payload byte).
580 EXPECT_CALL(mock_decoder, 573 EXPECT_CALL(mock_decoder,
581 Decode(Pointee(2), kPayloadLengthBytes, kSampleRateHz, _, _, _)) 574 Decode(Pointee(2), kPayloadLengthBytes, kSampleRateHz, _, _, _))
582 .WillOnce(DoAll(SetArrayArgument<4>(dummy_output, 575 .WillOnce(DoAll(SetArrayArgument<4>(dummy_output,
583 dummy_output + kPayloadLengthSamples), 576 dummy_output + kPayloadLengthSamples),
584 SetArgPointee<5>(AudioDecoder::kSpeech), 577 SetArgPointee<5>(AudioDecoder::kSpeech),
585 Return(kPayloadLengthSamples))); 578 Return(kPayloadLengthSamples)));
586 579
(...skipping 28 matching lines...) Expand all
615 uint8_t payload[kPayloadLengthBytes] = {0}; 608 uint8_t payload[kPayloadLengthBytes] = {0};
616 WebRtcRTPHeader rtp_header; 609 WebRtcRTPHeader rtp_header;
617 rtp_header.header.payloadType = kPayloadType; 610 rtp_header.header.payloadType = kPayloadType;
618 rtp_header.header.sequenceNumber = 0x1234; 611 rtp_header.header.sequenceNumber = 0x1234;
619 rtp_header.header.timestamp = 0x12345678; 612 rtp_header.header.timestamp = 0x12345678;
620 rtp_header.header.ssrc = 0x87654321; 613 rtp_header.header.ssrc = 0x87654321;
621 614
622 // Insert one packet. Note that we have not registered any payload type, so 615 // Insert one packet. Note that we have not registered any payload type, so
623 // this packet will be rejected. 616 // this packet will be rejected.
624 EXPECT_EQ(NetEq::kFail, 617 EXPECT_EQ(NetEq::kFail,
625 neteq_->InsertPacket(rtp_header, payload, kPayloadLengthBytes, 618 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
626 kReceiveTime));
627 EXPECT_EQ(NetEq::kUnknownRtpPayloadType, neteq_->LastError()); 619 EXPECT_EQ(NetEq::kUnknownRtpPayloadType, neteq_->LastError());
628 620
629 // Pull audio once. 621 // Pull audio once.
630 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); 622 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000);
631 int16_t output[kMaxOutputSize]; 623 int16_t output[kMaxOutputSize];
632 size_t samples_per_channel; 624 size_t samples_per_channel;
633 int num_channels; 625 int num_channels;
634 NetEqOutputType type; 626 NetEqOutputType type;
635 EXPECT_EQ(NetEq::kOK, 627 EXPECT_EQ(NetEq::kOK,
636 neteq_->GetAudio(kMaxOutputSize, output, &samples_per_channel, 628 neteq_->GetAudio(kMaxOutputSize, output, &samples_per_channel,
637 &num_channels, &type)); 629 &num_channels, &type));
638 ASSERT_LE(samples_per_channel, kMaxOutputSize); 630 ASSERT_LE(samples_per_channel, kMaxOutputSize);
639 EXPECT_EQ(kMaxOutputSize, samples_per_channel); 631 EXPECT_EQ(kMaxOutputSize, samples_per_channel);
640 EXPECT_EQ(1, num_channels); 632 EXPECT_EQ(1, num_channels);
641 EXPECT_EQ(kOutputPLC, type); 633 EXPECT_EQ(kOutputPLC, type);
642 634
643 // Register the payload type. 635 // Register the payload type.
644 EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType( 636 EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType(
645 NetEqDecoder::kDecoderPCM16B, kPayloadType)); 637 NetEqDecoder::kDecoderPCM16B, kPayloadType));
646 638
647 // Insert 10 packets. 639 // Insert 10 packets.
648 for (size_t i = 0; i < 10; ++i) { 640 for (size_t i = 0; i < 10; ++i) {
649 rtp_header.header.sequenceNumber++; 641 rtp_header.header.sequenceNumber++;
650 rtp_header.header.timestamp += kPayloadLengthSamples; 642 rtp_header.header.timestamp += kPayloadLengthSamples;
651 EXPECT_EQ(NetEq::kOK, 643 EXPECT_EQ(NetEq::kOK,
652 neteq_->InsertPacket(rtp_header, payload, kPayloadLengthBytes, 644 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
653 kReceiveTime));
654 EXPECT_EQ(i + 1, packet_buffer_->NumPacketsInBuffer()); 645 EXPECT_EQ(i + 1, packet_buffer_->NumPacketsInBuffer());
655 } 646 }
656 647
657 // Pull audio repeatedly and make sure we get normal output, that is not PLC. 648 // Pull audio repeatedly and make sure we get normal output, that is not PLC.
658 for (size_t i = 0; i < 3; ++i) { 649 for (size_t i = 0; i < 3; ++i) {
659 EXPECT_EQ(NetEq::kOK, 650 EXPECT_EQ(NetEq::kOK,
660 neteq_->GetAudio(kMaxOutputSize, output, &samples_per_channel, 651 neteq_->GetAudio(kMaxOutputSize, output, &samples_per_channel,
661 &num_channels, &type)); 652 &num_channels, &type));
662 ASSERT_LE(samples_per_channel, kMaxOutputSize); 653 ASSERT_LE(samples_per_channel, kMaxOutputSize);
663 EXPECT_EQ(kMaxOutputSize, samples_per_channel); 654 EXPECT_EQ(kMaxOutputSize, samples_per_channel);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
723 dummy_output + kPayloadLengthSamples), 714 dummy_output + kPayloadLengthSamples),
724 SetArgPointee<5>(AudioDecoder::kSpeech), 715 SetArgPointee<5>(AudioDecoder::kSpeech),
725 Return(kPayloadLengthSamples))); 716 Return(kPayloadLengthSamples)));
726 717
727 EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( 718 EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder(
728 &mock_decoder, NetEqDecoder::kDecoderOpus, 719 &mock_decoder, NetEqDecoder::kDecoderOpus,
729 kPayloadType, kSampleRateKhz * 1000)); 720 kPayloadType, kSampleRateKhz * 1000));
730 721
731 // Insert one packet (decoder will return speech). 722 // Insert one packet (decoder will return speech).
732 EXPECT_EQ(NetEq::kOK, 723 EXPECT_EQ(NetEq::kOK,
733 neteq_->InsertPacket( 724 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
734 rtp_header, payload, kPayloadLengthBytes, kReceiveTime));
735 725
736 // Insert second packet (decoder will return CNG). 726 // Insert second packet (decoder will return CNG).
737 payload[0] = 1; 727 payload[0] = 1;
738 rtp_header.header.sequenceNumber++; 728 rtp_header.header.sequenceNumber++;
739 rtp_header.header.timestamp += kPayloadLengthSamples; 729 rtp_header.header.timestamp += kPayloadLengthSamples;
740 EXPECT_EQ(NetEq::kOK, 730 EXPECT_EQ(NetEq::kOK,
741 neteq_->InsertPacket( 731 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
742 rtp_header, payload, kPayloadLengthBytes, kReceiveTime));
743 732
744 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateKhz); 733 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateKhz);
745 int16_t output[kMaxOutputSize]; 734 int16_t output[kMaxOutputSize];
746 size_t samples_per_channel; 735 size_t samples_per_channel;
747 int num_channels; 736 int num_channels;
748 uint32_t timestamp; 737 uint32_t timestamp;
749 uint32_t last_timestamp; 738 uint32_t last_timestamp;
750 NetEqOutputType type; 739 NetEqOutputType type;
751 NetEqOutputType expected_type[8] = { 740 NetEqOutputType expected_type[8] = {
752 kOutputNormal, kOutputNormal, 741 kOutputNormal, kOutputNormal,
(...skipping 25 matching lines...) Expand all
778 EXPECT_TRUE(neteq_->GetPlayoutTimestamp(&timestamp)); 767 EXPECT_TRUE(neteq_->GetPlayoutTimestamp(&timestamp));
779 EXPECT_EQ(timestamp, last_timestamp + expected_timestamp_increment[i]); 768 EXPECT_EQ(timestamp, last_timestamp + expected_timestamp_increment[i]);
780 last_timestamp = timestamp; 769 last_timestamp = timestamp;
781 } 770 }
782 771
783 // Insert third packet, which leaves a gap from last packet. 772 // Insert third packet, which leaves a gap from last packet.
784 payload[0] = 2; 773 payload[0] = 2;
785 rtp_header.header.sequenceNumber += 2; 774 rtp_header.header.sequenceNumber += 2;
786 rtp_header.header.timestamp += 2 * kPayloadLengthSamples; 775 rtp_header.header.timestamp += 2 * kPayloadLengthSamples;
787 EXPECT_EQ(NetEq::kOK, 776 EXPECT_EQ(NetEq::kOK,
788 neteq_->InsertPacket( 777 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
789 rtp_header, payload, kPayloadLengthBytes, kReceiveTime));
790 778
791 for (size_t i = 6; i < 8; ++i) { 779 for (size_t i = 6; i < 8; ++i) {
792 ASSERT_EQ(kMaxOutputSize, samples_per_channel); 780 ASSERT_EQ(kMaxOutputSize, samples_per_channel);
793 EXPECT_EQ(1, num_channels); 781 EXPECT_EQ(1, num_channels);
794 EXPECT_EQ(expected_type[i - 1], type); 782 EXPECT_EQ(expected_type[i - 1], type);
795 EXPECT_EQ(NetEq::kOK, 783 EXPECT_EQ(NetEq::kOK,
796 neteq_->GetAudio(kMaxOutputSize, output, &samples_per_channel, 784 neteq_->GetAudio(kMaxOutputSize, output, &samples_per_channel,
797 &num_channels, &type)); 785 &num_channels, &type));
798 EXPECT_TRUE(neteq_->GetPlayoutTimestamp(&timestamp)); 786 EXPECT_TRUE(neteq_->GetPlayoutTimestamp(&timestamp));
799 EXPECT_EQ(timestamp, last_timestamp + expected_timestamp_increment[i]); 787 EXPECT_EQ(timestamp, last_timestamp + expected_timestamp_increment[i]);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
864 .Times(AtLeast(1)) 852 .Times(AtLeast(1))
865 .WillRepeatedly(Return(kNetEqMaxFrameSize)); 853 .WillRepeatedly(Return(kNetEqMaxFrameSize));
866 854
867 EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( 855 EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder(
868 &decoder_, NetEqDecoder::kDecoderPCM16B, 856 &decoder_, NetEqDecoder::kDecoderPCM16B,
869 kPayloadType, kSampleRateHz)); 857 kPayloadType, kSampleRateHz));
870 858
871 // Insert one packet. 859 // Insert one packet.
872 payload[0] = kFirstPayloadValue; // This will make Decode() fail. 860 payload[0] = kFirstPayloadValue; // This will make Decode() fail.
873 EXPECT_EQ(NetEq::kOK, 861 EXPECT_EQ(NetEq::kOK,
874 neteq_->InsertPacket( 862 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
875 rtp_header, payload, kPayloadLengthBytes, kReceiveTime));
876 863
877 // Insert another packet. 864 // Insert another packet.
878 payload[0] = kSecondPayloadValue; // This will make Decode() successful. 865 payload[0] = kSecondPayloadValue; // This will make Decode() successful.
879 rtp_header.header.sequenceNumber++; 866 rtp_header.header.sequenceNumber++;
880 // The second timestamp needs to be at least 30 ms after the first to make 867 // The second timestamp needs to be at least 30 ms after the first to make
881 // the second packet get decoded. 868 // the second packet get decoded.
882 rtp_header.header.timestamp += 3 * kPayloadLengthSamples; 869 rtp_header.header.timestamp += 3 * kPayloadLengthSamples;
883 EXPECT_EQ(NetEq::kOK, 870 EXPECT_EQ(NetEq::kOK,
884 neteq_->InsertPacket( 871 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
885 rtp_header, payload, kPayloadLengthBytes, kReceiveTime));
886 872
887 const size_t kMaxOutputSize = 873 const size_t kMaxOutputSize =
888 static_cast<size_t>(10 * kSampleRateHz / 1000 * kChannels); 874 static_cast<size_t>(10 * kSampleRateHz / 1000 * kChannels);
889 int16_t output[kMaxOutputSize]; 875 int16_t output[kMaxOutputSize];
890 size_t samples_per_channel; 876 size_t samples_per_channel;
891 int num_channels; 877 int num_channels;
892 NetEqOutputType type; 878 NetEqOutputType type;
893 879
894 EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(kMaxOutputSize, output, 880 EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(kMaxOutputSize, output,
895 &samples_per_channel, &num_channels, 881 &samples_per_channel, &num_channels,
(...skipping 29 matching lines...) Expand all
925 rtp_header.header.timestamp = 0x12345678; 911 rtp_header.header.timestamp = 0x12345678;
926 rtp_header.header.ssrc = 0x87654321; 912 rtp_header.header.ssrc = 0x87654321;
927 913
928 EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType( 914 EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType(
929 NetEqDecoder::kDecoderPCM16B, kPayloadType)); 915 NetEqDecoder::kDecoderPCM16B, kPayloadType));
930 916
931 // Insert packets until the buffer flushes. 917 // Insert packets until the buffer flushes.
932 for (size_t i = 0; i <= config_.max_packets_in_buffer; ++i) { 918 for (size_t i = 0; i <= config_.max_packets_in_buffer; ++i) {
933 EXPECT_EQ(i, packet_buffer_->NumPacketsInBuffer()); 919 EXPECT_EQ(i, packet_buffer_->NumPacketsInBuffer());
934 EXPECT_EQ(NetEq::kOK, 920 EXPECT_EQ(NetEq::kOK,
935 neteq_->InsertPacket(rtp_header, payload, kPayloadLengthBytes, 921 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
936 kReceiveTime));
937 rtp_header.header.timestamp += 922 rtp_header.header.timestamp +=
938 rtc::checked_cast<uint32_t>(kPayloadLengthSamples); 923 rtc::checked_cast<uint32_t>(kPayloadLengthSamples);
939 ++rtp_header.header.sequenceNumber; 924 ++rtp_header.header.sequenceNumber;
940 } 925 }
941 EXPECT_EQ(1u, packet_buffer_->NumPacketsInBuffer()); 926 EXPECT_EQ(1u, packet_buffer_->NumPacketsInBuffer());
942 927
943 // Ask for network statistics. This should not crash. 928 // Ask for network statistics. This should not crash.
944 NetEqNetworkStatistics stats; 929 NetEqNetworkStatistics stats;
945 EXPECT_EQ(NetEq::kOK, neteq_->NetworkStatistics(&stats)); 930 EXPECT_EQ(NetEq::kOK, neteq_->NetworkStatistics(&stats));
946 } 931 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
980 DoAll(SetArrayArgument<4>(dummy_output, 965 DoAll(SetArrayArgument<4>(dummy_output,
981 dummy_output + kPayloadLengthSamples - 5), 966 dummy_output + kPayloadLengthSamples - 5),
982 SetArgPointee<5>(AudioDecoder::kSpeech), 967 SetArgPointee<5>(AudioDecoder::kSpeech),
983 Return(kPayloadLengthSamples - 5))); 968 Return(kPayloadLengthSamples - 5)));
984 EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( 969 EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder(
985 &mock_decoder, NetEqDecoder::kDecoderPCM16B, 970 &mock_decoder, NetEqDecoder::kDecoderPCM16B,
986 kPayloadType, kSampleRateHz)); 971 kPayloadType, kSampleRateHz));
987 972
988 // Insert one packet. 973 // Insert one packet.
989 EXPECT_EQ(NetEq::kOK, 974 EXPECT_EQ(NetEq::kOK,
990 neteq_->InsertPacket(rtp_header, payload, kPayloadLengthBytes, 975 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
991 kReceiveTime));
992 976
993 EXPECT_EQ(5u, neteq_->sync_buffer_for_test()->FutureLength()); 977 EXPECT_EQ(5u, neteq_->sync_buffer_for_test()->FutureLength());
994 978
995 // Pull audio once. 979 // Pull audio once.
996 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); 980 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000);
997 int16_t output[kMaxOutputSize]; 981 int16_t output[kMaxOutputSize];
998 size_t samples_per_channel; 982 size_t samples_per_channel;
999 int num_channels; 983 int num_channels;
1000 NetEqOutputType type; 984 NetEqOutputType type;
1001 EXPECT_EQ(NetEq::kOK, 985 EXPECT_EQ(NetEq::kOK,
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1079 1063
1080 EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( 1064 EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder(
1081 &mock_decoder, NetEqDecoder::kDecoderPCM16B, 1065 &mock_decoder, NetEqDecoder::kDecoderPCM16B,
1082 kPayloadType, kSampleRateHz)); 1066 kPayloadType, kSampleRateHz));
1083 1067
1084 // Insert packets. 1068 // Insert packets.
1085 for (int i = 0; i < 6; ++i) { 1069 for (int i = 0; i < 6; ++i) {
1086 rtp_header.header.sequenceNumber += 1; 1070 rtp_header.header.sequenceNumber += 1;
1087 rtp_header.header.timestamp += kFrameLengthSamples; 1071 rtp_header.header.timestamp += kFrameLengthSamples;
1088 EXPECT_EQ(NetEq::kOK, 1072 EXPECT_EQ(NetEq::kOK,
1089 neteq_->InsertPacket(rtp_header, payload, kPayloadLengthBytes, 1073 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
1090 kReceiveTime));
1091 } 1074 }
1092 1075
1093 // Pull audio. 1076 // Pull audio.
1094 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); 1077 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000);
1095 int16_t output[kMaxOutputSize]; 1078 int16_t output[kMaxOutputSize];
1096 size_t samples_per_channel; 1079 size_t samples_per_channel;
1097 int num_channels; 1080 int num_channels;
1098 NetEqOutputType type; 1081 NetEqOutputType type;
1099 EXPECT_EQ(NetEq::kOK, 1082 EXPECT_EQ(NetEq::kOK,
1100 neteq_->GetAudio(kMaxOutputSize, output, &samples_per_channel, 1083 neteq_->GetAudio(kMaxOutputSize, output, &samples_per_channel,
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
1201 1184
1202 EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( 1185 EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder(
1203 &mock_decoder, NetEqDecoder::kDecoderPCM16B, 1186 &mock_decoder, NetEqDecoder::kDecoderPCM16B,
1204 kPayloadType, kSampleRateHz)); 1187 kPayloadType, kSampleRateHz));
1205 1188
1206 // Insert 2 packets. This will make netEq into codec internal CNG mode. 1189 // Insert 2 packets. This will make netEq into codec internal CNG mode.
1207 for (int i = 0; i < 2; ++i) { 1190 for (int i = 0; i < 2; ++i) {
1208 rtp_header.header.sequenceNumber += 1; 1191 rtp_header.header.sequenceNumber += 1;
1209 rtp_header.header.timestamp += kFrameLengthSamples; 1192 rtp_header.header.timestamp += kFrameLengthSamples;
1210 EXPECT_EQ(NetEq::kOK, 1193 EXPECT_EQ(NetEq::kOK,
1211 neteq_->InsertPacket(rtp_header, payload, kPayloadLengthBytes, 1194 neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
1212 kReceiveTime));
1213 } 1195 }
1214 1196
1215 // Pull audio. 1197 // Pull audio.
1216 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); 1198 const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000);
1217 int16_t output[kMaxOutputSize]; 1199 int16_t output[kMaxOutputSize];
1218 size_t samples_per_channel; 1200 size_t samples_per_channel;
1219 int num_channels; 1201 int num_channels;
1220 NetEqOutputType type; 1202 NetEqOutputType type;
1221 EXPECT_EQ(NetEq::kOK, 1203 EXPECT_EQ(NetEq::kOK,
1222 neteq_->GetAudio(kMaxOutputSize, output, &samples_per_channel, 1204 neteq_->GetAudio(kMaxOutputSize, output, &samples_per_channel,
(...skipping 19 matching lines...) Expand all
1242 neteq_->GetAudio(kMaxOutputSize, output, &samples_per_channel, 1224 neteq_->GetAudio(kMaxOutputSize, output, &samples_per_channel,
1243 &num_channels, &type)); 1225 &num_channels, &type));
1244 EXPECT_EQ(kMaxOutputSize, samples_per_channel); 1226 EXPECT_EQ(kMaxOutputSize, samples_per_channel);
1245 EXPECT_EQ(1, num_channels); 1227 EXPECT_EQ(1, num_channels);
1246 EXPECT_EQ(kOutputCNG, type); 1228 EXPECT_EQ(kOutputCNG, type);
1247 1229
1248 EXPECT_CALL(mock_decoder, Die()); 1230 EXPECT_CALL(mock_decoder, Die());
1249 } 1231 }
1250 1232
1251 }// namespace webrtc 1233 }// namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/audio_coding/neteq/neteq_impl.cc ('k') | webrtc/modules/audio_coding/neteq/neteq_network_stats_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698