@@ -54,6 +54,54 @@ JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_media_audio_AudioDeviceModule_init
5454 }
5555}
5656
57+ JNIEXPORT jobject JNICALL Java_dev_onvoid_webrtc_media_audio_AudioDeviceModule_getPlayoutDevices
58+ (JNIEnv* env, jobject caller)
59+ {
60+ webrtc::AudioDeviceModule * audioModule = GetHandle<webrtc::AudioDeviceModule>(env, caller);
61+ CHECK_HANDLEV (audioModule, nullptr );
62+
63+ char name[webrtc::kAdmMaxDeviceNameSize ];
64+ char guid[webrtc::kAdmMaxGuidSize ];
65+
66+ int16_t deviceCount = audioModule->PlayoutDevices ();
67+
68+ jni::JavaArrayList deviceList (env, deviceCount);
69+
70+ for (int i = 0 ; i < deviceCount; ++i) {
71+ if (audioModule->PlayoutDeviceName (i, name, guid) == 0 ) {
72+ auto device = std::make_shared<jni::avdev::AudioDevice>(name, guid);
73+
74+ deviceList.add (jni::AudioDevice::toJavaAudioDevice (env, device));
75+ }
76+ }
77+
78+ return deviceList.listObject ().release ();
79+ }
80+
81+ JNIEXPORT jobject JNICALL Java_dev_onvoid_webrtc_media_audio_AudioDeviceModule_getRecordingDevices
82+ (JNIEnv* env, jobject caller)
83+ {
84+ webrtc::AudioDeviceModule * audioModule = GetHandle<webrtc::AudioDeviceModule>(env, caller);
85+ CHECK_HANDLEV (audioModule, nullptr );
86+
87+ char name[webrtc::kAdmMaxDeviceNameSize ];
88+ char guid[webrtc::kAdmMaxGuidSize ];
89+
90+ int16_t deviceCount = audioModule->RecordingDevices ();
91+
92+ jni::JavaArrayList deviceList (env, deviceCount);
93+
94+ for (int i = 0 ; i < deviceCount; ++i) {
95+ if (audioModule->RecordingDeviceName (i, name, guid) == 0 ) {
96+ auto device = std::make_shared<jni::avdev::AudioDevice>(name, guid);
97+
98+ deviceList.add (jni::AudioDevice::toJavaAudioDevice (env, device));
99+ }
100+ }
101+
102+ return deviceList.listObject ().release ();
103+ }
104+
57105JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_media_audio_AudioDeviceModule_setPlayoutDevice
58106(JNIEnv * env, jobject caller, jobject device)
59107{
@@ -103,6 +151,7 @@ JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_media_audio_AudioDeviceModule_setR
103151 jni::JavaObject obj (env, jni::JavaLocalRef<jobject>(env, device));
104152
105153 const auto javaClass = jni::JavaClasses::get<jni::AudioDevice::JavaAudioDeviceClass>(env);
154+ const std::string devName = jni::JavaString::toNative (env, obj.getString (javaClass->name ));
106155 const std::string devGuid = jni::JavaString::toNative (env, obj.getString (javaClass->descriptor ));
107156
108157 uint16_t index = 0 ;
@@ -113,6 +162,9 @@ JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_media_audio_AudioDeviceModule_setR
113162
114163 for (int i = 0 ; i < deviceCount; ++i) {
115164 if ((audioModule->RecordingDeviceName (i, name, guid) == 0 ) && devGuid == std::string (guid)) {
165+ printf (" selected audio device: %s - %s\n " , name, guid);
166+ fflush (NULL );
167+
116168 index = i;
117169 break ;
118170 }
0 commit comments