webrtc/modules/audio_coding/neteq/decision_logic_unittest.cc
Jakob Ivarsson 39b934ba2e Add NetEq config flag that enables RTX handling.
When enabled, the delay manager is updated with reordered packets. It also makes the peak detector ignore the reordered packets.

Change-Id: I2bdc99764cc76b15e613ed3dc75f83aaf66eee4e
Bug: webrtc:10178
Reviewed-on: https://webrtc-review.googlesource.com/c/116481
Commit-Queue: Jakob Ivarsson‎ <jakobi@webrtc.org>
Reviewed-by: Minyue Li <minyue@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26187}
2019-01-10 10:04:34 +00:00

100 lines
4.2 KiB
C++

/*
* Copyright (c) 2012 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.
*/
// Unit tests for DecisionLogic class and derived classes.
#include "modules/audio_coding/neteq/decision_logic.h"
#include "modules/audio_coding/neteq/buffer_level_filter.h"
#include "modules/audio_coding/neteq/decoder_database.h"
#include "modules/audio_coding/neteq/delay_manager.h"
#include "modules/audio_coding/neteq/delay_peak_detector.h"
#include "modules/audio_coding/neteq/packet_buffer.h"
#include "modules/audio_coding/neteq/tick_timer.h"
#include "test/field_trial.h"
#include "test/gtest.h"
#include "test/mock_audio_decoder_factory.h"
namespace webrtc {
TEST(DecisionLogic, CreateAndDestroy) {
int fs_hz = 8000;
int output_size_samples = fs_hz / 100; // Samples per 10 ms.
DecoderDatabase decoder_database(
new rtc::RefCountedObject<MockAudioDecoderFactory>, absl::nullopt);
TickTimer tick_timer;
PacketBuffer packet_buffer(10, &tick_timer);
DelayPeakDetector delay_peak_detector(&tick_timer, false);
DelayManager delay_manager(240, 0, &delay_peak_detector, &tick_timer);
BufferLevelFilter buffer_level_filter;
DecisionLogic* logic = DecisionLogic::Create(
fs_hz, output_size_samples, false, &decoder_database, packet_buffer,
&delay_manager, &buffer_level_filter, &tick_timer);
delete logic;
}
TEST(DecisionLogic, PostponeDecodingAfterExpansionSettings) {
constexpr int kDefaultPostponeDecodingLevel = 50;
constexpr int kFsHz = 8000;
constexpr int kOutputSizeSamples = kFsHz / 100; // Samples per 10 ms.
DecoderDatabase decoder_database(
new rtc::RefCountedObject<MockAudioDecoderFactory>, absl::nullopt);
TickTimer tick_timer;
PacketBuffer packet_buffer(10, &tick_timer);
DelayPeakDetector delay_peak_detector(&tick_timer, false);
DelayManager delay_manager(240, 0, &delay_peak_detector, &tick_timer);
BufferLevelFilter buffer_level_filter;
{
test::ScopedFieldTrials field_trial(
"WebRTC-Audio-NetEqPostponeDecodingAfterExpand/Enabled/");
DecisionLogic logic(kFsHz, kOutputSizeSamples, false, &decoder_database,
packet_buffer, &delay_manager, &buffer_level_filter,
&tick_timer);
EXPECT_EQ(kDefaultPostponeDecodingLevel,
logic.postpone_decoding_level_for_test());
}
{
test::ScopedFieldTrials field_trial(
"WebRTC-Audio-NetEqPostponeDecodingAfterExpand/Enabled-65/");
DecisionLogic logic(kFsHz, kOutputSizeSamples, false, &decoder_database,
packet_buffer, &delay_manager, &buffer_level_filter,
&tick_timer);
EXPECT_EQ(65, logic.postpone_decoding_level_for_test());
}
{
test::ScopedFieldTrials field_trial(
"WebRTC-Audio-NetEqPostponeDecodingAfterExpand/Disabled/");
DecisionLogic logic(kFsHz, kOutputSizeSamples, false, &decoder_database,
packet_buffer, &delay_manager, &buffer_level_filter,
&tick_timer);
EXPECT_EQ(0, logic.postpone_decoding_level_for_test());
}
{
test::ScopedFieldTrials field_trial(
"WebRTC-Audio-NetEqPostponeDecodingAfterExpand/Enabled--1/");
DecisionLogic logic(kFsHz, kOutputSizeSamples, false, &decoder_database,
packet_buffer, &delay_manager, &buffer_level_filter,
&tick_timer);
EXPECT_EQ(kDefaultPostponeDecodingLevel,
logic.postpone_decoding_level_for_test());
}
{
test::ScopedFieldTrials field_trial(
"WebRTC-Audio-NetEqPostponeDecodingAfterExpand/Enabled-101/");
DecisionLogic logic(kFsHz, kOutputSizeSamples, false, &decoder_database,
packet_buffer, &delay_manager, &buffer_level_filter,
&tick_timer);
EXPECT_EQ(kDefaultPostponeDecodingLevel,
logic.postpone_decoding_level_for_test());
}
}
// TODO(hlundin): Write more tests.
} // namespace webrtc