Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(601)

Side by Side Diff: webrtc/modules/audio_processing/aec/echo_cancellation.c

Issue 1180423006: audio_processing/aec: make delay estimator aware of starving farend buffer (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Clarified comment Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/modules/audio_processing/aec/aec_core.c ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 // to the buffer and no delay compensation nor AEC processing 711 // to the buffer and no delay compensation nor AEC processing
712 // has been done. 712 // has been done.
713 WebRtcAec_MoveFarReadPtr(aecpc->aec, overhead_elements); 713 WebRtcAec_MoveFarReadPtr(aecpc->aec, overhead_elements);
714 714
715 // Enable the AEC 715 // Enable the AEC
716 aecpc->startup_phase = 0; 716 aecpc->startup_phase = 0;
717 } 717 }
718 } 718 }
719 } else { 719 } else {
720 // AEC is enabled. 720 // AEC is enabled.
721 if (WebRtcAec_reported_delay_enabled(aecpc->aec)) { 721 EstBufDelayNormal(aecpc);
722 EstBufDelayNormal(aecpc);
723 }
724 722
725 // Call the AEC. 723 // Call the AEC.
726 // TODO(bjornv): Re-structure such that we don't have to pass 724 // TODO(bjornv): Re-structure such that we don't have to pass
727 // |aecpc->knownDelay| as input. Change name to something like 725 // |aecpc->knownDelay| as input. Change name to something like
728 // |system_buffer_diff|. 726 // |system_buffer_diff|.
729 WebRtcAec_ProcessFrames(aecpc->aec, 727 WebRtcAec_ProcessFrames(aecpc->aec,
730 nearend, 728 nearend,
731 num_bands, 729 num_bands,
732 nrOfSamples, 730 nrOfSamples,
733 aecpc->knownDelay, 731 aecpc->knownDelay,
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 // conservative and scale by 2. On Android we use a fixed delay and 786 // conservative and scale by 2. On Android we use a fixed delay and
789 // therefore there is no need to scale the target_delay. 787 // therefore there is no need to scale the target_delay.
790 target_delay /= 2; 788 target_delay /= 2;
791 #endif 789 #endif
792 int overhead_elements = 790 int overhead_elements =
793 (WebRtcAec_system_delay(self->aec) - target_delay) / PART_LEN; 791 (WebRtcAec_system_delay(self->aec) - target_delay) / PART_LEN;
794 WebRtcAec_MoveFarReadPtr(self->aec, overhead_elements); 792 WebRtcAec_MoveFarReadPtr(self->aec, overhead_elements);
795 self->startup_phase = 0; 793 self->startup_phase = 0;
796 } 794 }
797 795
798 if (WebRtcAec_reported_delay_enabled(self->aec)) { 796 EstBufDelayExtended(self);
799 EstBufDelayExtended(self);
800 }
801 797
802 { 798 {
803 // |delay_diff_offset| gives us the option to manually rewind the delay on 799 // |delay_diff_offset| gives us the option to manually rewind the delay on
804 // very low delay platforms which can't be expressed purely through 800 // very low delay platforms which can't be expressed purely through
805 // |reported_delay_ms|. 801 // |reported_delay_ms|.
806 const int adjusted_known_delay = 802 const int adjusted_known_delay =
807 WEBRTC_SPL_MAX(0, self->knownDelay + delay_diff_offset); 803 WEBRTC_SPL_MAX(0, self->knownDelay + delay_diff_offset);
808 804
809 WebRtcAec_ProcessFrames(self->aec, 805 WebRtcAec_ProcessFrames(self->aec,
810 near, 806 near,
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
914 } 910 }
915 } else { 911 } else {
916 self->timeForDelayChange = 0; 912 self->timeForDelayChange = 0;
917 } 913 }
918 self->lastDelayDiff = delay_difference; 914 self->lastDelayDiff = delay_difference;
919 915
920 if (self->timeForDelayChange > 25) { 916 if (self->timeForDelayChange > 25) {
921 self->knownDelay = WEBRTC_SPL_MAX((int)self->filtDelay - 256, 0); 917 self->knownDelay = WEBRTC_SPL_MAX((int)self->filtDelay - 256, 0);
922 } 918 }
923 } 919 }
OLDNEW
« no previous file with comments | « webrtc/modules/audio_processing/aec/aec_core.c ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698