mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 13:50:40 +01:00
Remove the ability for EchoRemover to override the render vs capture alignment
This change removes the (unused) ability of EchoRemover overriding the delay of the RenderDelayController. The change is tested for bit-exactness. Bug: webrtc:8671 Change-Id: I188ef740f1437de64ffe236d07a7dcd4128192c2 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/130518 Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org> Reviewed-by: Per Åhgren <peah@webrtc.org> Cr-Commit-Position: refs/heads/master@{#27414}
This commit is contained in:
parent
f537da6c19
commit
1107cab646
8 changed files with 12 additions and 47 deletions
|
@ -71,7 +71,6 @@ class BlockProcessorImpl final : public BlockProcessor {
|
|||
RenderDelayBuffer::BufferingEvent render_event_;
|
||||
size_t capture_call_counter_ = 0;
|
||||
absl::optional<DelayEstimate> estimated_delay_;
|
||||
absl::optional<int> echo_remover_delay_;
|
||||
};
|
||||
|
||||
int BlockProcessorImpl::instance_count_ = 0;
|
||||
|
@ -150,11 +149,11 @@ void BlockProcessorImpl::ProcessCapture(
|
|||
&(*capture_block)[0][0],
|
||||
LowestBandRate(sample_rate_hz_), 1);
|
||||
|
||||
// Compute and and apply the render delay required to achieve proper signal
|
||||
// Compute and apply the render delay required to achieve proper signal
|
||||
// alignment.
|
||||
estimated_delay_ = delay_controller_->GetDelay(
|
||||
render_buffer_->GetDownsampledRenderBuffer(), render_buffer_->Delay(),
|
||||
echo_remover_delay_, (*capture_block)[0]);
|
||||
estimated_delay_ =
|
||||
delay_controller_->GetDelay(render_buffer_->GetDownsampledRenderBuffer(),
|
||||
render_buffer_->Delay(), (*capture_block)[0]);
|
||||
|
||||
if (estimated_delay_) {
|
||||
bool delay_change = render_buffer_->SetDelay(estimated_delay_->delay);
|
||||
|
@ -173,10 +172,6 @@ void BlockProcessorImpl::ProcessCapture(
|
|||
echo_path_variability, capture_signal_saturation, estimated_delay_,
|
||||
render_buffer_->GetRenderBuffer(), capture_block);
|
||||
|
||||
// Check to see if a refined delay estimate has been obtained from the echo
|
||||
// remover.
|
||||
echo_remover_delay_ = echo_remover_->Delay();
|
||||
|
||||
// Update the metrics.
|
||||
metrics_.UpdateCapture(false);
|
||||
}
|
||||
|
|
|
@ -166,7 +166,7 @@ TEST(BlockProcessor, DISABLED_SubmoduleIntegration) {
|
|||
EXPECT_CALL(*render_delay_buffer_mock, Delay())
|
||||
.Times(kNumBlocks)
|
||||
.WillRepeatedly(Return(0));
|
||||
EXPECT_CALL(*render_delay_controller_mock, GetDelay(_, _, _, _))
|
||||
EXPECT_CALL(*render_delay_controller_mock, GetDelay(_, _, _))
|
||||
.Times(kNumBlocks);
|
||||
EXPECT_CALL(*echo_remover_mock, ProcessCapture(_, _, _, _, _))
|
||||
.Times(kNumBlocks);
|
||||
|
|
|
@ -97,12 +97,6 @@ class EchoRemoverImpl final : public EchoRemover {
|
|||
RenderBuffer* render_buffer,
|
||||
std::vector<std::vector<float>>* capture) override;
|
||||
|
||||
// Returns the internal delay estimate in blocks.
|
||||
absl::optional<int> Delay() const override {
|
||||
// TODO(peah): Remove or reactivate this functionality.
|
||||
return absl::nullopt;
|
||||
}
|
||||
|
||||
// Updates the status on whether echo leakage is detected in the output of the
|
||||
// echo remover.
|
||||
void UpdateEchoLeakageStatus(bool leakage_detected) override {
|
||||
|
|
|
@ -42,9 +42,6 @@ class EchoRemover {
|
|||
RenderBuffer* render_buffer,
|
||||
std::vector<std::vector<float>>* capture) = 0;
|
||||
|
||||
// Returns the internal delay estimate in blocks.
|
||||
virtual absl::optional<int> Delay() const = 0;
|
||||
|
||||
// Updates the status on whether echo leakage is detected in the output of the
|
||||
// echo remover.
|
||||
virtual void UpdateEchoLeakageStatus(bool leakage_detected) = 0;
|
||||
|
|
|
@ -27,11 +27,10 @@ class MockRenderDelayController : public RenderDelayController {
|
|||
|
||||
MOCK_METHOD1(Reset, void(bool reset_delay_statistics));
|
||||
MOCK_METHOD0(LogRenderCall, void());
|
||||
MOCK_METHOD4(GetDelay,
|
||||
MOCK_METHOD3(GetDelay,
|
||||
absl::optional<DelayEstimate>(
|
||||
const DownsampledRenderBuffer& render_buffer,
|
||||
size_t render_delay_buffer_delay,
|
||||
const absl::optional<int>& echo_remover_delay,
|
||||
rtc::ArrayView<const float> capture));
|
||||
MOCK_CONST_METHOD0(HasClockdrift, bool());
|
||||
};
|
||||
|
|
|
@ -39,7 +39,6 @@ class RenderDelayControllerImpl final : public RenderDelayController {
|
|||
absl::optional<DelayEstimate> GetDelay(
|
||||
const DownsampledRenderBuffer& render_buffer,
|
||||
size_t render_delay_buffer_delay,
|
||||
const absl::optional<int>& echo_remover_delay,
|
||||
rtc::ArrayView<const float> capture) override;
|
||||
bool HasClockdrift() const override;
|
||||
|
||||
|
@ -117,21 +116,12 @@ void RenderDelayControllerImpl::LogRenderCall() {}
|
|||
absl::optional<DelayEstimate> RenderDelayControllerImpl::GetDelay(
|
||||
const DownsampledRenderBuffer& render_buffer,
|
||||
size_t render_delay_buffer_delay,
|
||||
const absl::optional<int>& echo_remover_delay,
|
||||
rtc::ArrayView<const float> capture) {
|
||||
RTC_DCHECK_EQ(kBlockSize, capture.size());
|
||||
++capture_call_counter_;
|
||||
|
||||
auto delay_samples = delay_estimator_.EstimateDelay(render_buffer, capture);
|
||||
|
||||
// Overrule the delay estimator delay if the echo remover reports a delay.
|
||||
if (echo_remover_delay) {
|
||||
int total_echo_remover_delay_samples =
|
||||
(render_delay_buffer_delay + *echo_remover_delay) * kBlockSize;
|
||||
delay_samples = DelayEstimate(DelayEstimate::Quality::kRefined,
|
||||
total_echo_remover_delay_samples);
|
||||
}
|
||||
|
||||
if (delay_samples) {
|
||||
if (!delay_samples_ || delay_samples->delay != delay_samples_->delay) {
|
||||
delay_change_counter_ = 0;
|
||||
|
|
|
@ -39,7 +39,6 @@ class RenderDelayController {
|
|||
virtual absl::optional<DelayEstimate> GetDelay(
|
||||
const DownsampledRenderBuffer& render_buffer,
|
||||
size_t render_delay_buffer_delay,
|
||||
const absl::optional<int>& echo_remover_delay,
|
||||
rtc::ArrayView<const float> capture) = 0;
|
||||
|
||||
// Returns true if clockdrift has been detected.
|
||||
|
|
|
@ -48,7 +48,6 @@ constexpr size_t kDownSamplingFactors[] = {2, 4, 8};
|
|||
TEST(RenderDelayController, NoRenderSignal) {
|
||||
std::vector<float> block(kBlockSize, 0.f);
|
||||
EchoCanceller3Config config;
|
||||
absl::optional<int> echo_remover_delay_;
|
||||
for (size_t num_matched_filters = 4; num_matched_filters == 10;
|
||||
num_matched_filters++) {
|
||||
for (auto down_sampling_factor : kDownSamplingFactors) {
|
||||
|
@ -63,7 +62,7 @@ TEST(RenderDelayController, NoRenderSignal) {
|
|||
for (size_t k = 0; k < 100; ++k) {
|
||||
auto delay = delay_controller->GetDelay(
|
||||
delay_buffer->GetDownsampledRenderBuffer(), delay_buffer->Delay(),
|
||||
echo_remover_delay_, block);
|
||||
block);
|
||||
EXPECT_FALSE(delay->delay);
|
||||
}
|
||||
}
|
||||
|
@ -75,7 +74,6 @@ TEST(RenderDelayController, NoRenderSignal) {
|
|||
TEST(RenderDelayController, BasicApiCalls) {
|
||||
std::vector<float> capture_block(kBlockSize, 0.f);
|
||||
absl::optional<DelayEstimate> delay_blocks;
|
||||
absl::optional<int> echo_remover_delay;
|
||||
for (size_t num_matched_filters = 4; num_matched_filters == 10;
|
||||
num_matched_filters++) {
|
||||
for (auto down_sampling_factor : kDownSamplingFactors) {
|
||||
|
@ -95,7 +93,7 @@ TEST(RenderDelayController, BasicApiCalls) {
|
|||
|
||||
delay_blocks = delay_controller->GetDelay(
|
||||
render_delay_buffer->GetDownsampledRenderBuffer(),
|
||||
render_delay_buffer->Delay(), echo_remover_delay, capture_block);
|
||||
render_delay_buffer->Delay(), capture_block);
|
||||
}
|
||||
EXPECT_TRUE(delay_blocks);
|
||||
EXPECT_FALSE(delay_blocks->delay);
|
||||
|
@ -108,7 +106,6 @@ TEST(RenderDelayController, BasicApiCalls) {
|
|||
// simple timeshifts between the signals.
|
||||
TEST(RenderDelayController, Alignment) {
|
||||
Random random_generator(42U);
|
||||
absl::optional<int> echo_remover_delay;
|
||||
std::vector<float> capture_block(kBlockSize, 0.f);
|
||||
for (size_t num_matched_filters = 4; num_matched_filters == 10;
|
||||
num_matched_filters++) {
|
||||
|
@ -136,8 +133,7 @@ TEST(RenderDelayController, Alignment) {
|
|||
render_delay_buffer->PrepareCaptureProcessing();
|
||||
delay_blocks = delay_controller->GetDelay(
|
||||
render_delay_buffer->GetDownsampledRenderBuffer(),
|
||||
render_delay_buffer->Delay(), echo_remover_delay,
|
||||
capture_block);
|
||||
render_delay_buffer->Delay(), capture_block);
|
||||
}
|
||||
ASSERT_TRUE(!!delay_blocks);
|
||||
|
||||
|
@ -157,7 +153,6 @@ TEST(RenderDelayController, Alignment) {
|
|||
// delays.
|
||||
TEST(RenderDelayController, NonCausalAlignment) {
|
||||
Random random_generator(42U);
|
||||
absl::optional<int> echo_remover_delay;
|
||||
for (size_t num_matched_filters = 4; num_matched_filters == 10;
|
||||
num_matched_filters++) {
|
||||
for (auto down_sampling_factor : kDownSamplingFactors) {
|
||||
|
@ -186,8 +181,7 @@ TEST(RenderDelayController, NonCausalAlignment) {
|
|||
render_delay_buffer->PrepareCaptureProcessing();
|
||||
delay_blocks = delay_controller->GetDelay(
|
||||
render_delay_buffer->GetDownsampledRenderBuffer(),
|
||||
render_delay_buffer->Delay(), echo_remover_delay,
|
||||
capture_block[0]);
|
||||
render_delay_buffer->Delay(), capture_block[0]);
|
||||
}
|
||||
|
||||
ASSERT_FALSE(delay_blocks);
|
||||
|
@ -201,7 +195,6 @@ TEST(RenderDelayController, NonCausalAlignment) {
|
|||
// simple timeshifts between the signals when there is jitter in the API calls.
|
||||
TEST(RenderDelayController, AlignmentWithJitter) {
|
||||
Random random_generator(42U);
|
||||
absl::optional<int> echo_remover_delay;
|
||||
std::vector<float> capture_block(kBlockSize, 0.f);
|
||||
for (size_t num_matched_filters = 4; num_matched_filters == 10;
|
||||
num_matched_filters++) {
|
||||
|
@ -236,8 +229,7 @@ TEST(RenderDelayController, AlignmentWithJitter) {
|
|||
render_delay_buffer->PrepareCaptureProcessing();
|
||||
delay_blocks = delay_controller->GetDelay(
|
||||
render_delay_buffer->GetDownsampledRenderBuffer(),
|
||||
render_delay_buffer->Delay(), echo_remover_delay,
|
||||
capture_block_buffer[k]);
|
||||
render_delay_buffer->Delay(), capture_block_buffer[k]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -285,7 +277,6 @@ TEST(RenderDelayController, InitialHeadroom) {
|
|||
TEST(RenderDelayController, WrongCaptureSize) {
|
||||
std::vector<float> block(kBlockSize - 1, 0.f);
|
||||
EchoCanceller3Config config;
|
||||
absl::optional<int> echo_remover_delay;
|
||||
for (auto rate : {8000, 16000, 32000, 48000}) {
|
||||
SCOPED_TRACE(ProduceDebugText(rate));
|
||||
std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
|
||||
|
@ -294,7 +285,7 @@ TEST(RenderDelayController, WrongCaptureSize) {
|
|||
std::unique_ptr<RenderDelayController>(
|
||||
RenderDelayController::Create(EchoCanceller3Config(), rate))
|
||||
->GetDelay(render_delay_buffer->GetDownsampledRenderBuffer(),
|
||||
render_delay_buffer->Delay(), echo_remover_delay, block),
|
||||
render_delay_buffer->Delay(), block),
|
||||
"");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue