Use packet arrival history in delay manager.
It replaces the relative arrival delay tracker which is equivalent. This results in a slight bit-exactness change but nothing that should affect quality. Bug: webrtc:13322 Change-Id: I6ed5d6fdfa724859122928a8838acce27ac2e5d0 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/263380 Commit-Queue: Jakob Ivarsson <jakobi@webrtc.org> Reviewed-by: Minyue Li <minyue@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37004}
This commit is contained in:
committed by
WebRTC LUCI CQ
parent
c1fb359b2a
commit
01ab7d501b
@ -30,9 +30,7 @@ namespace webrtc {
|
||||
namespace {
|
||||
constexpr int kMaxNumberOfPackets = 200;
|
||||
constexpr int kTimeStepMs = 10;
|
||||
constexpr int kFs = 8000;
|
||||
constexpr int kFrameSizeMs = 20;
|
||||
constexpr int kTsIncrement = kFrameSizeMs * kFs / 1000;
|
||||
constexpr int kMaxBufferSizeMs = kMaxNumberOfPackets * kFrameSizeMs;
|
||||
|
||||
} // namespace
|
||||
@ -41,25 +39,22 @@ class DelayManagerTest : public ::testing::Test {
|
||||
protected:
|
||||
DelayManagerTest();
|
||||
virtual void SetUp();
|
||||
absl::optional<int> InsertNextPacket();
|
||||
void Update(int delay);
|
||||
void IncreaseTime(int inc_ms);
|
||||
|
||||
TickTimer tick_timer_;
|
||||
DelayManager dm_;
|
||||
uint32_t ts_;
|
||||
};
|
||||
|
||||
DelayManagerTest::DelayManagerTest()
|
||||
: dm_(DelayManager::Config(), &tick_timer_), ts_(0x12345678) {}
|
||||
: dm_(DelayManager::Config(), &tick_timer_) {}
|
||||
|
||||
void DelayManagerTest::SetUp() {
|
||||
dm_.SetPacketAudioLength(kFrameSizeMs);
|
||||
}
|
||||
|
||||
absl::optional<int> DelayManagerTest::InsertNextPacket() {
|
||||
auto relative_delay = dm_.Update(ts_, kFs);
|
||||
ts_ += kTsIncrement;
|
||||
return relative_delay;
|
||||
void DelayManagerTest::Update(int delay) {
|
||||
dm_.Update(delay, false);
|
||||
}
|
||||
|
||||
void DelayManagerTest::IncreaseTime(int inc_ms) {
|
||||
@ -75,28 +70,28 @@ TEST_F(DelayManagerTest, CreateAndDestroy) {
|
||||
|
||||
TEST_F(DelayManagerTest, UpdateNormal) {
|
||||
for (int i = 0; i < 50; ++i) {
|
||||
InsertNextPacket();
|
||||
Update(0);
|
||||
IncreaseTime(kFrameSizeMs);
|
||||
}
|
||||
EXPECT_EQ(20, dm_.TargetDelayMs());
|
||||
}
|
||||
|
||||
TEST_F(DelayManagerTest, MaxDelay) {
|
||||
InsertNextPacket();
|
||||
Update(0);
|
||||
const int kMaxDelayMs = 60;
|
||||
EXPECT_GT(dm_.TargetDelayMs(), kMaxDelayMs);
|
||||
EXPECT_TRUE(dm_.SetMaximumDelay(kMaxDelayMs));
|
||||
InsertNextPacket();
|
||||
Update(0);
|
||||
EXPECT_EQ(kMaxDelayMs, dm_.TargetDelayMs());
|
||||
}
|
||||
|
||||
TEST_F(DelayManagerTest, MinDelay) {
|
||||
InsertNextPacket();
|
||||
Update(0);
|
||||
int kMinDelayMs = 7 * kFrameSizeMs;
|
||||
EXPECT_LT(dm_.TargetDelayMs(), kMinDelayMs);
|
||||
dm_.SetMinimumDelay(kMinDelayMs);
|
||||
IncreaseTime(kFrameSizeMs);
|
||||
InsertNextPacket();
|
||||
Update(0);
|
||||
EXPECT_EQ(kMinDelayMs, dm_.TargetDelayMs());
|
||||
}
|
||||
|
||||
@ -220,7 +215,7 @@ TEST_F(DelayManagerTest, MinimumDelayMemorization) {
|
||||
|
||||
TEST_F(DelayManagerTest, BaseMinimumDelay) {
|
||||
// First packet arrival.
|
||||
InsertNextPacket();
|
||||
Update(0);
|
||||
|
||||
constexpr int kBaseMinimumDelayMs = 7 * kFrameSizeMs;
|
||||
EXPECT_LT(dm_.TargetDelayMs(), kBaseMinimumDelayMs);
|
||||
@ -228,14 +223,12 @@ TEST_F(DelayManagerTest, BaseMinimumDelay) {
|
||||
EXPECT_EQ(dm_.GetBaseMinimumDelay(), kBaseMinimumDelayMs);
|
||||
|
||||
IncreaseTime(kFrameSizeMs);
|
||||
InsertNextPacket();
|
||||
Update(0);
|
||||
EXPECT_EQ(dm_.GetBaseMinimumDelay(), kBaseMinimumDelayMs);
|
||||
EXPECT_EQ(kBaseMinimumDelayMs, dm_.TargetDelayMs());
|
||||
}
|
||||
|
||||
TEST_F(DelayManagerTest, Failures) {
|
||||
// Wrong sample rate.
|
||||
EXPECT_EQ(absl::nullopt, dm_.Update(0, -1));
|
||||
// Wrong packet size.
|
||||
EXPECT_EQ(-1, dm_.SetPacketAudioLength(0));
|
||||
EXPECT_EQ(-1, dm_.SetPacketAudioLength(-1));
|
||||
@ -250,13 +243,4 @@ TEST_F(DelayManagerTest, Failures) {
|
||||
EXPECT_FALSE(dm_.SetMaximumDelay(60));
|
||||
}
|
||||
|
||||
TEST_F(DelayManagerTest, RelativeArrivalDelayStatistic) {
|
||||
EXPECT_EQ(absl::nullopt, InsertNextPacket());
|
||||
IncreaseTime(kFrameSizeMs);
|
||||
EXPECT_EQ(0, InsertNextPacket());
|
||||
IncreaseTime(2 * kFrameSizeMs);
|
||||
|
||||
EXPECT_EQ(20, InsertNextPacket());
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
Reference in New Issue
Block a user