diff --git a/media/engine/webrtc_voice_engine.cc b/media/engine/webrtc_voice_engine.cc index ebc4334948..dc9bc1c66a 100644 --- a/media/engine/webrtc_voice_engine.cc +++ b/media/engine/webrtc_voice_engine.cc @@ -240,7 +240,7 @@ void WebRtcVoiceEngine::Init() { // No ADM supplied? Create a default one. if (!adm_) { adm_ = webrtc::AudioDeviceModule::Create( - webrtc::AudioDeviceModule::kPlatformDefaultAudio); + webrtc::AudioDeviceModule::kPlatformDefaultAudio, task_queue_factory_); } #endif // WEBRTC_INCLUDE_INTERNAL_AUDIO_DEVICE RTC_CHECK(adm()); diff --git a/modules/audio_device/BUILD.gn b/modules/audio_device/BUILD.gn index 3d42fd7254..02e54c01ca 100644 --- a/modules/audio_device/BUILD.gn +++ b/modules/audio_device/BUILD.gn @@ -94,6 +94,7 @@ rtc_source_set("audio_device_api") { ] deps = [ "../../api:scoped_refptr", + "../../api/task_queue", "../../rtc_base:checks", "../../rtc_base:deprecation", "../../rtc_base:rtc_base_approved", @@ -112,6 +113,7 @@ rtc_source_set("audio_device_buffer") { deps = [ ":audio_device_api", "../../api:array_view", + "../../api/task_queue", "../../common_audio:common_audio_c", "../../rtc_base:checks", "../../rtc_base:rtc_base_approved", @@ -183,6 +185,7 @@ rtc_source_set("audio_device_module_from_input_and_output") { ":audio_device_buffer", ":windows_core_audio_utility", "../../api:scoped_refptr", + "../../api/task_queue", "../../rtc_base:checks", "../../rtc_base:rtc_base_approved", "//third_party/abseil-cpp/absl/memory", @@ -434,6 +437,8 @@ if (rtc_include_tests) { ":mock_audio_device", "../../api:array_view", "../../api:scoped_refptr", + "../../api/task_queue", + "../../api/task_queue:default_task_queue_factory", "../../common_audio", "../../rtc_base:checks", "../../rtc_base:rtc_base_approved", diff --git a/modules/audio_device/android/audio_device_unittest.cc b/modules/audio_device/android/audio_device_unittest.cc index dffc33c8de..e9daf1c8e0 100644 --- a/modules/audio_device/android/audio_device_unittest.cc +++ b/modules/audio_device/android/audio_device_unittest.cc @@ -17,6 +17,8 @@ #include #include "api/scoped_refptr.h" +#include "api/task_queue/default_task_queue_factory.h" +#include "api/task_queue/task_queue_factory.h" #include "modules/audio_device/android/audio_common.h" #include "modules/audio_device/android/audio_manager.h" #include "modules/audio_device/android/build_info.h" @@ -460,7 +462,7 @@ class MockAudioTransportAndroid : public test::MockAudioTransport { // AudioDeviceTest test fixture. class AudioDeviceTest : public ::testing::Test { protected: - AudioDeviceTest() { + AudioDeviceTest() : task_queue_factory_(CreateDefaultTaskQueueFactory()) { // One-time initialization of JVM and application context. Ensures that we // can do calls between C++ and Java. Initializes both Java and OpenSL ES // implementations. @@ -514,7 +516,7 @@ class AudioDeviceTest : public ::testing::Test { rtc::scoped_refptr CreateAudioDevice( AudioDeviceModule::AudioLayer audio_layer) { rtc::scoped_refptr module( - AudioDeviceModule::Create(audio_layer)); + AudioDeviceModule::Create(audio_layer, task_queue_factory_.get())); return module; } @@ -639,6 +641,7 @@ class AudioDeviceTest : public ::testing::Test { } rtc::Event test_is_done_; + std::unique_ptr task_queue_factory_; rtc::scoped_refptr audio_device_; AudioParameters playout_parameters_; AudioParameters record_parameters_; diff --git a/modules/audio_device/audio_device_buffer.cc b/modules/audio_device/audio_device_buffer.cc index 052071a7fa..927f80a7a6 100644 --- a/modules/audio_device/audio_device_buffer.cc +++ b/modules/audio_device/audio_device_buffer.cc @@ -39,8 +39,10 @@ static const size_t kMinValidCallTimeTimeInMilliseconds = static const double k2Pi = 6.28318530717959; #endif -AudioDeviceBuffer::AudioDeviceBuffer() - : task_queue_(kTimerQueueName), +AudioDeviceBuffer::AudioDeviceBuffer(TaskQueueFactory* task_queue_factory) + : task_queue_(task_queue_factory->CreateTaskQueue( + kTimerQueueName, + TaskQueueFactory::Priority::NORMAL)), audio_transport_cb_(nullptr), rec_sample_rate_(0), play_sample_rate_(0), diff --git a/modules/audio_device/audio_device_buffer.h b/modules/audio_device/audio_device_buffer.h index 37d9ffb6d6..9f71ebe99d 100644 --- a/modules/audio_device/audio_device_buffer.h +++ b/modules/audio_device/audio_device_buffer.h @@ -15,6 +15,7 @@ #include #include +#include "api/task_queue/task_queue_factory.h" #include "modules/audio_device/include/audio_device_defines.h" #include "rtc_base/buffer.h" #include "rtc_base/critical_section.h" @@ -75,7 +76,7 @@ class AudioDeviceBuffer { int16_t max_play_level = 0; }; - AudioDeviceBuffer(); + explicit AudioDeviceBuffer(TaskQueueFactory* task_queue_factory); virtual ~AudioDeviceBuffer(); int32_t RegisterAudioCallback(AudioTransport* audio_callback); diff --git a/modules/audio_device/audio_device_data_observer.cc b/modules/audio_device/audio_device_data_observer.cc index a8b94d5e73..01f283fd97 100644 --- a/modules/audio_device/audio_device_data_observer.cc +++ b/modules/audio_device/audio_device_data_observer.cc @@ -10,6 +10,7 @@ #include "modules/audio_device/include/audio_device_data_observer.h" +#include "api/task_queue/global_task_queue_factory.h" #include "modules/audio_device/include/audio_device_defines.h" #include "rtc_base/checks.h" #include "rtc_base/ref_counted_object.h" @@ -22,8 +23,11 @@ namespace { // callback and redirects the PCM data to AudioDeviceDataObserver callback. class ADMWrapper : public AudioDeviceModule, public AudioTransport { public: - ADMWrapper(const AudioLayer audio_layer, AudioDeviceDataObserver* observer) - : impl_(AudioDeviceModule::Create(audio_layer)), observer_(observer) { + ADMWrapper(AudioLayer audio_layer, + TaskQueueFactory* task_queue_factory, + AudioDeviceDataObserver* observer) + : impl_(AudioDeviceModule::Create(audio_layer, task_queue_factory)), + observer_(observer) { // Register self as the audio transport callback for underlying ADM impl. auto res = impl_->RegisterAudioCallback(this); is_valid_ = (impl_.get() != nullptr) && (res == 0); @@ -280,8 +284,17 @@ class ADMWrapper : public AudioDeviceModule, public AudioTransport { rtc::scoped_refptr CreateAudioDeviceWithDataObserver( const AudioDeviceModule::AudioLayer audio_layer, AudioDeviceDataObserver* observer) { + return CreateAudioDeviceWithDataObserver(audio_layer, + &GlobalTaskQueueFactory(), observer); +} + +rtc::scoped_refptr CreateAudioDeviceWithDataObserver( + AudioDeviceModule::AudioLayer audio_layer, + TaskQueueFactory* task_queue_factory, + AudioDeviceDataObserver* observer) { rtc::scoped_refptr audio_device( - new rtc::RefCountedObject(audio_layer, observer)); + new rtc::RefCountedObject(audio_layer, task_queue_factory, + observer)); if (!audio_device->IsValid()) { return nullptr; diff --git a/modules/audio_device/audio_device_impl.cc b/modules/audio_device/audio_device_impl.cc index 8bdc4b3c9a..7b08a5af49 100644 --- a/modules/audio_device/audio_device_impl.cc +++ b/modules/audio_device/audio_device_impl.cc @@ -13,6 +13,7 @@ #include #include "api/scoped_refptr.h" +#include "api/task_queue/global_task_queue_factory.h" #include "modules/audio_device/audio_device_config.h" // IWYU pragma: keep #include "modules/audio_device/audio_device_generic.h" #include "rtc_base/checks.h" @@ -71,14 +72,23 @@ namespace webrtc { rtc::scoped_refptr AudioDeviceModule::Create( - const AudioLayer audio_layer) { + AudioLayer audio_layer) { RTC_LOG(INFO) << __FUNCTION__; - return AudioDeviceModule::CreateForTest(audio_layer); + return AudioDeviceModule::CreateForTest(audio_layer, + &GlobalTaskQueueFactory()); +} + +rtc::scoped_refptr AudioDeviceModule::Create( + AudioLayer audio_layer, + TaskQueueFactory* task_queue_factory) { + RTC_LOG(INFO) << __FUNCTION__; + return AudioDeviceModule::CreateForTest(audio_layer, task_queue_factory); } // static rtc::scoped_refptr AudioDeviceModule::CreateForTest( - const AudioLayer audio_layer) { + AudioLayer audio_layer, + TaskQueueFactory* task_queue_factory) { RTC_LOG(INFO) << __FUNCTION__; // The "AudioDeviceModule::kWindowsCoreAudio2" audio layer has its own @@ -91,7 +101,8 @@ rtc::scoped_refptr AudioDeviceModule::CreateForTest( // Create the generic reference counted (platform independent) implementation. rtc::scoped_refptr audioDevice( - new rtc::RefCountedObject(audio_layer)); + new rtc::RefCountedObject(audio_layer, + task_queue_factory)); // Ensure that the current platform is supported. if (audioDevice->CheckPlatform() == -1) { @@ -112,8 +123,10 @@ rtc::scoped_refptr AudioDeviceModule::CreateForTest( return audioDevice; } -AudioDeviceModuleImpl::AudioDeviceModuleImpl(const AudioLayer audioLayer) - : audio_layer_(audioLayer) { +AudioDeviceModuleImpl::AudioDeviceModuleImpl( + AudioLayer audio_layer, + TaskQueueFactory* task_queue_factory) + : audio_layer_(audio_layer), audio_device_buffer_(task_queue_factory) { RTC_LOG(INFO) << __FUNCTION__; } diff --git a/modules/audio_device/audio_device_impl.h b/modules/audio_device/audio_device_impl.h index afe53b3240..efe9322576 100644 --- a/modules/audio_device/audio_device_impl.h +++ b/modules/audio_device/audio_device_impl.h @@ -16,6 +16,7 @@ #include #include +#include "api/task_queue/task_queue_factory.h" #include "modules/audio_device/audio_device_buffer.h" #include "modules/audio_device/include/audio_device.h" @@ -40,7 +41,8 @@ class AudioDeviceModuleImpl : public AudioDeviceModuleForTest { int32_t CreatePlatformSpecificObjects(); int32_t AttachAudioBuffer(); - AudioDeviceModuleImpl(const AudioLayer audioLayer); + AudioDeviceModuleImpl(AudioLayer audio_layer, + TaskQueueFactory* task_queue_factory); ~AudioDeviceModuleImpl() override; // Retrieve the currently utilized audio layer diff --git a/modules/audio_device/audio_device_unittest.cc b/modules/audio_device/audio_device_unittest.cc index 846f75745f..0c842b6305 100644 --- a/modules/audio_device/audio_device_unittest.cc +++ b/modules/audio_device/audio_device_unittest.cc @@ -17,6 +17,8 @@ #include "absl/types/optional.h" #include "api/array_view.h" #include "api/scoped_refptr.h" +#include "api/task_queue/default_task_queue_factory.h" +#include "api/task_queue/task_queue_factory.h" #include "modules/audio_device/audio_device_impl.h" #include "modules/audio_device/include/audio_device.h" #include "modules/audio_device/include/mock_audio_transport.h" @@ -510,7 +512,9 @@ class MockAudioTransport : public test::MockAudioTransport { class AudioDeviceTest : public ::testing::TestWithParam { protected: - AudioDeviceTest() : audio_layer_(GetParam()) { + AudioDeviceTest() + : audio_layer_(GetParam()), + task_queue_factory_(CreateDefaultTaskQueueFactory()) { // TODO(webrtc:9778): Re-enable on THREAD_SANITIZER? #if !defined(ADDRESS_SANITIZER) && !defined(MEMORY_SANITIZER) && \ !defined(WEBRTC_DUMMY_AUDIO_BUILD) && !defined(THREAD_SANITIZER) @@ -579,7 +583,8 @@ class AudioDeviceTest // The value of |audio_layer_| is set at construction by GetParam() and two // different layers are tested on Windows only. if (audio_layer_ == AudioDeviceModule::kPlatformDefaultAudio) { - return AudioDeviceModule::CreateForTest(audio_layer_); + return AudioDeviceModule::CreateForTest(audio_layer_, + task_queue_factory_.get()); } else if (audio_layer_ == AudioDeviceModule::kWindowsCoreAudio2) { #ifdef WEBRTC_WIN // We must initialize the COM library on a thread before we calling any of @@ -590,7 +595,8 @@ class AudioDeviceTest EXPECT_TRUE(com_initializer_->Succeeded()); EXPECT_TRUE(webrtc_win::core_audio_utility::IsSupported()); EXPECT_TRUE(webrtc_win::core_audio_utility::IsMMCSSSupported()); - return CreateWindowsCoreAudioAudioDeviceModuleForTest(); + return CreateWindowsCoreAudioAudioDeviceModuleForTest( + task_queue_factory_.get()); #else return nullptr; #endif @@ -647,6 +653,7 @@ class AudioDeviceTest std::unique_ptr com_initializer_; #endif AudioDeviceModule::AudioLayer audio_layer_; + std::unique_ptr task_queue_factory_; bool requirements_satisfied_ = true; rtc::Event event_; rtc::scoped_refptr audio_device_; @@ -656,11 +663,13 @@ class AudioDeviceTest // Instead of using the test fixture, verify that the different factory methods // work as intended. TEST(AudioDeviceTestWin, ConstructDestructWithFactory) { + std::unique_ptr task_queue_factory = + CreateDefaultTaskQueueFactory(); rtc::scoped_refptr audio_device; // The default factory should work for all platforms when a default ADM is // requested. - audio_device = - AudioDeviceModule::Create(AudioDeviceModule::kPlatformDefaultAudio); + audio_device = AudioDeviceModule::Create( + AudioDeviceModule::kPlatformDefaultAudio, task_queue_factory.get()); EXPECT_TRUE(audio_device); audio_device = nullptr; #ifdef WEBRTC_WIN @@ -668,8 +677,8 @@ TEST(AudioDeviceTestWin, ConstructDestructWithFactory) { // specific parts are implemented by an AudioDeviceGeneric object. Verify // that the old factory can't be used in combination with the latest audio // layer AudioDeviceModule::kWindowsCoreAudio2. - audio_device = - AudioDeviceModule::Create(AudioDeviceModule::kWindowsCoreAudio2); + audio_device = AudioDeviceModule::Create( + AudioDeviceModule::kWindowsCoreAudio2, task_queue_factory.get()); EXPECT_FALSE(audio_device); audio_device = nullptr; // Instead, ensure that the new dedicated factory method called @@ -679,7 +688,8 @@ TEST(AudioDeviceTestWin, ConstructDestructWithFactory) { webrtc_win::ScopedCOMInitializer com_initializer( webrtc_win::ScopedCOMInitializer::kMTA); EXPECT_TRUE(com_initializer.Succeeded()); - audio_device = CreateWindowsCoreAudioAudioDeviceModule(); + audio_device = + CreateWindowsCoreAudioAudioDeviceModule(task_queue_factory.get()); EXPECT_TRUE(audio_device); AudioDeviceModule::AudioLayer audio_layer; EXPECT_EQ(0, audio_device->ActiveAudioLayer(&audio_layer)); diff --git a/modules/audio_device/fine_audio_buffer_unittest.cc b/modules/audio_device/fine_audio_buffer_unittest.cc index aea899c94a..fa8ba646bc 100644 --- a/modules/audio_device/fine_audio_buffer_unittest.cc +++ b/modules/audio_device/fine_audio_buffer_unittest.cc @@ -14,6 +14,7 @@ #include #include "api/array_view.h" +#include "api/task_queue/default_task_queue_factory.h" #include "modules/audio_device/mock_audio_device_buffer.h" #include "test/gmock.h" #include "test/gtest.h" @@ -91,7 +92,8 @@ void RunFineBufferTest(int frame_size_in_samples) { const int kNumberOfUpdateBufferCalls = 1 + ((kNumberOfFrames * frame_size_in_samples - 1) / kSamplesPer10Ms); - MockAudioDeviceBuffer audio_device_buffer; + auto task_queue_factory = CreateDefaultTaskQueueFactory(); + MockAudioDeviceBuffer audio_device_buffer(task_queue_factory.get()); audio_device_buffer.SetPlayoutSampleRate(kSampleRate); audio_device_buffer.SetPlayoutChannels(kChannels); audio_device_buffer.SetRecordingSampleRate(kSampleRate); diff --git a/modules/audio_device/include/audio_device.h b/modules/audio_device/include/audio_device.h index 71a1932b88..330392f322 100644 --- a/modules/audio_device/include/audio_device.h +++ b/modules/audio_device/include/audio_device.h @@ -12,6 +12,7 @@ #define MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_H_ #include "api/scoped_refptr.h" +#include "api/task_queue/task_queue_factory.h" #include "modules/audio_device/include/audio_device_defines.h" #include "rtc_base/ref_count.h" @@ -41,13 +42,18 @@ class AudioDeviceModule : public rtc::RefCountInterface { }; public: + // TODO(bugs.webrtc.org/10284): Remove when unused. + RTC_DEPRECATED + static rtc::scoped_refptr Create(AudioLayer audio_layer); // Creates a default ADM for usage in production code. static rtc::scoped_refptr Create( - const AudioLayer audio_layer); + AudioLayer audio_layer, + TaskQueueFactory* task_queue_factory); // Creates an ADM with support for extra test methods. Don't use this factory // in production code. static rtc::scoped_refptr CreateForTest( - const AudioLayer audio_layer); + AudioLayer audio_layer, + TaskQueueFactory* task_queue_factory); // Retrieve the currently utilized audio layer virtual int32_t ActiveAudioLayer(AudioLayer* audioLayer) const = 0; diff --git a/modules/audio_device/include/audio_device_data_observer.h b/modules/audio_device/include/audio_device_data_observer.h index 270aea8935..19b20ded0c 100644 --- a/modules/audio_device/include/audio_device_data_observer.h +++ b/modules/audio_device/include/audio_device_data_observer.h @@ -15,7 +15,9 @@ #include #include "api/scoped_refptr.h" +#include "api/task_queue/task_queue_factory.h" #include "modules/audio_device/include/audio_device.h" +#include "rtc_base/deprecation.h" namespace webrtc { @@ -39,9 +41,16 @@ class AudioDeviceDataObserver { virtual ~AudioDeviceDataObserver() = default; }; +// TODO(bugs.webrtc.org/10284): Remove when unused. +RTC_DEPRECATED +rtc::scoped_refptr CreateAudioDeviceWithDataObserver( + const AudioDeviceModule::AudioLayer audio_layer, + AudioDeviceDataObserver* observer); + // Creates an ADM instance with AudioDeviceDataObserver registered. rtc::scoped_refptr CreateAudioDeviceWithDataObserver( const AudioDeviceModule::AudioLayer audio_layer, + TaskQueueFactory* task_queue_factory, AudioDeviceDataObserver* observer); } // namespace webrtc diff --git a/modules/audio_device/include/audio_device_factory.cc b/modules/audio_device/include/audio_device_factory.cc index 4e0a759c4b..1962e57ee5 100644 --- a/modules/audio_device/include/audio_device_factory.cc +++ b/modules/audio_device/include/audio_device_factory.cc @@ -18,18 +18,20 @@ #endif #include "absl/memory/memory.h" +#include "api/task_queue/task_queue_factory.h" #include "rtc_base/logging.h" namespace webrtc { -rtc::scoped_refptr -CreateWindowsCoreAudioAudioDeviceModule() { +rtc::scoped_refptr CreateWindowsCoreAudioAudioDeviceModule( + TaskQueueFactory* task_queue_factory) { RTC_DLOG(INFO) << __FUNCTION__; - return CreateWindowsCoreAudioAudioDeviceModuleForTest(); + return CreateWindowsCoreAudioAudioDeviceModuleForTest(task_queue_factory); } rtc::scoped_refptr -CreateWindowsCoreAudioAudioDeviceModuleForTest() { +CreateWindowsCoreAudioAudioDeviceModuleForTest( + TaskQueueFactory* task_queue_factory) { RTC_DLOG(INFO) << __FUNCTION__; // Returns NULL if Core Audio is not supported or if COM has not been // initialized correctly using webrtc_win::ScopedCOMInitializer. @@ -40,7 +42,7 @@ CreateWindowsCoreAudioAudioDeviceModuleForTest() { } return CreateWindowsCoreAudioAudioDeviceModuleFromInputAndOutput( absl::make_unique(), - absl::make_unique()); + absl::make_unique(), task_queue_factory); } } // namespace webrtc diff --git a/modules/audio_device/include/audio_device_factory.h b/modules/audio_device/include/audio_device_factory.h index bbbf628115..f7ad71b7ea 100644 --- a/modules/audio_device/include/audio_device_factory.h +++ b/modules/audio_device/include/audio_device_factory.h @@ -12,6 +12,7 @@ #define MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_FACTORY_H_ #include "absl/memory/memory.h" +#include "api/task_queue/task_queue_factory.h" #include "modules/audio_device/include/audio_device.h" namespace webrtc { @@ -34,10 +35,12 @@ namespace webrtc { // private: // std::unique_ptr com_initializer_; // -rtc::scoped_refptr CreateWindowsCoreAudioAudioDeviceModule(); +rtc::scoped_refptr CreateWindowsCoreAudioAudioDeviceModule( + TaskQueueFactory* task_queue_factory); rtc::scoped_refptr -CreateWindowsCoreAudioAudioDeviceModuleForTest(); +CreateWindowsCoreAudioAudioDeviceModuleForTest( + TaskQueueFactory* task_queue_factory); } // namespace webrtc diff --git a/modules/audio_device/mock_audio_device_buffer.h b/modules/audio_device/mock_audio_device_buffer.h index c61a63f4ab..1f809cc5dc 100644 --- a/modules/audio_device/mock_audio_device_buffer.h +++ b/modules/audio_device/mock_audio_device_buffer.h @@ -18,7 +18,7 @@ namespace webrtc { class MockAudioDeviceBuffer : public AudioDeviceBuffer { public: - MockAudioDeviceBuffer() {} + using AudioDeviceBuffer::AudioDeviceBuffer; virtual ~MockAudioDeviceBuffer() {} MOCK_METHOD1(RequestPlayoutData, int32_t(size_t nSamples)); MOCK_METHOD1(GetPlayoutData, int32_t(void* audioBuffer)); diff --git a/modules/audio_device/win/audio_device_module_win.cc b/modules/audio_device/win/audio_device_module_win.cc index 2b9d6927bf..f0c7349737 100644 --- a/modules/audio_device/win/audio_device_module_win.cc +++ b/modules/audio_device/win/audio_device_module_win.cc @@ -60,8 +60,11 @@ class WindowsAudioDeviceModule : public AudioDeviceModuleForTest { }; WindowsAudioDeviceModule(std::unique_ptr audio_input, - std::unique_ptr audio_output) - : input_(std::move(audio_input)), output_(std::move(audio_output)) { + std::unique_ptr audio_output, + TaskQueueFactory* task_queue_factory) + : input_(std::move(audio_input)), + output_(std::move(audio_output)), + task_queue_factory_(task_queue_factory) { RTC_CHECK(input_); RTC_CHECK(output_); RTC_LOG(INFO) << __FUNCTION__; @@ -101,7 +104,8 @@ class WindowsAudioDeviceModule : public AudioDeviceModuleForTest { if (initialized_) { return 0; } - audio_device_buffer_ = absl::make_unique(); + audio_device_buffer_ = + absl::make_unique(task_queue_factory_); AttachAudioBuffer(); InitStatus status; if (output_->Init() != 0) { @@ -459,6 +463,7 @@ class WindowsAudioDeviceModule : public AudioDeviceModuleForTest { // Implements the AudioOutput interface and deals with audio rendering parts. const std::unique_ptr output_; + TaskQueueFactory* const task_queue_factory_; // The AudioDeviceBuffer (ADB) instance is needed for sending/receiving audio // to/from the WebRTC layer. Created and owned by this object. Used by // both |input_| and |output_| but they use orthogonal parts of the ADB. @@ -473,10 +478,11 @@ class WindowsAudioDeviceModule : public AudioDeviceModuleForTest { rtc::scoped_refptr CreateWindowsCoreAudioAudioDeviceModuleFromInputAndOutput( std::unique_ptr audio_input, - std::unique_ptr audio_output) { + std::unique_ptr audio_output, + TaskQueueFactory* task_queue_factory) { RTC_LOG(INFO) << __FUNCTION__; return new rtc::RefCountedObject( - std::move(audio_input), std::move(audio_output)); + std::move(audio_input), std::move(audio_output), task_queue_factory); } } // namespace webrtc_win diff --git a/modules/audio_device/win/audio_device_module_win.h b/modules/audio_device/win/audio_device_module_win.h index 112e5cc50f..1ed0b25620 100644 --- a/modules/audio_device/win/audio_device_module_win.h +++ b/modules/audio_device/win/audio_device_module_win.h @@ -15,6 +15,7 @@ #include #include "api/scoped_refptr.h" +#include "api/task_queue/task_queue_factory.h" #include "modules/audio_device/include/audio_device.h" namespace webrtc { @@ -76,7 +77,8 @@ class AudioOutput { rtc::scoped_refptr CreateWindowsCoreAudioAudioDeviceModuleFromInputAndOutput( std::unique_ptr audio_input, - std::unique_ptr audio_output); + std::unique_ptr audio_output, + TaskQueueFactory* task_queue_factory); } // namespace webrtc_win diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn index 42db281261..4cd3783143 100644 --- a/sdk/BUILD.gn +++ b/sdk/BUILD.gn @@ -232,6 +232,7 @@ if (is_ios || is_mac) { deps = [ ":audio_device", + "../api/task_queue:global_task_queue_factory", "../modules/audio_device:audio_device_api", "../modules/audio_device:audio_device_generic", "../rtc_base:checks", @@ -271,6 +272,7 @@ if (is_ios || is_mac) { ":audio_session_observer", ":base_objc", "../api:array_view", + "../api/task_queue:global_task_queue_factory", "../modules/audio_device:audio_device_api", "../modules/audio_device:audio_device_buffer", "../modules/audio_device:audio_device_generic", diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn index 9dd30897b4..530f8bd5a8 100644 --- a/sdk/android/BUILD.gn +++ b/sdk/android/BUILD.gn @@ -1124,6 +1124,7 @@ if (is_android) { ":base_jni", ":generated_audio_device_module_base_jni", ":native_api_jni", + "../../api/task_queue:global_task_queue_factory", "../../modules/audio_device:audio_device_api", "../../modules/audio_device:audio_device_buffer", "../../rtc_base:checks", diff --git a/sdk/android/src/jni/audio_device/audio_device_module.cc b/sdk/android/src/jni/audio_device/audio_device_module.cc index 437012f6c2..4e69dd5645 100644 --- a/sdk/android/src/jni/audio_device/audio_device_module.cc +++ b/sdk/android/src/jni/audio_device/audio_device_module.cc @@ -13,6 +13,7 @@ #include #include "absl/memory/memory.h" +#include "api/task_queue/global_task_queue_factory.h" #include "modules/audio_device/audio_device_buffer.h" #include "rtc_base/checks.h" #include "rtc_base/logging.h" @@ -88,7 +89,8 @@ class AndroidAudioDeviceModule : public AudioDeviceModule { int32_t Init() override { RTC_LOG(INFO) << __FUNCTION__; RTC_DCHECK(thread_checker_.CalledOnValidThread()); - audio_device_buffer_ = absl::make_unique(); + audio_device_buffer_ = + absl::make_unique(&GlobalTaskQueueFactory()); AttachAudioBuffer(); if (initialized_) { return 0; diff --git a/sdk/objc/native/src/audio/audio_device_module_ios.mm b/sdk/objc/native/src/audio/audio_device_module_ios.mm index ff9da472bc..b001deac09 100644 --- a/sdk/objc/native/src/audio/audio_device_module_ios.mm +++ b/sdk/objc/native/src/audio/audio_device_module_ios.mm @@ -10,6 +10,7 @@ #include "audio_device_module_ios.h" +#include "api/task_queue/global_task_queue_factory.h" #include "modules/audio_device/audio_device_config.h" #include "modules/audio_device/audio_device_generic.h" #include "rtc_base/checks.h" @@ -69,7 +70,7 @@ namespace ios_adm { if (initialized_) return 0; - audio_device_buffer_.reset(new webrtc::AudioDeviceBuffer()); + audio_device_buffer_.reset(new webrtc::AudioDeviceBuffer(&GlobalTaskQueueFactory())); audio_device_.reset(new ios_adm::AudioDeviceIOS()); RTC_CHECK(audio_device_); diff --git a/video/BUILD.gn b/video/BUILD.gn index ab79852540..51dcb9d519 100644 --- a/video/BUILD.gn +++ b/video/BUILD.gn @@ -247,6 +247,8 @@ if (rtc_include_tests) { "../api:fec_controller_api", "../api:test_dependency_factory", "../api:video_quality_test_fixture_api", + "../api/task_queue", + "../api/task_queue:default_task_queue_factory", "../api/video:builtin_video_bitrate_allocator_factory", "../api/video:video_bitrate_allocator_factory", "../api/video:video_frame", diff --git a/video/video_quality_test.cc b/video/video_quality_test.cc index e30b459362..5aead68e18 100644 --- a/video/video_quality_test.cc +++ b/video/video_quality_test.cc @@ -17,6 +17,7 @@ #include #include "absl/memory/memory.h" +#include "api/task_queue/default_task_queue_factory.h" #include "api/video/builtin_video_bitrate_allocator_factory.h" #include "call/fake_network_pipe.h" #include "call/simulated_network.h" @@ -323,6 +324,7 @@ std::unique_ptr VideoQualityTest::CreateVideoEncoder( VideoQualityTest::VideoQualityTest( std::unique_ptr injection_components) : clock_(Clock::GetRealTimeClock()), + task_queue_factory_(CreateDefaultTaskQueueFactory()), video_decoder_factory_([this](const SdpVideoFormat& format) { return this->CreateVideoDecoder(format); }), @@ -1307,10 +1309,11 @@ rtc::scoped_refptr VideoQualityTest::CreateAudioDevice() { RTC_CHECK(com_initializer_->Succeeded()); RTC_CHECK(webrtc_win::core_audio_utility::IsSupported()); RTC_CHECK(webrtc_win::core_audio_utility::IsMMCSSSupported()); - return CreateWindowsCoreAudioAudioDeviceModule(); + return CreateWindowsCoreAudioAudioDeviceModule(task_queue_factory_.get()); #else // Use legacy factory method on all platforms except Windows. - return AudioDeviceModule::Create(AudioDeviceModule::kPlatformDefaultAudio); + return AudioDeviceModule::Create(AudioDeviceModule::kPlatformDefaultAudio, + task_queue_factory_.get()); #endif } diff --git a/video/video_quality_test.h b/video/video_quality_test.h index 028dddfb58..b0f9036cd4 100644 --- a/video/video_quality_test.h +++ b/video/video_quality_test.h @@ -16,6 +16,7 @@ #include #include "api/fec_controller.h" +#include "api/task_queue/task_queue_factory.h" #include "api/test/video_quality_test_fixture.h" #include "api/video/video_bitrate_allocator_factory.h" #include "call/fake_network_pipe.h" @@ -100,6 +101,7 @@ class VideoQualityTest : std::vector>> thumbnail_capturers_; Clock* const clock_; + const std::unique_ptr task_queue_factory_; test::FunctionVideoDecoderFactory video_decoder_factory_; InternalDecoderFactory internal_decoder_factory_;