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

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

Issue 1296633002: NetEq/ACM: Refactor how packet waiting times are calculated (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebasing Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 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 489 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 // Pull out all data. 500 // Pull out all data.
501 for (size_t i = 0; i < num_frames; ++i) { 501 for (size_t i = 0; i < num_frames; ++i) {
502 size_t out_len; 502 size_t out_len;
503 int num_channels; 503 int num_channels;
504 NetEqOutputType type; 504 NetEqOutputType type;
505 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len, 505 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len,
506 &num_channels, &type)); 506 &num_channels, &type));
507 ASSERT_EQ(kBlockSize16kHz, out_len); 507 ASSERT_EQ(kBlockSize16kHz, out_len);
508 } 508 }
509 509
510 std::vector<int> waiting_times; 510 NetEqNetworkStatistics stats;
511 neteq_->WaitingTimes(&waiting_times); 511 EXPECT_EQ(0, neteq_->NetworkStatistics(&stats));
512 EXPECT_EQ(num_frames, waiting_times.size());
513 // Since all frames are dumped into NetEQ at once, but pulled out with 10 ms 512 // Since all frames are dumped into NetEQ at once, but pulled out with 10 ms
514 // spacing (per definition), we expect the delay to increase with 10 ms for 513 // spacing (per definition), we expect the delay to increase with 10 ms for
515 // each packet. 514 // each packet. Thus, we are calculating the statistics for a series from 10
516 for (size_t i = 0; i < waiting_times.size(); ++i) { 515 // to 300, in steps of 10 ms.
517 EXPECT_EQ(static_cast<int>(i + 1) * 10, waiting_times[i]); 516 EXPECT_EQ(155, stats.mean_waiting_time_ms);
518 } 517 EXPECT_EQ(155, stats.median_waiting_time_ms);
518 EXPECT_EQ(10, stats.min_waiting_time_ms);
519 EXPECT_EQ(300, stats.max_waiting_time_ms);
519 520
520 // Check statistics again and make sure it's been reset. 521 // Check statistics again and make sure it's been reset.
521 neteq_->WaitingTimes(&waiting_times); 522 EXPECT_EQ(0, neteq_->NetworkStatistics(&stats));
522 int len = waiting_times.size(); 523 EXPECT_EQ(-1, stats.mean_waiting_time_ms);
523 EXPECT_EQ(0, len); 524 EXPECT_EQ(-1, stats.median_waiting_time_ms);
524 525 EXPECT_EQ(-1, stats.min_waiting_time_ms);
525 // Process > 100 frames, and make sure that that we get statistics 526 EXPECT_EQ(-1, stats.max_waiting_time_ms);
526 // only for 100 frames. Note the new SSRC, causing NetEQ to reset.
527 num_frames = 110;
528 for (size_t i = 0; i < num_frames; ++i) {
529 uint16_t payload[kSamples] = {0};
530 WebRtcRTPHeader rtp_info;
531 rtp_info.header.sequenceNumber = i;
532 rtp_info.header.timestamp = i * kSamples;
533 rtp_info.header.ssrc = 0x1235; // Just an arbitrary SSRC.
534 rtp_info.header.payloadType = 94; // PCM16b WB codec.
535 rtp_info.header.markerBit = 0;
536 ASSERT_EQ(0, neteq_->InsertPacket(
537 rtp_info,
538 reinterpret_cast<uint8_t*>(payload),
539 kPayloadBytes, 0));
540 size_t out_len;
541 int num_channels;
542 NetEqOutputType type;
543 ASSERT_EQ(0, neteq_->GetAudio(kMaxBlockSize, out_data_, &out_len,
544 &num_channels, &type));
545 ASSERT_EQ(kBlockSize16kHz, out_len);
546 }
547
548 neteq_->WaitingTimes(&waiting_times);
549 EXPECT_EQ(100u, waiting_times.size());
550 } 527 }
551 528
552 TEST_F(NetEqDecodingTest, TestAverageInterArrivalTimeNegative) { 529 TEST_F(NetEqDecodingTest, TestAverageInterArrivalTimeNegative) {
553 const int kNumFrames = 3000; // Needed for convergence. 530 const int kNumFrames = 3000; // Needed for convergence.
554 int frame_index = 0; 531 int frame_index = 0;
555 const size_t kSamples = 10 * 16; 532 const size_t kSamples = 10 * 16;
556 const size_t kPayloadBytes = kSamples * 2; 533 const size_t kPayloadBytes = kSamples * 2;
557 while (frame_index < kNumFrames) { 534 while (frame_index < kNumFrames) {
558 // Insert one packet each time, except every 10th time where we insert two 535 // Insert one packet each time, except every 10th time where we insert two
559 // packets at once. This will create a negative clock-drift of approx. 10%. 536 // packets at once. This will create a negative clock-drift of approx. 10%.
(...skipping 973 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698