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

Side by Side Diff: webrtc/modules/audio_processing/aec/aec_core_sse2.cc

Issue 1943193002: Broke apart the functionalities in the SubbandCoherence method in the AEC (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@RefactorAec4_CL
Patch Set: Rebase Created 4 years, 7 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_neon.cc ('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) 2011 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2011 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 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 490
491 // Updates the following smoothed Power Spectral Densities (PSD): 491 // Updates the following smoothed Power Spectral Densities (PSD):
492 // - sd : near-end 492 // - sd : near-end
493 // - se : residual echo 493 // - se : residual echo
494 // - sx : far-end 494 // - sx : far-end
495 // - sde : cross-PSD of near-end and residual echo 495 // - sde : cross-PSD of near-end and residual echo
496 // - sxd : cross-PSD of near-end and far-end 496 // - sxd : cross-PSD of near-end and far-end
497 // 497 //
498 // In addition to updating the PSDs, also the filter diverge state is determined 498 // In addition to updating the PSDs, also the filter diverge state is determined
499 // upon actions are taken. 499 // upon actions are taken.
500 static void SmoothedPSD(int mult, 500 static void UpdateCoherenceSpectraSSE2(int mult,
501 bool extended_filter_enabled, 501 bool extended_filter_enabled,
502 float efw[2][PART_LEN1], 502 float efw[2][PART_LEN1],
503 float dfw[2][PART_LEN1], 503 float dfw[2][PART_LEN1],
504 float xfw[2][PART_LEN1], 504 float xfw[2][PART_LEN1],
505 CoherenceState* coherence_state, 505 CoherenceState* coherence_state,
506 short* filter_divergence_state, 506 short* filter_divergence_state,
507 int* extreme_filter_divergence) { 507 int* extreme_filter_divergence) {
508 // Power estimate smoothing coefficients. 508 // Power estimate smoothing coefficients.
509 const float* ptrGCoh = 509 const float* ptrGCoh =
510 extended_filter_enabled 510 extended_filter_enabled
511 ? WebRtcAec_kExtendedSmoothingCoefficients[mult - 1] 511 ? WebRtcAec_kExtendedSmoothingCoefficients[mult - 1]
512 : WebRtcAec_kNormalSmoothingCoefficients[mult - 1]; 512 : WebRtcAec_kNormalSmoothingCoefficients[mult - 1];
513 int i; 513 int i;
514 float sdSum = 0, seSum = 0; 514 float sdSum = 0, seSum = 0;
515 const __m128 vec_15 = _mm_set1_ps(WebRtcAec_kMinFarendPSD); 515 const __m128 vec_15 = _mm_set1_ps(WebRtcAec_kMinFarendPSD);
516 const __m128 vec_GCoh0 = _mm_set1_ps(ptrGCoh[0]); 516 const __m128 vec_GCoh0 = _mm_set1_ps(ptrGCoh[0]);
517 const __m128 vec_GCoh1 = _mm_set1_ps(ptrGCoh[1]); 517 const __m128 vec_GCoh1 = _mm_set1_ps(ptrGCoh[1]);
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 _mm_storeu_ps(&data_complex[0][i], vec_a); 673 _mm_storeu_ps(&data_complex[0][i], vec_a);
674 _mm_storeu_ps(&data_complex[1][i], vec_b); 674 _mm_storeu_ps(&data_complex[1][i], vec_b);
675 } 675 }
676 // fix beginning/end values 676 // fix beginning/end values
677 data_complex[1][0] = 0; 677 data_complex[1][0] = 0;
678 data_complex[1][PART_LEN] = 0; 678 data_complex[1][PART_LEN] = 0;
679 data_complex[0][0] = data[0]; 679 data_complex[0][0] = data[0];
680 data_complex[0][PART_LEN] = data[1]; 680 data_complex[0][PART_LEN] = data[1];
681 } 681 }
682 682
683 static void SubbandCoherenceSSE2(int mult, 683 static void ComputeCoherenceSSE2(const CoherenceState* coherence_state,
684 bool extended_filter_enabled,
685 float efw[2][PART_LEN1],
686 float dfw[2][PART_LEN1],
687 float xfw[2][PART_LEN1],
688 float* fft,
689 float* cohde, 684 float* cohde,
690 float* cohxd, 685 float* cohxd) {
691 CoherenceState* coherence_state,
692 short* filter_divergence_state,
693 int* extreme_filter_divergence) {
694 int i; 686 int i;
695 687
696 SmoothedPSD(mult, extended_filter_enabled, efw, dfw, xfw, coherence_state,
697 filter_divergence_state, extreme_filter_divergence);
698
699 { 688 {
700 const __m128 vec_1eminus10 = _mm_set1_ps(1e-10f); 689 const __m128 vec_1eminus10 = _mm_set1_ps(1e-10f);
701 690
702 // Subband coherence 691 // Subband coherence
703 for (i = 0; i + 3 < PART_LEN1; i += 4) { 692 for (i = 0; i + 3 < PART_LEN1; i += 4) {
704 const __m128 vec_sd = _mm_loadu_ps(&coherence_state->sd[i]); 693 const __m128 vec_sd = _mm_loadu_ps(&coherence_state->sd[i]);
705 const __m128 vec_se = _mm_loadu_ps(&coherence_state->se[i]); 694 const __m128 vec_se = _mm_loadu_ps(&coherence_state->se[i]);
706 const __m128 vec_sx = _mm_loadu_ps(&coherence_state->sx[i]); 695 const __m128 vec_sx = _mm_loadu_ps(&coherence_state->sx[i]);
707 const __m128 vec_sdse = 696 const __m128 vec_sdse =
708 _mm_add_ps(vec_1eminus10, _mm_mul_ps(vec_sd, vec_se)); 697 _mm_add_ps(vec_1eminus10, _mm_mul_ps(vec_sd, vec_se));
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 (coherence_state->sx[i] * coherence_state->sd[i] + 1e-10f); 729 (coherence_state->sx[i] * coherence_state->sd[i] + 1e-10f);
741 } 730 }
742 } 731 }
743 } 732 }
744 733
745 void WebRtcAec_InitAec_SSE2(void) { 734 void WebRtcAec_InitAec_SSE2(void) {
746 WebRtcAec_FilterFar = FilterFarSSE2; 735 WebRtcAec_FilterFar = FilterFarSSE2;
747 WebRtcAec_ScaleErrorSignal = ScaleErrorSignalSSE2; 736 WebRtcAec_ScaleErrorSignal = ScaleErrorSignalSSE2;
748 WebRtcAec_FilterAdaptation = FilterAdaptationSSE2; 737 WebRtcAec_FilterAdaptation = FilterAdaptationSSE2;
749 WebRtcAec_OverdriveAndSuppress = OverdriveAndSuppressSSE2; 738 WebRtcAec_OverdriveAndSuppress = OverdriveAndSuppressSSE2;
750 WebRtcAec_SubbandCoherence = SubbandCoherenceSSE2; 739 WebRtcAec_ComputeCoherence = ComputeCoherenceSSE2;
740 WebRtcAec_UpdateCoherenceSpectra = UpdateCoherenceSpectraSSE2;
751 WebRtcAec_StoreAsComplex = StoreAsComplexSSE2; 741 WebRtcAec_StoreAsComplex = StoreAsComplexSSE2;
752 WebRtcAec_PartitionDelay = PartitionDelaySSE2; 742 WebRtcAec_PartitionDelay = PartitionDelaySSE2;
753 WebRtcAec_WindowData = WindowDataSSE2; 743 WebRtcAec_WindowData = WindowDataSSE2;
754 } 744 }
755 } // namespace webrtc 745 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/audio_processing/aec/aec_core_neon.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698