| OLD | NEW |
| 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 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 499 // Pull out all data. | 499 // Pull out all data. |
| 500 for (size_t i = 0; i < num_frames; ++i) { | 500 for (size_t i = 0; i < num_frames; ++i) { |
| 501 int out_len; | 501 int out_len; |
| 502 int num_channels; | 502 int num_channels; |
| 503 NetEqOutputType type; | 503 NetEqOutputType type; |
| 504 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len, | 504 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len, |
| 505 &num_channels, &type)); | 505 &num_channels, &type)); |
| 506 ASSERT_EQ(kBlockSize16kHz, out_len); | 506 ASSERT_EQ(kBlockSize16kHz, out_len); |
| 507 } | 507 } |
| 508 | 508 |
| 509 std::vector<int> waiting_times; | 509 NetEqNetworkStatistics stats; |
| 510 neteq_->WaitingTimes(&waiting_times); | 510 EXPECT_EQ(0, neteq_->NetworkStatistics(&stats)); |
| 511 EXPECT_EQ(num_frames, waiting_times.size()); | |
| 512 // Since all frames are dumped into NetEQ at once, but pulled out with 10 ms | 511 // Since all frames are dumped into NetEQ at once, but pulled out with 10 ms |
| 513 // spacing (per definition), we expect the delay to increase with 10 ms for | 512 // spacing (per definition), we expect the delay to increase with 10 ms for |
| 514 // each packet. | 513 // each packet. Thus, we are calculating the statistics for a series from 10 |
| 515 for (size_t i = 0; i < waiting_times.size(); ++i) { | 514 // to 300, in steps of 10 ms. |
| 516 EXPECT_EQ(static_cast<int>(i + 1) * 10, waiting_times[i]); | 515 EXPECT_EQ(155, stats.mean_waiting_time_ms); |
| 517 } | 516 EXPECT_EQ(155, stats.median_waiting_time_ms); |
| 517 EXPECT_EQ(10, stats.min_waiting_time_ms); |
| 518 EXPECT_EQ(300, stats.max_waiting_time_ms); |
| 518 | 519 |
| 519 // Check statistics again and make sure it's been reset. | 520 // Check statistics again and make sure it's been reset. |
| 520 neteq_->WaitingTimes(&waiting_times); | 521 EXPECT_EQ(0, neteq_->NetworkStatistics(&stats)); |
| 521 int len = waiting_times.size(); | 522 EXPECT_EQ(-1, stats.mean_waiting_time_ms); |
| 522 EXPECT_EQ(0, len); | 523 EXPECT_EQ(-1, stats.median_waiting_time_ms); |
| 523 | 524 EXPECT_EQ(-1, stats.min_waiting_time_ms); |
| 524 // Process > 100 frames, and make sure that that we get statistics | 525 EXPECT_EQ(-1, stats.max_waiting_time_ms); |
| 525 // only for 100 frames. Note the new SSRC, causing NetEQ to reset. | |
| 526 num_frames = 110; | |
| 527 for (size_t i = 0; i < num_frames; ++i) { | |
| 528 uint16_t payload[kSamples] = {0}; | |
| 529 WebRtcRTPHeader rtp_info; | |
| 530 rtp_info.header.sequenceNumber = i; | |
| 531 rtp_info.header.timestamp = i * kSamples; | |
| 532 rtp_info.header.ssrc = 0x1235; // Just an arbitrary SSRC. | |
| 533 rtp_info.header.payloadType = 94; // PCM16b WB codec. | |
| 534 rtp_info.header.markerBit = 0; | |
| 535 ASSERT_EQ(0, neteq_->InsertPacket( | |
| 536 rtp_info, | |
| 537 reinterpret_cast<uint8_t*>(payload), | |
| 538 kPayloadBytes, 0)); | |
| 539 int out_len; | |
| 540 int num_channels; | |
| 541 NetEqOutputType type; | |
| 542 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len, | |
| 543 &num_channels, &type)); | |
| 544 ASSERT_EQ(kBlockSize16kHz, out_len); | |
| 545 } | |
| 546 | |
| 547 neteq_->WaitingTimes(&waiting_times); | |
| 548 EXPECT_EQ(100u, waiting_times.size()); | |
| 549 } | 526 } |
| 550 | 527 |
| 551 TEST_F(NetEqDecodingTest, TestAverageInterArrivalTimeNegative) { | 528 TEST_F(NetEqDecodingTest, TestAverageInterArrivalTimeNegative) { |
| 552 const int kNumFrames = 3000; // Needed for convergence. | 529 const int kNumFrames = 3000; // Needed for convergence. |
| 553 int frame_index = 0; | 530 int frame_index = 0; |
| 554 const size_t kSamples = 10 * 16; | 531 const size_t kSamples = 10 * 16; |
| 555 const size_t kPayloadBytes = kSamples * 2; | 532 const size_t kPayloadBytes = kSamples * 2; |
| 556 while (frame_index < kNumFrames) { | 533 while (frame_index < kNumFrames) { |
| 557 // Insert one packet each time, except every 10th time where we insert two | 534 // Insert one packet each time, except every 10th time where we insert two |
| 558 // packets at once. This will create a negative clock-drift of approx. 10%. | 535 // packets at once. This will create a negative clock-drift of approx. 10%. |
| (...skipping 974 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1533 // Pull audio once. | 1510 // Pull audio once. |
| 1534 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len, | 1511 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len, |
| 1535 &num_channels, &type)); | 1512 &num_channels, &type)); |
| 1536 ASSERT_EQ(kBlockSize16kHz, out_len); | 1513 ASSERT_EQ(kBlockSize16kHz, out_len); |
| 1537 } | 1514 } |
| 1538 // Verify speech output. | 1515 // Verify speech output. |
| 1539 EXPECT_EQ(kOutputNormal, type); | 1516 EXPECT_EQ(kOutputNormal, type); |
| 1540 } | 1517 } |
| 1541 | 1518 |
| 1542 } // namespace webrtc | 1519 } // namespace webrtc |
| OLD | NEW |