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)20 rtc::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)55 auto 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)62 AudioDeviceModulePtr 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()74 auto LoopbackAudioDeviceModuleCreator()
75 -> std::function<AudioDeviceModulePtr(webrtc::TaskQueueFactory*)> {
76 	return CreateLoopbackAudioDeviceModule;
77 }
78 
79 } // namespace Webrtc
80