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_INCLUDE_AEC_DUMP_H_ 12 #define MODULES_AUDIO_PROCESSING_INCLUDE_AEC_DUMP_H_ 13 14 #include <stdint.h> 15 16 #include <string> 17 18 #include "modules/audio_processing/include/audio_frame_view.h" 19 #include "modules/audio_processing/include/audio_processing.h" 20 #include "rtc_base/deprecation.h" 21 22 namespace webrtc { 23 24 // Struct for passing current config from APM without having to 25 // include protobuf headers. 26 struct InternalAPMConfig { 27 InternalAPMConfig(); 28 InternalAPMConfig(const InternalAPMConfig&); 29 InternalAPMConfig(InternalAPMConfig&&); 30 31 InternalAPMConfig& operator=(const InternalAPMConfig&); 32 InternalAPMConfig& operator=(InternalAPMConfig&&) = delete; 33 34 bool operator==(const InternalAPMConfig& other); 35 36 bool aec_enabled = false; 37 bool aec_delay_agnostic_enabled = false; 38 bool aec_drift_compensation_enabled = false; 39 bool aec_extended_filter_enabled = false; 40 int aec_suppression_level = 0; 41 bool aecm_enabled = false; 42 bool aecm_comfort_noise_enabled = false; 43 int aecm_routing_mode = 0; 44 bool agc_enabled = false; 45 int agc_mode = 0; 46 bool agc_limiter_enabled = false; 47 bool hpf_enabled = false; 48 bool ns_enabled = false; 49 int ns_level = 0; 50 bool transient_suppression_enabled = false; 51 bool noise_robust_agc_enabled = false; 52 bool pre_amplifier_enabled = false; 53 float pre_amplifier_fixed_gain_factor = 1.f; 54 std::string experiments_description = ""; 55 }; 56 57 // An interface for recording configuration and input/output streams 58 // of the Audio Processing Module. The recordings are called 59 // 'aec-dumps' and are stored in a protobuf format defined in 60 // debug.proto. 61 // The Write* methods are always safe to call concurrently or 62 // otherwise for all implementing subclasses. The intended mode of 63 // operation is to create a protobuf object from the input, and send 64 // it away to be written to file asynchronously. 65 class AecDump { 66 public: 67 struct AudioProcessingState { 68 int delay; 69 int drift; 70 int level; 71 bool keypress; 72 }; 73 74 virtual ~AecDump() = default; 75 76 // Logs Event::Type INIT message. 77 virtual void WriteInitMessage(const ProcessingConfig& api_format, 78 int64_t time_now_ms) = 0; WriteInitMessage(const ProcessingConfig & api_format)79 RTC_DEPRECATED void WriteInitMessage(const ProcessingConfig& api_format) { 80 WriteInitMessage(api_format, 0); 81 } 82 83 // Logs Event::Type STREAM message. To log an input/output pair, 84 // call the AddCapture* and AddAudioProcessingState methods followed 85 // by a WriteCaptureStreamMessage call. 86 virtual void AddCaptureStreamInput( 87 const AudioFrameView<const float>& src) = 0; 88 virtual void AddCaptureStreamOutput( 89 const AudioFrameView<const float>& src) = 0; 90 virtual void AddCaptureStreamInput(const int16_t* const data, 91 int num_channels, 92 int samples_per_channel) = 0; 93 virtual void AddCaptureStreamOutput(const int16_t* const data, 94 int num_channels, 95 int samples_per_channel) = 0; 96 virtual void AddAudioProcessingState(const AudioProcessingState& state) = 0; 97 virtual void WriteCaptureStreamMessage() = 0; 98 99 // Logs Event::Type REVERSE_STREAM message. 100 virtual void WriteRenderStreamMessage(const int16_t* const data, 101 int num_channels, 102 int samples_per_channel) = 0; 103 virtual void WriteRenderStreamMessage( 104 const AudioFrameView<const float>& src) = 0; 105 106 virtual void WriteRuntimeSetting( 107 const AudioProcessing::RuntimeSetting& runtime_setting) = 0; 108 109 // Logs Event::Type CONFIG message. 110 virtual void WriteConfig(const InternalAPMConfig& config) = 0; 111 }; 112 } // namespace webrtc 113 114 #endif // MODULES_AUDIO_PROCESSING_INCLUDE_AEC_DUMP_H_ 115