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

Unified Diff: webrtc/modules/audio_coding/main/acm2/initial_delay_manager_unittest.cc

Issue 1481493004: audio_coding: remove "main" directory (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebased 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/audio_coding/main/acm2/initial_delay_manager_unittest.cc
diff --git a/webrtc/modules/audio_coding/main/acm2/initial_delay_manager_unittest.cc b/webrtc/modules/audio_coding/main/acm2/initial_delay_manager_unittest.cc
deleted file mode 100644
index e973593eb49d7dd741a86e9f6608cfdbec7bd477..0000000000000000000000000000000000000000
--- a/webrtc/modules/audio_coding/main/acm2/initial_delay_manager_unittest.cc
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#include <string.h>
-
-#include "testing/gtest/include/gtest/gtest.h"
-#include "webrtc/modules/audio_coding/main/acm2/initial_delay_manager.h"
-
-namespace webrtc {
-
-namespace acm2 {
-
-namespace {
-
-const uint8_t kAudioPayloadType = 0;
-const uint8_t kCngPayloadType = 1;
-const uint8_t kAvtPayloadType = 2;
-
-const int kSamplingRateHz = 16000;
-const int kInitDelayMs = 200;
-const int kFrameSizeMs = 20;
-const uint32_t kTimestampStep = kFrameSizeMs * kSamplingRateHz / 1000;
-const int kLatePacketThreshold = 5;
-
-void InitRtpInfo(WebRtcRTPHeader* rtp_info) {
- memset(rtp_info, 0, sizeof(*rtp_info));
- rtp_info->header.markerBit = false;
- rtp_info->header.payloadType = kAudioPayloadType;
- rtp_info->header.sequenceNumber = 1234;
- rtp_info->header.timestamp = 0xFFFFFFFD; // Close to wrap around.
- rtp_info->header.ssrc = 0x87654321; // Arbitrary.
- rtp_info->header.numCSRCs = 0; // Arbitrary.
- rtp_info->header.paddingLength = 0;
- rtp_info->header.headerLength = sizeof(RTPHeader);
- rtp_info->header.payload_type_frequency = kSamplingRateHz;
- rtp_info->header.extension.absoluteSendTime = 0;
- rtp_info->header.extension.transmissionTimeOffset = 0;
- rtp_info->frameType = kAudioFrameSpeech;
-}
-
-void ForwardRtpHeader(int n,
- WebRtcRTPHeader* rtp_info,
- uint32_t* rtp_receive_timestamp) {
- rtp_info->header.sequenceNumber += n;
- rtp_info->header.timestamp += n * kTimestampStep;
- *rtp_receive_timestamp += n * kTimestampStep;
-}
-
-void NextRtpHeader(WebRtcRTPHeader* rtp_info,
- uint32_t* rtp_receive_timestamp) {
- ForwardRtpHeader(1, rtp_info, rtp_receive_timestamp);
-}
-
-} // namespace
-
-class InitialDelayManagerTest : public ::testing::Test {
- protected:
- InitialDelayManagerTest()
- : manager_(new InitialDelayManager(kInitDelayMs, kLatePacketThreshold)),
- rtp_receive_timestamp_(1111) { } // Arbitrary starting point.
-
- virtual void SetUp() {
- ASSERT_TRUE(manager_.get() != NULL);
- InitRtpInfo(&rtp_info_);
- }
-
- void GetNextRtpHeader(WebRtcRTPHeader* rtp_info,
- uint32_t* rtp_receive_timestamp) const {
- memcpy(rtp_info, &rtp_info_, sizeof(*rtp_info));
- *rtp_receive_timestamp = rtp_receive_timestamp_;
- NextRtpHeader(rtp_info, rtp_receive_timestamp);
- }
-
- rtc::scoped_ptr<InitialDelayManager> manager_;
- WebRtcRTPHeader rtp_info_;
- uint32_t rtp_receive_timestamp_;
-};
-
-TEST_F(InitialDelayManagerTest, Init) {
- EXPECT_TRUE(manager_->buffering());
- EXPECT_FALSE(manager_->PacketBuffered());
- manager_->DisableBuffering();
- EXPECT_FALSE(manager_->buffering());
- InitialDelayManager::SyncStream sync_stream;
-
- // Call before any packet inserted.
- manager_->LatePackets(0x6789ABCD, &sync_stream); // Arbitrary but large
- // receive timestamp.
- EXPECT_EQ(0, sync_stream.num_sync_packets);
-
- // Insert non-audio packets, a CNG and DTMF.
- rtp_info_.header.payloadType = kCngPayloadType;
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kCngPacket, false,
- kSamplingRateHz, &sync_stream);
- EXPECT_EQ(0, sync_stream.num_sync_packets);
- ForwardRtpHeader(5, &rtp_info_, &rtp_receive_timestamp_);
- rtp_info_.header.payloadType = kAvtPayloadType;
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kAvtPacket, false,
- kSamplingRateHz, &sync_stream);
- // Gap in sequence numbers but no audio received, sync-stream should be empty.
- EXPECT_EQ(0, sync_stream.num_sync_packets);
- manager_->LatePackets(0x45678987, &sync_stream); // Large arbitrary receive
- // timestamp.
- // |manager_| has no estimate of timestamp-step and has not received any
- // audio packet.
- EXPECT_EQ(0, sync_stream.num_sync_packets);
-
-
- NextRtpHeader(&rtp_info_, &rtp_receive_timestamp_);
- rtp_info_.header.payloadType = kAudioPayloadType;
- // First packet.
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kAudioPacket, true,
- kSamplingRateHz, &sync_stream);
- EXPECT_EQ(0, sync_stream.num_sync_packets);
-
- // Call LatePAcket() after only one packet inserted.
- manager_->LatePackets(0x6789ABCD, &sync_stream); // Arbitrary but large
- // receive timestamp.
- EXPECT_EQ(0, sync_stream.num_sync_packets);
-
- // Gap in timestamp, but this packet is also flagged as "new," therefore,
- // expecting empty sync-stream.
- ForwardRtpHeader(5, &rtp_info_, &rtp_receive_timestamp_);
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kAudioPacket, true,
- kSamplingRateHz, &sync_stream);
-}
-
-TEST_F(InitialDelayManagerTest, MissingPacket) {
- InitialDelayManager::SyncStream sync_stream;
- // First packet.
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kAudioPacket, true,
- kSamplingRateHz, &sync_stream);
- ASSERT_EQ(0, sync_stream.num_sync_packets);
-
- // Second packet.
- NextRtpHeader(&rtp_info_, &rtp_receive_timestamp_);
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kAudioPacket, false,
- kSamplingRateHz, &sync_stream);
- ASSERT_EQ(0, sync_stream.num_sync_packets);
-
- // Third packet, missing packets start from here.
- NextRtpHeader(&rtp_info_, &rtp_receive_timestamp_);
-
- // First sync-packet in sync-stream is one after the above packet.
- WebRtcRTPHeader expected_rtp_info;
- uint32_t expected_receive_timestamp;
- GetNextRtpHeader(&expected_rtp_info, &expected_receive_timestamp);
-
- const int kNumMissingPackets = 10;
- ForwardRtpHeader(kNumMissingPackets, &rtp_info_, &rtp_receive_timestamp_);
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kAudioPacket, false,
- kSamplingRateHz, &sync_stream);
- EXPECT_EQ(kNumMissingPackets - 2, sync_stream.num_sync_packets);
- EXPECT_EQ(0, memcmp(&expected_rtp_info, &sync_stream.rtp_info,
- sizeof(expected_rtp_info)));
- EXPECT_EQ(kTimestampStep, sync_stream.timestamp_step);
- EXPECT_EQ(expected_receive_timestamp, sync_stream.receive_timestamp);
-}
-
-// There hasn't been any consecutive packets to estimate timestamp-step.
-TEST_F(InitialDelayManagerTest, MissingPacketEstimateTimestamp) {
- InitialDelayManager::SyncStream sync_stream;
- // First packet.
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kAudioPacket, true,
- kSamplingRateHz, &sync_stream);
- ASSERT_EQ(0, sync_stream.num_sync_packets);
-
- // Second packet, missing packets start here.
- NextRtpHeader(&rtp_info_, &rtp_receive_timestamp_);
-
- // First sync-packet in sync-stream is one after the above.
- WebRtcRTPHeader expected_rtp_info;
- uint32_t expected_receive_timestamp;
- GetNextRtpHeader(&expected_rtp_info, &expected_receive_timestamp);
-
- const int kNumMissingPackets = 10;
- ForwardRtpHeader(kNumMissingPackets, &rtp_info_, &rtp_receive_timestamp_);
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kAudioPacket, false,
- kSamplingRateHz, &sync_stream);
- EXPECT_EQ(kNumMissingPackets - 2, sync_stream.num_sync_packets);
- EXPECT_EQ(0, memcmp(&expected_rtp_info, &sync_stream.rtp_info,
- sizeof(expected_rtp_info)));
-}
-
-TEST_F(InitialDelayManagerTest, MissingPacketWithCng) {
- InitialDelayManager::SyncStream sync_stream;
-
- // First packet.
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kAudioPacket, true,
- kSamplingRateHz, &sync_stream);
- ASSERT_EQ(0, sync_stream.num_sync_packets);
-
- // Second packet as CNG.
- NextRtpHeader(&rtp_info_, &rtp_receive_timestamp_);
- rtp_info_.header.payloadType = kCngPayloadType;
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kCngPacket, false,
- kSamplingRateHz, &sync_stream);
- ASSERT_EQ(0, sync_stream.num_sync_packets);
-
- // Audio packet after CNG. Missing packets start from this packet.
- rtp_info_.header.payloadType = kAudioPayloadType;
- NextRtpHeader(&rtp_info_, &rtp_receive_timestamp_);
-
- // Timestamps are increased higher than regular packet.
- const uint32_t kCngTimestampStep = 5 * kTimestampStep;
- rtp_info_.header.timestamp += kCngTimestampStep;
- rtp_receive_timestamp_ += kCngTimestampStep;
-
- // First sync-packet in sync-stream is the one after the above packet.
- WebRtcRTPHeader expected_rtp_info;
- uint32_t expected_receive_timestamp;
- GetNextRtpHeader(&expected_rtp_info, &expected_receive_timestamp);
-
- const int kNumMissingPackets = 10;
- ForwardRtpHeader(kNumMissingPackets, &rtp_info_, &rtp_receive_timestamp_);
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kAudioPacket, false,
- kSamplingRateHz, &sync_stream);
- EXPECT_EQ(kNumMissingPackets - 2, sync_stream.num_sync_packets);
- EXPECT_EQ(0, memcmp(&expected_rtp_info, &sync_stream.rtp_info,
- sizeof(expected_rtp_info)));
- EXPECT_EQ(kTimestampStep, sync_stream.timestamp_step);
- EXPECT_EQ(expected_receive_timestamp, sync_stream.receive_timestamp);
-}
-
-TEST_F(InitialDelayManagerTest, LatePacket) {
- InitialDelayManager::SyncStream sync_stream;
- // First packet.
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kAudioPacket, true,
- kSamplingRateHz, &sync_stream);
- ASSERT_EQ(0, sync_stream.num_sync_packets);
-
- // Second packet.
- NextRtpHeader(&rtp_info_, &rtp_receive_timestamp_);
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kAudioPacket, false,
- kSamplingRateHz, &sync_stream);
- ASSERT_EQ(0, sync_stream.num_sync_packets);
-
- // Timestamp increment for 10ms;
- const uint32_t kTimestampStep10Ms = kSamplingRateHz / 100;
-
- // 10 ms after the second packet is inserted.
- uint32_t timestamp_now = rtp_receive_timestamp_ + kTimestampStep10Ms;
-
- // Third packet, late packets start from this packet.
- NextRtpHeader(&rtp_info_, &rtp_receive_timestamp_);
-
- // First sync-packet in sync-stream, which is one after the above packet.
- WebRtcRTPHeader expected_rtp_info;
- uint32_t expected_receive_timestamp;
- GetNextRtpHeader(&expected_rtp_info, &expected_receive_timestamp);
-
- const int kLatePacketThreshold = 5;
-
- int expected_num_late_packets = kLatePacketThreshold - 1;
- for (int k = 0; k < 2; ++k) {
- for (int n = 1; n < kLatePacketThreshold * kFrameSizeMs / 10; ++n) {
- manager_->LatePackets(timestamp_now, &sync_stream);
- EXPECT_EQ(0, sync_stream.num_sync_packets) <<
- "try " << k << " loop number " << n;
- timestamp_now += kTimestampStep10Ms;
- }
- manager_->LatePackets(timestamp_now, &sync_stream);
-
- EXPECT_EQ(expected_num_late_packets, sync_stream.num_sync_packets) <<
- "try " << k;
- EXPECT_EQ(kTimestampStep, sync_stream.timestamp_step) <<
- "try " << k;
- EXPECT_EQ(expected_receive_timestamp, sync_stream.receive_timestamp) <<
- "try " << k;
- EXPECT_EQ(0, memcmp(&expected_rtp_info, &sync_stream.rtp_info,
- sizeof(expected_rtp_info)));
-
- timestamp_now += kTimestampStep10Ms;
-
- // |manger_| assumes the |sync_stream| obtained by LatePacket() is fully
- // injected. The last injected packet is sync-packet, therefore, there will
- // not be any gap between sync stream of this and the next iteration.
- ForwardRtpHeader(sync_stream.num_sync_packets, &expected_rtp_info,
- &expected_receive_timestamp);
- expected_num_late_packets = kLatePacketThreshold;
- }
-
- // Test "no-gap" for missing packet after late packet.
- // |expected_rtp_info| is the expected sync-packet if any packet is missing.
- memcpy(&rtp_info_, &expected_rtp_info, sizeof(rtp_info_));
- rtp_receive_timestamp_ = expected_receive_timestamp;
-
- int kNumMissingPackets = 3; // Arbitrary.
- ForwardRtpHeader(kNumMissingPackets, &rtp_info_, &rtp_receive_timestamp_);
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kAudioPacket, false,
- kSamplingRateHz, &sync_stream);
-
- // Note that there is one packet gap between the last sync-packet and the
- // latest inserted packet.
- EXPECT_EQ(kNumMissingPackets - 1, sync_stream.num_sync_packets);
- EXPECT_EQ(kTimestampStep, sync_stream.timestamp_step);
- EXPECT_EQ(expected_receive_timestamp, sync_stream.receive_timestamp);
- EXPECT_EQ(0, memcmp(&expected_rtp_info, &sync_stream.rtp_info,
- sizeof(expected_rtp_info)));
-}
-
-TEST_F(InitialDelayManagerTest, NoLatePacketAfterCng) {
- InitialDelayManager::SyncStream sync_stream;
-
- // First packet.
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kAudioPacket, true,
- kSamplingRateHz, &sync_stream);
- ASSERT_EQ(0, sync_stream.num_sync_packets);
-
- // Second packet as CNG.
- NextRtpHeader(&rtp_info_, &rtp_receive_timestamp_);
- rtp_info_.header.payloadType = kCngPayloadType;
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kCngPacket, false,
- kSamplingRateHz, &sync_stream);
- ASSERT_EQ(0, sync_stream.num_sync_packets);
-
- // Forward the time more then |kLatePacketThreshold| packets.
- uint32_t timestamp_now = rtp_receive_timestamp_ + kTimestampStep * (3 +
- kLatePacketThreshold);
-
- manager_->LatePackets(timestamp_now, &sync_stream);
- EXPECT_EQ(0, sync_stream.num_sync_packets);
-}
-
-TEST_F(InitialDelayManagerTest, BufferingAudio) {
- InitialDelayManager::SyncStream sync_stream;
-
- // Very first packet is not counted in calculation of buffered audio.
- for (int n = 0; n < kInitDelayMs / kFrameSizeMs; ++n) {
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kAudioPacket,
- n == 0, kSamplingRateHz, &sync_stream);
- EXPECT_EQ(0, sync_stream.num_sync_packets);
- EXPECT_TRUE(manager_->buffering());
- const uint32_t expected_playout_timestamp = rtp_info_.header.timestamp -
- kInitDelayMs * kSamplingRateHz / 1000;
- uint32_t actual_playout_timestamp = 0;
- EXPECT_TRUE(manager_->GetPlayoutTimestamp(&actual_playout_timestamp));
- EXPECT_EQ(expected_playout_timestamp, actual_playout_timestamp);
- NextRtpHeader(&rtp_info_, &rtp_receive_timestamp_);
- }
-
- manager_->UpdateLastReceivedPacket(rtp_info_, rtp_receive_timestamp_,
- InitialDelayManager::kAudioPacket,
- false, kSamplingRateHz, &sync_stream);
- EXPECT_EQ(0, sync_stream.num_sync_packets);
- EXPECT_FALSE(manager_->buffering());
-}
-
-} // namespace acm2
-
-} // namespace webrtc
« no previous file with comments | « webrtc/modules/audio_coding/main/acm2/initial_delay_manager.cc ('k') | webrtc/modules/audio_coding/main/acm2/rent_a_codec.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698