diff --git a/webrtc/modules/audio_coding/neteq/neteq.cc b/webrtc/modules/audio_coding/neteq/neteq.cc index c31dbdc1a3..bc6319dedb 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 @@ std::string NetEq::Config::ToString() const { // 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 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 @@ NetEq* NetEq::Create(const NetEq::Config& config) { 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 b6ec655af3..ef470e5d4e 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 tick_timer, BufferLevelFilter* buffer_level_filter, DecoderDatabase* decoder_database, DelayManager* delay_manager, @@ -67,7 +69,8 @@ NetEqImpl::NetEqImpl(const NetEq::Config& config, 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 @@ int NetEqImpl::GetAudioInternal(AudioFrame* audio_frame) { 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 75055a7b47..9d4a9ff269 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 @@ class NetEqImpl : public webrtc::NetEq { // 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 tick_timer, BufferLevelFilter* buffer_level_filter, DecoderDatabase* decoder_database, DelayManager* delay_manager, @@ -328,6 +330,7 @@ class NetEqImpl : public webrtc::NetEq { virtual void CreateDecisionLogic() EXCLUSIVE_LOCKS_REQUIRED(crit_sect_); rtc::CriticalSection crit_sect_; + const std::unique_ptr tick_timer_ GUARDED_BY(crit_sect_); const std::unique_ptr buffer_level_filter_ GUARDED_BY(crit_sect_); const std::unique_ptr 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 e9291d1815..4c6f0eb2c7 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 @@ class NetEqImplTest : public ::testing::Test { 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 @@ class NetEqImplTest : public ::testing::Test { 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(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 @@ class NetEqImplTest : public ::testing::Test { 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 @@ TEST_F(NetEqImplTest, InitialLastOutputSampleRate) { 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