| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 
| 3  * | 3  * | 
| 4  *  Use of this source code is governed by a BSD-style license | 4  *  Use of this source code is governed by a BSD-style license | 
| 5  *  that can be found in the LICENSE file in the root of the source | 5  *  that can be found in the LICENSE file in the root of the source | 
| 6  *  tree. An additional intellectual property rights grant can be found | 6  *  tree. An additional intellectual property rights grant can be found | 
| 7  *  in the file PATENTS.  All contributing project authors may | 7  *  in the file PATENTS.  All contributing project authors may | 
| 8  *  be found in the AUTHORS file in the root of the source tree. | 8  *  be found in the AUTHORS file in the root of the source tree. | 
| 9  */ | 9  */ | 
| 10 | 10 | 
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 186     rtp_header.header.payloadType = kPayloadType; | 186     rtp_header.header.payloadType = kPayloadType; | 
| 187     rtp_header.header.sequenceNumber = 0x1234; | 187     rtp_header.header.sequenceNumber = 0x1234; | 
| 188     rtp_header.header.timestamp = 0x12345678; | 188     rtp_header.header.timestamp = 0x12345678; | 
| 189     rtp_header.header.ssrc = 0x87654321; | 189     rtp_header.header.ssrc = 0x87654321; | 
| 190 | 190 | 
| 191     EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType( | 191     EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType( | 
| 192         decoder_type, "telephone-event", kPayloadType)); | 192         decoder_type, "telephone-event", kPayloadType)); | 
| 193 | 193 | 
| 194     // Insert first packet. | 194     // Insert first packet. | 
| 195     EXPECT_EQ(NetEq::kOK, | 195     EXPECT_EQ(NetEq::kOK, | 
| 196               neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 196               neteq_->InsertPacket(rtp_header.header, payload, kReceiveTime)); | 
| 197 | 197 | 
| 198     // Pull audio once. | 198     // Pull audio once. | 
| 199     const size_t kMaxOutputSize = | 199     const size_t kMaxOutputSize = | 
| 200         static_cast<size_t>(10 * kSampleRateHz / 1000); | 200         static_cast<size_t>(10 * kSampleRateHz / 1000); | 
| 201     AudioFrame output; | 201     AudioFrame output; | 
| 202     bool muted; | 202     bool muted; | 
| 203     EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 203     EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 
| 204     ASSERT_FALSE(muted); | 204     ASSERT_FALSE(muted); | 
| 205     ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); | 205     ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); | 
| 206     EXPECT_EQ(1u, output.num_channels_); | 206     EXPECT_EQ(1u, output.num_channels_); | 
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 377         .Times(1); | 377         .Times(1); | 
| 378     EXPECT_CALL(*mock_delay_manager_, ResetPacketIatCount()).Times(1); | 378     EXPECT_CALL(*mock_delay_manager_, ResetPacketIatCount()).Times(1); | 
| 379     // Expectations when the second packet is inserted. Slightly different. | 379     // Expectations when the second packet is inserted. Slightly different. | 
| 380     EXPECT_CALL(*mock_delay_manager_, last_pack_cng_or_dtmf()) | 380     EXPECT_CALL(*mock_delay_manager_, last_pack_cng_or_dtmf()) | 
| 381         .WillOnce(Return(0)); | 381         .WillOnce(Return(0)); | 
| 382     EXPECT_CALL(*mock_delay_manager_, SetPacketAudioLength(30)) | 382     EXPECT_CALL(*mock_delay_manager_, SetPacketAudioLength(30)) | 
| 383         .WillOnce(Return(0)); | 383         .WillOnce(Return(0)); | 
| 384   } | 384   } | 
| 385 | 385 | 
| 386   // Insert first packet. | 386   // Insert first packet. | 
| 387   neteq_->InsertPacket(rtp_header, payload, kFirstReceiveTime); | 387   neteq_->InsertPacket(rtp_header.header, payload, kFirstReceiveTime); | 
| 388 | 388 | 
| 389   // Insert second packet. | 389   // Insert second packet. | 
| 390   rtp_header.header.timestamp += 160; | 390   rtp_header.header.timestamp += 160; | 
| 391   rtp_header.header.sequenceNumber += 1; | 391   rtp_header.header.sequenceNumber += 1; | 
| 392   neteq_->InsertPacket(rtp_header, payload, kFirstReceiveTime + 155); | 392   neteq_->InsertPacket(rtp_header.header, payload, kFirstReceiveTime + 155); | 
| 393 } | 393 } | 
| 394 | 394 | 
| 395 TEST_F(NetEqImplTest, InsertPacketsUntilBufferIsFull) { | 395 TEST_F(NetEqImplTest, InsertPacketsUntilBufferIsFull) { | 
| 396   UseNoMocks(); | 396   UseNoMocks(); | 
| 397   CreateInstance(); | 397   CreateInstance(); | 
| 398 | 398 | 
| 399   const int kPayloadLengthSamples = 80; | 399   const int kPayloadLengthSamples = 80; | 
| 400   const size_t kPayloadLengthBytes = 2 * kPayloadLengthSamples;  // PCM 16-bit. | 400   const size_t kPayloadLengthBytes = 2 * kPayloadLengthSamples;  // PCM 16-bit. | 
| 401   const uint8_t kPayloadType = 17;  // Just an arbitrary number. | 401   const uint8_t kPayloadType = 17;  // Just an arbitrary number. | 
| 402   const uint32_t kReceiveTime = 17;  // Value doesn't matter for this test. | 402   const uint32_t kReceiveTime = 17;  // Value doesn't matter for this test. | 
| 403   uint8_t payload[kPayloadLengthBytes] = {0}; | 403   uint8_t payload[kPayloadLengthBytes] = {0}; | 
| 404   WebRtcRTPHeader rtp_header; | 404   WebRtcRTPHeader rtp_header; | 
| 405   rtp_header.header.payloadType = kPayloadType; | 405   rtp_header.header.payloadType = kPayloadType; | 
| 406   rtp_header.header.sequenceNumber = 0x1234; | 406   rtp_header.header.sequenceNumber = 0x1234; | 
| 407   rtp_header.header.timestamp = 0x12345678; | 407   rtp_header.header.timestamp = 0x12345678; | 
| 408   rtp_header.header.ssrc = 0x87654321; | 408   rtp_header.header.ssrc = 0x87654321; | 
| 409 | 409 | 
| 410   EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType( | 410   EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType( | 
| 411                             NetEqDecoder::kDecoderPCM16B, "", kPayloadType)); | 411                             NetEqDecoder::kDecoderPCM16B, "", kPayloadType)); | 
| 412 | 412 | 
| 413   // Insert packets. The buffer should not flush. | 413   // Insert packets. The buffer should not flush. | 
| 414   for (size_t i = 1; i <= config_.max_packets_in_buffer; ++i) { | 414   for (size_t i = 1; i <= config_.max_packets_in_buffer; ++i) { | 
| 415     EXPECT_EQ(NetEq::kOK, | 415     EXPECT_EQ(NetEq::kOK, | 
| 416               neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 416               neteq_->InsertPacket(rtp_header.header, payload, kReceiveTime)); | 
| 417     rtp_header.header.timestamp += kPayloadLengthSamples; | 417     rtp_header.header.timestamp += kPayloadLengthSamples; | 
| 418     rtp_header.header.sequenceNumber += 1; | 418     rtp_header.header.sequenceNumber += 1; | 
| 419     EXPECT_EQ(i, packet_buffer_->NumPacketsInBuffer()); | 419     EXPECT_EQ(i, packet_buffer_->NumPacketsInBuffer()); | 
| 420   } | 420   } | 
| 421 | 421 | 
| 422   // Insert one more packet and make sure the buffer got flushed. That is, it | 422   // Insert one more packet and make sure the buffer got flushed. That is, it | 
| 423   // should only hold one single packet. | 423   // should only hold one single packet. | 
| 424   EXPECT_EQ(NetEq::kOK, | 424   EXPECT_EQ(NetEq::kOK, | 
| 425             neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 425             neteq_->InsertPacket(rtp_header.header, payload, kReceiveTime)); | 
| 426   EXPECT_EQ(1u, packet_buffer_->NumPacketsInBuffer()); | 426   EXPECT_EQ(1u, packet_buffer_->NumPacketsInBuffer()); | 
| 427   const Packet* test_packet = packet_buffer_->PeekNextPacket(); | 427   const Packet* test_packet = packet_buffer_->PeekNextPacket(); | 
| 428   EXPECT_EQ(rtp_header.header.timestamp, test_packet->timestamp); | 428   EXPECT_EQ(rtp_header.header.timestamp, test_packet->timestamp); | 
| 429   EXPECT_EQ(rtp_header.header.sequenceNumber, test_packet->sequence_number); | 429   EXPECT_EQ(rtp_header.header.sequenceNumber, test_packet->sequence_number); | 
| 430 } | 430 } | 
| 431 | 431 | 
| 432 TEST_F(NetEqImplTest, TestDtmfPacketAVT) { | 432 TEST_F(NetEqImplTest, TestDtmfPacketAVT) { | 
| 433   TestDtmfPacket(NetEqDecoder::kDecoderAVT); | 433   TestDtmfPacket(NetEqDecoder::kDecoderAVT); | 
| 434 } | 434 } | 
| 435 | 435 | 
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 495    private: | 495    private: | 
| 496     int16_t next_value_; | 496     int16_t next_value_; | 
| 497   } decoder_; | 497   } decoder_; | 
| 498 | 498 | 
| 499   EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( | 499   EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( | 
| 500                             &decoder_, NetEqDecoder::kDecoderPCM16B, | 500                             &decoder_, NetEqDecoder::kDecoderPCM16B, | 
| 501                             "dummy name", kPayloadType)); | 501                             "dummy name", kPayloadType)); | 
| 502 | 502 | 
| 503   // Insert one packet. | 503   // Insert one packet. | 
| 504   EXPECT_EQ(NetEq::kOK, | 504   EXPECT_EQ(NetEq::kOK, | 
| 505             neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 505             neteq_->InsertPacket(rtp_header.header, payload, kReceiveTime)); | 
| 506 | 506 | 
| 507   // Pull audio once. | 507   // Pull audio once. | 
| 508   const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); | 508   const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); | 
| 509   AudioFrame output; | 509   AudioFrame output; | 
| 510   bool muted; | 510   bool muted; | 
| 511   EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 511   EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 
| 512   ASSERT_FALSE(muted); | 512   ASSERT_FALSE(muted); | 
| 513   ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); | 513   ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); | 
| 514   EXPECT_EQ(1u, output.num_channels_); | 514   EXPECT_EQ(1u, output.num_channels_); | 
| 515   EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_); | 515   EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_); | 
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 576       .WillOnce(DoAll(SetArrayArgument<3>(dummy_output, | 576       .WillOnce(DoAll(SetArrayArgument<3>(dummy_output, | 
| 577                                           dummy_output + kPayloadLengthSamples), | 577                                           dummy_output + kPayloadLengthSamples), | 
| 578                       SetArgPointee<4>(AudioDecoder::kSpeech), | 578                       SetArgPointee<4>(AudioDecoder::kSpeech), | 
| 579                       Return(kPayloadLengthSamples))); | 579                       Return(kPayloadLengthSamples))); | 
| 580   EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( | 580   EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( | 
| 581                             &mock_decoder, NetEqDecoder::kDecoderPCM16B, | 581                             &mock_decoder, NetEqDecoder::kDecoderPCM16B, | 
| 582                             "dummy name", kPayloadType)); | 582                             "dummy name", kPayloadType)); | 
| 583 | 583 | 
| 584   // Insert one packet. | 584   // Insert one packet. | 
| 585   EXPECT_EQ(NetEq::kOK, | 585   EXPECT_EQ(NetEq::kOK, | 
| 586             neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 586             neteq_->InsertPacket(rtp_header.header, payload, kReceiveTime)); | 
| 587 | 587 | 
| 588   // Pull audio once. | 588   // Pull audio once. | 
| 589   const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); | 589   const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); | 
| 590   AudioFrame output; | 590   AudioFrame output; | 
| 591   bool muted; | 591   bool muted; | 
| 592   EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 592   EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 
| 593   ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); | 593   ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); | 
| 594   EXPECT_EQ(1u, output.num_channels_); | 594   EXPECT_EQ(1u, output.num_channels_); | 
| 595   EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_); | 595   EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_); | 
| 596 | 596 | 
| 597   // Insert two more packets. The first one is out of order, and is already too | 597   // Insert two more packets. The first one is out of order, and is already too | 
| 598   // old, the second one is the expected next packet. | 598   // old, the second one is the expected next packet. | 
| 599   rtp_header.header.sequenceNumber -= 1; | 599   rtp_header.header.sequenceNumber -= 1; | 
| 600   rtp_header.header.timestamp -= kPayloadLengthSamples; | 600   rtp_header.header.timestamp -= kPayloadLengthSamples; | 
| 601   payload[0] = 1; | 601   payload[0] = 1; | 
| 602   EXPECT_EQ(NetEq::kOK, | 602   EXPECT_EQ(NetEq::kOK, | 
| 603             neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 603             neteq_->InsertPacket(rtp_header.header, payload, kReceiveTime)); | 
| 604   rtp_header.header.sequenceNumber += 2; | 604   rtp_header.header.sequenceNumber += 2; | 
| 605   rtp_header.header.timestamp += 2 * kPayloadLengthSamples; | 605   rtp_header.header.timestamp += 2 * kPayloadLengthSamples; | 
| 606   payload[0] = 2; | 606   payload[0] = 2; | 
| 607   EXPECT_EQ(NetEq::kOK, | 607   EXPECT_EQ(NetEq::kOK, | 
| 608             neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 608             neteq_->InsertPacket(rtp_header.header, payload, kReceiveTime)); | 
| 609 | 609 | 
| 610   // Expect only the second packet to be decoded (the one with "2" as the first | 610   // Expect only the second packet to be decoded (the one with "2" as the first | 
| 611   // payload byte). | 611   // payload byte). | 
| 612   EXPECT_CALL(mock_decoder, DecodeInternal(Pointee(2), kPayloadLengthBytes, | 612   EXPECT_CALL(mock_decoder, DecodeInternal(Pointee(2), kPayloadLengthBytes, | 
| 613                                            kSampleRateHz, _, _)) | 613                                            kSampleRateHz, _, _)) | 
| 614       .WillOnce(DoAll(SetArrayArgument<3>(dummy_output, | 614       .WillOnce(DoAll(SetArrayArgument<3>(dummy_output, | 
| 615                                           dummy_output + kPayloadLengthSamples), | 615                                           dummy_output + kPayloadLengthSamples), | 
| 616                       SetArgPointee<4>(AudioDecoder::kSpeech), | 616                       SetArgPointee<4>(AudioDecoder::kSpeech), | 
| 617                       Return(kPayloadLengthSamples))); | 617                       Return(kPayloadLengthSamples))); | 
| 618 | 618 | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 644   uint8_t payload[kPayloadLengthBytes] = {0}; | 644   uint8_t payload[kPayloadLengthBytes] = {0}; | 
| 645   WebRtcRTPHeader rtp_header; | 645   WebRtcRTPHeader rtp_header; | 
| 646   rtp_header.header.payloadType = kPayloadType; | 646   rtp_header.header.payloadType = kPayloadType; | 
| 647   rtp_header.header.sequenceNumber = 0x1234; | 647   rtp_header.header.sequenceNumber = 0x1234; | 
| 648   rtp_header.header.timestamp = 0x12345678; | 648   rtp_header.header.timestamp = 0x12345678; | 
| 649   rtp_header.header.ssrc = 0x87654321; | 649   rtp_header.header.ssrc = 0x87654321; | 
| 650 | 650 | 
| 651   // Insert one packet. Note that we have not registered any payload type, so | 651   // Insert one packet. Note that we have not registered any payload type, so | 
| 652   // this packet will be rejected. | 652   // this packet will be rejected. | 
| 653   EXPECT_EQ(NetEq::kFail, | 653   EXPECT_EQ(NetEq::kFail, | 
| 654             neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 654             neteq_->InsertPacket(rtp_header.header, payload, kReceiveTime)); | 
| 655   EXPECT_EQ(NetEq::kUnknownRtpPayloadType, neteq_->LastError()); | 655   EXPECT_EQ(NetEq::kUnknownRtpPayloadType, neteq_->LastError()); | 
| 656 | 656 | 
| 657   // Pull audio once. | 657   // Pull audio once. | 
| 658   const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); | 658   const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); | 
| 659   AudioFrame output; | 659   AudioFrame output; | 
| 660   bool muted; | 660   bool muted; | 
| 661   EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 661   EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 
| 662   ASSERT_LE(output.samples_per_channel_, kMaxOutputSize); | 662   ASSERT_LE(output.samples_per_channel_, kMaxOutputSize); | 
| 663   EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); | 663   EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); | 
| 664   EXPECT_EQ(1u, output.num_channels_); | 664   EXPECT_EQ(1u, output.num_channels_); | 
| 665   EXPECT_EQ(AudioFrame::kPLC, output.speech_type_); | 665   EXPECT_EQ(AudioFrame::kPLC, output.speech_type_); | 
| 666 | 666 | 
| 667   // Register the payload type. | 667   // Register the payload type. | 
| 668   EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType( | 668   EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType( | 
| 669                             NetEqDecoder::kDecoderPCM16B, "", kPayloadType)); | 669                             NetEqDecoder::kDecoderPCM16B, "", kPayloadType)); | 
| 670 | 670 | 
| 671   // Insert 10 packets. | 671   // Insert 10 packets. | 
| 672   for (size_t i = 0; i < 10; ++i) { | 672   for (size_t i = 0; i < 10; ++i) { | 
| 673     rtp_header.header.sequenceNumber++; | 673     rtp_header.header.sequenceNumber++; | 
| 674     rtp_header.header.timestamp += kPayloadLengthSamples; | 674     rtp_header.header.timestamp += kPayloadLengthSamples; | 
| 675     EXPECT_EQ(NetEq::kOK, | 675     EXPECT_EQ(NetEq::kOK, | 
| 676               neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 676               neteq_->InsertPacket(rtp_header.header, payload, kReceiveTime)); | 
| 677     EXPECT_EQ(i + 1, packet_buffer_->NumPacketsInBuffer()); | 677     EXPECT_EQ(i + 1, packet_buffer_->NumPacketsInBuffer()); | 
| 678   } | 678   } | 
| 679 | 679 | 
| 680   // Pull audio repeatedly and make sure we get normal output, that is not PLC. | 680   // Pull audio repeatedly and make sure we get normal output, that is not PLC. | 
| 681   for (size_t i = 0; i < 3; ++i) { | 681   for (size_t i = 0; i < 3; ++i) { | 
| 682     EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 682     EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 
| 683     ASSERT_LE(output.samples_per_channel_, kMaxOutputSize); | 683     ASSERT_LE(output.samples_per_channel_, kMaxOutputSize); | 
| 684     EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); | 684     EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); | 
| 685     EXPECT_EQ(1u, output.num_channels_); | 685     EXPECT_EQ(1u, output.num_channels_); | 
| 686     EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_) | 686     EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_) | 
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 753                                           dummy_output + kPayloadLengthSamples), | 753                                           dummy_output + kPayloadLengthSamples), | 
| 754                       SetArgPointee<4>(AudioDecoder::kSpeech), | 754                       SetArgPointee<4>(AudioDecoder::kSpeech), | 
| 755                       Return(kPayloadLengthSamples))); | 755                       Return(kPayloadLengthSamples))); | 
| 756 | 756 | 
| 757   EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( | 757   EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( | 
| 758                             &mock_decoder, NetEqDecoder::kDecoderOpus, | 758                             &mock_decoder, NetEqDecoder::kDecoderOpus, | 
| 759                             "dummy name", kPayloadType)); | 759                             "dummy name", kPayloadType)); | 
| 760 | 760 | 
| 761   // Insert one packet (decoder will return speech). | 761   // Insert one packet (decoder will return speech). | 
| 762   EXPECT_EQ(NetEq::kOK, | 762   EXPECT_EQ(NetEq::kOK, | 
| 763             neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 763             neteq_->InsertPacket(rtp_header.header, payload, kReceiveTime)); | 
| 764 | 764 | 
| 765   // Insert second packet (decoder will return CNG). | 765   // Insert second packet (decoder will return CNG). | 
| 766   payload[0] = 1; | 766   payload[0] = 1; | 
| 767   rtp_header.header.sequenceNumber++; | 767   rtp_header.header.sequenceNumber++; | 
| 768   rtp_header.header.timestamp += kPayloadLengthSamples; | 768   rtp_header.header.timestamp += kPayloadLengthSamples; | 
| 769   EXPECT_EQ(NetEq::kOK, | 769   EXPECT_EQ(NetEq::kOK, | 
| 770             neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 770             neteq_->InsertPacket(rtp_header.header, payload, kReceiveTime)); | 
| 771 | 771 | 
| 772   const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateKhz); | 772   const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateKhz); | 
| 773   AudioFrame output; | 773   AudioFrame output; | 
| 774   AudioFrame::SpeechType expected_type[8] = { | 774   AudioFrame::SpeechType expected_type[8] = { | 
| 775       AudioFrame::kNormalSpeech, AudioFrame::kNormalSpeech, | 775       AudioFrame::kNormalSpeech, AudioFrame::kNormalSpeech, | 
| 776       AudioFrame::kCNG, AudioFrame::kCNG, | 776       AudioFrame::kCNG, AudioFrame::kCNG, | 
| 777       AudioFrame::kCNG, AudioFrame::kCNG, | 777       AudioFrame::kCNG, AudioFrame::kCNG, | 
| 778       AudioFrame::kNormalSpeech, AudioFrame::kNormalSpeech | 778       AudioFrame::kNormalSpeech, AudioFrame::kNormalSpeech | 
| 779   }; | 779   }; | 
| 780   int expected_timestamp_increment[8] = { | 780   int expected_timestamp_increment[8] = { | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
| 811     EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 811     EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 
| 812     SCOPED_TRACE(""); | 812     SCOPED_TRACE(""); | 
| 813     verify_timestamp(neteq_->GetPlayoutTimestamp(), i); | 813     verify_timestamp(neteq_->GetPlayoutTimestamp(), i); | 
| 814   } | 814   } | 
| 815 | 815 | 
| 816   // Insert third packet, which leaves a gap from last packet. | 816   // Insert third packet, which leaves a gap from last packet. | 
| 817   payload[0] = 2; | 817   payload[0] = 2; | 
| 818   rtp_header.header.sequenceNumber += 2; | 818   rtp_header.header.sequenceNumber += 2; | 
| 819   rtp_header.header.timestamp += 2 * kPayloadLengthSamples; | 819   rtp_header.header.timestamp += 2 * kPayloadLengthSamples; | 
| 820   EXPECT_EQ(NetEq::kOK, | 820   EXPECT_EQ(NetEq::kOK, | 
| 821             neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 821             neteq_->InsertPacket(rtp_header.header, payload, kReceiveTime)); | 
| 822 | 822 | 
| 823   for (size_t i = 6; i < 8; ++i) { | 823   for (size_t i = 6; i < 8; ++i) { | 
| 824     ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); | 824     ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); | 
| 825     EXPECT_EQ(1u, output.num_channels_); | 825     EXPECT_EQ(1u, output.num_channels_); | 
| 826     EXPECT_EQ(expected_type[i - 1], output.speech_type_); | 826     EXPECT_EQ(expected_type[i - 1], output.speech_type_); | 
| 827     EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 827     EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 
| 828     SCOPED_TRACE(""); | 828     SCOPED_TRACE(""); | 
| 829     verify_timestamp(neteq_->GetPlayoutTimestamp(), i); | 829     verify_timestamp(neteq_->GetPlayoutTimestamp(), i); | 
| 830   } | 830   } | 
| 831 | 831 | 
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 889   EXPECT_CALL(decoder, Channels()) | 889   EXPECT_CALL(decoder, Channels()) | 
| 890       .WillRepeatedly(Return(kChannels)); | 890       .WillRepeatedly(Return(kChannels)); | 
| 891 | 891 | 
| 892   EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( | 892   EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( | 
| 893                             &decoder, NetEqDecoder::kDecoderPCM16B, | 893                             &decoder, NetEqDecoder::kDecoderPCM16B, | 
| 894                             "dummy name", kPayloadType)); | 894                             "dummy name", kPayloadType)); | 
| 895 | 895 | 
| 896   // Insert one packet. | 896   // Insert one packet. | 
| 897   payload[0] = kFirstPayloadValue;  // This will make Decode() fail. | 897   payload[0] = kFirstPayloadValue;  // This will make Decode() fail. | 
| 898   EXPECT_EQ(NetEq::kOK, | 898   EXPECT_EQ(NetEq::kOK, | 
| 899             neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 899             neteq_->InsertPacket(rtp_header.header, payload, kReceiveTime)); | 
| 900 | 900 | 
| 901   // Insert another packet. | 901   // Insert another packet. | 
| 902   payload[0] = kSecondPayloadValue;  // This will make Decode() successful. | 902   payload[0] = kSecondPayloadValue;  // This will make Decode() successful. | 
| 903   rtp_header.header.sequenceNumber++; | 903   rtp_header.header.sequenceNumber++; | 
| 904   // The second timestamp needs to be at least 30 ms after the first to make | 904   // The second timestamp needs to be at least 30 ms after the first to make | 
| 905   // the second packet get decoded. | 905   // the second packet get decoded. | 
| 906   rtp_header.header.timestamp += 3 * kPayloadLengthSamples; | 906   rtp_header.header.timestamp += 3 * kPayloadLengthSamples; | 
| 907   EXPECT_EQ(NetEq::kOK, | 907   EXPECT_EQ(NetEq::kOK, | 
| 908             neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 908             neteq_->InsertPacket(rtp_header.header, payload, kReceiveTime)); | 
| 909 | 909 | 
| 910   AudioFrame output; | 910   AudioFrame output; | 
| 911   bool muted; | 911   bool muted; | 
| 912   // First call to GetAudio will try to decode the "faulty" packet. | 912   // First call to GetAudio will try to decode the "faulty" packet. | 
| 913   // Expect kFail return value... | 913   // Expect kFail return value... | 
| 914   EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output, &muted)); | 914   EXPECT_EQ(NetEq::kFail, neteq_->GetAudio(&output, &muted)); | 
| 915   // ... and kOtherDecoderError error code. | 915   // ... and kOtherDecoderError error code. | 
| 916   EXPECT_EQ(NetEq::kOtherDecoderError, neteq_->LastError()); | 916   EXPECT_EQ(NetEq::kOtherDecoderError, neteq_->LastError()); | 
| 917   // Output size and number of channels should be correct. | 917   // Output size and number of channels should be correct. | 
| 918   const size_t kExpectedOutputSize = 10 * (kSampleRateHz / 1000) * kChannels; | 918   const size_t kExpectedOutputSize = 10 * (kSampleRateHz / 1000) * kChannels; | 
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 950   rtp_header.header.timestamp = 0x12345678; | 950   rtp_header.header.timestamp = 0x12345678; | 
| 951   rtp_header.header.ssrc = 0x87654321; | 951   rtp_header.header.ssrc = 0x87654321; | 
| 952 | 952 | 
| 953   EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType( | 953   EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType( | 
| 954                             NetEqDecoder::kDecoderPCM16B, "", kPayloadType)); | 954                             NetEqDecoder::kDecoderPCM16B, "", kPayloadType)); | 
| 955 | 955 | 
| 956   // Insert packets until the buffer flushes. | 956   // Insert packets until the buffer flushes. | 
| 957   for (size_t i = 0; i <= config_.max_packets_in_buffer; ++i) { | 957   for (size_t i = 0; i <= config_.max_packets_in_buffer; ++i) { | 
| 958     EXPECT_EQ(i, packet_buffer_->NumPacketsInBuffer()); | 958     EXPECT_EQ(i, packet_buffer_->NumPacketsInBuffer()); | 
| 959     EXPECT_EQ(NetEq::kOK, | 959     EXPECT_EQ(NetEq::kOK, | 
| 960               neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 960               neteq_->InsertPacket(rtp_header.header, payload, kReceiveTime)); | 
| 961     rtp_header.header.timestamp += | 961     rtp_header.header.timestamp += | 
| 962         rtc::checked_cast<uint32_t>(kPayloadLengthSamples); | 962         rtc::checked_cast<uint32_t>(kPayloadLengthSamples); | 
| 963     ++rtp_header.header.sequenceNumber; | 963     ++rtp_header.header.sequenceNumber; | 
| 964   } | 964   } | 
| 965   EXPECT_EQ(1u, packet_buffer_->NumPacketsInBuffer()); | 965   EXPECT_EQ(1u, packet_buffer_->NumPacketsInBuffer()); | 
| 966 | 966 | 
| 967   // Ask for network statistics. This should not crash. | 967   // Ask for network statistics. This should not crash. | 
| 968   NetEqNetworkStatistics stats; | 968   NetEqNetworkStatistics stats; | 
| 969   EXPECT_EQ(NetEq::kOK, neteq_->NetworkStatistics(&stats)); | 969   EXPECT_EQ(NetEq::kOK, neteq_->NetworkStatistics(&stats)); | 
| 970 } | 970 } | 
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1006           DoAll(SetArrayArgument<3>(dummy_output, | 1006           DoAll(SetArrayArgument<3>(dummy_output, | 
| 1007                                     dummy_output + kPayloadLengthSamples - 5), | 1007                                     dummy_output + kPayloadLengthSamples - 5), | 
| 1008                 SetArgPointee<4>(AudioDecoder::kSpeech), | 1008                 SetArgPointee<4>(AudioDecoder::kSpeech), | 
| 1009                 Return(kPayloadLengthSamples - 5))); | 1009                 Return(kPayloadLengthSamples - 5))); | 
| 1010   EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( | 1010   EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( | 
| 1011                             &mock_decoder, NetEqDecoder::kDecoderPCM16B, | 1011                             &mock_decoder, NetEqDecoder::kDecoderPCM16B, | 
| 1012                             "dummy name", kPayloadType)); | 1012                             "dummy name", kPayloadType)); | 
| 1013 | 1013 | 
| 1014   // Insert one packet. | 1014   // Insert one packet. | 
| 1015   EXPECT_EQ(NetEq::kOK, | 1015   EXPECT_EQ(NetEq::kOK, | 
| 1016             neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 1016             neteq_->InsertPacket(rtp_header.header, payload, kReceiveTime)); | 
| 1017 | 1017 | 
| 1018   EXPECT_EQ(5u, neteq_->sync_buffer_for_test()->FutureLength()); | 1018   EXPECT_EQ(5u, neteq_->sync_buffer_for_test()->FutureLength()); | 
| 1019 | 1019 | 
| 1020   // Pull audio once. | 1020   // Pull audio once. | 
| 1021   const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); | 1021   const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); | 
| 1022   AudioFrame output; | 1022   AudioFrame output; | 
| 1023   bool muted; | 1023   bool muted; | 
| 1024   EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 1024   EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 
| 1025   ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); | 1025   ASSERT_EQ(kMaxOutputSize, output.samples_per_channel_); | 
| 1026   EXPECT_EQ(1u, output.num_channels_); | 1026   EXPECT_EQ(1u, output.num_channels_); | 
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1102 | 1102 | 
| 1103   EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( | 1103   EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( | 
| 1104                             &mock_decoder, NetEqDecoder::kDecoderPCM16B, | 1104                             &mock_decoder, NetEqDecoder::kDecoderPCM16B, | 
| 1105                             "dummy name", kPayloadType)); | 1105                             "dummy name", kPayloadType)); | 
| 1106 | 1106 | 
| 1107   // Insert packets. | 1107   // Insert packets. | 
| 1108   for (int i = 0; i < 6; ++i) { | 1108   for (int i = 0; i < 6; ++i) { | 
| 1109     rtp_header.header.sequenceNumber += 1; | 1109     rtp_header.header.sequenceNumber += 1; | 
| 1110     rtp_header.header.timestamp += kFrameLengthSamples; | 1110     rtp_header.header.timestamp += kFrameLengthSamples; | 
| 1111     EXPECT_EQ(NetEq::kOK, | 1111     EXPECT_EQ(NetEq::kOK, | 
| 1112               neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 1112               neteq_->InsertPacket(rtp_header.header, payload, kReceiveTime)); | 
| 1113   } | 1113   } | 
| 1114 | 1114 | 
| 1115   // Pull audio. | 1115   // Pull audio. | 
| 1116   const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); | 1116   const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); | 
| 1117   AudioFrame output; | 1117   AudioFrame output; | 
| 1118   bool muted; | 1118   bool muted; | 
| 1119   EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 1119   EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 
| 1120   EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); | 1120   EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); | 
| 1121   EXPECT_EQ(1u, output.num_channels_); | 1121   EXPECT_EQ(1u, output.num_channels_); | 
| 1122   EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_); | 1122   EXPECT_EQ(AudioFrame::kNormalSpeech, output.speech_type_); | 
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1214 | 1214 | 
| 1215   EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( | 1215   EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( | 
| 1216                             &mock_decoder, NetEqDecoder::kDecoderPCM16B, | 1216                             &mock_decoder, NetEqDecoder::kDecoderPCM16B, | 
| 1217                             "dummy name", kPayloadType)); | 1217                             "dummy name", kPayloadType)); | 
| 1218 | 1218 | 
| 1219   // Insert 2 packets. This will make netEq into codec internal CNG mode. | 1219   // Insert 2 packets. This will make netEq into codec internal CNG mode. | 
| 1220   for (int i = 0; i < 2; ++i) { | 1220   for (int i = 0; i < 2; ++i) { | 
| 1221     rtp_header.header.sequenceNumber += 1; | 1221     rtp_header.header.sequenceNumber += 1; | 
| 1222     rtp_header.header.timestamp += kFrameLengthSamples; | 1222     rtp_header.header.timestamp += kFrameLengthSamples; | 
| 1223     EXPECT_EQ(NetEq::kOK, | 1223     EXPECT_EQ(NetEq::kOK, | 
| 1224               neteq_->InsertPacket(rtp_header, payload, kReceiveTime)); | 1224               neteq_->InsertPacket(rtp_header.header, payload, kReceiveTime)); | 
| 1225   } | 1225   } | 
| 1226 | 1226 | 
| 1227   // Pull audio. | 1227   // Pull audio. | 
| 1228   const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); | 1228   const size_t kMaxOutputSize = static_cast<size_t>(10 * kSampleRateHz / 1000); | 
| 1229   AudioFrame output; | 1229   AudioFrame output; | 
| 1230   bool muted; | 1230   bool muted; | 
| 1231   EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 1231   EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted)); | 
| 1232   EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); | 1232   EXPECT_EQ(kMaxOutputSize, output.samples_per_channel_); | 
| 1233   EXPECT_EQ(1u, output.num_channels_); | 1233   EXPECT_EQ(1u, output.num_channels_); | 
| 1234   EXPECT_EQ(AudioFrame::kCNG, output.speech_type_); | 1234   EXPECT_EQ(AudioFrame::kCNG, output.speech_type_); | 
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1334   } | 1334   } | 
| 1335 | 1335 | 
| 1336   void InsertPacket(uint32_t timestamp) { | 1336   void InsertPacket(uint32_t timestamp) { | 
| 1337     WebRtcRTPHeader rtp_header; | 1337     WebRtcRTPHeader rtp_header; | 
| 1338     rtp_header.header.payloadType = kPayloadType; | 1338     rtp_header.header.payloadType = kPayloadType; | 
| 1339     rtp_header.header.sequenceNumber = sequence_number_; | 1339     rtp_header.header.sequenceNumber = sequence_number_; | 
| 1340     rtp_header.header.timestamp = timestamp; | 1340     rtp_header.header.timestamp = timestamp; | 
| 1341     rtp_header.header.ssrc = 15; | 1341     rtp_header.header.ssrc = 15; | 
| 1342     const size_t kPayloadLengthBytes = 1;  // This can be arbitrary. | 1342     const size_t kPayloadLengthBytes = 1;  // This can be arbitrary. | 
| 1343     uint8_t payload[kPayloadLengthBytes] = {0}; | 1343     uint8_t payload[kPayloadLengthBytes] = {0}; | 
| 1344     EXPECT_EQ(NetEq::kOK, neteq_->InsertPacket(rtp_header, payload, 10)); | 1344     EXPECT_EQ(NetEq::kOK, neteq_->InsertPacket(rtp_header.header, payload, 10)); | 
| 1345     sequence_number_++; | 1345     sequence_number_++; | 
| 1346   } | 1346   } | 
| 1347 | 1347 | 
| 1348   void Register120msCodec(AudioDecoder::SpeechType speech_type) { | 1348   void Register120msCodec(AudioDecoder::SpeechType speech_type) { | 
| 1349     decoder_.reset(new Decoder120ms(kSamplingFreq_, speech_type)); | 1349     decoder_.reset(new Decoder120ms(kSamplingFreq_, speech_type)); | 
| 1350     ASSERT_EQ(2u, decoder_->Channels()); | 1350     ASSERT_EQ(2u, decoder_->Channels()); | 
| 1351     EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( | 1351     EXPECT_EQ(NetEq::kOK, neteq_->RegisterExternalDecoder( | 
| 1352                               decoder_.get(), NetEqDecoder::kDecoderOpus_2ch, | 1352                               decoder_.get(), NetEqDecoder::kDecoderOpus_2ch, | 
| 1353                               "120ms codec", kPayloadType)); | 1353                               "120ms codec", kPayloadType)); | 
| 1354   } | 1354   } | 
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1489   EXPECT_CALL(*mock_delay_manager_, BufferLimits(_, _)) | 1489   EXPECT_CALL(*mock_delay_manager_, BufferLimits(_, _)) | 
| 1490       .Times(1) | 1490       .Times(1) | 
| 1491       .WillOnce(DoAll(SetArgPointee<0>(1), SetArgPointee<1>(2))); | 1491       .WillOnce(DoAll(SetArgPointee<0>(1), SetArgPointee<1>(2))); | 
| 1492 | 1492 | 
| 1493   bool muted; | 1493   bool muted; | 
| 1494   EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted)); | 1494   EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output_, &muted)); | 
| 1495   EXPECT_EQ(kAccelerate, neteq_->last_operation_for_test()); | 1495   EXPECT_EQ(kAccelerate, neteq_->last_operation_for_test()); | 
| 1496 } | 1496 } | 
| 1497 | 1497 | 
| 1498 }// namespace webrtc | 1498 }// namespace webrtc | 
| OLD | NEW | 
|---|