1 // This file is part of Desktop App Toolkit, 2 // a set of libraries for developing nice desktop applications. 3 // 4 // For license and copyright information please follow this link: 5 // https://github.com/desktop-app/legal/blob/master/LEGAL 6 // 7 #include "webrtc/webrtc_create_adm.h" 8 9 #include "webrtc/details/webrtc_openal_adm.h" 10 11 #include "rtc_base/ref_counted_object.h" 12 #include "modules/audio_device/include/audio_device_factory.h" 13 14 #ifdef WEBRTC_WIN 15 #include "webrtc/win/webrtc_loopback_adm_win.h" 16 #endif // WEBRTC_WIN 17 18 namespace Webrtc { 19 CreateAudioDeviceModule(webrtc::TaskQueueFactory * factory,Backend backend)20rtc::scoped_refptr<webrtc::AudioDeviceModule> CreateAudioDeviceModule( 21 webrtc::TaskQueueFactory *factory, 22 Backend backend) { 23 // const auto create = [&](webrtc::AudioDeviceModule::AudioLayer layer) { 24 // return webrtc::AudioDeviceModule::Create(layer, factory); 25 // }; 26 const auto check = [&]( 27 const rtc::scoped_refptr<webrtc::AudioDeviceModule> &result) { 28 return (result && (result->Init() == 0)) ? result : nullptr; 29 }; 30 if (true || backend == Backend::OpenAL) { 31 if (auto result = check(new rtc::RefCountedObject<details::AudioDeviceOpenAL>(factory))) { 32 return result; 33 } 34 } 35 //#ifdef WEBRTC_WIN 36 // if (backend == Backend::ADM2) { 37 // if (auto result = check(webrtc::CreateWindowsCoreAudioAudioDeviceModule(factory))) { 38 // return result; 39 // } 40 // } 41 //#endif // WEBRTC_WIN 42 // if (backend == Backend::ADM) { 43 // if (auto result = check(create(webrtc::AudioDeviceModule::kPlatformDefaultAudio))) { 44 // return result; 45 // } 46 //#ifdef WEBRTC_LINUX 47 // if (auto result = check(create(webrtc::AudioDeviceModule::kLinuxAlsaAudio))) { 48 // return result; 49 // } 50 //#endif // WEBRTC_LINUX 51 // } 52 return nullptr; 53 } 54 AudioDeviceModuleCreator(Backend backend)55auto AudioDeviceModuleCreator(Backend backend) 56 -> std::function<AudioDeviceModulePtr(webrtc::TaskQueueFactory*)> { 57 return [=](webrtc::TaskQueueFactory *factory) { 58 return CreateAudioDeviceModule(factory, backend); 59 }; 60 } 61 CreateLoopbackAudioDeviceModule(webrtc::TaskQueueFactory * factory)62AudioDeviceModulePtr CreateLoopbackAudioDeviceModule( 63 webrtc::TaskQueueFactory* factory) { 64 #ifdef WEBRTC_WIN 65 auto result = rtc::scoped_refptr<webrtc::AudioDeviceModule>( 66 new rtc::RefCountedObject<details::AudioDeviceLoopbackWin>(factory)); 67 if (result->Init() == 0) { 68 return result; 69 } 70 #endif // WEBRTC_WIN 71 return nullptr; 72 } 73 LoopbackAudioDeviceModuleCreator()74auto LoopbackAudioDeviceModuleCreator() 75 -> std::function<AudioDeviceModulePtr(webrtc::TaskQueueFactory*)> { 76 return CreateLoopbackAudioDeviceModule; 77 } 78 79 } // namespace Webrtc 80