diff options
author | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2016-07-14 17:41:05 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2016-08-04 12:37:36 +0000 |
commit | 399c965b6064c440ddcf4015f5f8e9d131c7a0a6 (patch) | |
tree | 6b06b60ff365abef0e13b3503d593a0df48d20e8 /chromium/third_party/webrtc/modules/audio_coding/neteq/decision_logic.cc | |
parent | 7366110654eec46f21b6824f302356426f48cd74 (diff) | |
download | qtwebengine-chromium-399c965b6064c440ddcf4015f5f8e9d131c7a0a6.tar.gz |
BASELINE: Update Chromium to 52.0.2743.76 and Ninja to 1.7.1
Change-Id: I382f51b959689505a60f8b707255ecb344f7d8b4
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/third_party/webrtc/modules/audio_coding/neteq/decision_logic.cc')
-rw-r--r-- | chromium/third_party/webrtc/modules/audio_coding/neteq/decision_logic.cc | 61 |
1 files changed, 27 insertions, 34 deletions
diff --git a/chromium/third_party/webrtc/modules/audio_coding/neteq/decision_logic.cc b/chromium/third_party/webrtc/modules/audio_coding/neteq/decision_logic.cc index 39bb4662c71..545d1d62455 100644 --- a/chromium/third_party/webrtc/modules/audio_coding/neteq/decision_logic.cc +++ b/chromium/third_party/webrtc/modules/audio_coding/neteq/decision_logic.cc @@ -29,26 +29,19 @@ DecisionLogic* DecisionLogic::Create(int fs_hz, DecoderDatabase* decoder_database, const PacketBuffer& packet_buffer, DelayManager* delay_manager, - BufferLevelFilter* buffer_level_filter) { + BufferLevelFilter* buffer_level_filter, + const TickTimer* tick_timer) { switch (playout_mode) { case kPlayoutOn: case kPlayoutStreaming: - return new DecisionLogicNormal(fs_hz, - output_size_samples, - playout_mode, - decoder_database, - packet_buffer, - delay_manager, - buffer_level_filter); + return new DecisionLogicNormal( + fs_hz, output_size_samples, playout_mode, decoder_database, + packet_buffer, delay_manager, buffer_level_filter, tick_timer); case kPlayoutFax: case kPlayoutOff: - return new DecisionLogicFax(fs_hz, - output_size_samples, - playout_mode, - decoder_database, - packet_buffer, - delay_manager, - buffer_level_filter); + return new DecisionLogicFax( + fs_hz, output_size_samples, playout_mode, decoder_database, + packet_buffer, delay_manager, buffer_level_filter, tick_timer); } // This line cannot be reached, but must be here to avoid compiler errors. assert(false); @@ -61,30 +54,34 @@ DecisionLogic::DecisionLogic(int fs_hz, DecoderDatabase* decoder_database, const PacketBuffer& packet_buffer, DelayManager* delay_manager, - BufferLevelFilter* buffer_level_filter) + BufferLevelFilter* buffer_level_filter, + const TickTimer* tick_timer) : decoder_database_(decoder_database), packet_buffer_(packet_buffer), delay_manager_(delay_manager), buffer_level_filter_(buffer_level_filter), + tick_timer_(tick_timer), cng_state_(kCngOff), - generated_noise_samples_(0), packet_length_samples_(0), sample_memory_(0), prev_time_scale_(false), - timescale_hold_off_(kMinTimescaleInterval), + timescale_countdown_( + tick_timer_->GetNewCountdown(kMinTimescaleInterval + 1)), num_consecutive_expands_(0), playout_mode_(playout_mode) { delay_manager_->set_streaming_mode(playout_mode_ == kPlayoutStreaming); SetSampleRate(fs_hz, output_size_samples); } +DecisionLogic::~DecisionLogic() = default; + void DecisionLogic::Reset() { cng_state_ = kCngOff; - generated_noise_samples_ = 0; + noise_fast_forward_ = 0; packet_length_samples_ = 0; sample_memory_ = 0; prev_time_scale_ = false; - timescale_hold_off_ = 0; + timescale_countdown_.reset(); num_consecutive_expands_ = 0; } @@ -92,7 +89,8 @@ void DecisionLogic::SoftReset() { packet_length_samples_ = 0; sample_memory_ = 0; prev_time_scale_ = false; - timescale_hold_off_ = kMinTimescaleInterval; + timescale_countdown_ = + tick_timer_->GetNewCountdown(kMinTimescaleInterval + 1); } void DecisionLogic::SetSampleRate(int fs_hz, size_t output_size_samples) { @@ -107,15 +105,15 @@ Operations DecisionLogic::GetDecision(const SyncBuffer& sync_buffer, size_t decoder_frame_length, const RTPHeader* packet_header, Modes prev_mode, - bool play_dtmf, bool* reset_decoder) { + bool play_dtmf, + size_t generated_noise_samples, + bool* reset_decoder) { if (prev_mode == kModeRfc3389Cng || prev_mode == kModeCodecInternalCng || prev_mode == kModeExpand) { // If last mode was CNG (or Expand, since this could be covering up for - // a lost CNG packet), increase the |generated_noise_samples_| counter. - generated_noise_samples_ += output_size_samples_; - // Remember that CNG is on. This is needed if comfort noise is interrupted - // by DTMF. + // a lost CNG packet), remember that CNG is on. This is needed if comfort + // noise is interrupted by DTMF. if (prev_mode == kModeRfc3389Cng) { cng_state_ = kCngRfc3389On; } else if (prev_mode == kModeCodecInternalCng) { @@ -139,7 +137,7 @@ Operations DecisionLogic::GetDecision(const SyncBuffer& sync_buffer, return GetDecisionSpecialized(sync_buffer, expand, decoder_frame_length, packet_header, prev_mode, play_dtmf, - reset_decoder); + reset_decoder, generated_noise_samples); } void DecisionLogic::ExpandDecision(Operations operation) { @@ -152,10 +150,6 @@ void DecisionLogic::ExpandDecision(Operations operation) { void DecisionLogic::FilterBufferLevel(size_t buffer_size_samples, Modes prev_mode) { - const int elapsed_time_ms = - static_cast<int>(output_size_samples_ / (8 * fs_mult_)); - delay_manager_->UpdateCounters(elapsed_time_ms); - // Do not update buffer history if currently playing CNG since it will bias // the filtered buffer level. if ((prev_mode != kModeRfc3389Cng) && (prev_mode != kModeCodecInternalCng)) { @@ -170,14 +164,13 @@ void DecisionLogic::FilterBufferLevel(size_t buffer_size_samples, int sample_memory_local = 0; if (prev_time_scale_) { sample_memory_local = sample_memory_; - timescale_hold_off_ = kMinTimescaleInterval; + timescale_countdown_ = + tick_timer_->GetNewCountdown(kMinTimescaleInterval); } buffer_level_filter_->Update(buffer_size_packets, sample_memory_local, packet_length_samples_); prev_time_scale_ = false; } - - timescale_hold_off_ = std::max(timescale_hold_off_ - 1, 0); } } // namespace webrtc |