Skip to content

Commit daec7d8

Browse files
committed
Add possibility to use dummy audio for testing purposes
1 parent 9bf8169 commit daec7d8

File tree

6 files changed

+67
-5
lines changed

6 files changed

+67
-5
lines changed

webrtc-jni/src/main/cpp/include/JNI_AudioDeviceModule.h

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

webrtc-jni/src/main/cpp/src/JNI_AudioDeviceModule.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "JNI_AudioDeviceModule.h"
1818
#include "Exception.h"
1919
#include "JavaArrayList.h"
20+
#include "JavaEnums.h"
2021
#include "JavaError.h"
2122
#include "JavaObject.h"
2223
#include "JavaRef.h"
@@ -305,7 +306,7 @@ JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_media_audio_AudioDeviceModule_disp
305306
}
306307

307308
JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_media_audio_AudioDeviceModule_initialize
308-
(JNIEnv * env, jobject caller)
309+
(JNIEnv * env, jobject caller, jobject jAudioLayer)
309310
{
310311
std::unique_ptr<webrtc::TaskQueueFactory> taskQueueFactory = webrtc::CreateDefaultTaskQueueFactory();
311312

@@ -314,8 +315,10 @@ JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_media_audio_AudioDeviceModule_init
314315
return;
315316
}
316317

318+
const auto audioLayer = jni::JavaEnums::toNative<webrtc::AudioDeviceModule::AudioLayer>(env, jAudioLayer);
319+
317320
rtc::scoped_refptr<webrtc::AudioDeviceModule> audioModule = webrtc::AudioDeviceModule::Create(
318-
webrtc::AudioDeviceModule::kPlatformDefaultAudio, taskQueueFactory.release());
321+
audioLayer, taskQueueFactory.release());
319322

320323
if (!audioModule) {
321324
env->Throw(jni::JavaError(env, "Create AudioDeviceModule failed"));

webrtc-jni/src/main/cpp/src/WebRTCContext.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ namespace jni
7979
JavaEnums::add<webrtc::PeerConnectionInterface::TlsCertPolicy>(env, PKG"TlsCertPolicy");
8080
JavaEnums::add<webrtc::RtpTransceiverDirection>(env, PKG"RTCRtpTransceiverDirection");
8181
JavaEnums::add<webrtc::SdpType>(env, PKG"RTCSdpType");
82+
JavaEnums::add<webrtc::AudioDeviceModule::AudioLayer>(env, PKG_AUDIO"AudioLayer");
8283
JavaEnums::add<jni::RTCStats::RTCStatsType>(env, PKG"RTCStatsType");
8384

8485
JavaFactories::add<webrtc::AudioSourceInterface>(env, PKG_MEDIA"audio/AudioSource");

webrtc/src/main/java/dev/onvoid/webrtc/media/audio/AudioDeviceModule.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@
2121
public class AudioDeviceModule extends DisposableNativeObject {
2222

2323
public AudioDeviceModule() {
24-
initialize();
24+
initialize(AudioLayer.kPlatformDefaultAudio);
25+
}
26+
27+
public AudioDeviceModule(AudioLayer audioLayer) {
28+
initialize(audioLayer);
2529
}
2630

2731
public native void initPlayout();
@@ -59,6 +63,6 @@ public AudioDeviceModule() {
5963
@Override
6064
public native void dispose();
6165

62-
private native void initialize();
66+
private native void initialize(AudioLayer audioLayer);
6367

6468
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package dev.onvoid.webrtc.media.audio;
2+
3+
public enum AudioLayer {
4+
kPlatformDefaultAudio,
5+
kWindowsCoreAudio,
6+
kWindowsCoreAudio2,
7+
kLinuxAlsaAudio,
8+
kLinuxPulseAudio,
9+
kAndroidJavaAudio,
10+
kAndroidOpenSLESAudio,
11+
kAndroidJavaInputAndOpenSLESOutputAudio,
12+
kAndroidAAudioAudio,
13+
kAndroidJavaInputAndAAudioOutputAudio,
14+
kDummyAudio
15+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package dev.onvoid.webrtc;
2+
3+
import dev.onvoid.webrtc.media.audio.AudioDeviceModule;
4+
import dev.onvoid.webrtc.media.audio.AudioLayer;
5+
import org.junit.jupiter.api.AfterAll;
6+
import org.junit.jupiter.api.BeforeAll;
7+
import org.junit.jupiter.api.Test;
8+
import org.junit.jupiter.api.TestInstance;
9+
import org.junit.jupiter.api.parallel.Execution;
10+
import org.junit.jupiter.api.parallel.ExecutionMode;
11+
12+
import static org.junit.jupiter.api.Assertions.assertNotNull;
13+
14+
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
15+
@Execution(ExecutionMode.SAME_THREAD)
16+
public class DummyAudioDeviceModuleTest {
17+
private PeerConnectionFactory factory;
18+
19+
@BeforeAll
20+
void initFactory() {
21+
factory = new PeerConnectionFactory(new AudioDeviceModule());
22+
}
23+
24+
@AfterAll
25+
void disposeFactory() {
26+
factory.dispose();
27+
}
28+
29+
@Test
30+
void createPeerConnectionWithDummyAudio() {
31+
RTCConfiguration config = new RTCConfiguration();
32+
RTCPeerConnection peerConnection = factory.createPeerConnection(config,
33+
candidate -> { });
34+
35+
assertNotNull(peerConnection);
36+
37+
peerConnection.close();
38+
}
39+
}

0 commit comments

Comments
 (0)