Add a TickTimer object to NetEqImpl
The TickTimer is incremented on each call to GetAudioInternal(). Other
than that, the new object is not used yet.
Also adding a unit test in NetEqImplTest to verify that the tick timer
is incremented in the call to NetEq::GetAudio.
BUG=webrtc:5608
Review URL: https://codereview.webrtc.org/1903153005
Cr-Commit-Position: refs/heads/master@{#12493}
diff --git a/webrtc/modules/audio_coding/neteq/neteq.cc b/webrtc/modules/audio_coding/neteq/neteq.cc
index c31dbdc..bc6319d 100644
--- a/webrtc/modules/audio_coding/neteq/neteq.cc
+++ b/webrtc/modules/audio_coding/neteq/neteq.cc
@@ -24,6 +24,7 @@
#include "webrtc/modules/audio_coding/neteq/packet_buffer.h"
#include "webrtc/modules/audio_coding/neteq/payload_splitter.h"
#include "webrtc/modules/audio_coding/neteq/preemptive_expand.h"
+#include "webrtc/modules/audio_coding/neteq/tick_timer.h"
#include "webrtc/modules/audio_coding/neteq/timestamp_scaler.h"
namespace webrtc {
@@ -44,6 +45,7 @@
// Creates all classes needed and inject them into a new NetEqImpl object.
// Return the new object.
NetEq* NetEq::Create(const NetEq::Config& config) {
+ std::unique_ptr<TickTimer> tick_timer(new TickTimer);
BufferLevelFilter* buffer_level_filter = new BufferLevelFilter;
DecoderDatabase* decoder_database = new DecoderDatabase;
DelayPeakDetector* delay_peak_detector = new DelayPeakDetector;
@@ -59,19 +61,11 @@
ExpandFactory* expand_factory = new ExpandFactory;
PreemptiveExpandFactory* preemptive_expand_factory =
new PreemptiveExpandFactory;
- return new NetEqImpl(config,
- buffer_level_filter,
- decoder_database,
- delay_manager,
- delay_peak_detector,
- dtmf_buffer,
- dtmf_tone_generator,
- packet_buffer,
- payload_splitter,
- timestamp_scaler,
- accelerate_factory,
- expand_factory,
- preemptive_expand_factory);
+ return new NetEqImpl(config, std::move(tick_timer), buffer_level_filter,
+ decoder_database, delay_manager, delay_peak_detector,
+ dtmf_buffer, dtmf_tone_generator, packet_buffer,
+ payload_splitter, timestamp_scaler, accelerate_factory,
+ expand_factory, preemptive_expand_factory);
}
} // namespace webrtc
diff --git a/webrtc/modules/audio_coding/neteq/neteq_impl.cc b/webrtc/modules/audio_coding/neteq/neteq_impl.cc
index b6ec655..ef470e5 100644
--- a/webrtc/modules/audio_coding/neteq/neteq_impl.cc
+++ b/webrtc/modules/audio_coding/neteq/neteq_impl.cc
@@ -43,6 +43,7 @@
#include "webrtc/modules/audio_coding/neteq/post_decode_vad.h"
#include "webrtc/modules/audio_coding/neteq/preemptive_expand.h"
#include "webrtc/modules/audio_coding/neteq/sync_buffer.h"
+#include "webrtc/modules/audio_coding/neteq/tick_timer.h"
#include "webrtc/modules/audio_coding/neteq/timestamp_scaler.h"
#include "webrtc/modules/include/module_common_types.h"
@@ -54,6 +55,7 @@
namespace webrtc {
NetEqImpl::NetEqImpl(const NetEq::Config& config,
+ std::unique_ptr<TickTimer> tick_timer,
BufferLevelFilter* buffer_level_filter,
DecoderDatabase* decoder_database,
DelayManager* delay_manager,
@@ -67,7 +69,8 @@
ExpandFactory* expand_factory,
PreemptiveExpandFactory* preemptive_expand_factory,
bool create_components)
- : buffer_level_filter_(buffer_level_filter),
+ : tick_timer_(std::move(tick_timer)),
+ buffer_level_filter_(buffer_level_filter),
decoder_database_(decoder_database),
delay_manager_(delay_manager),
delay_peak_detector_(delay_peak_detector),
@@ -795,6 +798,7 @@
DtmfEvent dtmf_event;
Operations operation;
bool play_dtmf;
+ tick_timer_->Increment();
int return_value = GetDecision(&operation, &packet_list, &dtmf_event,
&play_dtmf);
if (return_value != 0) {
diff --git a/webrtc/modules/audio_coding/neteq/neteq_impl.h b/webrtc/modules/audio_coding/neteq/neteq_impl.h
index 75055a7..9d4a9ff 100644
--- a/webrtc/modules/audio_coding/neteq/neteq_impl.h
+++ b/webrtc/modules/audio_coding/neteq/neteq_impl.h
@@ -24,6 +24,7 @@
#include "webrtc/modules/audio_coding/neteq/random_vector.h"
#include "webrtc/modules/audio_coding/neteq/rtcp.h"
#include "webrtc/modules/audio_coding/neteq/statistics_calculator.h"
+#include "webrtc/modules/audio_coding/neteq/tick_timer.h"
#include "webrtc/typedefs.h"
namespace webrtc {
@@ -68,6 +69,7 @@
// Creates a new NetEqImpl object. The object will assume ownership of all
// injected dependencies, and will delete them when done.
NetEqImpl(const NetEq::Config& config,
+ std::unique_ptr<TickTimer> tick_timer,
BufferLevelFilter* buffer_level_filter,
DecoderDatabase* decoder_database,
DelayManager* delay_manager,
@@ -328,6 +330,7 @@
virtual void CreateDecisionLogic() EXCLUSIVE_LOCKS_REQUIRED(crit_sect_);
rtc::CriticalSection crit_sect_;
+ const std::unique_ptr<TickTimer> tick_timer_ GUARDED_BY(crit_sect_);
const std::unique_ptr<BufferLevelFilter> buffer_level_filter_
GUARDED_BY(crit_sect_);
const std::unique_ptr<DecoderDatabase> decoder_database_
diff --git a/webrtc/modules/audio_coding/neteq/neteq_impl_unittest.cc b/webrtc/modules/audio_coding/neteq/neteq_impl_unittest.cc
index e9291d1..4c6f0eb 100644
--- a/webrtc/modules/audio_coding/neteq/neteq_impl_unittest.cc
+++ b/webrtc/modules/audio_coding/neteq/neteq_impl_unittest.cc
@@ -57,6 +57,7 @@
NetEqImplTest()
: neteq_(NULL),
config_(),
+ tick_timer_(new TickTimer),
mock_buffer_level_filter_(NULL),
buffer_level_filter_(NULL),
use_mock_buffer_level_filter_(true),
@@ -146,19 +147,12 @@
PreemptiveExpandFactory* preemptive_expand_factory =
new PreemptiveExpandFactory;
- neteq_ = new NetEqImpl(config_,
- buffer_level_filter_,
- decoder_database_,
- delay_manager_,
- delay_peak_detector_,
- dtmf_buffer_,
- dtmf_tone_generator_,
- packet_buffer_,
- payload_splitter_,
- timestamp_scaler_,
- accelerate_factory,
- expand_factory,
- preemptive_expand_factory);
+ neteq_ = new NetEqImpl(
+ config_, std::unique_ptr<TickTimer>(tick_timer_), buffer_level_filter_,
+ decoder_database_, delay_manager_, delay_peak_detector_, dtmf_buffer_,
+ dtmf_tone_generator_, packet_buffer_, payload_splitter_,
+ timestamp_scaler_, accelerate_factory, expand_factory,
+ preemptive_expand_factory);
ASSERT_TRUE(neteq_ != NULL);
}
@@ -201,6 +195,7 @@
NetEqImpl* neteq_;
NetEq::Config config_;
+ TickTimer* tick_timer_;
MockBufferLevelFilter* mock_buffer_level_filter_;
BufferLevelFilter* buffer_level_filter_;
bool use_mock_buffer_level_filter_;
@@ -1198,4 +1193,14 @@
EXPECT_EQ(48000, neteq_->last_output_sample_rate_hz());
}
+TEST_F(NetEqImplTest, TickTimerIncrement) {
+ UseNoMocks();
+ CreateInstance();
+ ASSERT_TRUE(tick_timer_);
+ EXPECT_EQ(0u, tick_timer_->ticks());
+ AudioFrame output;
+ EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output));
+ EXPECT_EQ(1u, tick_timer_->ticks());
+}
+
}// namespace webrtc