Index: webrtc/modules/audio_coding/neteq/decision_logic.h |
diff --git a/webrtc/modules/audio_coding/neteq/decision_logic.h b/webrtc/modules/audio_coding/neteq/decision_logic.h |
index 72121b7aac5912f45e450cb6a014812031f0ecdb..35d1bec3d72a5fe9df3aafa5cbc53804eabcfa47 100644 |
--- a/webrtc/modules/audio_coding/neteq/decision_logic.h |
+++ b/webrtc/modules/audio_coding/neteq/decision_logic.h |
@@ -14,6 +14,7 @@ |
#include "webrtc/base/constructormagic.h" |
#include "webrtc/modules/audio_coding/neteq/defines.h" |
#include "webrtc/modules/audio_coding/neteq/include/neteq.h" |
+#include "webrtc/modules/audio_coding/neteq/tick_timer.h" |
#include "webrtc/typedefs.h" |
namespace webrtc { |
@@ -39,7 +40,8 @@ class DecisionLogic { |
DecoderDatabase* decoder_database, |
const PacketBuffer& packet_buffer, |
DelayManager* delay_manager, |
- BufferLevelFilter* buffer_level_filter); |
+ BufferLevelFilter* buffer_level_filter, |
+ const TickTimer& tick_timer); |
// Constructor. |
DecisionLogic(int fs_hz, |
@@ -48,10 +50,10 @@ class DecisionLogic { |
DecoderDatabase* decoder_database, |
const PacketBuffer& packet_buffer, |
DelayManager* delay_manager, |
- BufferLevelFilter* buffer_level_filter); |
+ BufferLevelFilter* buffer_level_filter, |
+ const TickTimer& tick_timer); |
- // Destructor. |
- virtual ~DecisionLogic() {} |
+ virtual ~DecisionLogic(); |
// Resets object to a clean state. |
void Reset(); |
@@ -79,6 +81,7 @@ class DecisionLogic { |
const RTPHeader* packet_header, |
Modes prev_mode, |
bool play_dtmf, |
+ size_t noise_samples_played, |
bool* reset_decoder); |
// These methods test the |cng_state_| for different conditions. |
@@ -101,10 +104,7 @@ class DecisionLogic { |
// Accessors and mutators. |
void set_sample_memory(int32_t value) { sample_memory_ = value; } |
- size_t generated_noise_samples() const { return generated_noise_samples_; } |
- void set_generated_noise_samples(size_t value) { |
- generated_noise_samples_ = value; |
- } |
+ size_t noise_fast_forward() const { return noise_fast_forward_; } |
size_t packet_length_samples() const { return packet_length_samples_; } |
void set_packet_length_samples(size_t value) { |
packet_length_samples_ = value; |
@@ -114,7 +114,7 @@ class DecisionLogic { |
protected: |
// The value 6 sets maximum time-stretch rate to about 100 ms/s. |
- static const int kMinTimescaleInterval = 6; |
+ static const int kMinTimescaleInterval = 5; |
enum CngState { |
kCngOff, |
@@ -138,7 +138,8 @@ class DecisionLogic { |
const RTPHeader* packet_header, |
Modes prev_mode, |
bool play_dtmf, |
- bool* reset_decoder) = 0; |
+ bool* reset_decoder, |
+ size_t noise_samples_played) = 0; |
// Updates the |buffer_level_filter_| with the current buffer level |
// |buffer_size_packets|. |
@@ -148,15 +149,16 @@ class DecisionLogic { |
const PacketBuffer& packet_buffer_; |
DelayManager* delay_manager_; |
BufferLevelFilter* buffer_level_filter_; |
+ const TickTimer& tick_timer_; |
int fs_mult_; |
size_t output_size_samples_; |
CngState cng_state_; // Remember if comfort noise is interrupted by other |
// event (e.g., DTMF). |
- size_t generated_noise_samples_; |
+ size_t noise_fast_forward_ = 0; |
size_t packet_length_samples_; |
int sample_memory_; |
bool prev_time_scale_; |
- int timescale_hold_off_; |
+ std::unique_ptr<TickTimer::Countdown> timescale_countdown_; |
int num_consecutive_expands_; |
const NetEqPlayoutMode playout_mode_; |