Android: Allow injecting native PeerConnection.
This allows application to construct PeerConnection object in JNI and
pass that to Android API. API for wrapping Java PeerConnection Observers
is exposed for convenience.
Bug: webrtc:8662
Change-Id: Id110b92e6bb5ab00661cd50616d05c3e18a1697d
Reviewed-on: https://webrtc-review.googlesource.com/34520
Commit-Queue: Sami Kalliomäki <sakal@webrtc.org>
Reviewed-by: Jonas Oreland <jonaso@webrtc.org>
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21379}
diff --git a/sdk/android/api/org/webrtc/PeerConnection.java b/sdk/android/api/org/webrtc/PeerConnection.java
index 6c27872..8eddfa8 100644
--- a/sdk/android/api/org/webrtc/PeerConnection.java
+++ b/sdk/android/api/org/webrtc/PeerConnection.java
@@ -551,6 +551,14 @@
private List<RtpSender> senders = new ArrayList<>();
private List<RtpReceiver> receivers = new ArrayList<>();
+ /**
+ * Wraps a PeerConnection created by the factory. Can be used by clients that want to implement
+ * their PeerConnection creation in JNI.
+ */
+ public PeerConnection(NativePeerConnectionFactory factory) {
+ this(factory.createNativePeerConnection(), 0 /* nativeObserver */);
+ }
+
PeerConnection(long nativePeerConnection, long nativeObserver) {
this.nativePeerConnection = nativePeerConnection;
this.nativeObserver = nativeObserver;
@@ -745,7 +753,9 @@
}
receivers.clear();
JniCommon.nativeReleaseRef(nativePeerConnection);
- freeObserver(nativeObserver);
+ if (nativeObserver != 0) {
+ freeNativePeerConnectionObserver(nativeObserver);
+ }
}
@CalledByNative
@@ -753,7 +763,8 @@
return nativePeerConnection;
}
- private static native void freeObserver(long nativeObserver);
+ public static native long createNativePeerConnectionObserver(Observer observer);
+ public static native void freeNativePeerConnectionObserver(long nativeObserver);
private native boolean setNativeConfiguration(RTCConfiguration config, long nativeObserver);