// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef MEDIA_WEBRTC_AUDIO_PROCESSOR_H_ #define MEDIA_WEBRTC_AUDIO_PROCESSOR_H_ #include <memory> #include <optional> #include <string_view> #include "base/component_export.h" #include "base/files/file.h" #include "base/functional/callback.h" #include "base/memory/scoped_refptr.h" #include "base/sequence_checker.h" #include "base/thread_annotations.h" #include "base/time/time.h" #include "media/base/audio_parameters.h" #include "media/base/audio_processing.h" #include "media/base/audio_push_fifo.h" #include "media/webrtc/audio_delay_stats_reporter.h" #include "media/webrtc/webrtc_features.h" #include "third_party/webrtc/api/task_queue/task_queue_base.h" #include "third_party/webrtc/modules/audio_processing/include/audio_processing.h" #include "third_party/webrtc/modules/audio_processing/include/audio_processing_statistics.h" namespace media { class AudioBus; class AudioProcessorCaptureBus; class AudioProcessorCaptureFifo; // This class applies audio processing effects such as echo cancellation and // noise suppression to input capture audio (such as a microphone signal). // Effects are applied based on configuration from AudioProcessingSettings, and // mainly rely on an instance of the webrtc::AudioProcessing module (APM) owned // by the AudioProcessor. // // The AudioProcessor can handle up to three threads (in practice, sequences): // - An owning sequence, which performs construction, destruction, diagnostic // recordings, and similar signals. // - A capture thread, which calls ProcessCapturedAudio(). // - A playout thread, which calls OnPlayoutData(). // // All member functions must be called on the owning sequence unless // specifically documented otherwise. // // Thread-safe exceptions to this scheme are explicitly documented as such. class COMPONENT_EXPORT(MEDIA_WEBRTC) AudioProcessor { … }; } // namespace media #endif // MEDIA_WEBRTC_AUDIO_PROCESSOR_H_