peah 219208991b Adding full initial version of delay estimation functionality in echo
canceller 3

This CL adds code to the all the delay estimation functionality that is
available for the first version of echo canceller 3. The code completes
the class EchoPathDelayEstimator.

Note that this code does not yet include any handling of clock-drift so
there will be upcoming versions of this code.

Also note that the CL includes some minor changes in other files for
echo canceller 3.

BUG=webrtc:6018

Review-Url: https://codereview.webrtc.org/2644123002
Cr-Commit-Position: refs/heads/master@{#16489}
2017-02-08 13:08:56 +00:00

74 lines
2.4 KiB
C++

/*
* Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "webrtc/modules/audio_processing/aec3/echo_remover.h"
#include <algorithm>
#include <vector>
#include "webrtc/base/constructormagic.h"
#include "webrtc/base/checks.h"
#include "webrtc/base/optional.h"
#include "webrtc/modules/audio_processing/aec3/aec3_constants.h"
namespace webrtc {
namespace {
class EchoRemoverImpl final : public EchoRemover {
public:
explicit EchoRemoverImpl(int sample_rate_hz);
~EchoRemoverImpl() override;
void ProcessBlock(const rtc::Optional<size_t>& echo_path_delay_samples,
const EchoPathVariability& echo_path_variability,
bool capture_signal_saturation,
const std::vector<std::vector<float>>& render,
std::vector<std::vector<float>>* capture) override;
void UpdateEchoLeakageStatus(bool leakage_detected) override;
private:
const int sample_rate_hz_;
RTC_DISALLOW_COPY_AND_ASSIGN(EchoRemoverImpl);
};
// TODO(peah): Add functionality.
EchoRemoverImpl::EchoRemoverImpl(int sample_rate_hz)
: sample_rate_hz_(sample_rate_hz) {
RTC_DCHECK(ValidFullBandRate(sample_rate_hz_));
}
EchoRemoverImpl::~EchoRemoverImpl() = default;
// TODO(peah): Add functionality.
void EchoRemoverImpl::ProcessBlock(
const rtc::Optional<size_t>& echo_path_delay_samples,
const EchoPathVariability& echo_path_variability,
bool capture_signal_saturation,
const std::vector<std::vector<float>>& render,
std::vector<std::vector<float>>* capture) {
RTC_DCHECK(capture);
RTC_DCHECK_EQ(render.size(), NumBandsForRate(sample_rate_hz_));
RTC_DCHECK_EQ(capture->size(), NumBandsForRate(sample_rate_hz_));
RTC_DCHECK_EQ(render[0].size(), kBlockSize);
RTC_DCHECK_EQ((*capture)[0].size(), kBlockSize);
}
// TODO(peah): Add functionality.
void EchoRemoverImpl::UpdateEchoLeakageStatus(bool leakage_detected) {}
} // namespace
EchoRemover* EchoRemover::Create(int sample_rate_hz) {
return new EchoRemoverImpl(sample_rate_hz);
}
} // namespace webrtc