ACM/NetEq: Restructure how post-decode VAD is enabled

This change avoids calling neteq_->EnableVad() and DisableVad from the
AcmReceiver constructor. Instead, the new member
enable_post_decode_vad is added to NetEq's config struct. It is
disabled by defualt, but ACM sets it to enabled. This preserves the
behavior both of NetEq stand-alone (i.e., in tests) and of ACM.

BUG=webrtc:3520

Review URL: https://codereview.webrtc.org/1425133002

Cr-Commit-Position: refs/heads/master@{#10476}
This commit is contained in:
henrik.lundin
2015-11-02 03:25:57 -08:00
committed by Commit bot
parent d56d68cd27
commit 9bc2667fa6
5 changed files with 14 additions and 11 deletions

View File

@ -128,7 +128,7 @@ AcmReceiver::AcmReceiver(const AudioCodingModule::Config& config)
audio_buffer_(new int16_t[AudioFrame::kMaxDataSizeSamples]), audio_buffer_(new int16_t[AudioFrame::kMaxDataSizeSamples]),
last_audio_buffer_(new int16_t[AudioFrame::kMaxDataSizeSamples]), last_audio_buffer_(new int16_t[AudioFrame::kMaxDataSizeSamples]),
neteq_(NetEq::Create(config.neteq_config)), neteq_(NetEq::Create(config.neteq_config)),
vad_enabled_(true), vad_enabled_(config.neteq_config.enable_post_decode_vad),
clock_(config.clock), clock_(config.clock),
resampled_last_output_frame_(true), resampled_last_output_frame_(true),
av_sync_(false), av_sync_(false),
@ -136,15 +136,6 @@ AcmReceiver::AcmReceiver(const AudioCodingModule::Config& config)
missing_packets_sync_stream_(), missing_packets_sync_stream_(),
late_packets_sync_stream_() { late_packets_sync_stream_() {
assert(clock_); assert(clock_);
// Make sure we are on the same page as NetEq. Post-decode VAD is disabled by
// default in NetEq4, however, Audio Conference Mixer relies on VAD decision
// and fails if VAD decision is not provided.
if (vad_enabled_)
neteq_->EnableVad();
else
neteq_->DisableVad();
memset(audio_buffer_.get(), 0, AudioFrame::kMaxDataSizeSamples); memset(audio_buffer_.get(), 0, AudioFrame::kMaxDataSizeSamples);
memset(last_audio_buffer_.get(), 0, AudioFrame::kMaxDataSizeSamples); memset(last_audio_buffer_.get(), 0, AudioFrame::kMaxDataSizeSamples);
} }

View File

@ -60,7 +60,11 @@ class AudioCodingModule {
public: public:
struct Config { struct Config {
Config() : id(0), neteq_config(), clock(Clock::GetRealTimeClock()) {} Config() : id(0), neteq_config(), clock(Clock::GetRealTimeClock()) {
// Post-decode VAD is disabled by default in NetEq, however, Audio
// Conference Mixer relies on VAD decisions and fails without them.
neteq_config.enable_post_decode_vad = true;
}
int id; int id;
NetEq::Config neteq_config; NetEq::Config neteq_config;

View File

@ -81,6 +81,7 @@ class NetEq {
Config() Config()
: sample_rate_hz(16000), : sample_rate_hz(16000),
enable_audio_classifier(false), enable_audio_classifier(false),
enable_post_decode_vad(false),
max_packets_in_buffer(50), max_packets_in_buffer(50),
// |max_delay_ms| has the same effect as calling SetMaximumDelay(). // |max_delay_ms| has the same effect as calling SetMaximumDelay().
max_delay_ms(2000), max_delay_ms(2000),
@ -92,6 +93,7 @@ class NetEq {
int sample_rate_hz; // Initial value. Will change with input data. int sample_rate_hz; // Initial value. Will change with input data.
bool enable_audio_classifier; bool enable_audio_classifier;
bool enable_post_decode_vad;
size_t max_packets_in_buffer; size_t max_packets_in_buffer;
int max_delay_ms; int max_delay_ms;
BackgroundNoiseMode background_noise_mode; BackgroundNoiseMode background_noise_mode;

View File

@ -32,6 +32,8 @@ std::string NetEq::Config::ToString() const {
std::stringstream ss; std::stringstream ss;
ss << "sample_rate_hz=" << sample_rate_hz << ", enable_audio_classifier=" ss << "sample_rate_hz=" << sample_rate_hz << ", enable_audio_classifier="
<< (enable_audio_classifier ? "true" : "false") << (enable_audio_classifier ? "true" : "false")
<< ", enable_post_decode_vad="
<< (enable_post_decode_vad ? "true" : "false")
<< ", max_packets_in_buffer=" << max_packets_in_buffer << ", max_packets_in_buffer=" << max_packets_in_buffer
<< ", background_noise_mode=" << background_noise_mode << ", background_noise_mode=" << background_noise_mode
<< ", playout_mode=" << playout_mode << ", playout_mode=" << playout_mode

View File

@ -112,6 +112,10 @@ NetEqImpl::NetEqImpl(const NetEq::Config& config,
if (create_components) { if (create_components) {
SetSampleRateAndChannels(fs, 1); // Default is 1 channel. SetSampleRateAndChannels(fs, 1); // Default is 1 channel.
} }
RTC_DCHECK(!vad_->enabled());
if (config.enable_post_decode_vad) {
vad_->Enable();
}
} }
NetEqImpl::~NetEqImpl() = default; NetEqImpl::~NetEqImpl() = default;