Move NetEq headers to api/
This CL also introduces NetEqFactory and NetEqControllerFactory
interfaces, as well as several convenience classes for working with
them: DefaultNetEqFactory, DefaultNetEqControllerFactory and
CustomNetEqFactory.
Bug: webrtc:11005
Change-Id: I1e8fc5154636ac2aad1a856828f80a2a758ad392
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/156945
Commit-Queue: Ivo Creusen <ivoc@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29671}
diff --git a/modules/audio_coding/neteq/neteq_impl.cc b/modules/audio_coding/neteq/neteq_impl.cc
index 7290e93..b6f5971 100644
--- a/modules/audio_coding/neteq/neteq_impl.cc
+++ b/modules/audio_coding/neteq/neteq_impl.cc
@@ -21,6 +21,7 @@
#include <vector>
#include "api/audio_codecs/audio_decoder.h"
+#include "api/neteq/tick_timer.h"
#include "common_audio/signal_processing/include/signal_processing_library.h"
#include "modules/audio_coding/codecs/cng/webrtc_cng.h"
#include "modules/audio_coding/neteq/accelerate.h"
@@ -28,7 +29,6 @@
#include "modules/audio_coding/neteq/comfort_noise.h"
#include "modules/audio_coding/neteq/decision_logic.h"
#include "modules/audio_coding/neteq/decoder_database.h"
-#include "modules/audio_coding/neteq/defines.h"
#include "modules/audio_coding/neteq/dtmf_buffer.h"
#include "modules/audio_coding/neteq/dtmf_tone_generator.h"
#include "modules/audio_coding/neteq/expand.h"
@@ -42,7 +42,6 @@
#include "modules/audio_coding/neteq/red_payload_splitter.h"
#include "modules/audio_coding/neteq/statistics_calculator.h"
#include "modules/audio_coding/neteq/sync_buffer.h"
-#include "modules/audio_coding/neteq/tick_timer.h"
#include "modules/audio_coding/neteq/time_stretch.h"
#include "modules/audio_coding/neteq/timestamp_scaler.h"
#include "rtc_base/checks.h"
@@ -57,6 +56,7 @@
namespace {
std::unique_ptr<NetEqController> CreateNetEqController(
+ const NetEqControllerFactory& controller_factory,
int base_min_delay,
int max_packets_in_buffer,
bool enable_rtx_handling,
@@ -68,7 +68,7 @@
config.enable_rtx_handling = enable_rtx_handling;
config.allow_time_stretching = allow_time_stretching;
config.tick_timer = tick_timer;
- return std::make_unique<DecisionLogic>(std::move(config));
+ return controller_factory.CreateNetEqController(config);
}
} // namespace
@@ -76,7 +76,8 @@
NetEqImpl::Dependencies::Dependencies(
const NetEq::Config& config,
Clock* clock,
- const rtc::scoped_refptr<AudioDecoderFactory>& decoder_factory)
+ const rtc::scoped_refptr<AudioDecoderFactory>& decoder_factory,
+ const NetEqControllerFactory& controller_factory)
: clock(clock),
tick_timer(new TickTimer),
stats(new StatisticsCalculator),
@@ -87,7 +88,8 @@
packet_buffer(
new PacketBuffer(config.max_packets_in_buffer, tick_timer.get())),
neteq_controller(
- CreateNetEqController(config.min_delay_ms,
+ CreateNetEqController(controller_factory,
+ config.min_delay_ms,
config.max_packets_in_buffer,
config.enable_rtx_handling,
!config.for_test_no_time_stretching,
@@ -117,7 +119,7 @@
preemptive_expand_factory_(std::move(deps.preemptive_expand_factory)),
stats_(std::move(deps.stats)),
controller_(std::move(deps.neteq_controller)),
- last_mode_(kModeNormal),
+ last_mode_(Mode::kNormal),
decoded_buffer_length_(kMaxFrameSize),
decoded_buffer_(new int16_t[decoded_buffer_length_]),
playout_timestamp_(0),
@@ -230,7 +232,7 @@
int NetEqImpl::GetAudio(AudioFrame* audio_frame,
bool* muted,
- absl::optional<Operations> action_override) {
+ absl::optional<Operation> action_override) {
TRACE_EVENT0("webrtc", "NetEqImpl::GetAudio");
rtc::CritScope lock(&crit_sect_);
if (GetAudioInternal(audio_frame, muted, action_override) != 0) {
@@ -381,8 +383,8 @@
absl::optional<uint32_t> NetEqImpl::GetPlayoutTimestamp() const {
rtc::CritScope lock(&crit_sect_);
- if (first_packet_ || last_mode_ == kModeRfc3389Cng ||
- last_mode_ == kModeCodecInternalCng) {
+ if (first_packet_ || last_mode_ == Mode::kRfc3389Cng ||
+ last_mode_ == Mode::kCodecInternalCng) {
// We don't have a valid RTP timestamp until we have decoded our first
// RTP packet. Also, the RTP timestamp is not accurate while playing CNG,
// which is indicated by returning an empty value.
@@ -470,7 +472,7 @@
return sync_buffer_.get();
}
-Operations NetEqImpl::last_operation_for_test() const {
+NetEq::Operation NetEqImpl::last_operation_for_test() const {
rtc::CritScope lock(&crit_sect_);
return last_operation_;
}
@@ -743,10 +745,10 @@
int NetEqImpl::GetAudioInternal(AudioFrame* audio_frame,
bool* muted,
- absl::optional<Operations> action_override) {
+ absl::optional<Operation> action_override) {
PacketList packet_list;
DtmfEvent dtmf_event;
- Operations operation;
+ Operation operation;
bool play_dtmf;
*muted = false;
last_decoded_timestamps_.clear();
@@ -763,7 +765,7 @@
// Check for muted state.
if (enable_muted_state_ && expand_->Muted() && packet_buffer_->Empty()) {
- RTC_DCHECK_EQ(last_mode_, kModeExpand);
+ RTC_DCHECK_EQ(last_mode_, Mode::kExpand);
audio_frame->Reset();
RTC_DCHECK(audio_frame->muted()); // Reset() should mute the frame.
playout_timestamp_ += static_cast<uint32_t>(output_size_samples_);
@@ -782,7 +784,7 @@
int return_value = GetDecision(&operation, &packet_list, &dtmf_event,
&play_dtmf, action_override);
if (return_value != 0) {
- last_mode_ = kModeError;
+ last_mode_ = Mode::kError;
return return_value;
}
@@ -793,7 +795,8 @@
Decode(&packet_list, &operation, &length, &speech_type);
assert(vad_.get());
- bool sid_frame_available = (operation == kRfc3389Cng && !packet_list.empty());
+ bool sid_frame_available =
+ (operation == Operation::kRfc3389Cng && !packet_list.empty());
vad_->Update(decoded_buffer_.get(), static_cast<size_t>(length), speech_type,
sid_frame_available, fs_hz_);
@@ -810,18 +813,18 @@
algorithm_buffer_->Clear();
switch (operation) {
- case kNormal: {
+ case Operation::kNormal: {
DoNormal(decoded_buffer_.get(), length, speech_type, play_dtmf);
if (length > 0) {
stats_->DecodedOutputPlayed();
}
break;
}
- case kMerge: {
+ case Operation::kMerge: {
DoMerge(decoded_buffer_.get(), length, speech_type, play_dtmf);
break;
}
- case kExpand: {
+ case Operation::kExpand: {
RTC_DCHECK_EQ(return_value, 0);
if (!current_rtp_payload_type_ || !DoCodecPlc()) {
return_value = DoExpand(play_dtmf);
@@ -830,40 +833,40 @@
output_size_samples_);
break;
}
- case kAccelerate:
- case kFastAccelerate: {
+ case Operation::kAccelerate:
+ case Operation::kFastAccelerate: {
const bool fast_accelerate =
- enable_fast_accelerate_ && (operation == kFastAccelerate);
+ enable_fast_accelerate_ && (operation == Operation::kFastAccelerate);
return_value = DoAccelerate(decoded_buffer_.get(), length, speech_type,
play_dtmf, fast_accelerate);
break;
}
- case kPreemptiveExpand: {
+ case Operation::kPreemptiveExpand: {
return_value = DoPreemptiveExpand(decoded_buffer_.get(), length,
speech_type, play_dtmf);
break;
}
- case kRfc3389Cng:
- case kRfc3389CngNoPacket: {
+ case Operation::kRfc3389Cng:
+ case Operation::kRfc3389CngNoPacket: {
return_value = DoRfc3389Cng(&packet_list, play_dtmf);
break;
}
- case kCodecInternalCng: {
+ case Operation::kCodecInternalCng: {
// This handles the case when there is no transmission and the decoder
// should produce internal comfort noise.
// TODO(hlundin): Write test for codec-internal CNG.
DoCodecInternalCng(decoded_buffer_.get(), length);
break;
}
- case kDtmf: {
+ case Operation::kDtmf: {
// TODO(hlundin): Write test for this.
return_value = DoDtmf(dtmf_event, &play_dtmf);
break;
}
- case kUndefined: {
+ case Operation::kUndefined: {
RTC_LOG(LS_ERROR) << "Invalid operation kUndefined.";
assert(false); // This should not happen.
- last_mode_ = kModeError;
+ last_mode_ = Mode::kError;
return kInvalidOperation;
}
} // End of switch.
@@ -872,7 +875,7 @@
return return_value;
}
- if (last_mode_ != kModeRfc3389Cng) {
+ if (last_mode_ != Mode::kRfc3389Cng) {
comfort_noise_->Reset();
}
@@ -941,20 +944,20 @@
// Update the background noise parameters if last operation wrote data
// straight from the decoder to the |sync_buffer_|. That is, none of the
// operations that modify the signal can be followed by a parameter update.
- if ((last_mode_ == kModeNormal) || (last_mode_ == kModeAccelerateFail) ||
- (last_mode_ == kModePreemptiveExpandFail) ||
- (last_mode_ == kModeRfc3389Cng) ||
- (last_mode_ == kModeCodecInternalCng)) {
+ if ((last_mode_ == Mode::kNormal) || (last_mode_ == Mode::kAccelerateFail) ||
+ (last_mode_ == Mode::kPreemptiveExpandFail) ||
+ (last_mode_ == Mode::kRfc3389Cng) ||
+ (last_mode_ == Mode::kCodecInternalCng)) {
background_noise_->Update(*sync_buffer_, *vad_.get());
}
- if (operation == kDtmf) {
+ if (operation == Operation::kDtmf) {
// DTMF data was written the end of |sync_buffer_|.
// Update index to end of DTMF data in |sync_buffer_|.
sync_buffer_->set_dtmf_index(sync_buffer_->Size());
}
- if (last_mode_ != kModeExpand && last_mode_ != kModeCodecPlc) {
+ if (last_mode_ != Mode::kExpand && last_mode_ != Mode::kCodecPlc) {
// If last operation was not expand, calculate the |playout_timestamp_| from
// the |sync_buffer_|. However, do not update the |playout_timestamp_| if it
// would be moved "backwards".
@@ -978,8 +981,9 @@
: timestamp_scaler_->ToExternal(playout_timestamp_) -
static_cast<uint32_t>(audio_frame->samples_per_channel_);
- if (!(last_mode_ == kModeRfc3389Cng || last_mode_ == kModeCodecInternalCng ||
- last_mode_ == kModeExpand || last_mode_ == kModeCodecPlc)) {
+ if (!(last_mode_ == Mode::kRfc3389Cng ||
+ last_mode_ == Mode::kCodecInternalCng || last_mode_ == Mode::kExpand ||
+ last_mode_ == Mode::kCodecPlc)) {
generated_noise_stopwatch_.reset();
}
@@ -988,14 +992,14 @@
return return_value;
}
-int NetEqImpl::GetDecision(Operations* operation,
+int NetEqImpl::GetDecision(Operation* operation,
PacketList* packet_list,
DtmfEvent* dtmf_event,
bool* play_dtmf,
- absl::optional<Operations> action_override) {
+ absl::optional<Operation> action_override) {
// Initialize output variables.
*play_dtmf = false;
- *operation = kUndefined;
+ *operation = Operation::kUndefined;
assert(sync_buffer_.get());
uint32_t end_timestamp = sync_buffer_->end_timestamp();
@@ -1014,7 +1018,7 @@
controller_->noise_fast_forward()
: 0;
- if (controller_->CngRfc3389On() || last_mode_ == kModeRfc3389Cng) {
+ if (controller_->CngRfc3389On() || last_mode_ == Mode::kRfc3389Cng) {
// Because of timestamp peculiarities, we have to "manually" disallow using
// a CNG packet with the same timestamp as the one that was last played.
// This can happen when using redundancy and will cause the timing to shift.
@@ -1038,10 +1042,10 @@
assert(expand_.get());
const int samples_left = static_cast<int>(sync_buffer_->FutureLength() -
expand_->overlap_length());
- if (last_mode_ == kModeAccelerateSuccess ||
- last_mode_ == kModeAccelerateLowEnergy ||
- last_mode_ == kModePreemptiveExpandSuccess ||
- last_mode_ == kModePreemptiveExpandLowEnergy) {
+ if (last_mode_ == Mode::kAccelerateSuccess ||
+ last_mode_ == Mode::kAccelerateLowEnergy ||
+ last_mode_ == Mode::kPreemptiveExpandSuccess ||
+ last_mode_ == Mode::kPreemptiveExpandLowEnergy) {
// Subtract (samples_left + output_size_samples_) from sampleMemory.
controller_->AddSampleMemory(
-(samples_left + rtc::dchecked_cast<int>(output_size_samples_)));
@@ -1091,9 +1095,11 @@
// during DTX. When we have a better way to update buffer level during DTX,
// this can be discarded.
if (packet && packet->frame && packet->frame->IsDtxPacket() &&
- (*operation == kMerge || *operation == kAccelerate ||
- *operation == kFastAccelerate || *operation == kPreemptiveExpand)) {
- *operation = kNormal;
+ (*operation == Operation::kMerge ||
+ *operation == Operation::kAccelerate ||
+ *operation == Operation::kFastAccelerate ||
+ *operation == Operation::kPreemptiveExpand)) {
+ *operation = Operation::kNormal;
}
if (action_override) {
@@ -1104,16 +1110,17 @@
// change decision to normal, unless the decision was merge, accelerate, or
// preemptive expand.
if (samples_left >= rtc::dchecked_cast<int>(output_size_samples_) &&
- *operation != kMerge && *operation != kAccelerate &&
- *operation != kFastAccelerate && *operation != kPreemptiveExpand) {
- *operation = kNormal;
+ *operation != Operation::kMerge && *operation != Operation::kAccelerate &&
+ *operation != Operation::kFastAccelerate &&
+ *operation != Operation::kPreemptiveExpand) {
+ *operation = Operation::kNormal;
return 0;
}
controller_->ExpandDecision(*operation);
// Check conditions for reset.
- if (new_codec_ || *operation == kUndefined) {
+ if (new_codec_ || *operation == Operation::kUndefined) {
// The only valid reason to get kUndefined is that new_codec_ is set.
assert(new_codec_);
if (*play_dtmf && !packet) {
@@ -1124,13 +1131,13 @@
return -1;
}
timestamp_ = packet->timestamp;
- if (*operation == kRfc3389CngNoPacket &&
+ if (*operation == Operation::kRfc3389CngNoPacket &&
decoder_database_->IsComfortNoise(packet->payload_type)) {
// Change decision to CNG packet, since we do have a CNG packet, but it
// was considered too early to use. Now, use it anyway.
- *operation = kRfc3389Cng;
- } else if (*operation != kRfc3389Cng) {
- *operation = kNormal;
+ *operation = Operation::kRfc3389Cng;
+ } else if (*operation != Operation::kRfc3389Cng) {
+ *operation = Operation::kNormal;
}
}
// Adjust |sync_buffer_| timestamp before setting |end_timestamp| to the
@@ -1148,15 +1155,15 @@
const size_t samples_30_ms = 3 * samples_10_ms;
switch (*operation) {
- case kExpand: {
+ case Operation::kExpand: {
timestamp_ = end_timestamp;
return 0;
}
- case kRfc3389CngNoPacket:
- case kCodecInternalCng: {
+ case Operation::kRfc3389CngNoPacket:
+ case Operation::kCodecInternalCng: {
return 0;
}
- case kDtmf: {
+ case Operation::kDtmf: {
// TODO(hlundin): Write test for this.
// Update timestamp.
timestamp_ = end_timestamp;
@@ -1166,7 +1173,7 @@
output_size_samples_ +
controller_->noise_fast_forward()
: 0;
- if (generated_noise_samples > 0 && last_mode_ != kModeDtmf) {
+ if (generated_noise_samples > 0 && last_mode_ != Mode::kDtmf) {
// Make a jump in timestamp due to the recently played comfort noise.
uint32_t timestamp_jump =
static_cast<uint32_t>(generated_noise_samples);
@@ -1175,8 +1182,8 @@
}
return 0;
}
- case kAccelerate:
- case kFastAccelerate: {
+ case Operation::kAccelerate:
+ case Operation::kFastAccelerate: {
// In order to do an accelerate we need at least 30 ms of audio data.
if (samples_left >= static_cast<int>(samples_30_ms)) {
// Already have enough data, so we do not need to extract any more.
@@ -1186,7 +1193,7 @@
} else if (samples_left >= static_cast<int>(samples_10_ms) &&
decoder_frame_length_ >= samples_30_ms) {
// Avoid decoding more data as it might overflow the playout buffer.
- *operation = kNormal;
+ *operation = Operation::kNormal;
return 0;
} else if (samples_left < static_cast<int>(samples_20_ms) &&
decoder_frame_length_ < samples_30_ms) {
@@ -1194,7 +1201,7 @@
// not perform accelerate yet, but wait until we only need to do one
// decoding.
required_samples = 2 * output_size_samples_;
- *operation = kNormal;
+ *operation = Operation::kNormal;
}
// If none of the above is true, we have one of two possible situations:
// (1) 20 ms <= samples_left < 30 ms and decoder_frame_length_ < 30 ms; or
@@ -1203,7 +1210,7 @@
// frame now.
break;
}
- case kPreemptiveExpand: {
+ case Operation::kPreemptiveExpand: {
// In order to do a preemptive expand we need at least 30 ms of decoded
// audio data.
if ((samples_left >= static_cast<int>(samples_30_ms)) ||
@@ -1225,7 +1232,7 @@
// Move on with the preemptive expand decision.
break;
}
- case kMerge: {
+ case Operation::kMerge: {
required_samples =
std::max(merge_->RequiredFutureSamples(), required_samples);
break;
@@ -1247,7 +1254,7 @@
stats_->LostSamples(packet->timestamp - end_timestamp);
}
- if (*operation != kRfc3389Cng) {
+ if (*operation != Operation::kRfc3389Cng) {
// We are about to decode and use a non-CNG packet.
controller_->SetCngOff();
}
@@ -1258,18 +1265,20 @@
}
}
- if (*operation == kAccelerate || *operation == kFastAccelerate ||
- *operation == kPreemptiveExpand) {
+ if (*operation == Operation::kAccelerate ||
+ *operation == Operation::kFastAccelerate ||
+ *operation == Operation::kPreemptiveExpand) {
controller_->set_sample_memory(samples_left + extracted_samples);
controller_->set_prev_time_scale(true);
}
- if (*operation == kAccelerate || *operation == kFastAccelerate) {
+ if (*operation == Operation::kAccelerate ||
+ *operation == Operation::kFastAccelerate) {
// Check that we have enough data (30ms) to do accelerate.
if (extracted_samples + samples_left < static_cast<int>(samples_30_ms)) {
// TODO(hlundin): Write test for this.
// Not enough, do normal operation instead.
- *operation = kNormal;
+ *operation = Operation::kNormal;
}
}
@@ -1278,7 +1287,7 @@
}
int NetEqImpl::Decode(PacketList* packet_list,
- Operations* operation,
+ Operation* operation,
int* decoded_length,
AudioDecoder::SpeechType* speech_type) {
*speech_type = AudioDecoder::kSpeech;
@@ -1341,12 +1350,12 @@
*decoded_length = 0;
// Update codec-internal PLC state.
- if ((*operation == kMerge) && decoder && decoder->HasDecodePlc()) {
+ if ((*operation == Operation::kMerge) && decoder && decoder->HasDecodePlc()) {
decoder->DecodePlc(1, &decoded_buffer_[*decoded_length]);
}
int return_value;
- if (*operation == kCodecInternalCng) {
+ if (*operation == Operation::kCodecInternalCng) {
RTC_DCHECK(packet_list->empty());
return_value = DecodeCng(decoder, decoded_length, speech_type);
} else {
@@ -1371,7 +1380,7 @@
return_value = kOtherDecoderError;
RTC_LOG(LS_WARNING) << "Decoder error (no error code)";
}
- *operation = kExpand; // Do expansion to get data instead.
+ *operation = Operation::kExpand; // Do expansion to get data instead.
}
if (*speech_type != AudioDecoder::kComfortNoise) {
// Don't increment timestamp if codec returned CNG speech type
@@ -1417,7 +1426,7 @@
}
int NetEqImpl::DecodeLoop(PacketList* packet_list,
- const Operations& operation,
+ const Operation& operation,
AudioDecoder* decoder,
int* decoded_length,
AudioDecoder::SpeechType* speech_type) {
@@ -1432,9 +1441,11 @@
// number decoder channels.
assert(sync_buffer_->Channels() == decoder->Channels());
assert(decoded_buffer_length_ >= kMaxFrameSize * decoder->Channels());
- assert(operation == kNormal || operation == kAccelerate ||
- operation == kFastAccelerate || operation == kMerge ||
- operation == kPreemptiveExpand);
+ assert(operation == Operation::kNormal ||
+ operation == Operation::kAccelerate ||
+ operation == Operation::kFastAccelerate ||
+ operation == Operation::kMerge ||
+ operation == Operation::kPreemptiveExpand);
auto opt_result = packet_list->front().frame->Decode(
rtc::ArrayView<int16_t>(&decoded_buffer_[*decoded_length],
@@ -1485,14 +1496,14 @@
normal_->Process(decoded_buffer, decoded_length, last_mode_,
algorithm_buffer_.get());
if (decoded_length != 0) {
- last_mode_ = kModeNormal;
+ last_mode_ = Mode::kNormal;
}
// If last packet was decoded as an inband CNG, set mode to CNG instead.
if ((speech_type == AudioDecoder::kComfortNoise) ||
- ((last_mode_ == kModeCodecInternalCng) && (decoded_length == 0))) {
+ ((last_mode_ == Mode::kCodecInternalCng) && (decoded_length == 0))) {
// TODO(hlundin): Remove second part of || statement above.
- last_mode_ = kModeCodecInternalCng;
+ last_mode_ = Mode::kCodecInternalCng;
}
if (!play_dtmf) {
@@ -1521,10 +1532,10 @@
stats_->ExpandedVoiceSamplesCorrection(expand_length_correction);
}
- last_mode_ = kModeMerge;
+ last_mode_ = Mode::kMerge;
// If last packet was decoded as an inband CNG, set mode to CNG instead.
if (speech_type == AudioDecoder::kComfortNoise) {
- last_mode_ = kModeCodecInternalCng;
+ last_mode_ = Mode::kCodecInternalCng;
}
expand_->Reset();
if (!play_dtmf) {
@@ -1555,7 +1566,7 @@
concealment_audio_.size() / channels;
// Update in-call and post-call statistics.
- const bool is_new_concealment_event = (last_mode_ != kModeCodecPlc);
+ const bool is_new_concealment_event = (last_mode_ != Mode::kCodecPlc);
if (std::all_of(concealment_audio_.cbegin(), concealment_audio_.cend(),
[](int16_t i) { return i == 0; })) {
// Expand operation generates only noise.
@@ -1566,7 +1577,7 @@
stats_->ExpandedVoiceSamples(concealed_samples_per_channel,
is_new_concealment_event);
}
- last_mode_ = kModeCodecPlc;
+ last_mode_ = Mode::kCodecPlc;
if (!generated_noise_stopwatch_) {
// Start a new stopwatch since we may be covering for a lost CNG packet.
generated_noise_stopwatch_ = tick_timer_->GetNewStopwatch();
@@ -1580,7 +1591,7 @@
algorithm_buffer_->Clear();
int return_value = expand_->Process(algorithm_buffer_.get());
size_t length = algorithm_buffer_->Size();
- bool is_new_concealment_event = (last_mode_ != kModeExpand);
+ bool is_new_concealment_event = (last_mode_ != Mode::kExpand);
// Update in-call and post-call statistics.
if (expand_->MuteFactor(0) == 0) {
@@ -1591,7 +1602,7 @@
stats_->ExpandedVoiceSamples(length, is_new_concealment_event);
}
- last_mode_ = kModeExpand;
+ last_mode_ = Mode::kExpand;
if (return_value < 0) {
return return_value;
@@ -1640,17 +1651,17 @@
stats_->AcceleratedSamples(samples_removed);
switch (return_code) {
case Accelerate::kSuccess:
- last_mode_ = kModeAccelerateSuccess;
+ last_mode_ = Mode::kAccelerateSuccess;
break;
case Accelerate::kSuccessLowEnergy:
- last_mode_ = kModeAccelerateLowEnergy;
+ last_mode_ = Mode::kAccelerateLowEnergy;
break;
case Accelerate::kNoStretch:
- last_mode_ = kModeAccelerateFail;
+ last_mode_ = Mode::kAccelerateFail;
break;
case Accelerate::kError:
- // TODO(hlundin): Map to kModeError instead?
- last_mode_ = kModeAccelerateFail;
+ // TODO(hlundin): Map to Modes::kError instead?
+ last_mode_ = Mode::kAccelerateFail;
return kAccelerateError;
}
@@ -1676,7 +1687,7 @@
// If last packet was decoded as an inband CNG, set mode to CNG instead.
if (speech_type == AudioDecoder::kComfortNoise) {
- last_mode_ = kModeCodecInternalCng;
+ last_mode_ = Mode::kCodecInternalCng;
}
if (!play_dtmf) {
dtmf_tone_generator_->Reset();
@@ -1718,17 +1729,17 @@
stats_->PreemptiveExpandedSamples(samples_added);
switch (return_code) {
case PreemptiveExpand::kSuccess:
- last_mode_ = kModePreemptiveExpandSuccess;
+ last_mode_ = Mode::kPreemptiveExpandSuccess;
break;
case PreemptiveExpand::kSuccessLowEnergy:
- last_mode_ = kModePreemptiveExpandLowEnergy;
+ last_mode_ = Mode::kPreemptiveExpandLowEnergy;
break;
case PreemptiveExpand::kNoStretch:
- last_mode_ = kModePreemptiveExpandFail;
+ last_mode_ = Mode::kPreemptiveExpandFail;
break;
case PreemptiveExpand::kError:
- // TODO(hlundin): Map to kModeError instead?
- last_mode_ = kModePreemptiveExpandFail;
+ // TODO(hlundin): Map to Modes::kError instead?
+ last_mode_ = Mode::kPreemptiveExpandFail;
return kPreemptiveExpandError;
}
@@ -1742,7 +1753,7 @@
// If last packet was decoded as an inband CNG, set mode to CNG instead.
if (speech_type == AudioDecoder::kComfortNoise) {
- last_mode_ = kModeCodecInternalCng;
+ last_mode_ = Mode::kCodecInternalCng;
}
if (!play_dtmf) {
dtmf_tone_generator_->Reset();
@@ -1769,7 +1780,7 @@
int cn_return =
comfort_noise_->Generate(output_size_samples_, algorithm_buffer_.get());
expand_->Reset();
- last_mode_ = kModeRfc3389Cng;
+ last_mode_ = Mode::kRfc3389Cng;
if (!play_dtmf) {
dtmf_tone_generator_->Reset();
}
@@ -1788,7 +1799,7 @@
RTC_DCHECK(normal_.get());
normal_->Process(decoded_buffer, decoded_length, last_mode_,
algorithm_buffer_.get());
- last_mode_ = kModeCodecInternalCng;
+ last_mode_ = Mode::kCodecInternalCng;
expand_->Reset();
}
@@ -1803,7 +1814,8 @@
// switch from audio to DTMF. Issue 1545 is filed to track this.
//
// bool dtmf_switch = false;
- // if ((last_mode_ != kModeDtmf) && dtmf_tone_generator_->initialized()) {
+ // if ((last_mode_ != Modes::kDtmf) &&
+ // dtmf_tone_generator_->initialized()) {
// // Special case; see below.
// // We must catch this before calling Generate, since |initialized| is
// // modified in that call.
@@ -1865,7 +1877,7 @@
sync_buffer_->IncreaseEndTimestamp(
static_cast<uint32_t>(output_size_samples_));
expand_->Reset();
- last_mode_ = kModeDtmf;
+ last_mode_ = Mode::kDtmf;
// Set to false because the DTMF is already in the algorithm buffer.
*play_dtmf = false;
@@ -2024,7 +2036,7 @@
output_size_samples_ = static_cast<size_t>(kOutputSizeMs * 8 * fs_mult_);
decoder_frame_length_ = 3 * output_size_samples_; // Initialize to 30ms.
- last_mode_ = kModeNormal;
+ last_mode_ = Mode::kNormal;
ComfortNoiseDecoder* cng_decoder = decoder_database_->GetActiveCngDecoder();
if (cng_decoder)
@@ -2076,16 +2088,17 @@
NetEqImpl::OutputType NetEqImpl::LastOutputType() {
assert(vad_.get());
assert(expand_.get());
- if (last_mode_ == kModeCodecInternalCng || last_mode_ == kModeRfc3389Cng) {
+ if (last_mode_ == Mode::kCodecInternalCng ||
+ last_mode_ == Mode::kRfc3389Cng) {
return OutputType::kCNG;
- } else if (last_mode_ == kModeExpand && expand_->MuteFactor(0) == 0) {
+ } else if (last_mode_ == Mode::kExpand && expand_->MuteFactor(0) == 0) {
// Expand mode has faded down to background noise only (very long expand).
return OutputType::kPLCCNG;
- } else if (last_mode_ == kModeExpand) {
+ } else if (last_mode_ == Mode::kExpand) {
return OutputType::kPLC;
} else if (vad_->running() && !vad_->active_speech()) {
return OutputType::kVadPassive;
- } else if (last_mode_ == kModeCodecPlc) {
+ } else if (last_mode_ == Mode::kCodecPlc) {
return OutputType::kCodecPLC;
} else {
return OutputType::kNormalSpeech;