1 /* 2 * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef MODULES_AUDIO_PROCESSING_AEC3_SUBTRACTOR_OUTPUT_H_ 12 #define MODULES_AUDIO_PROCESSING_AEC3_SUBTRACTOR_OUTPUT_H_ 13 14 #include <array> 15 16 #include "api/array_view.h" 17 #include "modules/audio_processing/aec3/aec3_common.h" 18 #include "modules/audio_processing/aec3/fft_data.h" 19 20 namespace webrtc { 21 22 // Stores the values being returned from the echo subtractor for a single 23 // capture channel. 24 struct SubtractorOutput { 25 SubtractorOutput(); 26 ~SubtractorOutput(); 27 28 std::array<float, kBlockSize> s_refined; 29 std::array<float, kBlockSize> s_coarse; 30 std::array<float, kBlockSize> e_refined; 31 std::array<float, kBlockSize> e_coarse; 32 FftData E_refined; 33 std::array<float, kFftLengthBy2Plus1> E2_refined; 34 std::array<float, kFftLengthBy2Plus1> E2_coarse; 35 float s2_refined = 0.f; 36 float s2_coarse = 0.f; 37 float e2_refined = 0.f; 38 float e2_coarse = 0.f; 39 float y2 = 0.f; 40 float s_refined_max_abs = 0.f; 41 float s_coarse_max_abs = 0.f; 42 43 // Reset the struct content. 44 void Reset(); 45 46 // Updates the powers of the signals. 47 void ComputeMetrics(rtc::ArrayView<const float> y); 48 }; 49 50 } // namespace webrtc 51 52 #endif // MODULES_AUDIO_PROCESSING_AEC3_SUBTRACTOR_OUTPUT_H_ 53