// Copyright 2013 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_WEBRTC_WEBRTC_AUDIO_DEVICE_IMPL_H_ #define THIRD_PARTY_BLINK_RENDERER_MODULES_WEBRTC_WEBRTC_AUDIO_DEVICE_IMPL_H_ #include <stdint.h> #include <list> #include <memory> #include <string> #include "base/memory/raw_ptr.h" #include "base/memory/scoped_refptr.h" #include "base/threading/thread_checker.h" #include "base/time/time.h" #include "base/unguessable_token.h" #include "media/base/audio_glitch_info.h" #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/modules/webrtc/webrtc_audio_device_not_impl.h" #include "third_party/blink/renderer/platform/webrtc/webrtc_source.h" #include "third_party/blink/renderer/platform/wtf/vector.h" // A WebRtcAudioDeviceImpl instance implements the abstract interface // webrtc::AudioDeviceModule which makes it possible for a user (e.g. webrtc:: // VoiceEngine) to register this class as an external AudioDeviceModule (ADM). // // Implementation notes: // // - This class must be created and destroyed on the main render thread and // most methods are called on the same thread. However, some methods are // also called on a Libjingle worker thread. RenderData is called on the // AudioOutputDevice thread and CaptureData on the AudioInputDevice thread. // To summarize: this class lives on four different threads, so it is // important to be careful with the order in which locks are acquired in // order to avoid potential deadlocks. // namespace blink { class WebRtcAudioRenderer; } namespace media { class AudioBus; } namespace blink { class ProcessedLocalAudioSource; // Note that this class inherits from webrtc::AudioDeviceModule but due to // the high number of non-implemented methods, we move the cruft over to the // WebRtcAudioDeviceNotImpl. class MODULES_EXPORT WebRtcAudioDeviceImpl : public WebRtcAudioDeviceNotImpl, public blink::WebRtcAudioRendererSource, public blink::WebRtcPlayoutDataSource { … }; } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_MODULES_WEBRTC_WEBRTC_AUDIO_DEVICE_IMPL_H_