Adding field trial to force target level percentile in NetEQ.
Bug: webrtc:9822 Change-Id: I636f75de10851729825311ee5783e836f3b583cd Reviewed-on: https://webrtc-review.googlesource.com/c/101220 Commit-Queue: Minyue Li <minyue@webrtc.org> Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org> Cr-Commit-Position: refs/heads/master@{#24975}
This commit is contained in:
@ -15,6 +15,7 @@
|
||||
#include <math.h>
|
||||
|
||||
#include "modules/audio_coding/neteq/mock/mock_delay_peak_detector.h"
|
||||
#include "test/field_trial.h"
|
||||
#include "test/gmock.h"
|
||||
#include "test/gtest.h"
|
||||
|
||||
@ -34,11 +35,12 @@ class DelayManagerTest : public ::testing::Test {
|
||||
DelayManagerTest();
|
||||
virtual void SetUp();
|
||||
virtual void TearDown();
|
||||
void RecreateDelayManager();
|
||||
void SetPacketAudioLength(int lengt_ms);
|
||||
void InsertNextPacket();
|
||||
void IncreaseTime(int inc_ms);
|
||||
|
||||
DelayManager* dm_;
|
||||
std::unique_ptr<DelayManager> dm_;
|
||||
TickTimer tick_timer_;
|
||||
MockDelayPeakDetector detector_;
|
||||
uint16_t seq_no_;
|
||||
@ -46,11 +48,15 @@ class DelayManagerTest : public ::testing::Test {
|
||||
};
|
||||
|
||||
DelayManagerTest::DelayManagerTest()
|
||||
: dm_(NULL), detector_(&tick_timer_), seq_no_(0x1234), ts_(0x12345678) {}
|
||||
: dm_(nullptr), detector_(&tick_timer_), seq_no_(0x1234), ts_(0x12345678) {}
|
||||
|
||||
void DelayManagerTest::SetUp() {
|
||||
RecreateDelayManager();
|
||||
}
|
||||
|
||||
void DelayManagerTest::RecreateDelayManager() {
|
||||
EXPECT_CALL(detector_, Reset()).Times(1);
|
||||
dm_ = new DelayManager(kMaxNumberOfPackets, &detector_, &tick_timer_);
|
||||
dm_.reset(new DelayManager(kMaxNumberOfPackets, &detector_, &tick_timer_));
|
||||
}
|
||||
|
||||
void DelayManagerTest::SetPacketAudioLength(int lengt_ms) {
|
||||
@ -71,7 +77,6 @@ void DelayManagerTest::IncreaseTime(int inc_ms) {
|
||||
}
|
||||
void DelayManagerTest::TearDown() {
|
||||
EXPECT_CALL(detector_, Die());
|
||||
delete dm_;
|
||||
}
|
||||
|
||||
TEST_F(DelayManagerTest, CreateAndDestroy) {
|
||||
@ -326,6 +331,61 @@ TEST_F(DelayManagerTest, Failures) {
|
||||
EXPECT_FALSE(dm_->SetMaximumDelay(60));
|
||||
}
|
||||
|
||||
TEST_F(DelayManagerTest, TargetDelayGreaterThanOne) {
|
||||
test::ScopedFieldTrials field_trial(
|
||||
"WebRTC-Audio-NetEqForceTargetDelayPercentile/Enabled-0/");
|
||||
RecreateDelayManager();
|
||||
EXPECT_EQ(absl::make_optional<int>(1 << 30),
|
||||
dm_->forced_limit_probability_for_test());
|
||||
|
||||
SetPacketAudioLength(kFrameSizeMs);
|
||||
// First packet arrival.
|
||||
InsertNextPacket();
|
||||
// Advance time by one frame size.
|
||||
IncreaseTime(kFrameSizeMs);
|
||||
// Second packet arrival.
|
||||
// Expect detector update method to be called once with inter-arrival time
|
||||
// equal to 1 packet.
|
||||
EXPECT_CALL(detector_, Update(1, 1)).WillOnce(Return(false));
|
||||
InsertNextPacket();
|
||||
constexpr int kExpectedTarget = 1;
|
||||
EXPECT_EQ(kExpectedTarget << 8, dm_->TargetLevel()); // In Q8.
|
||||
}
|
||||
|
||||
TEST_F(DelayManagerTest, ForcedTargetDelayPercentile) {
|
||||
{
|
||||
test::ScopedFieldTrials field_trial(
|
||||
"WebRTC-Audio-NetEqForceTargetDelayPercentile/Enabled-95/");
|
||||
RecreateDelayManager();
|
||||
EXPECT_EQ(absl::make_optional<int>(53687091),
|
||||
dm_->forced_limit_probability_for_test()); // 1/20 in Q30
|
||||
}
|
||||
{
|
||||
test::ScopedFieldTrials field_trial(
|
||||
"WebRTC-Audio-NetEqForceTargetDelayPercentile/Enabled-99.95/");
|
||||
RecreateDelayManager();
|
||||
EXPECT_EQ(absl::make_optional<int>(536871),
|
||||
dm_->forced_limit_probability_for_test()); // 1/2000 in Q30
|
||||
}
|
||||
{
|
||||
test::ScopedFieldTrials field_trial(
|
||||
"WebRTC-Audio-NetEqForceTargetDelayPercentile/Disabled/");
|
||||
RecreateDelayManager();
|
||||
EXPECT_EQ(absl::nullopt, dm_->forced_limit_probability_for_test());
|
||||
}
|
||||
{
|
||||
test::ScopedFieldTrials field_trial(
|
||||
"WebRTC-Audio-NetEqForceTargetDelayPercentile/Enabled--1/");
|
||||
EXPECT_EQ(absl::nullopt, dm_->forced_limit_probability_for_test());
|
||||
}
|
||||
{
|
||||
test::ScopedFieldTrials field_trial(
|
||||
"WebRTC-Audio-NetEqForceTargetDelayPercentile/Enabled-100.1/");
|
||||
RecreateDelayManager();
|
||||
EXPECT_EQ(absl::nullopt, dm_->forced_limit_probability_for_test());
|
||||
}
|
||||
}
|
||||
|
||||
// Test if the histogram is stretched correctly if the packet size is decreased.
|
||||
TEST(DelayManagerIATScalingTest, StretchTest) {
|
||||
using IATVector = DelayManager::IATVector;
|
||||
@ -437,4 +497,5 @@ TEST(DelayManagerIATScalingTest, OverflowTest) {
|
||||
scaled_iat = DelayManager::ScaleHistogram(iat, 20, 60);
|
||||
EXPECT_EQ(scaled_iat, expected_result);
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
Reference in New Issue
Block a user