Skip to content

Commit 0c51a2d

Browse files
committed
Add option to provide AudioProcessing to the PeerConnectionFactory
1 parent 1dd235c commit 0c51a2d

File tree

4 files changed

+64
-32
lines changed

4 files changed

+64
-32
lines changed

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

+2-2
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_PeerConnectionFactory.cpp

+5-25
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
#include "api/video_codecs/builtin_video_encoder_factory.h"
3636

3737
JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_PeerConnectionFactory_initialize
38-
(JNIEnv * env, jobject caller, jobject audioModule)
38+
(JNIEnv * env, jobject caller, jobject audioModule, jobject audioProcessing)
3939
{
4040
webrtc::AudioDeviceModule * audioDevModule = (audioModule != nullptr)
4141
? GetHandle<webrtc::AudioDeviceModule>(env, audioModule)
@@ -56,30 +56,10 @@ JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_PeerConnectionFactory_initialize
5656
throw jni::Exception("Start worker thread failed");
5757
}
5858

59-
60-
61-
webrtc::AudioProcessing::Config config;
62-
config.echo_canceller.enabled = true;
63-
config.echo_canceller.enforce_high_pass_filtering = true;
64-
config.echo_canceller.mobile_mode = false;
65-
66-
config.residual_echo_detector.enabled = true;
67-
68-
config.noise_suppression.enabled = true;
69-
config.noise_suppression.analyze_linear_aec_output_when_available = true;
70-
71-
config.high_pass_filter.enabled = true;
72-
73-
config.level_estimation.enabled = true;
74-
config.voice_detection.enabled = true;
75-
config.transient_suppression.enabled = true;
76-
77-
78-
rtc::scoped_refptr<webrtc::AudioProcessing> apm = webrtc::AudioProcessingBuilder().Create();
79-
apm->ApplyConfig(config);
80-
81-
82-
59+
webrtc::AudioProcessing * processing = (audioProcessing != nullptr)
60+
? GetHandle<webrtc::AudioProcessing>(env, audioProcessing)
61+
: nullptr;
62+
rtc::scoped_refptr<webrtc::AudioProcessing> apm(processing);
8363

8464
auto factory = webrtc::CreatePeerConnectionFactory(
8565
networkThread.get(),

webrtc/src/main/java/dev/onvoid/webrtc/PeerConnectionFactory.java

+29-5
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import dev.onvoid.webrtc.media.MediaType;
2323
import dev.onvoid.webrtc.media.audio.AudioDeviceModule;
2424
import dev.onvoid.webrtc.media.audio.AudioOptions;
25+
import dev.onvoid.webrtc.media.audio.AudioProcessing;
2526
import dev.onvoid.webrtc.media.audio.AudioTrackSource;
2627
import dev.onvoid.webrtc.media.audio.AudioTrack;
2728
import dev.onvoid.webrtc.media.video.VideoTrackSource;
@@ -60,17 +61,39 @@ public class PeerConnectionFactory extends DisposableNativeObject {
6061
* Creates an instance of PeerConnectionFactory.
6162
*/
6263
public PeerConnectionFactory() {
63-
this(null);
64+
this(null, null);
6465
}
6566

6667
/**
6768
* Creates an instance of PeerConnectionFactory with the provided audio
68-
* module.
69+
* processing module.
6970
*
70-
* @param audioModule The custom audio module.
71+
* @param audioProcessing The custom audio processing module.
72+
*/
73+
public PeerConnectionFactory(AudioProcessing audioProcessing) {
74+
initialize(null, audioProcessing);
75+
}
76+
77+
/**
78+
* Creates an instance of PeerConnectionFactory with the provided audio
79+
* device module.
80+
*
81+
* @param audioModule The custom audio device module.
7182
*/
7283
public PeerConnectionFactory(AudioDeviceModule audioModule) {
73-
initialize(audioModule);
84+
initialize(audioModule, null);
85+
}
86+
87+
/**
88+
* Creates an instance of PeerConnectionFactory with provided modules for
89+
* audio devices and audio processing.
90+
*
91+
* @param audioModule The custom audio device module.
92+
* @param audioProcessing The custom audio processing module.
93+
*/
94+
public PeerConnectionFactory(AudioDeviceModule audioModule,
95+
AudioProcessing audioProcessing) {
96+
initialize(audioModule, audioProcessing);
7497
}
7598

7699
/**
@@ -146,6 +169,7 @@ public native RTCPeerConnection createPeerConnection(
146169
@Override
147170
public native void dispose();
148171

149-
private native void initialize(AudioDeviceModule audioModule);
172+
private native void initialize(AudioDeviceModule audioModule,
173+
AudioProcessing audioProcessing);
150174

151175
}

webrtc/src/test/java/dev/onvoid/webrtc/PeerConnectionFactoryTests.java

+28
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
import dev.onvoid.webrtc.media.MediaSource;
2222
import dev.onvoid.webrtc.media.MediaStreamTrackState;
2323
import dev.onvoid.webrtc.media.MediaType;
24+
import dev.onvoid.webrtc.media.audio.AudioDeviceModule;
2425
import dev.onvoid.webrtc.media.audio.AudioOptions;
26+
import dev.onvoid.webrtc.media.audio.AudioProcessing;
2527
import dev.onvoid.webrtc.media.audio.AudioTrackSource;
2628
import dev.onvoid.webrtc.media.audio.AudioTrack;
2729
import dev.onvoid.webrtc.media.video.VideoDeviceSource;
@@ -31,6 +33,32 @@
3133

3234
class PeerConnectionFactoryTests extends TestBase {
3335

36+
@Test
37+
void createWithAudioDeviceModule() {
38+
AudioDeviceModule audioDevModule = new AudioDeviceModule();
39+
40+
PeerConnectionFactory factory = new PeerConnectionFactory(audioDevModule);
41+
factory.dispose();
42+
}
43+
44+
@Test
45+
void createWithAudioProcessing() {
46+
AudioProcessing audioProcessing = new AudioProcessing();
47+
48+
PeerConnectionFactory factory = new PeerConnectionFactory(audioProcessing);
49+
factory.dispose();
50+
}
51+
52+
@Test
53+
void createWithAudioModules() {
54+
AudioDeviceModule audioDevModule = new AudioDeviceModule();
55+
AudioProcessing audioProcessing = new AudioProcessing();
56+
57+
PeerConnectionFactory factory = new PeerConnectionFactory(
58+
audioDevModule, audioProcessing);
59+
factory.dispose();
60+
}
61+
3462
@Test
3563
void createPeerConnectionNullParams() {
3664
assertThrows(NullPointerException.class, () -> {

0 commit comments

Comments
 (0)