AEC3: External delay - Fix mismatch in time units
Fixes a confusion of time units (milliseconds vs blocks) of externally reported audio delay. This fix reduces the risk of echo in the beginning of a call. Bug: webrtc:9241,chromium:839860 Change-Id: I534cc15d6b215a5881ae46759f573a56871170a3 Reviewed-on: https://webrtc-review.googlesource.com/74589 Reviewed-by: Per Åhgren <peah@webrtc.org> Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org> Cr-Commit-Position: refs/heads/master@{#23128}
This commit is contained in:
committed by
Commit Bot
parent
e8492fee6b
commit
a49eacb30a
@ -77,7 +77,7 @@ class RenderDelayBufferImpl final : public RenderDelayBuffer {
|
||||
size_t render_call_counter_ = 0;
|
||||
bool render_activity_ = false;
|
||||
size_t render_activity_counter_ = 0;
|
||||
rtc::Optional<size_t> external_audio_buffer_delay_ms_;
|
||||
rtc::Optional<size_t> external_audio_buffer_delay_;
|
||||
bool external_delay_verified_after_reset_ = false;
|
||||
|
||||
int LowRateBufferOffset() const { return DelayEstimatorOffset(config_) >> 1; }
|
||||
@ -202,16 +202,16 @@ void RenderDelayBufferImpl::Reset() {
|
||||
low_rate_.write, LowRateBufferOffset() * sub_block_size_);
|
||||
|
||||
// Check for any external audio buffer delay and whether it is feasible.
|
||||
if (external_audio_buffer_delay_ms_) {
|
||||
constexpr size_t kHeadroom = 5;
|
||||
if (external_audio_buffer_delay_) {
|
||||
constexpr size_t kHeadroom = 1;
|
||||
size_t external_delay_to_set = 0;
|
||||
if (*external_audio_buffer_delay_ms_ < kHeadroom) {
|
||||
if (*external_audio_buffer_delay_ < kHeadroom) {
|
||||
external_delay_to_set = 0;
|
||||
} else {
|
||||
external_delay_to_set = *external_audio_buffer_delay_ms_ - kHeadroom;
|
||||
external_delay_to_set = *external_audio_buffer_delay_ - kHeadroom;
|
||||
}
|
||||
|
||||
constexpr size_t kMaxExternalDelay = 170;
|
||||
constexpr size_t kMaxExternalDelay = 170 / 4;
|
||||
external_delay_to_set = std::min(external_delay_to_set, kMaxExternalDelay);
|
||||
|
||||
// When an external delay estimate is available, use that delay as the
|
||||
@ -330,13 +330,7 @@ RenderDelayBufferImpl::PrepareCaptureProcessing() {
|
||||
|
||||
// Sets the delay and returns a bool indicating whether the delay was changed.
|
||||
bool RenderDelayBufferImpl::SetDelay(size_t delay) {
|
||||
if (!external_delay_verified_after_reset_ &&
|
||||
external_audio_buffer_delay_ms_) {
|
||||
int delay_difference = static_cast<int>(*external_audio_buffer_delay_ms_) -
|
||||
static_cast<int>(delay);
|
||||
RTC_LOG(LS_WARNING) << "Difference between the externally reported delay "
|
||||
"and the first delay estimate: "
|
||||
<< delay_difference << " ms.";
|
||||
if (!external_delay_verified_after_reset_ && external_audio_buffer_delay_) {
|
||||
external_delay_verified_after_reset_ = true;
|
||||
}
|
||||
if (delay_ && *delay_ == delay) {
|
||||
@ -366,12 +360,12 @@ bool RenderDelayBufferImpl::CausalDelay(size_t delay) const {
|
||||
}
|
||||
|
||||
void RenderDelayBufferImpl::SetAudioBufferDelay(size_t delay_ms) {
|
||||
if (!external_audio_buffer_delay_ms_) {
|
||||
if (!external_audio_buffer_delay_) {
|
||||
RTC_LOG(LS_WARNING)
|
||||
<< "Receiving a first reported externally buffer delay of " << delay_ms
|
||||
<< " ms.";
|
||||
}
|
||||
external_audio_buffer_delay_ms_ = delay_ms;
|
||||
external_audio_buffer_delay_ = delay_ms / 4;
|
||||
}
|
||||
|
||||
// Maps the externally computed delay to the delay used internally.
|
||||
|
||||
Reference in New Issue
Block a user