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}
This commit is contained in:
committed by
Commit bot
parent
1c27c6bf4c
commit
ed4972116c
@ -24,6 +24,7 @@
|
|||||||
#include "webrtc/modules/audio_coding/neteq/packet_buffer.h"
|
#include "webrtc/modules/audio_coding/neteq/packet_buffer.h"
|
||||||
#include "webrtc/modules/audio_coding/neteq/payload_splitter.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/preemptive_expand.h"
|
||||||
|
#include "webrtc/modules/audio_coding/neteq/tick_timer.h"
|
||||||
#include "webrtc/modules/audio_coding/neteq/timestamp_scaler.h"
|
#include "webrtc/modules/audio_coding/neteq/timestamp_scaler.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
@ -44,6 +45,7 @@ std::string NetEq::Config::ToString() const {
|
|||||||
// Creates all classes needed and inject them into a new NetEqImpl object.
|
// Creates all classes needed and inject them into a new NetEqImpl object.
|
||||||
// Return the new object.
|
// Return the new object.
|
||||||
NetEq* NetEq::Create(const NetEq::Config& config) {
|
NetEq* NetEq::Create(const NetEq::Config& config) {
|
||||||
|
std::unique_ptr<TickTimer> tick_timer(new TickTimer);
|
||||||
BufferLevelFilter* buffer_level_filter = new BufferLevelFilter;
|
BufferLevelFilter* buffer_level_filter = new BufferLevelFilter;
|
||||||
DecoderDatabase* decoder_database = new DecoderDatabase;
|
DecoderDatabase* decoder_database = new DecoderDatabase;
|
||||||
DelayPeakDetector* delay_peak_detector = new DelayPeakDetector;
|
DelayPeakDetector* delay_peak_detector = new DelayPeakDetector;
|
||||||
@ -59,19 +61,11 @@ NetEq* NetEq::Create(const NetEq::Config& config) {
|
|||||||
ExpandFactory* expand_factory = new ExpandFactory;
|
ExpandFactory* expand_factory = new ExpandFactory;
|
||||||
PreemptiveExpandFactory* preemptive_expand_factory =
|
PreemptiveExpandFactory* preemptive_expand_factory =
|
||||||
new PreemptiveExpandFactory;
|
new PreemptiveExpandFactory;
|
||||||
return new NetEqImpl(config,
|
return new NetEqImpl(config, std::move(tick_timer), buffer_level_filter,
|
||||||
buffer_level_filter,
|
decoder_database, delay_manager, delay_peak_detector,
|
||||||
decoder_database,
|
dtmf_buffer, dtmf_tone_generator, packet_buffer,
|
||||||
delay_manager,
|
payload_splitter, timestamp_scaler, accelerate_factory,
|
||||||
delay_peak_detector,
|
expand_factory, preemptive_expand_factory);
|
||||||
dtmf_buffer,
|
|
||||||
dtmf_tone_generator,
|
|
||||||
packet_buffer,
|
|
||||||
payload_splitter,
|
|
||||||
timestamp_scaler,
|
|
||||||
accelerate_factory,
|
|
||||||
expand_factory,
|
|
||||||
preemptive_expand_factory);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
#include "webrtc/modules/audio_coding/neteq/post_decode_vad.h"
|
#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/preemptive_expand.h"
|
||||||
#include "webrtc/modules/audio_coding/neteq/sync_buffer.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/audio_coding/neteq/timestamp_scaler.h"
|
||||||
#include "webrtc/modules/include/module_common_types.h"
|
#include "webrtc/modules/include/module_common_types.h"
|
||||||
|
|
||||||
@ -54,6 +55,7 @@
|
|||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
|
|
||||||
NetEqImpl::NetEqImpl(const NetEq::Config& config,
|
NetEqImpl::NetEqImpl(const NetEq::Config& config,
|
||||||
|
std::unique_ptr<TickTimer> tick_timer,
|
||||||
BufferLevelFilter* buffer_level_filter,
|
BufferLevelFilter* buffer_level_filter,
|
||||||
DecoderDatabase* decoder_database,
|
DecoderDatabase* decoder_database,
|
||||||
DelayManager* delay_manager,
|
DelayManager* delay_manager,
|
||||||
@ -67,7 +69,8 @@ NetEqImpl::NetEqImpl(const NetEq::Config& config,
|
|||||||
ExpandFactory* expand_factory,
|
ExpandFactory* expand_factory,
|
||||||
PreemptiveExpandFactory* preemptive_expand_factory,
|
PreemptiveExpandFactory* preemptive_expand_factory,
|
||||||
bool create_components)
|
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),
|
decoder_database_(decoder_database),
|
||||||
delay_manager_(delay_manager),
|
delay_manager_(delay_manager),
|
||||||
delay_peak_detector_(delay_peak_detector),
|
delay_peak_detector_(delay_peak_detector),
|
||||||
@ -795,6 +798,7 @@ int NetEqImpl::GetAudioInternal(AudioFrame* audio_frame) {
|
|||||||
DtmfEvent dtmf_event;
|
DtmfEvent dtmf_event;
|
||||||
Operations operation;
|
Operations operation;
|
||||||
bool play_dtmf;
|
bool play_dtmf;
|
||||||
|
tick_timer_->Increment();
|
||||||
int return_value = GetDecision(&operation, &packet_list, &dtmf_event,
|
int return_value = GetDecision(&operation, &packet_list, &dtmf_event,
|
||||||
&play_dtmf);
|
&play_dtmf);
|
||||||
if (return_value != 0) {
|
if (return_value != 0) {
|
||||||
|
|||||||
@ -24,6 +24,7 @@
|
|||||||
#include "webrtc/modules/audio_coding/neteq/random_vector.h"
|
#include "webrtc/modules/audio_coding/neteq/random_vector.h"
|
||||||
#include "webrtc/modules/audio_coding/neteq/rtcp.h"
|
#include "webrtc/modules/audio_coding/neteq/rtcp.h"
|
||||||
#include "webrtc/modules/audio_coding/neteq/statistics_calculator.h"
|
#include "webrtc/modules/audio_coding/neteq/statistics_calculator.h"
|
||||||
|
#include "webrtc/modules/audio_coding/neteq/tick_timer.h"
|
||||||
#include "webrtc/typedefs.h"
|
#include "webrtc/typedefs.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
@ -68,6 +69,7 @@ class NetEqImpl : public webrtc::NetEq {
|
|||||||
// Creates a new NetEqImpl object. The object will assume ownership of all
|
// Creates a new NetEqImpl object. The object will assume ownership of all
|
||||||
// injected dependencies, and will delete them when done.
|
// injected dependencies, and will delete them when done.
|
||||||
NetEqImpl(const NetEq::Config& config,
|
NetEqImpl(const NetEq::Config& config,
|
||||||
|
std::unique_ptr<TickTimer> tick_timer,
|
||||||
BufferLevelFilter* buffer_level_filter,
|
BufferLevelFilter* buffer_level_filter,
|
||||||
DecoderDatabase* decoder_database,
|
DecoderDatabase* decoder_database,
|
||||||
DelayManager* delay_manager,
|
DelayManager* delay_manager,
|
||||||
@ -328,6 +330,7 @@ class NetEqImpl : public webrtc::NetEq {
|
|||||||
virtual void CreateDecisionLogic() EXCLUSIVE_LOCKS_REQUIRED(crit_sect_);
|
virtual void CreateDecisionLogic() EXCLUSIVE_LOCKS_REQUIRED(crit_sect_);
|
||||||
|
|
||||||
rtc::CriticalSection 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_
|
const std::unique_ptr<BufferLevelFilter> buffer_level_filter_
|
||||||
GUARDED_BY(crit_sect_);
|
GUARDED_BY(crit_sect_);
|
||||||
const std::unique_ptr<DecoderDatabase> decoder_database_
|
const std::unique_ptr<DecoderDatabase> decoder_database_
|
||||||
|
|||||||
@ -57,6 +57,7 @@ class NetEqImplTest : public ::testing::Test {
|
|||||||
NetEqImplTest()
|
NetEqImplTest()
|
||||||
: neteq_(NULL),
|
: neteq_(NULL),
|
||||||
config_(),
|
config_(),
|
||||||
|
tick_timer_(new TickTimer),
|
||||||
mock_buffer_level_filter_(NULL),
|
mock_buffer_level_filter_(NULL),
|
||||||
buffer_level_filter_(NULL),
|
buffer_level_filter_(NULL),
|
||||||
use_mock_buffer_level_filter_(true),
|
use_mock_buffer_level_filter_(true),
|
||||||
@ -146,18 +147,11 @@ class NetEqImplTest : public ::testing::Test {
|
|||||||
PreemptiveExpandFactory* preemptive_expand_factory =
|
PreemptiveExpandFactory* preemptive_expand_factory =
|
||||||
new PreemptiveExpandFactory;
|
new PreemptiveExpandFactory;
|
||||||
|
|
||||||
neteq_ = new NetEqImpl(config_,
|
neteq_ = new NetEqImpl(
|
||||||
buffer_level_filter_,
|
config_, std::unique_ptr<TickTimer>(tick_timer_), buffer_level_filter_,
|
||||||
decoder_database_,
|
decoder_database_, delay_manager_, delay_peak_detector_, dtmf_buffer_,
|
||||||
delay_manager_,
|
dtmf_tone_generator_, packet_buffer_, payload_splitter_,
|
||||||
delay_peak_detector_,
|
timestamp_scaler_, accelerate_factory, expand_factory,
|
||||||
dtmf_buffer_,
|
|
||||||
dtmf_tone_generator_,
|
|
||||||
packet_buffer_,
|
|
||||||
payload_splitter_,
|
|
||||||
timestamp_scaler_,
|
|
||||||
accelerate_factory,
|
|
||||||
expand_factory,
|
|
||||||
preemptive_expand_factory);
|
preemptive_expand_factory);
|
||||||
ASSERT_TRUE(neteq_ != NULL);
|
ASSERT_TRUE(neteq_ != NULL);
|
||||||
}
|
}
|
||||||
@ -201,6 +195,7 @@ class NetEqImplTest : public ::testing::Test {
|
|||||||
|
|
||||||
NetEqImpl* neteq_;
|
NetEqImpl* neteq_;
|
||||||
NetEq::Config config_;
|
NetEq::Config config_;
|
||||||
|
TickTimer* tick_timer_;
|
||||||
MockBufferLevelFilter* mock_buffer_level_filter_;
|
MockBufferLevelFilter* mock_buffer_level_filter_;
|
||||||
BufferLevelFilter* buffer_level_filter_;
|
BufferLevelFilter* buffer_level_filter_;
|
||||||
bool use_mock_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());
|
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
|
}// namespace webrtc
|
||||||
|
|||||||
Reference in New Issue
Block a user